"""Google › Verzendlijsten: Google Groepen van de school bekijken, aanmaken en aanpassen (leden en rollen).""" from flask import Blueprint, render_template, request, flash, redirect, url_for, session from blueprints.auth import login_required from rechten import recht_vereist, log from services.verzendlijsten_service import (VerzendlijstenService, VerzendlijstFout, ROLLEN, WIE_MAILT, adressen) from tenancy import huidige_school verzendlijsten_bp = Blueprint('verzendlijsten', __name__) @verzendlijsten_bp.route("/", methods=["GET"]) @login_required @recht_vereist('verzendlijsten') def overzicht(): lijsten, fout = [], None try: lijsten = VerzendlijstenService().alle() except Exception as e: fout = str(e) return render_template("verzendlijsten.html", lijsten=lijsten, fout=fout, domeinen=huidige_school().domeinen, wie_mailt=WIE_MAILT) @verzendlijsten_bp.route("/nieuw", methods=["POST"]) @login_required @recht_vereist('verzendlijsten') def nieuw(): deel = (request.form.get('adres') or '').strip().lower() domein = (request.form.get('domein') or '').strip().lower() email = deel if '@' in deel else f"{deel}@{domein}" svc = VerzendlijstenService() try: svc.aanmaken(email, request.form.get('naam'), request.form.get('beschrijving')) except VerzendlijstFout as e: flash(str(e), "error") return redirect(url_for('verzendlijsten.overzicht')) log(f"Verzendlijst aangemaakt: {email}") melding = f"Verzendlijst {email} aangemaakt." wie = request.form.get('wie_mailt') if wie: try: svc.zet_wie_mailt(email, wie) except VerzendlijstFout as e: melding += f" 'Wie mag mailen' kon niet ingesteld worden: {e}" flash(melding + " Google kan er een minuutje over doen voor ze overal zichtbaar is.", "success") return redirect(url_for('verzendlijsten.detail', email=email)) @verzendlijsten_bp.route("/", methods=["GET"]) @login_required @recht_vereist('verzendlijsten') def detail(email): svc = VerzendlijstenService() try: groep = svc.groep(email) leden = svc.leden(email) except VerzendlijstFout as e: flash(str(e), "error") return redirect(url_for('verzendlijsten.overzicht')) return render_template("verzendlijst.html", groep=groep, leden=leden, rollen=ROLLEN, wie_mailt=WIE_MAILT, huidig_wie=svc.wie_mailt(email)) @verzendlijsten_bp.route("//bewerken", methods=["POST"]) @login_required @recht_vereist('verzendlijsten') def bewerken(email): svc = VerzendlijstenService() try: svc.bijwerken(email, request.form.get('naam'), request.form.get('beschrijving')) if request.form.get('wie_mailt'): svc.zet_wie_mailt(email, request.form.get('wie_mailt')) log(f"Verzendlijst aangepast: {email}") flash("Verzendlijst bijgewerkt.", "success") except VerzendlijstFout as e: flash(str(e), "error") return redirect(url_for('verzendlijsten.detail', email=email)) @verzendlijsten_bp.route("//leden/toevoegen", methods=["POST"]) @login_required @recht_vereist('verzendlijsten') def leden_toevoegen(email): goed, ongeldig = adressen(request.form.get('adressen')) if ongeldig: flash("Geen geldig e-mailadres, overgeslagen: " + ", ".join(ongeldig), "warning") if goed: gelukt, fouten = VerzendlijstenService().leden_toevoegen(email, goed, request.form.get('rol') or 'MEMBER') if gelukt: log(f"Verzendlijst {email}: {gelukt} lid/leden toegevoegd") flash(f"{gelukt} lid/leden toegevoegd.", "success") for adres, fout in fouten: flash(f"{adres}: {fout}", "error") elif not ongeldig: flash("Vul minstens één e-mailadres in.", "error") return redirect(url_for('verzendlijsten.detail', email=email)) @verzendlijsten_bp.route("//leden/rol", methods=["POST"]) @login_required @recht_vereist('verzendlijsten') def lid_rol(email): lid = request.form.get('lid') or '' try: VerzendlijstenService().lid_rol(email, lid, request.form.get('rol')) flash(f"Rol van {lid} aangepast.", "success") except VerzendlijstFout as e: flash(str(e), "error") return redirect(url_for('verzendlijsten.detail', email=email)) @verzendlijsten_bp.route("//leden/verwijderen", methods=["POST"]) @login_required @recht_vereist('verzendlijsten') def lid_verwijderen(email): lid = request.form.get('lid') or '' try: VerzendlijstenService().lid_verwijderen(email, lid) log(f"Verzendlijst {email}: {lid} verwijderd") flash(f"{lid} uit de verzendlijst gehaald.", "success") except VerzendlijstFout as e: flash(str(e), "error") return redirect(url_for('verzendlijsten.detail', email=email))