Premiere commit - Omika

This commit is contained in:
2026-10-23 18:46:50 +02:00
commit 8ea76c1b24
2155 changed files with 984301 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
# 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`.