Files
fiscad/src/main/java/io/gmss/infocad/service/ReportService.java

231 lines
11 KiB
Java

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<String, Object> 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<String, Object> 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<Structure> optionalStructure= structureRepository.findById(structureId);
if (!optionalStructure.isEmpty()) {
List<BlocsParStructureResponse> blocs=blocRepository.getBlocsParStructureResponse(structureId);
Map<String, Object> 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<Bloc> optionalBloc= blocRepository.findById(blocId);
if (!optionalBloc.isEmpty()) {
Optional<Structure> optionalStructure= structureRepository.findById(optionalBloc.get().getStructure().getId());
Optional<Arrondissement> optionalArrondissement= arrondissementRepository.findById(optionalBloc.get().getArrondissement().getId());
Optional<Commune> optionalCommune= communeRepository.findById(optionalArrondissement.get().getCommune().getId());
List<EnqueteParBlocResponse> enqueteParBlocResponses=enqueteRepository.getEnqueteByBloc(blocId, RoleActeur.PROPRIETAIRE.toString());
Map<String, Object> 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<EnqueteFiltreResponse> enqueteFiltreResponses=enqueteService.getEnqueteCommuneArrondBlocFiltre(filtreEnquetePayLoad);
Map<String, Object> 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();
}
}
}