Files
Omika/docs/modeles-email-rapport.md
2026-10-23 18:46:50 +02:00

2.6 KiB

Modèles de courriel et de rapport — génération compatible Batik / Omika

Implémentation de la génération d'un email/rapport à partir d'un modèle (substitution des rubriques), utilisable dans l'application mobile quelle que soit la base connectée (Batik ou Omika).

1. Comportement reproduit

En WINDEV, la génération d'un email/rapport correspond à :

  1. choisir un modèle (MailModele / ModeleRapport) ;
  2. insérer des rubriques/mots-clés (MotClef, RubriquesDocument) ;
  3. substituer ces jetons par les données réelles (client, intervention, dates…) ;
  4. prévisualiser puis envoyer/enregistrer.

La présente implémentation reproduit l'étape 3 (substitution) côté .NET, avec une dégradation propre sur Batik (qui n'a ni ModeleRapport, ni RubriquesDocument).

2. Convention provisoire de jetons

Les jetons sont délimités par [[ et ]], insensibles à la casse :

Bonjour [[NomClient]], intervention du [[DateIntervention]].

La clé correspond au MotClef.Mot (ou MotClef.Code, ou à une rubrique Omika).

⚠️ Convention provisoire. La syntaxe réelle de LIB_RubMailRapport / LIB_ModelesEmails n'est pas dans les exports WINDEV. Le moteur est isolé dans Omika.Core/Services/RubriqueSubstitutionEngine.cs : il suffit d'ajuster le délimiteur pour s'aligner sur la syntaxe exacte lorsque celle-ci sera connue.

3. Compatibilité Batik / Omika

Capacité Batik Omika
Modèles de courriel (MailModele) ✅ (sans MM_Extra/MM_EnvoiMob) ✅
Modèles de rapport lecture seule via l'ancien ModeleRapportMob ModeleRapport
Mots-clés de substitution (MotClef) ✅ ✅
Rubriques structurées (RubriquesDocument) ❌ (liste vide) ✅

La dégradation s'appuie sur SchemaCapabilities.SupportsReportModels / SupportsDocumentFields et sur les repositories adaptatifs.

4. Endpoints ajoutés

  • GET /modele-mails / GET /modele-mails/{id}
  • GET /modele-rapports / GET /modele-rapports/{id}
  • GET /mot-clefs
  • GET /rubriques-documents (vide sur Batik)
  • POST /generation/email — { modelId, values, langue? } → { sujet, corps, unknownTokens }
  • POST /generation/rapport

5. Reste à faire (côté mobile)

  1. Appeler les endpoints depuis Omika.App.Local (MobileApiClient) ;
  2. mettre en cache les modèles/mots-clés (SQLite) ;
  3. appliquer la substitution localement avec RubriqueSubstitutionEngine (déjà dans Omika.Core, donc disponible sur mobile) ;
  4. écran « Générer un email/rapport » (Avalonia) + envoi du courriel via MessageExterne ou enregistrement du rapport comme Document.