Initial commit
This commit is contained in:
commit
536ff43ce4
158 files changed
+30355
No files matched your search
@@ -0,0 +1,65 @@
|
||||
"""Smartschool › SGR groepen: subgroepen van de hoofdgroep (standaard 'groepen GO-Antwerpen') met hun leden."""
|
||||
import csv
|
||||
import io
|
||||
import time
|
||||
from datetime import date
|
||||
|
||||
from flask import Blueprint, render_template, request, Response, redirect, url_for, flash
|
||||
|
||||
from blueprints.auth import login_required
|
||||
from rechten import recht_vereist
|
||||
from services import sgr_groepen_service as sgr
|
||||
from tenancy import huidige_school
|
||||
|
||||
sgr_groepen_bp = Blueprint('sgr_groepen', __name__)
|
||||
|
||||
|
||||
def _gevraagd():
|
||||
return (request.args.get('groep') or '').strip() or None
|
||||
|
||||
|
||||
@sgr_groepen_bp.route("/", methods=["GET"])
|
||||
@login_required
|
||||
@recht_vereist('sgr_groepen')
|
||||
def overzicht():
|
||||
school = huidige_school()
|
||||
standaard = (school.get('SS_SGR_GROEP') or sgr.STANDAARD_GROEP).strip()
|
||||
gevraagd = _gevraagd()
|
||||
hoofd, groepen, fout, opgehaald = None, [], None, None
|
||||
try:
|
||||
hoofd, groepen, t = sgr.overzicht(gevraagd, vernieuw=bool(request.args.get('vernieuw')))
|
||||
opgehaald = time.strftime('%d-%m-%Y %H:%M', time.localtime(t))
|
||||
except sgr.SgrFout as e:
|
||||
fout = str(e)
|
||||
except Exception as e:
|
||||
fout = f"Groepen ophalen uit Smartschool mislukt: {e}"
|
||||
if request.args.get('vernieuw'):
|
||||
return redirect(url_for('sgr_groepen.overzicht', groep=gevraagd))
|
||||
leden = [l for g in groepen for l in g['leden']]
|
||||
return render_template("sgr_groepen.html", hoofd=hoofd, groepen=groepen, fout=fout, opgehaald=opgehaald,
|
||||
groep=gevraagd or standaard, standaard=standaard, school_naam=school.naam,
|
||||
aantal_leden=len(leden),
|
||||
uniek=len({l['gebruikersnaam'] or (l['naam'], l['voornaam']) for l in leden}))
|
||||
|
||||
|
||||
@sgr_groepen_bp.route("/export.csv", methods=["GET"])
|
||||
@login_required
|
||||
@recht_vereist('sgr_groepen')
|
||||
def export():
|
||||
try:
|
||||
hoofd, groepen, _ = sgr.overzicht(_gevraagd())
|
||||
except Exception as e:
|
||||
flash(f"Kon niet exporteren: {e}", "error")
|
||||
return redirect(url_for('sgr_groepen.overzicht', groep=_gevraagd()))
|
||||
buf = io.StringIO()
|
||||
w = csv.writer(buf, delimiter=';')
|
||||
w.writerow(['Groep', 'Pad', 'Groepscode', 'Naam', 'Voornaam', 'Gebruikersnaam', 'Rol', 'E-mail'])
|
||||
for g in groepen:
|
||||
pad = ' › '.join(g['pad'] + [g['naam']])
|
||||
if not g['leden']:
|
||||
w.writerow([g['naam'], pad, g['code'], '', '', '', '', ''])
|
||||
for l in g['leden']:
|
||||
w.writerow([g['naam'], pad, g['code'], l['naam'], l['voornaam'], l['gebruikersnaam'], l['rol'], l['email']])
|
||||
naam = ''.join(c if c.isalnum() else '_' for c in hoofd['naam'])[:40]
|
||||
return Response('' + buf.getvalue(), mimetype='text/csv',
|
||||
headers={'Content-Disposition': f'attachment; filename=SGR_{naam}_{date.today():%Y%m%d}.csv'})
|
||||
Reference in new issue
Block a user