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-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java |  302 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 302 insertions(+), 0 deletions(-)

diff --git a/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java
new file mode 100644
index 0000000..999819e
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-impl/src/main/java/com/megatim/fdxconsultation/dao/impl/stats/TableauBordDAOImpl.java
@@ -0,0 +1,302 @@
+package com.megatim.fdxconsultation.dao.impl.stats;
+
+import com.megatim.fdxcommons.model.referentiel.TypeFichier;
+import com.megatim.fdxconsultation.dao.ifaces.stats.CriteriaEntityPersistedDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableConfigurationDAO;
+import com.megatim.fdxconsultation.dao.ifaces.stats.TableauBordDAO;
+import com.megatim.fdxconsultation.model.dto.ParticipantToFichierDto;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.Tuple;
+
+/**
+ *
+ * @author ASUS
+ */
+@Stateless
+public class TableauBordDAOImpl implements TableauBordDAO {
+
+    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
+    protected EntityManager em;
+
+    @EJB
+    TableConfigurationDAO tableConfigurationDao;
+
+    @EJB
+    CriteriaEntityPersistedDAO criteriaDao;
+
+    @Override
+    public Class<TableauBord> getManagedEntityClass() {
+        return TableauBord.class;
+    }
+
+    @Override
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    @Override
+    public TableauBord getById(Long id) {
+        Query query = em.createQuery("SELECT t FROM TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns WHERE t.id = :id");
+        query.setParameter("id", id);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+
+    @Override
+    public TableauBord findByUserAndTypeFichierAndReferentiel(Long userId, String codeTypeFichier, String referentielVersion) {
+        Query query = em.createQuery("SELECT t from TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.user.id = :userId and t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("userId", userId)
+                .setParameter("referentielVersion", referentielVersion);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+
+    @Override
+    public List<TableauBord> findByUser(Long userId, String refVersion) {
+        Query query = em.createQuery("SELECT t FROM TableauBord t"
+                + " LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns"
+                + " WHERE t.user.id = :userId AND t.referentiel.version = :refVersion")
+                .setParameter("userId", userId)
+                .setParameter("refVersion", refVersion);
+
+        List<TableauBord> liste = query.getResultList();
+        liste.forEach(t -> loadCriteria(t));
+
+        return liste;
+    }
+
+    @Override
+    public List<ParticipantToFichierDto> tableauBordToTypeFichiers(String userName, String referentielVersion) {
+        List<Tuple> results = em.createQuery("SELECT t.participant.code, t.code AS code FROM TableauBord tb, TypeFichier t"
+                + " WHERE tb.user.userName = :userName AND tb.referentiel.version = :referentielVersion"
+                + " AND tb.typeFichier.code = t.code", Tuple.class)
+                .setParameter("userName", userName)
+                .setParameter("referentielVersion", referentielVersion)
+                .getResultList();
+
+        return results.stream().map(t -> {
+            ParticipantToFichierDto dto = new ParticipantToFichierDto(t.get(0, String.class), t.get(1, String.class));
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<ParticipantToFichierDto> tableauBordToTypeFichiers(TypeConfigurationTableauBord tableauBordConfiguration, String referentielVersion) {
+        List<Tuple> results = em.createQuery("SELECT t.participant.code, t.code AS code from TableauBord tb, TypeFichier t"
+                + " WHERE tb.typeConfiguration = :tableauBordConfiguration"
+                + " AND tb.referentiel.version = :referentielVersion AND tb.typeFichier.code = t.code ", Tuple.class)
+                .setParameter("tableauBordConfiguration", tableauBordConfiguration)
+                .setParameter("referentielVersion", referentielVersion)
+                .getResultList();
+
+        return results.stream().map(t -> {
+            ParticipantToFichierDto dto = new ParticipantToFichierDto(t.get(0, String.class), t.get(1, String.class));
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<TableauBord> findByReferentiel(String referentielVersion) {
+        return em.createQuery("SELECT t from TableauBord t"
+                + " WHERE t.referentiel.version = :referentielVersion", TableauBord.class)
+                .setParameter("referentielVersion", referentielVersion)
+                .getResultList();
+
+    }
+
+    @Override
+    public TableauBord findByTypeConfigurationAndReferentiel(String codeTypeFichier, String referentielVersion, TypeConfigurationTableauBord typeConfiguration) {
+        Query query = em.createQuery("SELECT t from TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.typeConfiguration = :typeConfiguration and t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("typeConfiguration", typeConfiguration)
+                .setParameter("referentielVersion", referentielVersion);
+
+        Optional<TableauBord> optionalTableauBord = query.getResultList().stream().findFirst();
+        TableauBord tableauBord = optionalTableauBord.isPresent() ? optionalTableauBord.get() : null;
+
+        if (tableauBord == null) {
+            return null;
+        }
+        loadCriteria(tableauBord);
+
+        return tableauBord;
+    }
+
+    private void loadCriteria(TableauBord tableauBord) {
+        if (tableauBord.getTableConfigurations() != null && !tableauBord.getTableConfigurations().isEmpty()) {
+            tableauBord.getTableConfigurations().stream().forEach(t -> {
+                if (t.getCriterion() != null) {
+                    CriteriaEntityPersisted criterion = criteriaDao.loadSubCriteria(t.getCriterion());
+                    t.setCriterion(criterion);
+                }
+            });
+        }
+    }
+
+    @Override
+    public List<TypeFichier> tableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT t.typeFichier FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.user.userName = :userName AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        query.setParameter("userName", userName);
+
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.USER_SPECIFIC, typeFichierSearch);
+        query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize);
+
+        return query.getResultList();
+    }
+
+    @Override
+    public Long countTableauBordTypeFichiers(String userName, String referentielVersion, TypeFichierSearch typeFichierSearch) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT COALESCE(COUNT(t.typeFichier), 0) FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.user.userName = :userName AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        query.setParameter("userName", userName);
+
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.USER_SPECIFIC, typeFichierSearch);
+
+        return (Long) query.getSingleResult();
+    }
+
+    @Override
+    public List<TypeFichier> tableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT t.typeFichier FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.GLOBAL, typeFichierSearch);
+        query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize);
+
+        return query.getResultList();
+    }
+
+    @Override
+    public Long countTableauBordGlobalTypeFichiers(String referentielVersion, TypeFichierSearch typeFichierSearch) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append("SELECT COALESCE(COUNT(t.typeFichier), 0) FROM TableauBord t")
+                .append(" ")
+                .append("WHERE t.typeConfiguration = :typeConfiguration AND t.referentiel.version = :referentielVersion");
+
+        addQuerySearchPart(builder, typeFichierSearch);
+
+        Query query = em.createQuery(builder.toString());
+        addQuerySearchParam(query, referentielVersion, TypeConfigurationTableauBord.GLOBAL, typeFichierSearch);
+
+        return (Long) query.getSingleResult();
+    }
+
+    private void addQuerySearchParam(Query query, String referentielVersion, TypeConfigurationTableauBord typeConfigurationTableauBord, TypeFichierSearch typeFichierSearch) {
+
+        query.setParameter("referentielVersion", referentielVersion)
+                .setParameter("typeConfiguration", typeConfigurationTableauBord);
+
+        if (typeFichierSearch.getCode() != null) {
+            query.setParameter("code", "%" + typeFichierSearch.getCode() + "%");
+        }
+
+        if (typeFichierSearch.getLibelle() != null) {
+            query.setParameter("libelle", "%" + typeFichierSearch.getLibelle() + "%");
+        }
+
+        if (typeFichierSearch.getDescription() != null) {
+            query.setParameter("description", "%" + typeFichierSearch.getDescription() + "%");
+        }
+    }
+
+    private void addQuerySearchPart(StringBuilder builder, TypeFichierSearch typeFichierSearch) {
+
+        if (typeFichierSearch.getCode() != null) {
+            builder.append(" AND ");
+            builder.append("t.typeFichier.code LIKE :code");
+        }
+
+        if (typeFichierSearch.getLibelle() != null) {
+            builder.append(" AND ");
+            builder.append("t.typeFichier.libelle LIKE :libelle");
+        }
+
+        if (typeFichierSearch.getDescription() != null) {
+            builder.append(" AND ");
+            builder.append("t.typeFichier.description LIKE :description");
+        }
+    }
+
+    @Override
+    public TableauBord findSpecificTableauBord(Long userId, String codeTypeFichier, String referentielVersion) {
+
+        Query query = em.createQuery("SELECT t from TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.user.id = :userId and t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion "
+                + "AND t.typeConfiguration = :typeConfiguration")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("userId", userId)
+                .setParameter("referentielVersion", referentielVersion)
+                .setParameter("typeConfiguration", TypeConfigurationTableauBord.USER_SPECIFIC);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+
+    @Override
+    public TableauBord findGlobalTableauBord(String codeTypeFichier, String referentielVersion) {
+
+        Query query = em.createQuery("SELECT t FROM TableauBord t LEFT JOIN FETCH t.tableConfigurations tc LEFT JOIN FETCH tc.groupingColumns "
+                + "WHERE t.typeFichier.code = :codeTypeFichier AND t.referentiel.version = :referentielVersion "
+                + "AND t.typeConfiguration = :typeConfiguration")
+                .setParameter("codeTypeFichier", codeTypeFichier)
+                .setParameter("referentielVersion", referentielVersion)
+                .setParameter("typeConfiguration", TypeConfigurationTableauBord.GLOBAL);
+
+        TableauBord tableauBord = (TableauBord) query.getResultList().stream().findFirst().orElse(null);
+        if (tableauBord != null) {
+            loadCriteria(tableauBord);
+        }
+
+        return tableauBord;
+    }
+}

--
Gitblit v1.10.0