From b676e003e43b94bff325d08c11820270e6ed0ef4 Mon Sep 17 00:00:00 2001 From: dahoud <41957584+DahoudG@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:09:46 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20initialiser=20modulesActifs/categorieTyp?= =?UTF-8?q?e=20depuis=20types=5Freference=20=C3=A0=20la=20cr=C3=A9ation=20?= =?UTF-8?q?d'org?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- .../server/entity/TypeReference.java | 16 +++++++++++++ .../server/service/OrganisationService.java | 23 +++++++++++++++++++ 2 files changed, 39 insertions(+) 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";