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
+71
View File
@@ -0,0 +1,71 @@
# Spécification — Création d'email et de rapport (fidèle à Windev)
> Source : `docs/Documentation_WebService_GET.md` (web service mobile `Batik_WS_Com_Mob`),
> collection `LIB_Traitements` et `LIB_Structures`. Cette spec décrit le comportement
> réel à reproduire, distinct des « notes internes » (`MessageInterne`).
## 1. Structures WINDEV → contrats .NET
| Windev | .NET | Rôle |
|---|---|---|
| `STJSONMembreRubRapport` | `RapportChampDto` | Champ/rubrique du modèle (type, ordre, auto-rempli, modifiable, liste) |
| `STJSONListeMembre` | `RapportChampSousElementDto` | Colonne de tableau / rubrique fille |
| `ST_REQ_LISTE_Chp_Rapport` | `GetRapportChampsRequest` | Requête « liste des champs » |
| `STJSONInfoRapportMob` | `CreateRapportRequest` | Requête « créer le rapport » (avec `ListeMob` remplie) |
| `STJSONInfoModeleMailMob` | (à créer) | Requête « construire le modèle email » |
| `ST_ModeleMailComplet` | (à créer) | Requête « envoyer l'email » (sujet, corps HTML, destinataires, SMTP) |
## 2. Flux « récupérer les champs à remplir » (`RecupererChampRapportInter`)
1. Entrée : `{ modeleId, interventionId, collaborateurId }`.
2. Charge `ModeleRapport` (`MRP_Modele` = document, `MRP_Extra` = JSON de mots-clés spécifiques).
3. `ChargeListeRubDoc()` : `SELECT * FROM RubriquesDocument ORDER BY RD_IdRubParent` → hiérarchie (parent → `ListeMembre`).
4. `ConstructionTbRubBaseRapport` : extrait les rubriques présentes dans le document.
5. `ConstructionTbRubEnvoyerMob` : filtre `RD_EnvoiMob`.
6. `AjouterDonnesBDDansChampRapport(interventionId, champs)` : **pré-remplissage** depuis la base.
7. Retour : `RapportChampDto[]`.
## 3. Pré-remplissage (`AjouterDonnesBDDansChampRapport`)
5 requêtes SQL, exécutées **seulement si** le groupe applicatif est présent :
| GroupeApp | Source | `ListeDonnesBD` |
|---|---|---|
| `Inter` | Intervention + Lieu + Adresse + Client + Dossier + Collaborateur + Societe + ParametreMetier | valeur simple (texte ; `IN_Description` via RTF→texte) |
| `Client` | Client + Client_Adresse + Adresse | JSON `ST_ClientAd[]` (adresses multiples) |
| `Dossier` | Dossier + ParametreMetier | valeur simple |
| `CR` | CompteRendu + RDV_Collaborateur + RDV_Planning | JSON `ST_CR_Rp[]` (comptes rendus, **choix multiple**) |
| `RDV` | RDV_Planning + RDV_Collaborateur + Collaborateur | JSON `ST_RDV_Rp[]` (rendez-vous, **choix multiple**, groupés) |
Les champs de type `Tableau` ou groupe `Inter/Dossier/Client` reçoivent une valeur ; `CR`/`RDV`/`Client` reçoivent une **liste JSON** → choix multiple côté mobile.
## 4. Flux « créer le rapport » (`CreationRapport`)
1. Entrée : `{ modeleId, interventionId, nom, guid, ListeMob }` (rubriques remplies).
2. Charge `ModeleRapport` (document Word/RTF) + `MRP_Extra`.
3. `TraiteDocumentRapportMob` : remplit les rubriques dans le document.
4. `SupprimerToutesRubRapportMob` : retire les rubriques non remplies.
5. `DocVersPDF` → PDF.
6. Écrit `TOSRV` (`cCMD_DocEcrit`, type `"PDF_RP"`, nom `{nom}.pdf`).
## 5. Flux « envoyer l'email » (`CreationETEnvoiEmail`)
1. Entrée : `ST_ModeleMailComplet` (sujet, corps HTML, destinataires, PJ, compte SMTP).
2. `CreationUnEmail` → construit l'email.
3. `OuvreSessionEmail` + `EmailEnvoieMessage` → **envoi SMTP réel**.
4. `CreationMessageExt` → sérialise `ST_MsgExterneMail` et écrit `TOSRV` (`cCMD_MsgExtEcrit`).
## 6. État d'avancement et décisions
- **Fait** : lecture des modèles (`MailModele`/`ModeleRapport`/`ModeleRapportMob`), `MotClef`, `RubriquesDocument` ; moteur de substitution ; création `MessageExterne` directe.
- **À faire (priorité choisie : « champs à remplir + auto-remplissage »)** :
1. `IRapportChampService` + `RapportChampService` (miroir de `ContruireListeChamps` + `AjouterDonnesBDDansChampRapport`).
2. Endpoint `POST /api/rapports/champs` (récupérer les champs).
3. Endpoint `POST /api/rapports` (créer) — la génération Word/PDF est **reportée**.
- **Reporté** : génération Word/RTF → PDF, envoi SMTP réel, file `TOSRV` (`cCMD_*`).
## 7. Contraintes de compatibilité Batik / Omika
- `ModeleRapport` (Omika) vs `ModeleRapportMob` (Batik, lecture seule) : le modèle est résolu par l'adaptatif existant.
- `RubriquesDocument` : Omika uniquement → sur Batik, `ChargeListeRubDoc()` retourne vide → pas de rubriques structurées (dégradation propre).
- La requête d'auto-remplissage référence des colonnes Omika (`IN_CleType`, `DO_CleStatut`, `CR_CleTypeSignataire`, `RDV_Planning`/`RDV_Collaborateur`). Sur Batik, il faudra une requête de repli (colonnes numériques `IN_IDTypeIntervention`, `Planning_RDV`, etc.).