PIVOT 1.1.0
This commit is contained in:
commit
8a53234eb6
161 files changed
+31109
No files matched your search
@@ -0,0 +1,67 @@
|
||||
"""Basisonderwijs › Bingel: leerlingenlijst uit Informat als Excel voor de import in Bingel."""
|
||||
import io
|
||||
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 bingel_service as bs
|
||||
from tenancy import huidige_school
|
||||
|
||||
basisonderwijs_bp = Blueprint('basisonderwijs', __name__)
|
||||
KOLOMMEN = ['Klas', 'Voornaam', 'Familienaam', 'Wachtwoord', 'Klasnummer', 'Geslacht']
|
||||
|
||||
|
||||
@basisonderwijs_bp.route('/bingel', methods=['GET'])
|
||||
@login_required
|
||||
@recht_vereist('bingel')
|
||||
def bingel():
|
||||
rijen, voorbeeld, fout, waarschuwing = [], {}, None, None
|
||||
try:
|
||||
rijen, voorbeeld, waarschuwing = bs.leerlingen(vernieuw=bool(request.args.get('vernieuw')))
|
||||
except bs.BingelFout as e:
|
||||
fout = str(e)
|
||||
except Exception as e:
|
||||
fout = f"Leerlingen ophalen uit Informat mislukt: {e}"
|
||||
if request.args.get('vernieuw'):
|
||||
return redirect(url_for('basisonderwijs.bingel'))
|
||||
klassen = sorted({r['klas'] for r in rijen}, key=str.lower)
|
||||
return render_template('bingel.html', rijen=rijen, klassen=klassen, voorbeeld=voorbeeld, fout=fout, waarschuwing=waarschuwing,
|
||||
kolommen=KOLOMMEN, school_naam=huidige_school().naam,
|
||||
zonder_klas=sum(1 for r in rijen if not r['klas']),
|
||||
zonder_geslacht=sum(1 for r in rijen if r['geslacht'] not in ('M', 'V')))
|
||||
|
||||
|
||||
@basisonderwijs_bp.route('/bingel/export.xlsx', methods=['GET'])
|
||||
@login_required
|
||||
@recht_vereist('bingel')
|
||||
def bingel_export():
|
||||
from openpyxl import Workbook
|
||||
from openpyxl.styles import Font
|
||||
try:
|
||||
rijen, _, _ = bs.leerlingen()
|
||||
except Exception as e:
|
||||
flash(str(e), "error")
|
||||
return redirect(url_for('basisonderwijs.bingel'))
|
||||
gekozen = request.args.getlist('klas') # aangevinkte klassen (niets = alle)
|
||||
if gekozen:
|
||||
rijen = [r for r in rijen if r['klas'] in gekozen]
|
||||
klas = gekozen[0] if len(gekozen) == 1 else ''
|
||||
wb = Workbook()
|
||||
ws = wb.active
|
||||
ws.title = 'Leerlingen'
|
||||
ws.append(KOLOMMEN)
|
||||
for c in ws[1]:
|
||||
c.font = Font(bold=True)
|
||||
for r in rijen:
|
||||
ws.append([r['klas'], r['voornaam'], r['naam'], '', r['klasnummer'], r['geslacht']])
|
||||
for kol, breedte in zip('ABCDEF', (12, 18, 22, 14, 11, 10)):
|
||||
ws.column_dimensions[kol].width = breedte
|
||||
ws.freeze_panes = 'A2'
|
||||
buf = io.BytesIO()
|
||||
wb.save(buf)
|
||||
deel = ''.join(c if c.isalnum() else '_' for c in klas) + '_' if klas else ''
|
||||
return Response(buf.getvalue(), mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
headers={'Content-Disposition': f"attachment; filename=Bingel_{huidige_school().code}_{deel}"
|
||||
f"{date.today():%Y%m%d}.xlsx"})
|
||||
Reference in new issue
Block a user