Initial commit

This commit is contained in:
Kristof committed 2026-10-14 12:29:29 +02:00
commit 536ff43ce4
158 files changed
+30355

No files matched your search

+67
View File
@@ -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"})