package br.com.centralit.citcorpore.ajaxForms;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.fill.JRAbstractLRUVirtualizer;
import net.sf.jasperreports.engine.fill.JRSwapFileVirtualizer;
import net.sf.jasperreports.engine.util.JRSwapFile;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citajax.html.HTMLSelect;
import br.com.centralit.citcorpore.bean.RelatorioCausaSolucaoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.negocio.CategoriaSolucaoService;
import br.com.centralit.citcorpore.negocio.CausaIncidenteService;
import br.com.centralit.citcorpore.negocio.ContratoService;
import br.com.centralit.citcorpore.negocio.GrupoService;
import br.com.centralit.citcorpore.negocio.SolicitacaoServicoService;
import br.com.centralit.citcorpore.negocio.TipoDemandaServicoService;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico;
import br.com.centralit.citcorpore.util.LogoRel;
import br.com.centralit.citcorpore.util.UtilRelatorio;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilI18N;
@SuppressWarnings({ "rawtypes" })
public class RelatorioCausaSolucao extends SolicitacaoServicoMultiContratos{
UsuarioDTO usuario;
@Override
public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
usuario = WebUtil.getUsuario(request);
if (usuario == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.sessaoExpirada"));
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
document.getSelectById("idContrato").removeAllOptions();
ContratoService contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, null);
Collection colContrato = contratoService.list();
document.getSelectById("idContrato").addOption("", "-- " + UtilI18N.internacionaliza(request, "citcorpore.comum.todos") + " --");
document.getSelectById("idContrato").addOptions(colContrato, "idContrato", "numero", null);
document.getSelectById("idTipoDemandaServico").removeAllOptions();
TipoDemandaServicoService tipoServicoService = (TipoDemandaServicoService) ServiceLocator.getInstance().getService(TipoDemandaServicoService.class, null);
Collection colTipos = tipoServicoService.listSolicitacoes();
document.getSelectById("idTipoDemandaServico").addOption("", "-- " + UtilI18N.internacionaliza(request, "citcorpore.comum.todos") + " --");
document.getSelectById("idTipoDemandaServico").addOptions(colTipos, "idTipoDemandaServico", "nomeTipoDemandaServico", null);
HTMLSelect comboSituacao = document.getSelectById("situacao");
comboSituacao.removeAllOptions();
comboSituacao.addOption("", "-- " + UtilI18N.internacionaliza(request, "citcorpore.comum.todos") + " --");
for (SituacaoSolicitacaoServico situacao : SituacaoSolicitacaoServico.values()) {
if (situacao.name().equalsIgnoreCase("cancelada") || situacao.name().equalsIgnoreCase("fechada")) {
comboSituacao.addOption(situacao.name(), UtilI18N.internacionaliza(request, "solicitacaoServico.situacao." + situacao.name()));
}
}
HTMLSelect comboGrupo1 = document.getSelectById("primeiraListaGrupo");
comboGrupo1.removeAllOptions();
GrupoService grupoService = (GrupoService) ServiceLocator.getInstance().getService(GrupoService.class, null);
Collection colGrupo = grupoService.listaGruposAtivos();
comboGrupo1.addOptions(colGrupo, "idGrupo", "Nome", null);
HTMLSelect comboCausa1 = document.getSelectById("primeiraListaCausa");
comboCausa1.removeAllOptions();
CausaIncidenteService causaService = (CausaIncidenteService) ServiceLocator.getInstance().getService(CausaIncidenteService.class, null);
Collection colCausas = causaService.listaCausasAtivas();
comboCausa1.addOptions(colCausas, "idCausaIncidente", "DescricaoCausa", null);
HTMLSelect comboSolucao1 = document.getSelectById("primeiraListaSolucao");
comboSolucao1.removeAllOptions();
CategoriaSolucaoService solucaoService = (CategoriaSolucaoService) ServiceLocator.getInstance().getService(CategoriaSolucaoService.class, null);
Collection colSolucao = solucaoService.listaCategoriasSolucaoAtivas();
comboSolucao1.addOptions(colSolucao, "idCategoriaSolucao", "DescricaoCategoriaSolucao", null);
}
@Override
public Class getBeanClass() {
return RelatorioCausaSolucaoDTO.class;
}
public void gerarCausaSolucaoGraficoBarras(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
usuario = WebUtil.getUsuario(request);
RelatorioCausaSolucaoDTO relatorioCausaSolucaoDto = (RelatorioCausaSolucaoDTO) document.getBean();
SolicitacaoServicoService solicitacaoServicoService = (SolicitacaoServicoService)ServiceLocator.getInstance().getService(SolicitacaoServicoService.class, null);
Collection<RelatorioCausaSolucaoDTO> listaCausaSolicitacao = solicitacaoServicoService.listaCausaSolicitacao(relatorioCausaSolucaoDto);
Collection<RelatorioCausaSolucaoDTO> listaSolucaoSolicitacao = solicitacaoServicoService.listaSolucaoSolicitacao(relatorioCausaSolucaoDto);
if(listaCausaSolicitacao == null){
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioVazio"));
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
DefaultPieDataset datasetCausa = new DefaultPieDataset();
Double totalCausas = 0.0;
Double percentCausa = 0.0;
for (RelatorioCausaSolucaoDTO lstCausaSol : listaCausaSolicitacao) {
if (lstCausaSol != null) totalCausas += lstCausaSol.getNumeroSolicitacoes();
}
for (RelatorioCausaSolucaoDTO lstCausaSol : listaCausaSolicitacao) {
if (lstCausaSol != null) {
percentCausa = (double) Math.round((lstCausaSol.getNumeroSolicitacoes()/totalCausas)*100);
if (lstCausaSol.getDescricaoCausa() != null && !lstCausaSol.getDescricaoCausa().equals("")) {
datasetCausa.setValue(lstCausaSol.getDescricaoCausa() + " (" + lstCausaSol.getNumeroSolicitacoes() + " - " + percentCausa + "%)", percentCausa);
} else {
datasetCausa.setValue(UtilI18N.internacionaliza(request, "relatorioCausaSolucao.semCausa") + " (" + lstCausaSol.getNumeroSolicitacoes() + " - " + percentCausa + "%)", percentCausa);
}
}
}
DefaultPieDataset datasetSolucao = new DefaultPieDataset();
Double totalSolucoes = 0.0;
Double percentSolucoes = 0.0;
for (RelatorioCausaSolucaoDTO lstSolucaoSol : listaSolucaoSolicitacao) {
if (lstSolucaoSol != null) totalSolucoes += lstSolucaoSol.getNumeroSolicitacoes();
}
for (RelatorioCausaSolucaoDTO lstSolucaoSol : listaSolucaoSolicitacao) {
if (lstSolucaoSol != null) {
percentSolucoes = (double) Math.round((lstSolucaoSol.getNumeroSolicitacoes()/totalSolucoes)*100);
if (lstSolucaoSol.getDescricaoCategoriaSolucao() != null && !lstSolucaoSol.getDescricaoCategoriaSolucao().equals("")) {
datasetSolucao.setValue(lstSolucaoSol.getDescricaoCategoriaSolucao() + " (" + lstSolucaoSol.getNumeroSolicitacoes() + " - " + percentSolucoes + "%)", percentSolucoes);
} else {
datasetSolucao.setValue(UtilI18N.internacionaliza(request, "relatorioCausaSolucao.semSolucao") + " (" + lstSolucaoSol.getNumeroSolicitacoes() + " - " + percentSolucoes + "%)", percentSolucoes);
}
}
}
if (datasetCausa.getItemCount() == 0 && datasetSolucao.getItemCount() == 0) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioVazio"));
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
JFreeChart pieChartCausa = ChartFactory.createPieChart(UtilI18N.internacionaliza(request, "relatorioCausaSolucao.causa"), datasetCausa, true, true, false);
JFreeChart pieChartSolucao = ChartFactory.createPieChart(UtilI18N.internacionaliza(request, "relatorioCausaSolucao.solucao"), datasetSolucao, true, true, false);
File fileCausa = null;
File fileSolucao = null;
try {
String diretorioRelativoOSCausa = CITCorporeUtil.CAMINHO_REAL_APP + "tempFiles" + "/ChartCausa.png";
fileCausa = new File(diretorioRelativoOSCausa);
ChartUtilities.saveChartAsPNG(fileCausa, pieChartCausa, 520, 675);
String diretorioRelativoOSSolucao = CITCorporeUtil.CAMINHO_REAL_APP + "tempFiles" + "/ChartSolucao.png";
fileSolucao = new File(diretorioRelativoOSSolucao);
ChartUtilities.saveChartAsPNG(fileSolucao, pieChartSolucao, 520, 675);
} catch (IOException e) {
System.err.println("Problem occurred creating chart.");
}
Map<String, Object> parametros = new HashMap<String, Object>();
HttpSession session = request.getSession(true);
parametros = UtilRelatorio.trataInternacionalizacaoLocale(session, parametros);
parametros.put("TITULO_RELATORIO", UtilI18N.internacionaliza(request, "relatorioCausaSolucao.titulo"));
parametros.put("NOME_USUARIO", usuario.getNomeUsuario());
parametros.put("CIDADE", UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioCidade"));
parametros.put("DATA_HORA", UtilDatas.getDataHoraAtual());
parametros.put("dataInicio", relatorioCausaSolucaoDto.getDataInicio());
parametros.put("dataFim", relatorioCausaSolucaoDto.getDataFim());
parametros.put("Logo", LogoRel.getFile());
Date dt = new Date();
String strCompl = "" + dt.getTime();
parametros.put("ChartCausa", fileCausa);
parametros.put("ChartSolucao", fileSolucao);
String caminhoJasper = CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioCausaSolucaoGraficoBarras.jasper";
String diretorioReceita = CITCorporeUtil.CAMINHO_REAL_APP + "/tempFiles";
String diretorioRelativoOS = Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/tempFiles";
if (relatorioCausaSolucaoDto != null && relatorioCausaSolucaoDto.getGenerationType() != null) {
if (relatorioCausaSolucaoDto.getGenerationType().equalsIgnoreCase("xls")) {
JasperDesign desenho = JRXmlLoader.load(CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioCausaSolucaoGraficoBarras.jrxml");
JasperReport relatorio = JasperCompileManager.compileReport(desenho);
JasperPrint impressao = JasperFillManager.fillReport(relatorio, parametros);
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, impressao);
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME, diretorioReceita + "/RelatorioCausaSolucaoGraficoBarras" + strCompl + ".xls");
exporter.exportReport();
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url=" + diretorioRelativoOS
+ "/RelatorioCausaSolucaoGraficoBarras" + strCompl + ".xls')");
} else {
JasperPrint print = JasperFillManager.fillReport(caminhoJasper, parametros);
JasperExportManager.exportReportToPdfFile(print, diretorioReceita + "/RelatorioCausaSolucaoGraficoBarras" + strCompl + ".pdf");
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url=" + diretorioRelativoOS
+ "/RelatorioCausaSolucaoGraficoBarras" + strCompl + ".pdf')");
}
}
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
}
public void gerarCausaSolucaoAnalitico(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
usuario = WebUtil.getUsuario(request);
RelatorioCausaSolucaoDTO relatorioCausaSolucaoDto = (RelatorioCausaSolucaoDTO) document.getBean();
SolicitacaoServicoService solicitacaoServicoService = (SolicitacaoServicoService)ServiceLocator.getInstance().getService(SolicitacaoServicoService.class, null);
Collection<RelatorioCausaSolucaoDTO> listaCausaSolucaoSolicitacao = solicitacaoServicoService.listaCausaSolucaoAnalitico(relatorioCausaSolucaoDto);
Collection<RelatorioCausaSolucaoDTO> listDadosRelatorio = new ArrayList<RelatorioCausaSolucaoDTO>();
if (listaCausaSolucaoSolicitacao != null) {
for (RelatorioCausaSolucaoDTO porSolicitacao : listaCausaSolucaoSolicitacao) {
if (porSolicitacao.getDescricaoCausa() == null || porSolicitacao.getDescricaoCausa().equalsIgnoreCase("")) {
porSolicitacao.setDescricaoCausa(UtilI18N.internacionaliza(request, "relatorioCausaSolucao.semCausa"));
}
if (porSolicitacao.getDescricaoCategoriaSolucao() == null || porSolicitacao.getDescricaoCategoriaSolucao().equalsIgnoreCase("")) {
porSolicitacao.setDescricaoCategoriaSolucao(UtilI18N.internacionaliza(request, "relatorioCausaSolucao.semSolucao"));
}
listDadosRelatorio.add(porSolicitacao);
}
}
if (listDadosRelatorio.size() == 0) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioVazio"));
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
Map<String, Object> parametros = new HashMap<String, Object>();
HttpSession session = request.getSession(true);
parametros = UtilRelatorio.trataInternacionalizacaoLocale(session, parametros);
parametros.put("TITULO_RELATORIO", UtilI18N.internacionaliza(request, "relatorioCausaSolucao.titulo"));
parametros.put("NOME_USUARIO", usuario.getNomeUsuario());
parametros.put("CIDADE", UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioCidade"));
parametros.put("DATA_HORA", UtilDatas.getDataHoraAtual());
parametros.put("dataInicio", relatorioCausaSolucaoDto.getDataInicio());
parametros.put("dataFim", relatorioCausaSolucaoDto.getDataFim());
parametros.put("Logo", LogoRel.getFile());
Date dt = new Date();
String strCompl = "" + dt.getTime();
String caminhoJasper = CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioCausaSolucaoAnalitico.jasper";
String diretorioReceita = CITCorporeUtil.CAMINHO_REAL_APP + "/tempFiles";
String diretorioRelativoOS = Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/tempFiles";
JRDataSource dataSource = new JRBeanCollectionDataSource(listDadosRelatorio);
if (relatorioCausaSolucaoDto != null && relatorioCausaSolucaoDto.getGenerationType() != null) {
if (relatorioCausaSolucaoDto.getGenerationType().equalsIgnoreCase("xls")) {
JasperDesign desenho = JRXmlLoader.load(CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioCausaSolucaoAnalitico.jrxml");
JasperReport relatorio = JasperCompileManager.compileReport(desenho);
JasperPrint impressao = JasperFillManager.fillReport(relatorio, parametros, dataSource);
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, impressao);
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME, diretorioReceita + "/RelatorioCausaSolucaoAnalitico" + strCompl + ".xls");
exporter.exportReport();
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url="
+ diretorioRelativoOS + "/RelatorioCausaSolucaoAnalitico" + strCompl + ".xls')");
} else {
try
{
JRSwapFile arquivoSwap = new JRSwapFile(diretorioReceita, 4096, 25);
JRAbstractLRUVirtualizer virtualizer = new JRSwapFileVirtualizer(25, arquivoSwap, true);
parametros.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
JasperPrint print = JasperFillManager.fillReport(caminhoJasper, parametros, dataSource);
//JasperViewer.viewReport(print,false);
JasperExportManager.exportReportToPdfFile(print, diretorioReceita + "/RelatorioCausaSolucaoAnalitico" + strCompl + ".pdf");
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url="
+ diretorioRelativoOS + "/RelatorioCausaSolucaoAnalitico" + strCompl + ".pdf')");
} catch(OutOfMemoryError e) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.erro.erroServidor"));
}
}
}
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
}
public void preencherComboGrupo(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
RelatorioCausaSolucaoDTO relatorioCausaSolucaoDto = (RelatorioCausaSolucaoDTO) document.getBean();
HTMLSelect comboGrupo1 = document.getSelectById("primeiraListaGrupo");
HTMLSelect comboGrupo2 = document.getSelectById("segundaListaGrupo");
HTMLSelect servicos = document.getSelectById("listaServico");
servicos.removeAllOptions();
comboGrupo1.removeAllOptions();
comboGrupo2.removeAllOptions();
GrupoService grupoService = (GrupoService) ServiceLocator.getInstance().getService(GrupoService.class, null);
Collection colGrupo;
if (relatorioCausaSolucaoDto != null && relatorioCausaSolucaoDto.getIdContrato() != null) {
colGrupo = grupoService.listGrupoByIdContrato(relatorioCausaSolucaoDto.getIdContrato());
} else {
colGrupo = grupoService.listaGruposAtivos();
}
comboGrupo1.addOptions(colGrupo, "idGrupo", "Nome", null);
}
}