From 968079c67146a9a29338dbb72fc9fad090e5d6d4 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Tue, 2 Jun 2026 00:06:11 -0400 Subject: [PATCH] Adapter rapports de rencontre au modele papier --- backend/app/routers/reunions.py | 129 +++++++++++++++---------- data/import/Modèle de Saint-Basile.pdf | Bin 0 -> 23241 bytes frontend/src/pages/ModePapier.jsx | 57 ++++++----- 3 files changed, 112 insertions(+), 74 deletions(-) create mode 100644 data/import/Modèle de Saint-Basile.pdf diff --git a/backend/app/routers/reunions.py b/backend/app/routers/reunions.py index 636dbb1..ab50705 100644 --- a/backend/app/routers/reunions.py +++ b/backend/app/routers/reunions.py @@ -101,66 +101,91 @@ async def _html_rapport_rencontre(reunion: Reunion, membre, db: AsyncSession) -> ) annonces = reunion.annonces or [] - annonces_html = "".join(f"
  • {escape(a)}
  • " for a in annonces) or "
  • Aucune annonce.
  • " + annonces_texte = "\n".join(annonces) + collecte_texte = "Aucune collecte saisie." + if collecte: + detenteur = await db.get(Membre, collecte.detenteur_id) if collecte.detenteur_id else None + collecte_texte = ( + f"{float(collecte.montant):.2f} $" + f"\nDétenteur: {detenteur.prenom if detenteur else '—'}" + f"\nStatut: {collecte.statut}" + ) + ventes_lit_texte = "\n".join( + row.replace("", "") + .replace("", " · ") + .replace("", " · ") + .replace("", "") + for row in ventes_lit_rows + ) + jetons_texte = "\n".join( + row.replace("", "") + .replace("", " · ") + .replace("", "") + for row in jetons_rows + ) + ventes_jetons_texte = "\n".join( + row.replace("", "") + .replace("", " · ") + .replace("", " · ") + .replace("", "") + for row in ventes_jetons_rows + ) + notes_texte = "\n\n".join([texte for texte in [reunion.note, annonces_texte] if texte]) + + def bloc(label: str, contenu: str = "", cls: str = "") -> str: + return ( + f"
    " + f"{escape(contenu or '')}
    {escape(label)}
    " + ) + css = """ - body { font-family: 'DejaVu Sans', sans-serif; font-size: 10.5pt; color: #27323a; margin: 1.6cm; } - .header { border-bottom: 3px solid #1a5276; padding-bottom: 12pt; margin-bottom: 18pt; } - .groupe { color: #1a5276; font-size: 20pt; font-weight: 800; } - .coords { color: #667; font-size: 9pt; margin-top: 3pt; } - h1 { font-size: 16pt; color: #1a5276; margin: 0 0 12pt; } - h2 { font-size: 12pt; color: #1a5276; margin: 16pt 0 6pt; border-bottom: 1px solid #d8e2ea; padding-bottom: 3pt; } - .meta { display: grid; grid-template-columns: 1fr 1fr; gap: 8pt; } - .box { border: 1px solid #d8e2ea; border-radius: 6pt; padding: 8pt; background: #f8fafc; } - .label { font-size: 8pt; color: #667; text-transform: uppercase; font-weight: 700; } - .value { font-size: 11pt; font-weight: 700; margin-top: 2pt; } - table { width: 100%; border-collapse: collapse; margin-top: 5pt; } - th { text-align: left; background: #1a5276; color: white; padding: 5pt; font-size: 8.5pt; } - td { border-bottom: 1px solid #e5e9ef; padding: 5pt; vertical-align: top; } - .montant { text-align: right; white-space: nowrap; } - .note { white-space: pre-wrap; } - .page-break { break-before: page; page-break-before: always; } - .footer { margin-top: 20pt; color: #889; font-size: 8pt; text-align: center; } + @page { size: letter; margin: 0.55in 0.65in; } + body { font-family: Arial, 'DejaVu Sans', sans-serif; color: #111; font-size: 10pt; } + .header { text-align: center; margin: 12pt 0 40pt; } + .groupe { font-size: 21pt; font-weight: 400; margin-bottom: 16pt; } + .district { font-size: 16pt; margin-bottom: 18pt; } + h1 { font-size: 14pt; font-weight: 500; letter-spacing: 0; margin: 0; } + .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18pt 18pt; } + .field { break-inside: avoid; } + .field.full { grid-column: 1 / -1; } + .box { + border: 1pt solid #222; + min-height: 27pt; + padding: 6pt 8pt; + white-space: pre-wrap; + line-height: 1.25; + overflow: hidden; + } + .label { font-style: italic; font-size: 8.5pt; margin: 4pt 0 0 1pt; } + .short .box { min-height: 24pt; } + .theme .box { min-height: 58pt; } + .medium .box { min-height: 58pt; } + .deep .box { min-height: 95pt; } + .notes .box { min-height: 150pt; } + .footer { margin-top: 10pt; color: #777; font-size: 7.5pt; text-align: center; } """ groupe_nom = groupe.nom if groupe and groupe.nom else "Groupe" - coords = " · ".join([ - item for item in [ - groupe.adresse_local if groupe else None, - f"District {groupe.district}" if groupe and groupe.district else None, - ] if item - ]) - ventes_lit_html = ( - "" - + "".join(ventes_lit_rows) + "
    TitreQtéMontantVendu parStatut
    " - if ventes_lit_rows else "

    Aucune vente de littérature.

    " - ) - ventes_jetons_html = ( - "" - + "".join(ventes_jetons_rows) + "
    TypeQtéMontantVendu parStatut
    " - if ventes_jetons_rows else "

    Aucune vente de jetons.

    " - ) - jetons_html = ( - "" + "".join(jetons_rows) + "
    TypeMembreDétail
    " - if jetons_rows else "

    Aucun jeton/gâteau comptabilisé.

    " - ) + district = f"District {groupe.district}" if groupe and groupe.district else "District" html = f"""
    {escape(groupe_nom)}
    -
    {escape(coords)}
    +
    {escape(district)}
    +

    RÉUNION HEBDOMADAIRE

    -

    Rapport de rencontre

    -
    -
    Date
    {reunion.date_reunion.date().isoformat()}
    -
    Heure
    {reunion.date_reunion.strftime('%H:%M')}
    -
    Sujet
    {escape(reunion.theme or 'Rencontre hebdomadaire')}
    -
    Animé par
    {escape(animateur.prenom if animateur else '—')}
    +
    + {bloc("DATE ( AAAA / MM / JJ)", reunion.date_reunion.date().isoformat(), "short")} + {bloc("PRÉSENCES", "", "short")} + {bloc("SALLE & CAFÉ", groupe.adresse_local if groupe else "", "short")} + {bloc("ANIMATION", animateur.prenom if animateur else "", "short")} + {bloc("THÈME DE LA DISCUSSION", reunion.theme or "", "full theme")} + {bloc("NOUVEAU(X)", "", "medium")} + {bloc("ANNIVERSAIRES / JETONS", jetons_texte, "medium")} + {bloc("COLLECTE", collecte_texte, "short")} + {bloc("DÉPENSES", "", "deep")} + {bloc("VENTES (Littérature)", ventes_lit_texte, "short")} + {bloc("VENTES (Jetons)", ventes_jetons_texte, "short")} + {bloc("NOTES", notes_texte, "full notes")}
    -

    Annonces

    -

    Notes

    {escape(reunion.note or 'Aucune note.')}
    -

    Collecte

    {collecte_html} -
    -

    Ventes de littérature

    {ventes_lit_html} -

    Ventes de jetons

    {ventes_jetons_html} -

    Jetons/Gâteaux

    {jetons_html} """ return html, jour diff --git a/data/import/Modèle de Saint-Basile.pdf b/data/import/Modèle de Saint-Basile.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bfc360178915d4a577d9090cc717222416d0011e GIT binary patch literal 23241 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 R7Zi#Fh%+7@Wi1u5{{c5Ex)uNc literal 0 HcmV?d00001 diff --git a/frontend/src/pages/ModePapier.jsx b/frontend/src/pages/ModePapier.jsx index 9f14c33..d24c9cf 100644 --- a/frontend/src/pages/ModePapier.jsx +++ b/frontend/src/pages/ModePapier.jsx @@ -20,36 +20,48 @@ const formulaires = [ }, ]; -const lignes = (n) => Array.from({ length: n }, (_, i) => `
    ${i + 1}.
    `).join(''); - function htmlFormulaire(type, groupe) { const nomGroupe = groupe?.nom || 'Groupe'; - const commun = ` + const district = groupe?.district ? `District ${groupe.district}` : 'District'; + const lieu = groupe?.adresse_local || ''; + const bloc = (label, contenu = '', cls = '') => ` +
    +
    ${contenu}
    +
    ${label}
    +
    `; + const lignes = (n) => Array.from({ length: n }, (_, i) => `
    ${i + 1}.
    `).join(''); + const entete = (titre) => `

    ${nomGroupe}

    -

    Formulaire papier de reprise en main

    -
    -
    -
    Date: ____________________
    -
    Responsable: ____________________
    +

    ${district}

    +

    ${titre}

    `; const sections = { rencontre: ` -

    Rencontre hebdomadaire

    -
    -
    Montant: __________
    Détenteur: __________
    - ${lignes(6)} - ${lignes(6)} -
    `, + ${entete('RÉUNION HEBDOMADAIRE')} +
    + ${bloc('DATE ( AAAA / MM / JJ)', '', 'short')} + ${bloc('PRÉSENCES', '', 'short')} + ${bloc('SALLE & CAFÉ', lieu, 'short')} + ${bloc('ANIMATION', '', 'short')} + ${bloc('THÈME DE LA DISCUSSION', '', 'full theme')} + ${bloc('NOUVEAU(X)', '', 'medium')} + ${bloc('ANNIVERSAIRES / JETONS', '', 'medium')} + ${bloc('COLLECTE', '', 'short')} + ${bloc('DÉPENSES', '', 'deep')} + ${bloc('VENTES (Littérature)', '', 'short')} + ${bloc('VENTES (Jetons)', '', 'short')} + ${bloc('NOTES', '', 'full notes')} +
    `, assemblee: ` -

    Assemblée d'affaires

    + ${entete("ASSEMBLÉE D'AFFAIRES")} ${lignes(12)}
    ${lignes(10)} ${lignes(6)}
    `, tresorerie: ` -

    Trésorerie

    + ${entete('TRÉSORERIE')} ${lignes(8)} ${lignes(8)} ${lignes(8)} @@ -57,13 +69,14 @@ function htmlFormulaire(type, groupe) { }; return `${nomGroupe} - ${type} ${commun}${sections[type]}`; + ${sections[type]}`; } export default function ModePapier() {