package br.com.centralit.citcorpore.ajaxForms;
import java.util.ArrayList;
import java.util.Collection;
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.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.xml.JRXmlLoader;
import br.com.centralit.citajax.html.AjaxFormAction;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citajax.html.HTMLSelect;
import br.com.centralit.citcorpore.bean.ContratoDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.RelatorioColaboradorUnidadeDTO;
import br.com.centralit.citcorpore.bean.UnidadeDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.negocio.ContratoService;
import br.com.centralit.citcorpore.negocio.EmpregadoService;
import br.com.centralit.citcorpore.negocio.UnidadeService;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
import br.com.centralit.citcorpore.util.LogoRel;
import br.com.centralit.citcorpore.util.Util;
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", "unchecked" })
public class RelatorioColaboradorUnidade extends AjaxFormAction {
private UsuarioDTO usuario;
@Override
public Class getBeanClass() {
return RelatorioColaboradorUnidadeDTO.class;
}
@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;
}
this.preencherComboContrato(document, request, response);
}
public void imprimirRelatorio(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws ServiceException, Exception {
usuario = WebUtil.getUsuario(request);
RelatorioColaboradorUnidadeDTO relatorioColaboradorUnidadeDto = (RelatorioColaboradorUnidadeDTO) document.getBean();
HttpSession session = ((HttpServletRequest) request).getSession();
EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null);
UnidadeService unidadeService = (UnidadeService) ServiceLocator.getInstance().getService(UnidadeService.class, null);
Collection<EmpregadoDTO> empregados = empregadoService.listEmpregadoByContratoAndUnidadeAndEmpregados(
relatorioColaboradorUnidadeDto.getIdContrato(), relatorioColaboradorUnidadeDto.getIdUnidade(),
relatorioColaboradorUnidadeDto.getIdColaborador(), WebUtil.getUsuario(request),
listUnidadeContrato(document, request, response));
Collection<RelatorioColaboradorUnidadeDTO> listaParaEnvio = new ArrayList<RelatorioColaboradorUnidadeDTO>();
if (empregados != null) {
for (EmpregadoDTO empregado : empregados) {
RelatorioColaboradorUnidadeDTO novoFuncionario = new RelatorioColaboradorUnidadeDTO();
if (empregado.getIdUnidade() != null) {
UnidadeDTO unidadeDto = new UnidadeDTO();
unidadeDto.setIdUnidade(empregado.getIdUnidade());
unidadeDto = (UnidadeDTO) unidadeService.restore(unidadeDto);
novoFuncionario.setNomeUnidade(unidadeDto.getNome());
}
novoFuncionario.setNomeColaborador(empregado.getNome());
novoFuncionario.setEmailColaborador(empregado.getEmail());
novoFuncionario.setTelefoneColaborador(empregado.getTelefone());
listaParaEnvio.add(novoFuncionario);
}
}
if (listaParaEnvio != null && !listaParaEnvio.isEmpty()) {
String caminhoJasper = CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioColaboradorUnidade.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, "relatorioUnidadeColaborador.titulo"));
parametros.put("CIDADE", UtilI18N.internacionaliza(request, "citcorpore.comum.relatorioCidade"));
parametros.put("DATA_HORA", UtilDatas.getDataHoraAtual());
if(usuario != null){
parametros.put("NOME_USUARIO", usuario.getNomeUsuario());
}
parametros.put("contrato", this.getContrato(relatorioColaboradorUnidadeDto.getIdContrato()));
if (relatorioColaboradorUnidadeDto.getIdUnidade() != null) {
parametros.put("unidade", this.getUnidade(relatorioColaboradorUnidadeDto.getIdUnidade()));
}else{
parametros.put("unidade", UtilI18N.internacionaliza(request, "citcorpore.comum.todas") );
}
parametros.put("Logo", LogoRel.getFile());
parametros.put("titulo", UtilI18N.internacionaliza(request, "citcorpore.comum.titulo"));
if (relatorioColaboradorUnidadeDto.getIdColaborador() == null){
parametros.put("colaborador", UtilI18N.internacionaliza(request, "citcorpore.comum.todos") );
}
else{
parametros.put("colaborador", UtilI18N.internacionaliza(request, "citcorpore.comum.filtrados") );
}
if (relatorioColaboradorUnidadeDto.getFormatoArquivoRelatorio().equalsIgnoreCase("pdf")) {
this.gerarRelatorioFormatoPdf(listaParaEnvio, caminhoJasper, parametros, diretorioReceita, document, diretorioRelativoOS, usuario);
} else {
this.gerarRelatorioFormatoXls(listaParaEnvio, parametros, diretorioReceita, document, diretorioRelativoOS, usuario);
}
} else {
document.executeScript("reportEmpty();");
}
document.executeScript("JANELA_AGUARDE_MENU.hide();");
}
public void preencherComboContrato(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
HTMLSelect comboContrato = document.getSelectById("idContrato");
comboContrato.removeAllOptions();
ContratoService contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, null);
Collection colContrato = contratoService.listAtivos();
comboContrato.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione"));
comboContrato.addOptions(colContrato, "idContrato", "numero", null);
}
public void carregaUnidade(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
RelatorioColaboradorUnidadeDTO relatorioColaboradorUnidadeDto = (RelatorioColaboradorUnidadeDTO) document.getBean();
UnidadeService unidadeService = (UnidadeService) ServiceLocator.getInstance().getService(UnidadeService.class, null);
HTMLSelect comboUnidadeMultContratos = (HTMLSelect) document.getSelectById("idUnidade");
inicializarCombo(comboUnidadeMultContratos, request);
Integer idContrato = relatorioColaboradorUnidadeDto.getIdContrato();
if (idContrato != null) {
ArrayList<UnidadeDTO> unidades = (ArrayList) unidadeService.listHierarquiaMultiContratos(idContrato);
if (unidades != null) {
for (UnidadeDTO unidade : unidades) {
if (unidade.getDataFim() == null) {
comboUnidadeMultContratos.addOption(Util.tratarAspasSimples(unidade.getIdUnidade().toString()), Util.tratarAspasSimples(unidade.getNomeNivel()));
}
}
}
}
}
public ArrayList<UnidadeDTO> listUnidadeContrato(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
RelatorioColaboradorUnidadeDTO relatorioColaboradorUnidadeDto = (RelatorioColaboradorUnidadeDTO) document.getBean();
UnidadeService unidadeService = (UnidadeService) ServiceLocator.getInstance().getService(UnidadeService.class, null);
ArrayList<UnidadeDTO> list = new ArrayList<>();
Integer idContrato = relatorioColaboradorUnidadeDto.getIdContrato();
if (idContrato != null) {
ArrayList<UnidadeDTO> unidades = (ArrayList) unidadeService.listHierarquiaMultiContratos(idContrato);
if (unidades != null) {
for (UnidadeDTO unidade : unidades) {
if (unidade.getDataFim() == null) {
list.add(unidade);
}
}
}
}
return list;
}
private void inicializarCombo(HTMLSelect componenteCombo, HttpServletRequest request) {
componenteCombo.removeAllOptions();
componenteCombo.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione"));
}
public void gerarRelatorioFormatoPdf(Collection<RelatorioColaboradorUnidadeDTO> listaRelatorio, String caminhoJasper, Map<String, Object> parametros, String diretorioReceita,
DocumentHTML document, String diretorioRelativoOS, UsuarioDTO usuario) throws Exception {
Integer numeroControle = WebUtil.getRandomNumber();
JRDataSource dataSource = new JRBeanCollectionDataSource(listaRelatorio);
JasperPrint print = JasperFillManager.fillReport(caminhoJasper, parametros, dataSource);
JasperExportManager.exportReportToPdfFile(print, diretorioReceita + "/RelatorioColaboradorUnidade" + "_" + numeroControle + ".pdf");
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url=" + diretorioRelativoOS
+ "/RelatorioColaboradorUnidade" + "_" + numeroControle + ".pdf')");
}
public void gerarRelatorioFormatoXls(Collection<RelatorioColaboradorUnidadeDTO> listaRelatorio, Map<String, Object> parametros, String diretorioReceita, DocumentHTML document,
String diretorioRelativoOS, UsuarioDTO usuario) throws Exception {
Integer numeroControle = WebUtil.getRandomNumber();
JRDataSource dataSource = new JRBeanCollectionDataSource(listaRelatorio);
JasperDesign desenho = JRXmlLoader.load(CITCorporeUtil.CAMINHO_REAL_APP + Constantes.getValue("CAMINHO_RELATORIOS") + "RelatorioColaboradorUnidade.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 + "/RelatorioColaboradorUnidade" + "_" + numeroControle + ".xls");
exporter.exportReport();
document.executeScript("window.open('" + Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/printPDF/printPDF.jsp?url=" + diretorioRelativoOS
+ "/RelatorioColaboradorUnidade" + "_" + numeroControle + ".xls')");
}
private String getContrato(Integer id) throws ServiceException, Exception {
ContratoDTO contrato = new ContratoDTO();
contrato.setIdContrato(id);
ContratoService contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, null);
contrato = (ContratoDTO) contratoService.restore(contrato);
if (contrato != null) {
return contrato.getNumero();
}
return null;
}
private String getUnidade(Integer id) throws ServiceException, Exception {
UnidadeService unidadeService = (UnidadeService) ServiceLocator.getInstance().getService(UnidadeService.class, null);
UnidadeDTO unidadeDto = new UnidadeDTO();
unidadeDto.setIdUnidade(id);
unidadeDto = (UnidadeDTO) unidadeService.restore(unidadeDto);
if (unidadeDto != null) {
return unidadeDto.getNome();
}
return null;
}
}