package io.gmss.infocad.service; import io.gmss.infocad.entities.decoupage.Arrondissement; import io.gmss.infocad.entities.decoupage.Commune; import io.gmss.infocad.entities.infocad.metier.EnqueteFiltreResponse; import io.gmss.infocad.entities.infocad.parametre.Bloc; import io.gmss.infocad.entities.infocad.parametre.Structure; import io.gmss.infocad.enums.FormatRapport; import io.gmss.infocad.enums.RoleActeur; import io.gmss.infocad.interfaces.infocad.metier.EnqueteService; import io.gmss.infocad.paylaods.request.FiltreEnquetePayLoad; import io.gmss.infocad.paylaods.response.report.BlocsParStructureResponse; import io.gmss.infocad.paylaods.response.report.EnqueteParBlocResponse; import io.gmss.infocad.repositories.decoupage.ArrondissementRepository; import io.gmss.infocad.repositories.decoupage.CommuneRepository; import io.gmss.infocad.repositories.infocad.metier.EnqueteRepository; import io.gmss.infocad.repositories.infocad.parametre.BlocRepository; import io.gmss.infocad.repositories.infocad.parametre.StructureRepository; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter; import net.sf.jasperreports.export.SimpleExporterInput; import net.sf.jasperreports.export.SimplePdfExporterConfiguration; import net.sf.jasperreports.export.SimplePdfReportConfiguration; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @Service public class ReportService { private final BlocRepository blocRepository; private final CommuneRepository communeRepository; private final ArrondissementRepository arrondissementRepository; private final EnqueteRepository enqueteRepository; private final StructureRepository structureRepository; private final EnqueteService enqueteService; @Value("${file.jasper-reports}") private String jaspersDir; private final ResourceLoader resourceLoader; public ReportService(BlocRepository blocRepository, CommuneRepository communeRepository, ArrondissementRepository arrondissementRepository, EnqueteRepository enqueteRepository, StructureRepository structureRepository, EnqueteService enqueteService, ResourceLoader resourceLoader) { this.blocRepository = blocRepository; this.communeRepository = communeRepository; this.arrondissementRepository = arrondissementRepository; this.enqueteRepository = enqueteRepository; this.structureRepository = structureRepository; this.enqueteService = enqueteService; this.resourceLoader = resourceLoader; } public void printPDF(HttpServletResponse response, Map parameters, String jaspers, String fileName, List data) throws JRException, IOException { try { parameters.put("logoGauche", getJaspersDir()+"/andf.png"); // parameters.put("logoArcep",imageDir+"/logo-arcep.png" ); InputStream stream = getStream(getJaspersDir()+ jaspers); JRDataSource dataSource = new JRBeanCollectionDataSource(data, false); JasperPrint jasperPrint = JasperFillManager.fillReport(stream, parameters, dataSource); JRPdfExporter exporter = new JRPdfExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); SimplePdfReportConfiguration reportConfig = new SimplePdfReportConfiguration(); reportConfig.setSizePageToContent(true); reportConfig.setForceLineBreakPolicy(false); SimplePdfExporterConfiguration exportConfig = new SimplePdfExporterConfiguration(); exportConfig.setMetadataAuthor("ANDF"); exportConfig.setEncrypted(true); exportConfig.setAllowedPermissionsHint("PRINTING"); exporter.setConfiguration(reportConfig); exporter.setConfiguration(exportConfig); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", String.format("attachment; filename=\"" + fileName + ".pdf\"")); OutputStream out = response.getOutputStream(); JasperExportManager.exportReportToPdfStream(jasperPrint, out); } catch (Exception e) { e.printStackTrace(); } } public void printXLSX(HttpServletResponse response, Map parameters, String jaspers, String fileName, List data) throws SQLException, JRException, IOException { ServletOutputStream servletOutputStream = response.getOutputStream(); //parameters.put("logoMEF", imageDir+"/logo_mef-transparent.png"); // parameters.put("logoArcep",imageDir+"/logo-arcep.png" ); parameters.put("logoGauche", getJaspersDir()+"/andf.png"); // parameters.put("logoArcep",imageDir+"/logo-arcep.png" ); InputStream stream = getStream(getJaspersDir()+ jaspers); JRDataSource dataSource = new JRBeanCollectionDataSource(data, false); JasperPrint jasperPrint = JasperFillManager.fillReport(stream, parameters, dataSource); //JRPdfExporter exporter = new JRPdfExporter(); //exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); SimplePdfReportConfiguration reportConfig = new SimplePdfReportConfiguration(); reportConfig.setSizePageToContent(true); reportConfig.setForceLineBreakPolicy(false); SimplePdfExporterConfiguration exportConfig = new SimplePdfExporterConfiguration(); exportConfig.setMetadataAuthor("ARCEP"); exportConfig.setEncrypted(true); exportConfig.setAllowedPermissionsHint("PRINTING"); //exporter.setConfiguration(reportConfig); //exporter.setConfiguration(exportConfig); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", String.format("attachment; filename=\"" + fileName + ".xlsx\"")); JRXlsxExporter docxExporter = new JRXlsxExporter(); docxExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); docxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, servletOutputStream); docxExporter.exportReport(); } public InputStream getStream(String fileName) throws IOException { File initialFile = new File(fileName); InputStream stream = new FileInputStream(initialFile); return stream; } private String getResourcePath(String fileName) throws IOException { return resourceLoader.getResource("classpath:" + fileName).getFile().getAbsolutePath(); } public String getJaspersDir() { return jaspersDir; } public void imprimerBlocsStructure(HttpServletResponse response, FormatRapport formatRapport, Long structureId) { try { Optional optionalStructure= structureRepository.findById(structureId); if (!optionalStructure.isEmpty()) { List blocs=blocRepository.getBlocsParStructureResponse(structureId); Map parameters = new HashMap(); parameters.put("structure",optionalStructure.get().getNom()); try { String jaspers = "/listBlocParStructure.jasper"; if(formatRapport.equals(FormatRapport.PDF)){ printPDF(response, parameters, jaspers, "blocs.pdf", blocs); } if(formatRapport.equals(FormatRapport.XLS)){ printXLSX(response, parameters, jaspers, "blocs.xlsx", blocs); } } catch (IOException e) { e.printStackTrace(); } catch (JRException e) { e.printStackTrace(); } } else { System.out.printf("Structure inexistante"); } } catch (Exception e) { e.printStackTrace(); } } public void imprimerEnqueteParBloc(HttpServletResponse response, FormatRapport formatRapport, Long blocId) { try { Optional optionalBloc= blocRepository.findById(blocId); if (!optionalBloc.isEmpty()) { Optional optionalStructure= structureRepository.findById(optionalBloc.get().getStructure().getId()); Optional optionalArrondissement= arrondissementRepository.findById(optionalBloc.get().getArrondissement().getId()); Optional optionalCommune= communeRepository.findById(optionalArrondissement.get().getCommune().getId()); List enqueteParBlocResponses=enqueteRepository.getEnqueteByBloc(blocId, RoleActeur.PROPRIETAIRE.toString()); Map parameters = new HashMap(); parameters.put("structure",optionalStructure.get().getNom()); parameters.put("bloc",optionalBloc.get().getNom()); parameters.put("commune",optionalCommune.get().getNom()); parameters.put("arrondissement",optionalArrondissement.get().getNom()); try { String jaspers = "/listEnqueteParBloc.jasper"; if(formatRapport.equals(FormatRapport.PDF)){ printPDF(response, parameters, jaspers, "listEnqueteParBloc.pdf", enqueteParBlocResponses); } if(formatRapport.equals(FormatRapport.XLS)){ printXLSX(response, parameters, jaspers, "listEnqueteParBloc.xlsx", enqueteParBlocResponses); } } catch (IOException e) { e.printStackTrace(); } catch (JRException e) { e.printStackTrace(); } } else { System.out.printf("Structure inexistante"); } } catch (Exception e) { e.printStackTrace(); } } public void imprimerEnqueteParFiltre(HttpServletResponse response, FiltreEnquetePayLoad filtreEnquetePayLoad,FormatRapport formatRapport) { try { List enqueteFiltreResponses=enqueteService.getEnqueteCommuneArrondBlocFiltre(filtreEnquetePayLoad); Map parameters = new HashMap(); try { String jaspers = "/listEnqueteParFiltre.jasper"; if(formatRapport.equals(FormatRapport.PDF)){ printPDF(response, parameters, jaspers, "listEnqueteParFiltre.pdf", enqueteFiltreResponses); } if(formatRapport.equals(FormatRapport.XLS)){ printXLSX(response, parameters, jaspers, "listEnqueteParFiltre.xlsx", enqueteFiltreResponses); } } catch (IOException e) { e.printStackTrace(); } catch (JRException e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } }