fix: initialiser modulesActifs/categorieType depuis types_reference à la création d'org

- TypeReference: ajout des champs categorie et modulesRequis (colonnes DB existantes depuis V18
  mais non mappées en JPA — Hibernate validate échouait silencieusement)
- OrganisationService.creerOrganisation(): lit types_reference.modules_requis pour initialiser
  Organisation.modulesActifs, au lieu de dépendre uniquement du switch hardcodé dans
  OrganisationModuleService.getModulesParType()

Avant: un type créé via CRUD (ex: TANTANPION) tombait dans le default du switch → aucun
module métier → rôles métier assignables mais menus jamais affichés.
Après: tout type avec modules_requis renseigné dans types_reference active correctement
ses modules à la création de l'organisation.
This commit is contained in:
dahoud
2026-04-09 14:09:46 +00:00
parent c79a393d6e
commit b676e003e4
2 changed files with 39 additions and 0 deletions

View File

@@ -157,6 +157,22 @@ public class TypeReference extends BaseEntity {
@Column(name = "est_systeme", nullable = false) @Column(name = "est_systeme", nullable = false)
private Boolean estSysteme = false; private Boolean estSysteme = false;
/**
* Catégorie fonctionnelle (ex: ASSOCIATIF, FINANCIER_SOLIDAIRE, RELIGIEUX…).
* Utilisée pour les types d'organisation (domaine TYPE_ORGANISATION).
*/
@Size(max = 50)
@Column(name = "categorie", length = 50)
private String categorie;
/**
* Liste CSV des modules activés pour ce type d'organisation.
* Exemple : "MEMBRES,COTISATIONS,TONTINE,FINANCE"
* Utilisée pour initialiser {@code Organisation.modulesActifs} à la création.
*/
@Column(name = "modules_requis", columnDefinition = "TEXT")
private String modulesRequis;
/** /**
* Organisation propriétaire de cette valeur. * Organisation propriétaire de cette valeur.
* *

View File

@@ -104,6 +104,29 @@ public class OrganisationService {
organisation.setTypeOrganisation("ASSOCIATION"); organisation.setTypeOrganisation("ASSOCIATION");
} }
// Initialiser modulesActifs et categorieType depuis types_reference
// Cela permet aux types créés via CRUD (ex: "TANTANPION") d'hériter
// automatiquement de leurs modules_requis sans modifier le code Java.
if (organisation.getModulesActifs() == null || organisation.getModulesActifs().isBlank()) {
typeReferenceRepository
.findByDomaineAndCode("TYPE_ORGANISATION", organisation.getTypeOrganisation())
.ifPresentOrElse(
tr -> {
if (tr.getModulesRequis() != null && !tr.getModulesRequis().isBlank()) {
organisation.setModulesActifs(tr.getModulesRequis());
LOG.infof("Modules initialisés depuis types_reference pour le type '%s': %s",
organisation.getTypeOrganisation(), tr.getModulesRequis());
}
if (tr.getCategorie() != null && organisation.getCategorieType() == null) {
organisation.setCategorieType(tr.getCategorie());
}
},
() -> LOG.warnf(
"Type d'organisation '%s' absent de types_reference — modules non initialisés. " +
"Ajoutez ce type via l'administration pour activer les modules métier.",
organisation.getTypeOrganisation()));
}
// Audit : créé par / modifié par (BaseEntity n'initialise pas creePar dans // Audit : créé par / modifié par (BaseEntity n'initialise pas creePar dans
// @PrePersist) // @PrePersist)
String auditUser = utilisateur != null && !utilisateur.isBlank() ? utilisateur : "system"; String auditUser = utilisateur != null && !utilisateur.isBlank() ? utilisateur : "system";