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-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java |  254 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 254 insertions(+), 0 deletions(-)

diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java
new file mode 100644
index 0000000..128d703
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java
@@ -0,0 +1,254 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.Column;
+import com.megatim.reporting.adhoc.dto.HeaderData;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.pojo.DescriptionEtat;
+import com.megatim.reporting.adhoc.pojo.DescriptionSousEtat;
+import com.megatim.reporting.adhoc.pojo.ElementToDisplay;
+import com.megatim.reporting.adhoc.pojo.enums.ElementType;
+import com.megatim.reporting.adhoc.pojo.enums.Position;
+import com.megatim.reporting.adhoc.process.Processor;
+import com.megatim.reporting.adhoc.util.PdfUtil;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GenericReportingManagerIFaces<T, U, ID> {// T : entité de reporting, U : entité de recherche, ID : Type de l'id
+
+    public default File getTemplateFileForList() {
+        return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_LISTE).toFile();
+    }
+
+    public default File getTemplateFileForDetail() {
+        return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_DETAIL).toFile();
+    }
+
+    public default String getJasperFolder() {
+        return AppCommonContext.JASPER_DIR;
+    }
+
+    public default String exportFilesRepository() {
+        return AppCommonContext.EXPORT_DIR;
+    }
+
+    String getEntityIdName();
+
+    default String getReportName() {
+        return getClazz().getSimpleName() + new Date().getTime();
+    }
+
+    default String getSubReportName(String fieldName) {
+        return getClazz().getSimpleName() + "SousEtat" + (fieldName.charAt(0) + "").toUpperCase() + fieldName.substring(1) + new Date().getTime();
+    }
+
+    Class<T> getClazz();
+
+    List<T> getDatas(U searchEntity) throws Exception;
+
+    Map<String, Object> getParameters();
+
+    File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+    default String getVersion() {
+        return "Fdx-Consultation v1.0";
+    }
+
+    default String getLogo() {
+        return Paths.get(AppCommonContext.IMAGES_DIR, AppCommonContext.LOGO).toString();
+    }
+
+    default File generatePdf(ReportConfiguration<U> reportConfiguration, User userConnected, boolean isDetail) throws Exception {
+        File repertoire = Paths.get(exportFilesRepository()).toFile();
+
+        if (repertoire == null || !repertoire.exists()) {
+            repertoire = new File(exportFilesRepository());
+            repertoire.mkdirs();
+        }
+        if (reportConfiguration != null) {
+            DescriptionEtat descriptionEtat = getDescriptionEtat(reportConfiguration, userConnected, isDetail);
+            List<T> datas = getDatas(reportConfiguration.getSearchEntity());
+            descriptionEtat.getElementsToDisplay().addAll(getSystemElementsToDisplay(userConnected, datas, isDetail));
+
+            Map<String, Object> parameters = getParameters();
+            parameters.put("TITRE", reportConfiguration.getTitle());
+
+            if (userConnected != null) {
+                parameters.put("LOGIN_UTILISATEUR", userConnected.getUserName());
+            }
+            parameters.put("VERSION", getVersion());
+            parameters.put("LOGO_CENTRE", getLogo());
+            parameters.put("SUBREPORT_DIR", AppCommonContext.JASPER_DIR + File.separator);
+
+            String jasperFilePath = new Processor().process(descriptionEtat);
+            return PdfUtil.generatePdfFile(isDetail && datas.size() > 1 ? Arrays.asList(datas.get(0)) : datas,
+                    Paths.get(exportFilesRepository(), descriptionEtat.getReportName() + ".pdf").toString(),
+                    jasperFilePath, parameters);
+        } else {
+            return Files.createFile(Paths.get(Paths.get(exportFilesRepository(), getReportName() + ".pdf").toString())).toFile();
+        }
+
+    }
+
+    default File exportExcel(ReportConfiguration<U> reportConfiguration, User userConnected, boolean isDetail) throws Exception {
+        File repertoire = Paths.get(exportFilesRepository()).toFile();
+        ExportExcelGenerator<T> exportExcelGenerator = new ExportExcelGenerator();
+        if (repertoire == null || !repertoire.exists()) {
+            repertoire = new File(exportFilesRepository());
+            repertoire.mkdirs();
+        }
+        if (reportConfiguration != null) {
+            List<T> datas = getDatas(reportConfiguration.getSearchEntity());
+            return exportExcelGenerator.exporter(datas);
+        } else {
+            return Files.createFile(Paths.get(Paths.get(exportFilesRepository(), getReportName() + AppCommonContext.EXTENSION_EXCEL).toString())).toFile();
+        }
+    }
+
+    default DescriptionEtat getDescriptionEtat(ReportConfiguration reportConfiguration, User userConnected, boolean isDetail) {
+
+        DescriptionEtat descriptionEtat = new DescriptionEtat();
+        List<CustomField> printableFields = getCustomFields(reportConfiguration.getColumns());
+
+        descriptionEtat.setDetail(isDetail);
+        descriptionEtat.getElementsToDisplay().addAll(getElementsToDisplay(reportConfiguration.getHeaderDatas()));
+        descriptionEtat.getFieldsToDisplay().addAll(printableFields);
+        descriptionEtat.setReportName(getReportName());
+        descriptionEtat.setRepositoryFolder(getJasperFolder());
+
+        if (descriptionEtat.isDetail()) {
+            descriptionEtat.setTemplateFile(getTemplateFileForDetail());
+            descriptionEtat.setHaveLineNumber(false);
+        } else {
+            descriptionEtat.setTemplateFile(getTemplateFileForList());
+        }
+        descriptionEtat
+                .getSubReportDescriptions()
+                .addAll(getSousDescriptionSousEtats(printableFields
+                        .stream()
+                        .filter(p -> p.getClasse().isAssignableFrom(java.util.List.class) || p.getClasse().isAssignableFrom(java.util.Set.class))
+                        .collect(Collectors.toList())));
+
+        return descriptionEtat;
+    }
+
+    default List<DescriptionSousEtat> getSousDescriptionSousEtats(List<CustomField> printableListFields) {
+        List<DescriptionSousEtat> descSousEtatListe = new ArrayList<>();
+        printableListFields.stream().forEach(c -> {
+            DescriptionSousEtat descSousEtat = new DescriptionSousEtat();
+
+            descSousEtat.setDataField(c);
+            descSousEtat.setReportTitle(c.getLibelle());
+            descSousEtat.setRangSousEtat(c.getRang());
+            descSousEtat.setSubReportName(getSubReportName(c.getName()));
+            descSousEtat.getFieldsToDisplay().addAll(PrintableColumnExtractor.extractListFields(getClazz(), c));
+
+            descSousEtatListe.add(descSousEtat);
+        });
+
+        return descSousEtatListe;
+    }
+
+    default List<ElementToDisplay> getElementsToDisplay(List<HeaderData> headerDatas) {
+        List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+        headerDatas.stream().forEach(h -> {
+            ElementToDisplay elt = new ElementToDisplay(h.getLibelle(), h.getValue());
+            try {
+                elt.setPosition(Position.of(h.getPosition()));
+            } catch (Exception ex) {
+
+            }
+            eltsToDisplay.add(elt);
+        });
+        return eltsToDisplay;
+    }
+
+    default List<ElementToDisplay> getSystemElementsToDisplay(User userConnected, List<T> datas, boolean isDetail) {
+        List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+
+        ElementToDisplay elt = new ElementToDisplay("Edité le", "");
+        elt.setElementType(ElementType.DATE_GENERE);
+        elt.setPosition(Position.RIGHT);
+        eltsToDisplay.add(elt);
+
+        if (!isDetail) {
+            elt = new ElementToDisplay("Nombre Total", datas.size() + "");
+            eltsToDisplay.add(elt);
+        }
+
+        elt = new ElementToDisplay("Edité par", userConnected != null ? userConnected.getUserName() : "");
+        elt.setPosition(Position.RIGHT);
+        eltsToDisplay.add(elt);
+
+        return eltsToDisplay;
+    }
+
+    default List<CustomField> getCustomFields(List<Column> columns) {
+        List<CustomField> customFields = new ArrayList<>();
+        List<CustomField> printableFields = PrintableColumnExtractor.extract(getClazz());
+
+        columns.stream().forEach(c -> {
+            printableFields.stream().filter(p -> p.getLibelle().equals(c.getLibelle())).findFirst().ifPresent(p -> {
+                p.setRang(c.getRang());
+                customFields.add(p);
+            });
+
+        });
+        return customFields;
+    }
+
+    public default CriteriaFormRequest getExportOneCriterion(ID id) {
+        CriteriaFormRequest formRequest = new CriteriaFormRequest();
+        CriteriaEntityFromView fromView = new CriteriaEntityFromView();
+        fromView.setCriteriaValue(id);
+        fromView.setNomColonne(getEntityIdName());
+        fromView.setOperateur(Operateur.EQUALS);
+        formRequest.setCriteria(fromView);
+        return formRequest;
+    }
+
+    public default ReportConfiguration<CriteriaEntityFromView> finalReportConfiguration(ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+        ReportConfiguration<CriteriaEntityFromView> finalConfig = null;
+
+        if (reportConfiguration != null) {
+            finalConfig = new ReportConfiguration();
+            finalConfig.setSearchEntity(reportConfiguration.getSearchEntity() != null ? reportConfiguration.getSearchEntity().getCriteria() : null);
+            finalConfig.setTitle(reportConfiguration.getTitle());
+            finalConfig.getColumns().addAll(reportConfiguration.getColumns());
+            finalConfig.getHeaderDatas().addAll(reportConfiguration.getHeaderDatas());
+        }
+        return finalConfig;
+    }
+
+    public default Response downloadFile(File file) {
+        Response.ResponseBuilder response = Response.ok((Object) file);
+        response.header("Content-Disposition", "attachment;filename=" + file.getName());
+        return response.build();
+
+    }
+
+}

--
Gitblit v1.10.0