From 23a46b4be35277e06ec89f48730eeb694e686be8 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 15:40:06 +0000
Subject: [PATCH] add fdx-commons and fdx-consultation

---
 fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java |  358 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 358 insertions(+), 0 deletions(-)

diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java
new file mode 100644
index 0000000..781f3ac
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/administration/RoleManagerImpl.java
@@ -0,0 +1,358 @@
+package com.megatim.fdxconsultation.core.impl.administration;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.megatim.commons.tools.exceptions.ApplicationValidationException;
+import com.megatim.fdxcommons.model.enumeration.EtatOperation;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeIdMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeMessageSysteme;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonAlredyExistException;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.message.systeme.MessageSystemeManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithSearchEnityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.administration.RoleDAO;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.reporting.model.administration.RoleReporting;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.dto.RoleDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.searchentities.RoleSearch;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.rs.tools.utils.RestrictionContainerBuildeUtil;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+@Transactional
+@Dependent
+public class RoleManagerImpl extends AbstractGenericManager<Role, Long>  implements RoleManager {
+
+    @Inject
+    private RoleDAO dao;
+
+    @Inject
+    private UserManager userManager;
+
+    @Inject
+    private MapStructMapper mapstructMapper;
+    
+    @Inject
+    private MessageSystemeManager messageSystemeManager;
+
+    public RoleManagerImpl() {
+    }
+
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    public Role getCurrentElement() {
+        return dao.getCurrentRole();
+    }
+
+    public Role saveOrUpdateCurrentElement(Role entityToSave) {
+        return dao.save(entityToSave);
+    }
+
+    public Role getUserByUserName(String libelle){
+        List<Role> liste = findByUniqueProperty("libelle", libelle, null);
+        if(liste != null && !liste.isEmpty()){
+            return liste.get(0);
+        }else{
+            return null;
+        }
+    }
+    
+    @Override
+    public void validate(String libelle, User utilisateurConnecte) {
+        Role entity = getUserByUserName(libelle);
+        if (entity == null) {
+            throw new CommonRessourceNotFoundException(Role.class);
+        }
+        entity.setEtatOperation(EtatOperation.ACTIF);
+        entity.setDateValidation(new Date());
+        entity.setUtilisateurValidation(utilisateurConnecte != null ? utilisateurConnecte.getUserName() : null);
+        update(entity.getId(), entity);
+        
+    }
+
+    @Override
+    public void reject(String libelle, Role role, User utilisateurConnecte) {
+        Role entity = getUserByUserName(libelle);
+        if (entity == null) {
+            throw new CommonRessourceNotFoundException(Role.class);
+        }
+        if (role.getMotifRejet() == null || role.getMotifRejet().isEmpty()) {
+            throw new ApplicationValidationException(Arrays.asList("Le motif de rejet est obligatoire"));
+        }
+        entity.setEtatOperation(EtatOperation.REJETE);
+        entity.setDateRejetValidation(new Date());
+        entity.setUtilisateurRejetValidation(utilisateurConnecte != null ? utilisateurConnecte.getUserName() : null);
+        entity.setMotifRejet(role.getMotifRejet());
+        beforeModify(entity, role, utilisateurConnecte);
+        update(entity.getId(), entity);
+        
+    }
+
+    @Override
+    public void beforeModify(Role actualEntity, Role requestEntity, User utilisateurConnecte) {
+        if (actualEntity == null) {
+            throw new CommonRessourceNotFoundException(Role.class);
+        }
+
+        //Si ce libelle  existe dejà
+        if (requestEntity.getLibelle() != null && !requestEntity.getLibelle().isEmpty() && !findByUniqueProperty("libelle", requestEntity.getLibelle(), null).isEmpty()) {
+            //On retourne le message d'erreur
+            if (!findByUniqueProperty("libelle", requestEntity.getLibelle(), null).get(0).getLibelle().equals(actualEntity.getLibelle())) {
+                throw new CommonAlredyExistException("libelle", "Ce Libelle Existe déjà.");
+            }
+        }
+
+        //On copie les nouvelles valeurs        
+        actualEntity.setLibelle(requestEntity.getLibelle());
+        actualEntity.setDescription(requestEntity.getDescription());
+        actualEntity.setActions(requestEntity.getActions());
+
+        actualEntity.setDateDerniereModification(new Date());
+        if (utilisateurConnecte != null) {
+            actualEntity.setUtilisateurModification(utilisateurConnecte.getUserName());
+        }
+    }
+
+    @Override
+    public Role modify(Long id, Role entity, User connectedUser) {
+        Role actualEntity = find(getEntityIdName(), id);
+        beforeModify(actualEntity, entity, connectedUser);
+        update(id, actualEntity);
+        notifierMajTousLesUtilisateursGroupeViaWebSocket(actualEntity, "Oups ! il semblerait que vos habilitations aient été mis à jour par l’administrateur, en conséquence vous allez être déconnecté, pour que les modifications soient prises en compte, vous pourrez vous reconnecter par la suite.",
+                TypeMessageSysteme.AVERTISSEMENT, TypeIdMessageSysteme.MODIFICATION_GROUPE_UTILISATEUR);
+        return actualEntity;
+    }
+    
+    @Override
+    public void beforeRemove(Role entity, User utilisateurConnecte) {
+        //On marque comme supprimé
+        entity.setTypeOperation(TypeOperation.SUPPRIMER);
+
+        //On set les informations supplementaires
+        entity.setDateSuppression(new Date());
+
+        //Si non null
+        if (utilisateurConnecte != null) {
+
+            //On set les informations supplementaires
+            entity.setUtilisateurSuppression(utilisateurConnecte.getUserName());
+
+        }
+        
+        //Si le groupe possède des utilisateurs
+        if (entity != null && siPossedeUtilisateurs(entity)) {
+            throw new CommonApplicationValidationException("Veuillez au préalable retirer tous les utilisateurs liés à ce groupe, avant de supprimer le groupe.");
+        }
+       
+    }
+
+    @Override
+    public  Role remove(Long id, User connectedUser) {
+        Role entity = find(getEntityIdName(), id);
+        beforeRemove(entity, connectedUser);
+        Role updatedRole = update(id, entity);
+        notifierMajTousLesUtilisateursGroupeViaWebSocket(entity, "Oups ! il semblerait que le groupe utilisateur auquel vous appartennez ait été supprimé par l’administrateur, en conséquence vous allez être déconnecté.",
+                TypeMessageSysteme.AVERTISSEMENT, TypeIdMessageSysteme.SUPPRESSION_GROUPE_UTILISATEUR);        
+        
+        return updatedRole;
+    }
+    
+    @Override
+    public void beforeAdd(Role entity, User utilisateurConnecte) {
+        //Si ce libelle  existe dejà
+        if (entity.getLibelle() != null && !entity.getLibelle().isEmpty() && !findByUniqueProperty("libelle", entity.getLibelle(), null).isEmpty()) {
+            //On retourne le message d'erreur
+            throw new CommonAlredyExistException("libelle", "Ce libellé existe déjà.");
+        }
+        entity.setDateCreation(new Date());
+        entity.setEtatOperation(EtatOperation.ATTENTE_VALIDATION);
+
+        if (utilisateurConnecte != null) {
+            //On set les informations supplementaires
+            entity.setUtilisateurCreation(utilisateurConnecte.getUserName());
+        }
+    }
+
+    @Override
+    public boolean siPossedeUtilisateurs(Role role){
+        List<User> utilisateurs = userManager.obtenirListeUtilisateursRole(role);
+        boolean bool = false;
+        if(utilisateurs.isEmpty()){
+            bool = false;
+        }else{
+            bool = true;
+        }        
+        return bool;
+    }
+    
+    @Override
+    public Class<RoleReporting> getClazz() {
+        return RoleReporting.class;
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false );
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    /**
+     * Methode permettant de determiner le nombre d'utilisateur d'un groupe
+     * @param entity
+     * @return 
+     */
+    @Override
+    public Integer obtenirNbreUtilisateurRole(Role entity) {
+        List<User> users = null;
+        Integer nbreUtilisateurs = 0;
+        users = userManager.findByUniqueProperty("role", entity, null);
+        if(users != null && !users.isEmpty()){
+            nbreUtilisateurs = users.size();
+        }
+        return nbreUtilisateurs;
+    }
+    
+    /**
+     * Permet de notifier les maj via webSocket
+     * @param groupe
+     * @param message
+     * @param typeMessageSysteme 
+     * @param typeIdMessageSysteme 
+     */
+    public void notifierMajTousLesUtilisateursGroupeViaWebSocket(Role groupe, String message, TypeMessageSysteme typeMessageSysteme, TypeIdMessageSysteme typeIdMessageSysteme) {
+        
+        //Variables
+        List<User> utilisateurs = userManager.obtenirListeUtilisateursRole(groupe);
+        
+        //Si non null
+        if(utilisateurs != null && !utilisateurs.isEmpty()){
+            
+            //On parcourt la liste
+            for(User utilisateur : utilisateurs){
+                
+                //On notifie l'utlisateur
+                messageSystemeManager.ajouter(typeMessageSysteme, typeIdMessageSysteme, message, utilisateur);
+                
+            }
+            
+        }
+        
+    }
+
+    @Override
+    public List<RoleReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        List<OrderByDefinition> orders = new ArrayList<>();
+        orders.add(new OrderByDefinition("id", OrderByType.DESC));
+        List<Role> liste = formaterDonnees(findAll(searchEntity, Arrays.asList(), orders));
+        return CommonsToolsEntity.convertToRoleReporting(liste);
+    }
+
+    @Override
+    public GenericDAO<Role, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public RoleDto mapToDto(Role entity) {
+        return mapstructMapper.roleToRoleDto(entity);
+    }
+
+    @Override
+    public RoleDto mapToDetailDto(Role entity) {
+        return mapstructMapper.roleToRoleDto(entity);
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<Role, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+    
+    @Override
+    public PaginationWithSearchEnityDAO<Role, Long, RoleSearch> getPaginationDao() {
+        return dao;
+    }
+    
+    @Override
+    public RestrictionsContainer construireRequete(RoleSearch searchEntity, TypeOperation typeOperation) {
+        RestrictionsContainer requeteur = RestrictionContainerBuildeUtil.construireRequete(searchEntity, RoleSearch.class);
+        requeteur.addEq("typeOperation", typeOperation);
+        return requeteur;
+    }
+
+    @Override
+    public List<Role> formaterDonnees(List<Role> liste) {
+        if(liste != null){
+            for(Role role : liste){
+                role.setNbreUtilisateur(obtenirNbreUtilisateurRole(role));
+            }
+        }else{
+            liste = new ArrayList<Role>();
+        }
+        return liste;
+    }
+    
+    @Override
+    public List<Role> findWithPagination(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields, Integer pageNumber, Integer pageSize) throws Exception {
+        List<Role> datas = paginationWithCriteriaEntityDAO().findAll(criterion, fetchEagerFields, orderByFields);
+        datas = formaterDonnees(datas);
+        return datas;
+    }
+    
+    @Override
+    public  List<Role> findAll(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields) throws Exception {
+        List<Role> datas = paginationWithCriteriaEntityDAO().findAll(criterion, fetchEagerFields, orderByFields);
+        datas = formaterDonnees(datas);
+        return datas;
+    }
+    
+    @Override
+    public RoleDto getById(Long id) {
+        Role entity = find(getEntityIdName(), id);
+        return mapToDetailDto(entity);
+    }
+
+}

--
Gitblit v1.10.0