Initial commit
This commit is contained in:
commit
536ff43ce4
158 files changed
+30355
No files matched your search
@@ -0,0 +1,95 @@
|
||||
import csv
|
||||
import io
|
||||
from datetime import datetime
|
||||
from flask import Blueprint, render_template, request, redirect, url_for, flash, session, Response
|
||||
from tenancy import huidige_school, per_school
|
||||
from blueprints.auth import login_required
|
||||
from rechten import recht_vereist
|
||||
from services.google_license_service import GoogleLicenseService, SKU_NAMES
|
||||
|
||||
google_licenties_bp = Blueprint('google_licenties', __name__)
|
||||
license_service = per_school(GoogleLicenseService)
|
||||
|
||||
# Tabel aanmaken bij de eerste request (niet bij import, zodat de app ook start zonder DB)
|
||||
_table_ready = set() # scholen waarvoor de tabellen al gecontroleerd zijn
|
||||
|
||||
|
||||
def _ensure_table():
|
||||
if huidige_school().code not in _table_ready:
|
||||
try:
|
||||
license_service.ensure_table()
|
||||
_table_ready.add(huidige_school().code)
|
||||
except Exception as e:
|
||||
flash(f"Kon tabel google_licenties niet aanmaken: {e}", "error")
|
||||
|
||||
|
||||
#---------------------------------------------
|
||||
# Overzichtspagina
|
||||
#---------------------------------------------
|
||||
@google_licenties_bp.route('/', methods=['GET'])
|
||||
@login_required
|
||||
@recht_vereist('google_licenties')
|
||||
def overzicht():
|
||||
_ensure_table()
|
||||
data, fout = license_service.get_overview(force=request.args.get('vernieuw') == '1')
|
||||
if request.args.get('vernieuw') == '1':
|
||||
return redirect(url_for('google_licenties.overzicht'))
|
||||
|
||||
opgehaald = None
|
||||
if data:
|
||||
opgehaald = datetime.fromtimestamp(data['opgehaald']).strftime('%d-%m-%Y %H:%M')
|
||||
return render_template('google_licenties.html', data=data, fout=fout,
|
||||
opgehaald=opgehaald, sku_names=SKU_NAMES)
|
||||
|
||||
|
||||
#---------------------------------------------
|
||||
# Aangekochte aantallen opslaan
|
||||
#---------------------------------------------
|
||||
@google_licenties_bp.route('/aangekocht', methods=['POST'])
|
||||
@login_required
|
||||
@recht_vereist('google_licenties')
|
||||
def aangekocht_opslaan():
|
||||
_ensure_table()
|
||||
gewijzigd = 0
|
||||
for key, waarde in request.form.items():
|
||||
if not key.startswith('aangekocht_'):
|
||||
continue
|
||||
sku_id = key.replace('aangekocht_', '', 1)
|
||||
if sku_id not in SKU_NAMES:
|
||||
continue
|
||||
waarde = (waarde or '').strip()
|
||||
if waarde == '':
|
||||
continue
|
||||
if not waarde.isdigit():
|
||||
flash(f"Ongeldig aantal voor {SKU_NAMES[sku_id]}: '{waarde}'", "error")
|
||||
continue
|
||||
license_service.set_purchased(sku_id, int(waarde), session.get('user'))
|
||||
gewijzigd += 1
|
||||
|
||||
license_service.clear_cache()
|
||||
if gewijzigd:
|
||||
flash("Aangekochte aantallen opgeslagen.", "success")
|
||||
return redirect(url_for('google_licenties.overzicht'))
|
||||
|
||||
|
||||
#---------------------------------------------
|
||||
# Export van alle toegewezen licenties
|
||||
#---------------------------------------------
|
||||
@google_licenties_bp.route('/export.csv', methods=['GET'])
|
||||
@login_required
|
||||
@recht_vereist('google_licenties')
|
||||
def export_csv():
|
||||
data, fout = license_service.get_overview()
|
||||
if fout or not data:
|
||||
flash(fout or "Geen gegevens om te exporteren.", "error")
|
||||
return redirect(url_for('google_licenties.overzicht'))
|
||||
|
||||
buf = io.StringIO()
|
||||
w = csv.writer(buf, delimiter=';')
|
||||
w.writerow(['E-mail', 'Naam', 'Organisatie-eenheid', 'Licentie', 'SKU', 'Geschorst', 'Gearchiveerd', 'Laatste login'])
|
||||
for u in data['users']:
|
||||
w.writerow([u['email'], u['naam'], u['ou'], u['sku_naam'], u['sku_id'],
|
||||
'ja' if u['geschorst'] else 'nee', 'ja' if u['gearchiveerd'] else 'nee', u['laatste_login']])
|
||||
bestandsnaam = f"google_licenties_{datetime.now():%Y%m%d}.csv"
|
||||
return Response('' + buf.getvalue(), mimetype='text/csv',
|
||||
headers={'Content-Disposition': f'attachment; filename={bestandsnaam}'})
|
||||
Reference in new issue
Block a user