package br.com.centralit.citcorpore.ajaxForms; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Collection; import java.util.List; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import br.com.centralit.citajax.html.AjaxFormAction; import br.com.centralit.citajax.html.DocumentHTML; import br.com.centralit.citajax.html.HTMLForm; import br.com.centralit.citajax.html.HTMLSelect; import br.com.centralit.citajax.html.HTMLTable; import br.com.centralit.citcorpore.bean.CidadesDTO; import br.com.centralit.citcorpore.bean.ContratoDTO; import br.com.centralit.citcorpore.bean.IntegranteViagemDTO; import br.com.centralit.citcorpore.bean.ItemPrestacaoContasViagemDTO; import br.com.centralit.citcorpore.bean.JustificativaSolicitacaoDTO; import br.com.centralit.citcorpore.bean.ParecerDTO; import br.com.centralit.citcorpore.bean.PrestacaoContasViagemDTO; import br.com.centralit.citcorpore.bean.RequisicaoViagemDTO; import br.com.centralit.citcorpore.bean.RoteiroViagemDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.integracao.IntegranteViagemDao; import br.com.centralit.citcorpore.integracao.PrestacaoContasViagemDao; import br.com.centralit.citcorpore.integracao.RequisicaoViagemDAO; import br.com.centralit.citcorpore.negocio.CentroResultadoService; import br.com.centralit.citcorpore.negocio.CidadesService; import br.com.centralit.citcorpore.negocio.ContratoService; import br.com.centralit.citcorpore.negocio.DespesaViagemService; import br.com.centralit.citcorpore.negocio.ItemPrestacaoContasViagemService; import br.com.centralit.citcorpore.negocio.JustificativaParecerService; import br.com.centralit.citcorpore.negocio.JustificativaSolicitacaoService; import br.com.centralit.citcorpore.negocio.ParecerService; import br.com.centralit.citcorpore.negocio.PrestacaoContasViagemService; import br.com.centralit.citcorpore.negocio.ProjetoService; import br.com.centralit.citcorpore.negocio.RoteiroViagemService; import br.com.centralit.citcorpore.util.Enumerados.TipoDate; 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"}) public class ConferenciaViagem extends AjaxFormAction{ @Override public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { UsuarioDTO 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; } PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) document.getBean(); prestacaoContasViagemDto.setIdEmpregado(this.recuperaEmpregado(prestacaoContasViagemDto)); prestacaoContasViagemDto = this.recuperaPrestacaoContas(prestacaoContasViagemDto); if(prestacaoContasViagemDto != null && prestacaoContasViagemDto.getIdEmpregado() != null){ restore(document, request, response, prestacaoContasViagemDto); this.geraGridItemsPrestacaoContas(document, request, response, prestacaoContasViagemDto); this.montaIntegrante(document, request, response); this.montaValores(document, request, response, usuario); } } public void restore(DocumentHTML document, HttpServletRequest request, HttpServletResponse response, PrestacaoContasViagemDTO prestacaoContasViagemDto) throws Exception { ParecerDTO parecerDto = new ParecerDTO(); ParecerService parecerService = (ParecerService) ServiceLocator.getInstance().getService(ParecerService.class, null); PrestacaoContasViagemService prestacaoContasViagemService = (PrestacaoContasViagemService) ServiceLocator.getInstance().getService(PrestacaoContasViagemService.class, null); prestacaoContasViagemDto = (PrestacaoContasViagemDTO) prestacaoContasViagemService.restore(prestacaoContasViagemDto); if (prestacaoContasViagemDto.getIdAprovacao() != null){ parecerDto.setIdParecer(prestacaoContasViagemDto.getIdAprovacao()); parecerDto = (ParecerDTO) parecerService.restore(parecerDto); if (parecerDto != null){ this.preencherComboJustificativaAutorizacao(document, request, response); prestacaoContasViagemDto.setAprovado(parecerDto.getAprovado()); prestacaoContasViagemDto.setIdJustificativaAutorizacao(parecerDto.getIdJustificativa()); prestacaoContasViagemDto.setComplemJustificativaAutorizacao(parecerDto.getComplementoJustificativa()); } } HTMLForm form = document.getForm("form"); form.clear(); form.setValues(prestacaoContasViagemDto); this.restauraDadosGeraisSolicitacao(document, request, response, prestacaoContasViagemDto); if (prestacaoContasViagemDto != null && prestacaoContasViagemDto.getAprovado() != null && !prestacaoContasViagemDto.getAprovado().equals("")){ if (prestacaoContasViagemDto.getAprovado().equalsIgnoreCase("S")){ document.executeScript("$('#divJustificativa').hide();"); }else{ document.executeScript("$('#divJustificativa').show();"); } } } /** * Recupe os dados do integrante e mostra na tela do usuario * * @param document * @param request * @param response * @throws Exception * @author thiago.borges */ public void montaIntegrante(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception{ PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) document.getBean(); RoteiroViagemDTO roteiroViagemDTO = new RoteiroViagemDTO(); RoteiroViagemService roteiroViagemService = (RoteiroViagemService) ServiceLocator.getInstance().getService(RoteiroViagemService.class, null); CidadesService cidadesService = (CidadesService) ServiceLocator.getInstance().getService(CidadesService.class, null); CidadesDTO origem = null; CidadesDTO destino = null; IntegranteViagemDTO integranteViagemDTO = new IntegranteViagemDao().findByIdSolicitacaoServicoIdTarefa(prestacaoContasViagemDto.getIdSolicitacaoServico(), prestacaoContasViagemDto.getIdTarefa()); if(integranteViagemDTO != null){ roteiroViagemDTO = roteiroViagemService.findByIdIntegrante(integranteViagemDTO.getIdIntegranteViagem()); origem = (CidadesDTO) ((List) cidadesService.findNomeByIdCidade(roteiroViagemDTO.getOrigem())).get(0); destino = (CidadesDTO) ((List) cidadesService.findNomeByIdCidade(roteiroViagemDTO.getDestino())).get(0); StringBuilder html = new StringBuilder(); html.append(integranteViagemDTO.getNome() + " - ida " + UtilDatas.convertDateToString(TipoDate.DATE_DEFAULT, roteiroViagemDTO.getIda(), UtilI18N.getLocale()) + " - volta " + UtilDatas.convertDateToString(TipoDate.DATE_DEFAULT, roteiroViagemDTO.getVolta(), UtilI18N.getLocale()) + " - " + origem.getNomeCidade() + "/" + origem.getNomeUf() + " - " + destino.getNomeCidade() + "/" + destino.getNomeUf()); document.getElementById("nomeIntegranteViagem").setInnerHTML(html.toString()); } } /** * Recupera os valores informados na presta��o de contas como "Total da Presta��o de Contas", "Total Lan�amentos" e "Diferen�a" * * @param document * @param request * @param response * @param usuario * @throws Exception * @author thiago.borges */ public void montaValores(DocumentHTML document, HttpServletRequest request, HttpServletResponse response, UsuarioDTO usuario) throws Exception{ PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) document.getBean(); DespesaViagemService despesaViagemService = (DespesaViagemService) ServiceLocator.getInstance().getService(DespesaViagemService.class, null); PrestacaoContasViagemService prestacaoContasViagemService = (PrestacaoContasViagemService) ServiceLocator.getInstance().getService(PrestacaoContasViagemService.class, null); ItemPrestacaoContasViagemService itemPrestacaoContasViagemService = (ItemPrestacaoContasViagemService) ServiceLocator.getInstance().getService(ItemPrestacaoContasViagemService.class, null); Double totalItens = 0.0; prestacaoContasViagemDto = (PrestacaoContasViagemDTO) prestacaoContasViagemService.restore(prestacaoContasViagemDto); Collection<ItemPrestacaoContasViagemDTO> collection = itemPrestacaoContasViagemService.recuperaItensPrestacao(prestacaoContasViagemDto); if(collection != null && collection.size() > 0){ for(ItemPrestacaoContasViagemDTO item: collection){ totalItens = totalItens + item.getValor(); } } NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("pt", "BR")); DecimalFormat decimal = (DecimalFormat) nf; decimal.applyPattern("#,##0.00"); Double totalPrestacaoContas = despesaViagemService.getTotalDespesaViagemPrestacaoContas(prestacaoContasViagemDto.getIdSolicitacaoServico(), prestacaoContasViagemDto.getIdEmpregado()); Double totalDiferenca = totalPrestacaoContas - totalItens; document.getElementById("totalPrestacaoContas").setValue(decimal.format(totalPrestacaoContas)); document.getElementById("totalLancamentos").setValue(decimal.format(totalItens)); document.getElementById("valorDiferenca").setValue(decimal.format(totalDiferenca)); } /** * Gera a grid com os itens informados em presta��o de contas * * @param document * @param request * @param response * @param prestacaoContasViagemDto * @throws ServiceException * @throws Exception * @author thiago.borges */ public void geraGridItemsPrestacaoContas(DocumentHTML document, HttpServletRequest request, HttpServletResponse response, PrestacaoContasViagemDTO prestacaoContasViagemDto) throws ServiceException, Exception{ ItemPrestacaoContasViagemService itemService = (ItemPrestacaoContasViagemService) ServiceLocator.getInstance().getService(ItemPrestacaoContasViagemService.class, null); Collection<ItemPrestacaoContasViagemDTO> colItens = itemService.recuperaItensPrestacao(prestacaoContasViagemDto); if(colItens != null){ HTMLTable tabelaItemPrestacaoContasViagem; tabelaItemPrestacaoContasViagem = document.getTableById("tabelaItemPrestacaoContasViagem"); tabelaItemPrestacaoContasViagem.deleteAllRows(); tabelaItemPrestacaoContasViagem.addRowsByCollection(colItens, new String[]{"numeroDocumento","data","nomeFornecedor","valor","descricao"}, null, null, null, null, null); } } /** * Retorna a presta��o de contas atual e suas informa��es * * @param prestacaoContasViagemDto * @return * @throws ServiceException * @throws Exception * @author thiago.borges */ private PrestacaoContasViagemDTO recuperaPrestacaoContas(PrestacaoContasViagemDTO prestacaoContasViagemDto) throws ServiceException, Exception{ PrestacaoContasViagemService prestacaoContasViagemService = (PrestacaoContasViagemService) ServiceLocator.getInstance().getService(PrestacaoContasViagemService.class, null); prestacaoContasViagemDto.setIdPrestacaoContasViagem(prestacaoContasViagemService.recuperaIdPrestacaoSeExistir(prestacaoContasViagemDto.getIdSolicitacaoServico(), prestacaoContasViagemDto.getIdEmpregado())); try { prestacaoContasViagemDto = (PrestacaoContasViagemDTO) prestacaoContasViagemService.restore(prestacaoContasViagemDto); return prestacaoContasViagemDto; } catch (Exception e) { return null; } } /** * Retorna o empregado ligado a presta��o de contas atual * * @param prestacaoContasViagemDto * @return * @throws Exception * @author thiago.borges */ private Integer recuperaEmpregado(PrestacaoContasViagemDTO prestacaoContasViagemDto) throws Exception{ PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); PrestacaoContasViagemDTO prestacaoContasAux = new PrestacaoContasViagemDTO(); //verifica se ja existe um presta��o de contas para associada a essa tarefa prestacaoContasAux = dao.findByTarefaAndSolicitacao(prestacaoContasViagemDto.getIdTarefa(), prestacaoContasViagemDto.getIdSolicitacaoServico()); if(prestacaoContasAux != null){ return prestacaoContasAux.getIdEmpregado(); } //se nao existir uma presta��o, busca uma sem associa��o e associa a tarefa atual List list = dao.findBySolicitacao(prestacaoContasViagemDto.getIdSolicitacaoServico()); if(list != null){ prestacaoContasAux = (PrestacaoContasViagemDTO) list.get(0); if(prestacaoContasAux != null && prestacaoContasAux.getIdEmpregado() != null){ prestacaoContasAux.setIdItemTrabalho(prestacaoContasViagemDto.getIdTarefa()); dao.update(prestacaoContasAux); return prestacaoContasAux.getIdEmpregado(); } } return null; } @Override public Class getBeanClass() { return PrestacaoContasViagemDTO.class; } /** * Preenche a combo de justificativa de n�o autoriza��o da presta��o de contas * * @param document * @param request * @param response * @throws Exception * @author thiago.borges */ public void preencherComboJustificativaAutorizacao(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { JustificativaParecerService justificativaService = (JustificativaParecerService) ServiceLocator.getInstance().getService(JustificativaParecerService.class, WebUtil.getUsuarioSistema(request)); Collection colJustificativas = justificativaService.listAplicaveisRequisicao(); HTMLSelect comboJustificativaAutorizacao = (HTMLSelect) document.getSelectById("idJustificativaAutorizacao"); document.getSelectById("idJustificativaAutorizacao").removeAllOptions(); comboJustificativaAutorizacao.removeAllOptions(); comboJustificativaAutorizacao.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione")); if (colJustificativas != null){ comboJustificativaAutorizacao.addOptions(colJustificativas, "idJustificativa", "descricaoJustificativa", null); } } /** * Restaura os dados da solicita��o com cidade de origem e destino, data de ida e volta. * * @param document * @param request * @param response * @param prestacaoContasViagemDto * @throws Exception * @author thiago.borges */ private void restauraDadosGeraisSolicitacao(DocumentHTML document, HttpServletRequest request, HttpServletResponse response, PrestacaoContasViagemDTO prestacaoContasViagemDto) throws Exception { RequisicaoViagemDTO requisicaoViagemDTO = new RequisicaoViagemDTO(); RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO(); requisicaoViagemDTO = requisicaoViagemDAO.findByIdSolicitacao(prestacaoContasViagemDto.getIdSolicitacaoServico()); if(requisicaoViagemDTO != null){ this.preencherComboCentroResultado(document, request, response); this.preencherComboProjeto(document, request, response, requisicaoViagemDTO); this.preencherComboJustificativa(document, request, response); requisicaoViagemDTO.setNomeCidadeOrigem(this.recuperaCidade(requisicaoViagemDTO.getIdCidadeOrigem())); requisicaoViagemDTO.setNomeCidadeDestino(this.recuperaCidade(requisicaoViagemDTO.getIdCidadeDestino())); document.getElementById("nomeCidadeOrigem").setValue(requisicaoViagemDTO.getNomeCidadeOrigem()); document.getElementById("nomeCidadeDestino").setValue(requisicaoViagemDTO.getNomeCidadeDestino()); document.getElementById("dataInicioViagem").setValue(requisicaoViagemDTO.getDataInicioViagem().toString()); document.getElementById("dataFimViagem").setValue(requisicaoViagemDTO.getDataFimViagem().toString()); document.getElementById("qtdeDias").setValue(requisicaoViagemDTO.getQtdeDias().toString()); document.getElementById("descricaoMotivo").setValue(requisicaoViagemDTO.getDescricaoMotivo()); document.getElementById("idCentroCusto").setValue(requisicaoViagemDTO.getIdCentroCusto().toString()); document.getElementById("idProjeto").setValue(requisicaoViagemDTO.getIdProjeto().toString()); document.getElementById("idMotivoViagem").setValue(requisicaoViagemDTO.getIdMotivoViagem().toString()); } } /** * Retorna a cidade conforme idcidade passado * * @param idCidade * @return * @throws Exception * @author thiago.borges */ public String recuperaCidade(Integer idCidade) throws Exception { CidadesDTO cidadeDto = new CidadesDTO(); CidadesService cidadesService = (CidadesService) ServiceLocator.getInstance().getService(CidadesService.class, null); if (idCidade != null) { cidadeDto = (CidadesDTO) cidadesService.findCidadeUF(idCidade); return cidadeDto.getNomeCidade() + " - " + cidadeDto.getNomeUf(); } return null; } /** * Preenche a combo de 'Centro Resultado' do formul�rio HTML * * @param document * @param request * @param response * @throws Exception * @author Thiago.Borges */ public void preencherComboCentroResultado(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception{ CentroResultadoService centroResultadoService = (CentroResultadoService) ServiceLocator.getInstance().getService(CentroResultadoService.class, WebUtil.getUsuarioSistema(request)); HTMLSelect idCentroCusto = (HTMLSelect) document.getSelectById("idCentroCusto"); idCentroCusto.removeAllOptions(); idCentroCusto.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione")); Collection colCCusto = centroResultadoService.listPermiteRequisicaoProduto(); if(colCCusto != null && !colCCusto.isEmpty()){ idCentroCusto.addOptions(colCCusto, "idCentroResultado", "nomeHierarquizado", null); } } /** * Preenche a combo de 'Projeto' do formul�rio HTML * * @param document * @param request * @param response * @param requisicaoViagemDto * @throws Exception * @author Thiago.Borges */ public void preencherComboProjeto(DocumentHTML document, HttpServletRequest request, HttpServletResponse response, RequisicaoViagemDTO requisicaoViagemDTO) throws Exception{ PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) document.getBean(); HTMLSelect idProjeto = (HTMLSelect) document.getSelectById("idProjeto"); idProjeto.removeAllOptions(); idProjeto.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione")); if (prestacaoContasViagemDto.getIdContrato() != null) { ContratoService contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, WebUtil.getUsuarioSistema(request)); ContratoDTO contratoDto = new ContratoDTO(); contratoDto.setIdContrato(prestacaoContasViagemDto.getIdContrato()); contratoDto = (ContratoDTO) contratoService.restore(contratoDto); if (contratoDto != null) { ProjetoService projetoService = (ProjetoService) ServiceLocator.getInstance().getService(ProjetoService.class, WebUtil.getUsuarioSistema(request)); Collection colProjetos = projetoService.listHierarquia(contratoDto.getIdCliente(), true); if(colProjetos != null && !colProjetos.isEmpty()) idProjeto.addOptions(colProjetos, "idProjeto", "nomeHierarquizado", null); } } } /** * Preenche combo de 'justificativa solicita��o'. * * @param document * @param request * @param response * @throws Exception * @author Thiago.Borges */ public void preencherComboJustificativa(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { JustificativaSolicitacaoService justificativaSolicitacaoService = (JustificativaSolicitacaoService)ServiceLocator.getInstance().getService(JustificativaSolicitacaoService.class, null); Collection<JustificativaSolicitacaoDTO> colJustificativas = justificativaSolicitacaoService.listAtivasParaViagem(); HTMLSelect comboJustificativa = (HTMLSelect) document.getSelectById("idMotivoViagem"); document.getSelectById("idMotivoViagem").removeAllOptions(); comboJustificativa.removeAllOptions(); comboJustificativa.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione")); if (colJustificativas != null){ comboJustificativa.addOptions(colJustificativas, "idJustificativa", "descricaoJustificativa", null); } } }