63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
# 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`.
|