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/helper/TableauBordHandlerImpl.java |  276 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 276 insertions(+), 0 deletions(-)

diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/TableauBordHandlerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/TableauBordHandlerImpl.java
new file mode 100644
index 0000000..3dce036
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/helper/TableauBordHandlerImpl.java
@@ -0,0 +1,276 @@
+package com.megatim.fdxconsultation.core.impl.helper;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
+import com.megatim.fdxconsultation.core.ifaces.helper.TableauBordHandler;
+import com.megatim.fdxconsultation.core.ifaces.stats.CriteriaEntityPersistedManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableConfigurationManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordColumnManager;
+import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager;
+import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto;
+import com.megatim.fdxconsultation.model.dto.stats.TableauBordDto;
+import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted;
+import com.megatim.fdxconsultation.model.stats.TableConfiguration;
+import com.megatim.fdxconsultation.model.stats.TableauBord;
+import com.megatim.fdxconsultation.model.stats.TableauBordColumn;
+import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class TableauBordHandlerImpl implements TableauBordHandler {
+
+    @Inject
+    private MapStructMapper mapper;
+
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Inject
+    private ColumnDefinitionManager columnDefinitionManager;
+
+    @Inject
+    private CriteriaEntityPersistedManager criteriaEntityPersistedManager;
+
+    @Inject
+    TableauBordManager tableauBordManager;
+
+    @Inject
+    private TableConfigurationManager tableConfigurationManager;
+
+    @Inject
+    private TableauBordColumnManager tableauBordColumnManager;
+
+    @Override
+    public void reconduireTableauBordValides(Referentiel previousRef, Referentiel newRef, Set<String> typeFichiersToMigrate) {
+        List<TableauBord> prevRefTableauBords = tableauBordManager.findByReferentiel(previousRef.getVersion());
+
+        try {
+            for (TableauBord t : prevRefTableauBords) {
+                if (typeFichiersToMigrate.contains(t.getTypeFichier().getCode())) {
+                    createNewTableauBord(t, newRef);
+                }
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public TableauBordDto tableauBordToTableauBordDto(TableauBord tableauBord) {
+        TableauBordDto dto = new TableauBordDto();
+
+        dto.setId(tableauBord.getId());
+        dto.setDescription(tableauBord.getDescription());
+        dto.setTypeFichier(commonMapper.typeFichierToTypeFichierSlimDto(tableauBord.getTypeFichier()));
+        dto.setTypeConfiguration(tableauBord.getTypeConfiguration());
+
+        Set<TableConfigurationDto> tableConfigurationDtos = new HashSet<>();
+        tableauBord.getTableConfigurations().stream().forEach(t -> tableConfigurationDtos.add(tableConfigurationToTableConfigurationDto(t)));
+        dto.setTableConfigurations(tableConfigurationDtos);
+
+        return dto;
+    }
+
+    /**
+     * Méthode permettant de passer de TableauBordDto à TableauBord
+     *
+     * @param dto
+     * @param referentiel
+     * @return
+     */
+    @Override
+    public TableauBord tableauBordDtoToTableauBord(TableauBordDto dto, Referentiel referentiel) {
+        TableauBord tableauBord = new TableauBord();
+
+        tableauBord.setDescription(dto.getDescription());
+        tableauBord.setTypeFichier(commonMapper.typeFichierSlimDtoToTypeFichier(dto.getTypeFichier()));
+        tableauBord.setReferentiel(referentiel);
+
+        Set<TableConfiguration> tableConfigurations = new HashSet<>();
+        dto.getTableConfigurations().stream().forEach(t -> tableConfigurations.add(tableConfigurationDtoToTableConfiguration(t, dto.getTypeFichier().getCode(), referentiel.getVersion())));
+        tableauBord.setTableConfigurations(tableConfigurations);
+
+        return tableauBord;
+    }
+
+    @Override
+    public TableConfigurationDto tableConfigurationToTableConfigurationDto(TableConfiguration tableConf) {
+        TableConfigurationDto dto = new TableConfigurationDto();
+        dto.setCriterion(criteriaEntityPersistedToCriteriaEntityFromView(tableConf.getCriterion()));
+        dto.setColor(tableConf.getColor());
+        dto.setFonctionAggregation(tableConf.getFonctionAggregation());
+        dto.setGroupingColumns(mapper.setTableauBordColumnToSetTableauBordColumnDto(tableConf.getGroupingColumns()));
+        dto.setLibelle(tableConf.getLibelle());
+        dto.setTargetedColumn(mapper.tableauBordColumnToTableauBordColumnDto(tableConf.getTargetedColumn()));
+        dto.setTypeResultatConfiguration(tableConf.getTypeResultatConfiguration());
+        dto.setColor(tableConf.getColor());
+
+        return dto;
+    }
+
+    @Override
+    public void stopIfUserSpecificTableauBordExists(String codeTypeFichier, String referentielVersion, String userName) throws CommonApplicationValidationException, Exception {
+
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        criterion.setSubCriterias(Arrays.asList(
+                new CriteriaEntityFromView("typeFichier.code", codeTypeFichier, Operateur.EQUALS),
+                new CriteriaEntityFromView("user.userName", userName, Operateur.EQUALS),
+                new CriteriaEntityFromView("referentiel.version", referentielVersion, Operateur.EQUALS),
+                new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.USER_SPECIFIC, Operateur.EQUALS)));
+
+        List<TableauBord> tb = tableauBordManager.findAll(criterion, Arrays.asList(), Arrays.asList());
+        if (tb.stream().findFirst().isPresent()) {
+            throw new CommonApplicationValidationException("Une configuration existe déjà pour le typefichier " + codeTypeFichier + ", l'utilisateur" + userName + " et le référentiel " + referentielVersion);
+        }
+    }
+
+    @Override
+    public void stopIfGlobaleTableauBordExists(String codeTypeFichier, String referentielVersion) throws Exception {
+
+        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
+        criterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
+        criterion.setSubCriterias(Arrays.asList(
+                new CriteriaEntityFromView("typeFichier.code", codeTypeFichier, Operateur.EQUALS),
+                new CriteriaEntityFromView("referentiel.version", referentielVersion, Operateur.EQUALS),
+                new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.GLOBAL, Operateur.EQUALS)
+        ));
+
+        if (tableauBordManager.findAll(criterion, Arrays.asList(), Arrays.asList()).stream().findFirst().isPresent()) {
+            throw new CommonApplicationValidationException("Une configuration existe déjà pour ce typefichier et ce référentiel");
+        }
+    }
+
+    private void createNewTableauBord(TableauBord t, Referentiel referentiel) throws Exception {
+
+        try {
+            if (t.getTypeConfiguration().equals(TypeConfigurationTableauBord.USER_SPECIFIC)) {
+                stopIfUserSpecificTableauBordExists(t.getTypeFichier().getCode(), referentiel.getVersion(), t.getUser().getUserName());
+            } else {
+                stopIfGlobaleTableauBordExists(t.getTypeFichier().getCode(), referentiel.getVersion());
+            }
+            TableauBord tableauBord = tableauBord(t, referentiel);
+            tableauBordManager.save(tableauBord);
+        } catch (Exception ex) {
+            Logger.getLogger(TableauBordHandlerImpl.class.getSimpleName()).log(Level.SEVERE, ex.getMessage(), ex);
+        }
+    }
+
+    private TableauBord tableauBord(TableauBord t, Referentiel referentiel) {
+        TableauBord tableauBord = new TableauBord();
+        tableauBord.setReferentiel(referentiel);
+        tableauBord.setTypeFichier(t.getTypeFichier());
+        tableauBord.setDescription(t.getDescription());
+        tableauBord.setUser(t.getUser());
+        tableauBord.setTypeConfiguration(t.getTypeConfiguration());
+
+        for (TableConfiguration tc : t.getTableConfigurations()) {
+            TableConfiguration tableConf = new TableConfiguration();
+            tableConf.setLibelle(tc.getLibelle());
+            tableConf.setFonctionAggregation(tc.getFonctionAggregation());
+            tableConf.setTargetedColumn(newTableauBordColumn(tc.getTargetedColumn()));
+            tableConf.setTypeResultatConfiguration(tc.getTypeResultatConfiguration());
+            tableConf.setFonctionAggregationCriterion(tc.getFonctionAggregationCriterion());
+
+            CriteriaEntityPersisted cr = reconductCriteria(tc.getCriterion());
+            tableConf.setCriterion(cr);
+
+            for (TableauBordColumn tbc : tc.getGroupingColumns()) {
+                tableConf.getGroupingColumns().add(newTableauBordColumn(tbc));
+            }
+            tableauBord.getTableConfigurations().add(tableConf);
+        }
+
+        return tableauBord;
+    }
+
+    private TableauBordColumn newTableauBordColumn(TableauBordColumn column) {
+        if (column == null) {
+            return null;
+        }
+        TableauBordColumn newColumn = new TableauBordColumn();
+        newColumn.setName(column.getName());
+        newColumn.setTypeDonnee(column.getTypeDonnee());
+
+        return newColumn;
+    }
+
+    private TableConfiguration tableConfigurationDtoToTableConfiguration(TableConfigurationDto dto, String codeTypeFichier, String referentielVersion) {
+        TableConfiguration tableConf = new TableConfiguration();
+        tableConf.setFonctionAggregation(dto.getFonctionAggregation());
+        tableConf.setLibelle(dto.getLibelle());
+        tableConf.setColor(dto.getColor());
+        tableConf.setTargetedColumn(mapper.tableauBordColumnDtoToTableauBordColumn(dto.getTargetedColumn()));
+        tableConf.setGroupingColumns(mapper.setTableauBordColumnDtoToSetTableauBordColumn(dto.getGroupingColumns()));
+        tableConf.setTypeResultatConfiguration(dto.getTypeResultatConfiguration() != null ? dto.getTypeResultatConfiguration() : TypeResultatConfiguration.RECAPITULATIF);
+
+        CriteriaEntityPersisted criterionPersisted = criteriaEntityPersistedManager.constructCriteriaPersisted(codeTypeFichier, referentielVersion, dto.getCriterion());
+        tableConf.setCriterion(criterionPersisted);
+
+        return tableConf;
+    }
+
+    private CriteriaEntityPersisted reconductCriteria(CriteriaEntityPersisted criterion) {
+
+        if (criterion != null) {
+
+            if (!criterion.getSubCriterias().isEmpty()) {
+
+                CriteriaEntityPersisted finalCriterion = new CriteriaEntityPersisted();
+                List<CriteriaEntityPersisted> subCriteria = new ArrayList<>(criterion.getSubCriterias());
+                criterion.setSubCriterias(new ArrayList<>());
+                subCriteria.stream().forEach(c -> finalCriterion.getSubCriterias().add(reconductCriteria(c)));
+
+                return finalCriterion;
+
+            } else {
+
+                CriteriaEntityPersisted finalCriterion = new CriteriaEntityPersisted();
+                finalCriterion.setNomColonne(criterion.getNomColonne());
+                finalCriterion.setOperateur(criterion.getOperateur());
+                finalCriterion.setCriteriaLogicConnector(criterion.getCriteriaLogicConnector());
+
+                finalCriterion.setCriteriaDateListValue(criterion.getCriteriaDateListValue());
+                finalCriterion.setCriteriaDateLowerBound(criterion.getCriteriaDateLowerBound());
+                finalCriterion.setCriteriaDateUpperBound(criterion.getCriteriaDateUpperBound());
+                finalCriterion.setCriteriaDateValue(criterion.getCriteriaDateValue());
+
+                finalCriterion.setCriteriaNumericListValue(criterion.getCriteriaNumericListValue());
+                finalCriterion.setCriteriaNumericValue(criterion.getCriteriaNumericValue());
+                finalCriterion.setCriteriaNumericLowerBound(criterion.getCriteriaNumericLowerBound());
+                finalCriterion.setCriteriaNumericUpperBound(criterion.getCriteriaNumericUpperBound());
+
+                finalCriterion.setCriteriaStringListValue(criterion.getCriteriaStringListValue());
+                finalCriterion.setCriteriaStringValue(criterion.getCriteriaStringValue());
+                finalCriterion.setCriteriaStringLowerBound(criterion.getCriteriaStringLowerBound());
+                finalCriterion.setCriteriaStringUpperBound(criterion.getCriteriaStringUpperBound());
+
+                return finalCriterion;
+            }
+
+        } else {
+
+            return null;
+
+        }
+    }
+
+}

--
Gitblit v1.10.0