diff --git a/src/main/java/dev/lions/unionflow/server/entity/TypeReference.java b/src/main/java/dev/lions/unionflow/server/entity/TypeReference.java index 89299f4..98fc8b6 100644 --- a/src/main/java/dev/lions/unionflow/server/entity/TypeReference.java +++ b/src/main/java/dev/lions/unionflow/server/entity/TypeReference.java @@ -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. * diff --git a/src/main/java/dev/lions/unionflow/server/service/OrganisationService.java b/src/main/java/dev/lions/unionflow/server/service/OrganisationService.java index 8d8c734..6880ba7 100644 --- a/src/main/java/dev/lions/unionflow/server/service/OrganisationService.java +++ b/src/main/java/dev/lions/unionflow/server/service/OrganisationService.java @@ -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";