package br.com.centralit.citcorpore.ajaxForms;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
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 br.com.centralit.citajax.html.AjaxFormAction;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citcorpore.bean.ContratoDTO;
import br.com.centralit.citcorpore.bean.RelatorioValorServicoContratoDTO;
import br.com.centralit.citcorpore.bean.ServicoContratoDTO;
import br.com.centralit.citcorpore.bean.ServicoDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.bean.ValoresServicoContratoDTO;
import br.com.centralit.citcorpore.negocio.ContratoService;
import br.com.centralit.citcorpore.negocio.ServicoContratoService;
import br.com.centralit.citcorpore.negocio.ServicoService;
import br.com.centralit.citcorpore.negocio.SolicitacaoServicoService;
import br.com.centralit.citcorpore.negocio.ValoresServicoContratoService;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
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.excecao.ServiceException;
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", "unused", "unchecked"})
public class RelatorioValorServicoContrato extends AjaxFormAction {
UsuarioDTO usuario;
private String localeSession = null;
@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;
}
// Preenchendo a combobox de contratos.
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);
/*
* A partir desse ponto, a rotina vai pegar o primeiro contrato (que ser� o primeiro do combox, j� selecionado)
* e ir� carregar os seus servi�os.
*/
Integer primeiroIdContrato = null;
for (ContratoDTO contratoDto : (Collection<ContratoDTO>) colContrato) {
primeiroIdContrato = contratoDto.getIdContrato();
break;
}
document.getSelectById("idServico").removeAllOptions();
ServicoService servicoService = (ServicoService) ServiceLocator.getInstance().getService(ServicoService.class, null);
document.getSelectById("idServico").addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.todos") );
document.getSelectById("idServico").addOptions(this.carregaServicosDoContrato(primeiroIdContrato), "idServico", "nomeServico", null);
}
/**
* Utilizado para retornar um ArrayList dos servi�os de um contrato
* @param idContrato
* @return ArrayList
* @throws ServiceException
* @throws Exception
*/
public ArrayList<ServicoDTO> carregaServicosDoContrato(Integer idContrato) throws ServiceException, Exception {
Collection servicos = new ArrayList<ServicoDTO>();
ServicoContratoService servicoContratoService = (ServicoContratoService) ServiceLocator.getInstance().getService(ServicoContratoService.class, null);
if (idContrato != null && servicoContratoService != null) {
Collection<ServicoContratoDTO> servicoContrato = servicoContratoService.findByIdContrato(idContrato);
if (servicoContrato != null) {
ServicoService servicoService = (ServicoService) ServiceLocator.getInstance().getService(ServicoService.class, null);
if (servicoService != null) {
for (ServicoContratoDTO sc : servicoContrato) {
if (sc.getIdServico() != null) {
ServicoDTO s = new ServicoDTO();
s.setIdServico(sc.getIdServico() );
Collection<ServicoDTO> s1 = new ArrayList();
s1 = (Collection<ServicoDTO>) servicoService.find(s);
if(s1 != null){
s = s1.iterator().next();
servicos.add(s);
}
}
}
}
}
}
return (ArrayList<ServicoDTO>) servicos;
}
public void preencherComboboxServico(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
ValoresServicoContratoDTO valoresServicoContratoDTO = (ValoresServicoContratoDTO) document.getBean();
Collection servicos = new ArrayList<ServicoDTO>();
if (valoresServicoContratoDTO != null && valoresServicoContratoDTO.getIdContrato() != null) {
servicos = this.carregaServicosDoContrato(valoresServicoContratoDTO.getIdContrato());
}
// Preenchendo a combobox de servi�os.
document.getSelectById("idServico").removeAllOptions();
ServicoService servicoService = (ServicoService) ServiceLocator.getInstance().getService(ServicoService.class, null);
document.getSelectById("idServico").addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.todos") );
document.getSelectById("idServico").addOptions(servicos, "idServico", "nomeServico", null);
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
}
@Override
public Class getBeanClass() {
return ValoresServicoContratoDTO.class;
}
/**
* Faz a impress�o do relat�rio no formato pdf.
*
* @param document
* @param request
* @param response
* @throws Exception
* @author Flavio.santana
*/
public void imprimirRelatorioValorServicoContrato(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
ValoresServicoContratoDTO valoresServicoContratoDTO = (ValoresServicoContratoDTO) document.getBean();
HttpSession session = ((HttpServletRequest) request).getSession();
ValoresServicoContratoService valoresServicoContratoService = (ValoresServicoContratoService) ServiceLocator.getInstance().getService(ValoresServicoContratoService.class, null);
ServicoDTO servicoDto = new ServicoDTO();
ServicoService servicoService = (ServicoService) ServiceLocator.getInstance().getService(ServicoService.class, null);
ContratoDTO contratoDto = new ContratoDTO();
ContratoService contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, null);
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() + "'");
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
if (valoresServicoContratoDTO.getIdValorServicoContrato() == null) {
if (valoresServicoContratoDTO.getDataInicio() == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.validacao.datainicio") );
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
if (valoresServicoContratoDTO.getDataFim() == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.validacao.datafim") );
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
}
BigDecimal valorTotalGeral = new BigDecimal(0.0);
BigDecimal valorTotal = new BigDecimal(0.0);
Integer qtde = new Integer(0);
RelatorioValorServicoContratoDTO relatorioQuantitativoSolicitacaoDto = null;
Collection<RelatorioValorServicoContratoDTO> listDadosRelatorio = new ArrayList<RelatorioValorServicoContratoDTO>();
List<RelatorioValorServicoContratoDTO> list = (List<RelatorioValorServicoContratoDTO>) valoresServicoContratoService.listaValoresServicoContrato(valoresServicoContratoDTO) ;
if (list != null) {
SolicitacaoServicoService solicitacaoServicoService = (SolicitacaoServicoService) ServiceLocator.getInstance().getService(SolicitacaoServicoService.class, null);
for (RelatorioValorServicoContratoDTO porServico : list) {
SolicitacaoServicoDTO sol= null;
sol = solicitacaoServicoService.obterQuantidadeSolicitacoesServico(porServico.getIdServicoContrato(), porServico.getDataInicio(), (porServico.getDataFim() == null ? UtilDatas.getDataAtual() : porServico.getDataFim() ) );
if (sol != null && sol.getQuantidade() > 0) {
relatorioQuantitativoSolicitacaoDto = new RelatorioValorServicoContratoDTO();
valorTotal = (porServico.getValorServico().multiply(new BigDecimal(sol.getQuantidade() ) ) );
valorTotalGeral = valorTotalGeral.add(valorTotal);
relatorioQuantitativoSolicitacaoDto.setNomeServico(porServico.getNomeServico() );
relatorioQuantitativoSolicitacaoDto.setQuantidade(sol.getQuantidade() );
relatorioQuantitativoSolicitacaoDto.setTotalValorServico(valorTotal);
relatorioQuantitativoSolicitacaoDto.setValorServico(porServico.getValorServico() );
relatorioQuantitativoSolicitacaoDto.setTotalGeral(valorTotalGeral);
listDadosRelatorio.add(relatorioQuantitativoSolicitacaoDto);
}
}
}
Date dt = new Date();
String strCompl = "" + dt.getTime();
String caminhoJasper = CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioValorServicoContrato.jasper";
String diretorioReceita = CITCorporeUtil.CAMINHO_REAL_APP + "/tempFiles";
String diretorioRelativoOS = Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/tempFiles";
Map<String, Object> parametros = new HashMap<String, Object>();
parametros = UtilRelatorio.trataInternacionalizacaoLocale(session, parametros);
parametros.put("TITULO_RELATORIO", UtilI18N.internacionaliza(request, "relatorioValorServicoContrato.titulo") );
parametros.put("CIDADE", UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioCidade") );
parametros.put("DATA_HORA", UtilDatas.getDataHoraAtual() );
parametros.put("NOME_USUARIO", usuario.getNomeUsuario() );
parametros.put("dataInicio", valoresServicoContratoDTO.getDataInicio() );
parametros.put("dataFim", valoresServicoContratoDTO.getDataFim() );
parametros.put("Logo", LogoRel.getFile());
if(valoresServicoContratoDTO.getIdContrato()!=null){
contratoDto.setIdContrato(valoresServicoContratoDTO.getIdContrato());
contratoDto = (ContratoDTO) contratoService.restore(contratoDto);
parametros.put("contrato", contratoDto.getNumero());
}
if (listDadosRelatorio.size() == 0) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioVazio") );
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
try
{
JRDataSource dataSource = new JRBeanCollectionDataSource(listDadosRelatorio);
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 + "/RelatorioValorServicoContrato" + strCompl + "_" + usuario.getIdUsuario() + ".pdf");
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url="
+ diretorioRelativoOS + "/RelatorioValorServicoContrato" + strCompl + "_" + usuario.getIdUsuario() + ".pdf')");
} catch(OutOfMemoryError e) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.erro.erroServidor"));
}
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
}
/**
* Faz a impress�o do relat�rio no formato xls.
*
* @param document
* @param request
* @param response
* @throws Exception
* @author Flavio.santana
*/
public void imprimirRelatorioValorServicoContratoXls(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
ValoresServicoContratoDTO valoresServicoContratoDTO = (ValoresServicoContratoDTO) document.getBean();
HttpSession session = ((HttpServletRequest) request).getSession();
ValoresServicoContratoService valoresServicoContratoService = (ValoresServicoContratoService) ServiceLocator.getInstance().getService(ValoresServicoContratoService.class, null);
ServicoDTO servicoDto = new ServicoDTO();
ServicoService ServicoService = (ServicoService) ServiceLocator.getInstance().getService(ServicoService.class, null);
ContratoDTO contratoDto = new ContratoDTO();
ContratoService contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, null);
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() + "'");
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
if (valoresServicoContratoDTO.getIdValorServicoContrato() == null) {
if (valoresServicoContratoDTO.getDataInicio() == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.validacao.datainicio") );
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
if (valoresServicoContratoDTO.getDataFim() == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.validacao.datafim") );
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
}
BigDecimal valorTotalGeral = new BigDecimal(0.0);
BigDecimal valorTotal = new BigDecimal(0.0);
Integer qtde = new Integer(0);
RelatorioValorServicoContratoDTO relatorioQuantitativoSolicitacaoDto = null;
Collection<RelatorioValorServicoContratoDTO> listDadosRelatorio = new ArrayList<RelatorioValorServicoContratoDTO>();
List<RelatorioValorServicoContratoDTO> list = (List<RelatorioValorServicoContratoDTO>) valoresServicoContratoService.listaValoresServicoContrato(valoresServicoContratoDTO) ;
if (list != null) {
SolicitacaoServicoService solicitacaoServicoService = (SolicitacaoServicoService) ServiceLocator.getInstance().getService(SolicitacaoServicoService.class, null);
for (RelatorioValorServicoContratoDTO porServico : list) {
SolicitacaoServicoDTO sol= null;
sol = solicitacaoServicoService.obterQuantidadeSolicitacoesServico(porServico.getIdServicoContrato(),
porServico.getDataInicio(), (porServico.getDataFim() == null ? UtilDatas.getDataAtual() : porServico.getDataFim() ) );
if (sol != null) {
if(sol.getQuantidade()!=0){
relatorioQuantitativoSolicitacaoDto = new RelatorioValorServicoContratoDTO();
valorTotal = (porServico.getValorServico().multiply(new BigDecimal(sol.getQuantidade() ) ) );
valorTotalGeral = valorTotalGeral.add(valorTotal);
relatorioQuantitativoSolicitacaoDto.setNomeServico(porServico.getNomeServico() );
relatorioQuantitativoSolicitacaoDto.setQuantidade(sol.getQuantidade() );
relatorioQuantitativoSolicitacaoDto.setTotalValorServico(valorTotal);
relatorioQuantitativoSolicitacaoDto.setValorServico(porServico.getValorServico() );
relatorioQuantitativoSolicitacaoDto.setTotalGeral(valorTotalGeral);
listDadosRelatorio.add(relatorioQuantitativoSolicitacaoDto);
}
}
}
}
Date dt = new Date();
String strCompl = "" + dt.getTime();
String caminhoJasper = CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioValorServicoContratoXls.jasper";
String diretorioReceita = CITCorporeUtil.CAMINHO_REAL_APP + "/tempFiles";
String diretorioRelativoOS = Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/tempFiles";
Map<String, Object> parametros = new HashMap<String, Object>();
parametros = UtilRelatorio.trataInternacionalizacaoLocale(session, parametros);
parametros.put("TITULO_RELATORIO", UtilI18N.internacionaliza(request, "relatorioValorServicoContrato.titulo") );
parametros.put("CIDADE", UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioCidade") );
parametros.put("DATA_HORA", UtilDatas.getDataHoraAtual() );
parametros.put("NOME_USUARIO", usuario.getNomeUsuario() );
parametros.put("dataInicio", valoresServicoContratoDTO.getDataInicio() );
parametros.put("dataFim", valoresServicoContratoDTO.getDataFim() );
parametros.put("Logo", LogoRel.getFile());
if(valoresServicoContratoDTO.getIdContrato()!=null){
contratoDto.setIdContrato(valoresServicoContratoDTO.getIdContrato());
contratoDto = (ContratoDTO) contratoService.restore(contratoDto);
parametros.put("contrato", contratoDto.getNumero());
}
if (listDadosRelatorio.size() == 0) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioVazio") );
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
if (listDadosRelatorio.size() == 0) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioVazio") );
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
return;
}
JRDataSource dataSource = new JRBeanCollectionDataSource(listDadosRelatorio);
JasperDesign desenho = JRXmlLoader.load(CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioValorServicoContratoXls.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 + "/RelatorioValorServicoContratoXls" + strCompl + "_" + usuario.getIdUsuario() + ".xls");
exporter.exportReport();
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url="
+ diretorioRelativoOS + "/RelatorioValorServicoContratoXls" + strCompl + "_" + usuario.getIdUsuario() + ".xls')");
document.getJanelaPopupById("JANELA_AGUARDE_MENU").hide();
}
}