Add ACM CSV export
Allows officers to easily bulk import members into ACM's web interface
This commit is contained in:
parent
7e3d2191c6
commit
9f68d2fd47
3 changed files with 26 additions and 1 deletions
|
@ -1,9 +1,10 @@
|
|||
from flask import Blueprint, flash, redirect, render_template, request, url_for
|
||||
from flask import Blueprint, flash, redirect, render_template, request, send_file, url_for
|
||||
import ulid
|
||||
import datetime
|
||||
from flask_login import current_user, login_required
|
||||
|
||||
from acmsite.models import Link, User, Event
|
||||
from acmsite import models
|
||||
|
||||
from .forms import EventForm, LinkForm
|
||||
from acmsite import db
|
||||
|
@ -30,6 +31,19 @@ def users():
|
|||
|
||||
return render_template("admin/users.html", u_list=user_list)
|
||||
|
||||
@bp.route("/users.csv")
|
||||
@login_required
|
||||
def users_csv():
|
||||
if not current_user.is_admin:
|
||||
flash("Unauthorized")
|
||||
return redirect(url_for('dashboard.home'))
|
||||
|
||||
user_list = User.query.all()
|
||||
|
||||
models.create_acm_csv(user_list)
|
||||
|
||||
return send_file('./tmp/members.csv')
|
||||
|
||||
|
||||
@bp.route("/events")
|
||||
@login_required
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from flask import flash, redirect, url_for
|
||||
from flask_login import UserMixin
|
||||
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, null
|
||||
import csv
|
||||
from . import db
|
||||
from . import login
|
||||
|
||||
|
@ -16,6 +17,15 @@ class User(db.Model, UserMixin):
|
|||
active = Column(Boolean, nullable=False, default=True)
|
||||
is_admin = Column(Boolean, nullable=False, default=False)
|
||||
|
||||
def create_acm_csv(user_list):
|
||||
with open('acmsite/tmp/members.csv', 'w') as members_csv:
|
||||
header = ['last', 'first', 'email']
|
||||
writer = csv.DictWriter(members_csv, fieldnames=header)
|
||||
|
||||
for u in user_list:
|
||||
writer.writerow({'last': u.last_name, 'first': u.first_name,
|
||||
'email': u.email})
|
||||
|
||||
@login.user_loader
|
||||
def user_loader(user_id):
|
||||
return User.query.filter_by(id=user_id).first()
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
{% block app_content %}
|
||||
<h1>Member List</h1>
|
||||
<a href="{{ url_for('admin.users_csv') }}" target="_blank">CSV for ACM</a>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
Loading…
Add table
Reference in a new issue