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:
@@ -157,6 +157,22 @@ public class TypeReference extends BaseEntity {
|
||||
@Column(name = "est_systeme", nullable = 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.
|
||||
*
|
||||
|
||||
@@ -104,6 +104,29 @@ public class OrganisationService {
|
||||
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
|
||||
// @PrePersist)
|
||||
String auditUser = utilisateur != null && !utilisateur.isBlank() ? utilisateur : "system";
|
||||
|
||||
Reference in New Issue
Block a user