Add ACM CSV export

Allows officers to easily bulk import members into ACM's web interface
This commit is contained in:
Cara Salter 2024-03-21 16:35:56 +11:00
parent 7e3d2191c6
commit 9f68d2fd47
No known key found for this signature in database
GPG key ID: A8A3A601440EADA5
3 changed files with 26 additions and 1 deletions

View file

@ -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

View file

@ -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()

View file

@ -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>