Catégorie/SousCategorie fusionnées en un seul modèle auto-référencé (parent_id), pour permettre une imbrication sans limite de niveaux. Les listings matériels/catégories/destinataires passent en lignes repliées (<details>) avec recherche côté serveur, ce qui corrige le débordement horizontal du tableau tout-en-input et reste utilisable sur de longues listes. Style de l'écran de scan également retravaillé (frontend-design).
43 lines
1.7 KiB
Python
43 lines
1.7 KiB
Python
"""Routes pour gérer la liste des emails qui reçoivent les alertes de stock bas."""
|
|
|
|
from fastapi import APIRouter, Depends, Form
|
|
from fastapi.requests import Request
|
|
from fastapi.responses import RedirectResponse
|
|
from sqlmodel import Session, select
|
|
|
|
from app.database import get_session
|
|
from app.models import DestinataireAlerte
|
|
from app.templates_engine import templates
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/destinataires")
|
|
def lister_destinataires(request: Request, q: str = "", session: Session = Depends(get_session)):
|
|
"""Affiche la liste des emails configurés pour recevoir les alertes,
|
|
filtrée par ?q=... si fourni (même comportement que /materiels, pour
|
|
rester cohérent si la liste grandit)."""
|
|
tous = session.exec(select(DestinataireAlerte)).all()
|
|
destinataires = [d for d in tous if q.lower() in d.email.lower()] if q else tous
|
|
return templates.TemplateResponse(
|
|
request, "destinataires.html", {"destinataires": destinataires, "q": q}
|
|
)
|
|
|
|
|
|
@router.post("/destinataires")
|
|
def ajouter_destinataire(email: str = Form(...), session: Session = Depends(get_session)):
|
|
"""Ajoute un email à la liste des destinataires des alertes."""
|
|
session.add(DestinataireAlerte(email=email))
|
|
session.commit()
|
|
return RedirectResponse(url="/destinataires", status_code=303)
|
|
|
|
|
|
@router.post("/destinataires/{destinataire_id}/supprimer")
|
|
def supprimer_destinataire(destinataire_id: int, session: Session = Depends(get_session)):
|
|
"""Retire un email de la liste des destinataires."""
|
|
destinataire = session.get(DestinataireAlerte, destinataire_id)
|
|
if destinataire:
|
|
session.delete(destinataire)
|
|
session.commit()
|
|
return RedirectResponse(url="/destinataires", status_code=303)
|