Files
Pivot/blueprints/verzendlijsten_bp.py
2026-10-14 13:34:37 +02:00

125 lines
4.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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("/<email>", 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("/<email>/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("/<email>/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("/<email>/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("/<email>/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))