package br.com.centralit.citcorpore.ajaxForms; import java.util.Calendar; import java.util.Date; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import br.com.centralit.citajax.html.DocumentHTML; import br.com.centralit.citcorpore.bean.EmpregadoDTO; import br.com.centralit.citcorpore.bean.IntegranteViagemDTO; 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.negocio.EmpregadoService; import br.com.centralit.citcorpore.negocio.IntegranteViagemService; import br.com.centralit.citcorpore.negocio.ParecerService; import br.com.centralit.citcorpore.negocio.PrestacaoContasViagemService; import br.com.centralit.citcorpore.negocio.RequisicaoViagemService; 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; public class CorrigirPrestacaoContas extends PrestacaoContasViagem { /** * Inicializa os dados ao carregar a tela. * * @param document * @param request * @param response * @throws Exception * @author renato.jesus */ 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; } super.load(document, request, response); PrestacaoContasViagemDTO prestacaoContasViagemDTO = (PrestacaoContasViagemDTO) document.getBean(); RequisicaoViagemDTO requisicaoViagemDTO = null; if(prestacaoContasViagemDTO.getIdSolicitacaoServico() != null) { requisicaoViagemDTO = this.restoreRequisicaoViagem(prestacaoContasViagemDTO.getIdSolicitacaoServico()); } if(requisicaoViagemDTO != null) { requisicaoViagemDTO.setUsuarioDto(usuario); requisicaoViagemDTO.setIdTarefa(prestacaoContasViagemDTO.getIdTarefa()); IntegranteViagemDTO integranteViagemDto = this.restoreIntegranteViagem(requisicaoViagemDTO.getIdSolicitacaoServico(), prestacaoContasViagemDTO.getIdTarefa()); if(integranteViagemDto != null){ prestacaoContasViagemDTO.setIntegranteViagemDto(integranteViagemDto); prestacaoContasViagemDTO = this.restorePrestacaoContasViagem(prestacaoContasViagemDTO); this.restoreInformacoesCorrecao(document, request, response, prestacaoContasViagemDTO); } } } /** * Restaura todas as informa��es de presta��o de contas * * @param prestacaoContasViagemDTO * @return * @throws ServiceException * @throws Exception */ private PrestacaoContasViagemDTO restorePrestacaoContasViagem(PrestacaoContasViagemDTO prestacaoContasViagemDTO) throws ServiceException, Exception { PrestacaoContasViagemService prestacaoContasViagemService = (PrestacaoContasViagemService) ServiceLocator.getInstance().getService(PrestacaoContasViagemService.class, null); Integer idPrestacaoContasViagem = prestacaoContasViagemService.recuperaIdPrestacaoSeExistir(prestacaoContasViagemDTO.getIdSolicitacaoServico(), prestacaoContasViagemDTO.getIntegranteViagemDto().getIdEmpregado()); prestacaoContasViagemDTO.setIdPrestacaoContasViagem(idPrestacaoContasViagem); PrestacaoContasViagemDTO prestacaoContasViagemDTOAux = (PrestacaoContasViagemDTO) prestacaoContasViagemService.restore(prestacaoContasViagemDTO); prestacaoContasViagemDTOAux.setIntegranteViagemDto(prestacaoContasViagemDTO.getIntegranteViagemDto()); return prestacaoContasViagemDTOAux; } /** * Restaura as informe��es de nome do integrante e o motivo que a presta��o foi rejeitada * * @param document * @param request * @param response * @param prestacaoContasViagemDTO * @throws Exception */ private void restoreInformacoesCorrecao(DocumentHTML document, HttpServletRequest request, HttpServletResponse response, PrestacaoContasViagemDTO prestacaoContasViagemDTO) throws Exception { if(prestacaoContasViagemDTO != null && prestacaoContasViagemDTO.getIntegranteViagemDto() != null){ EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null); EmpregadoDTO empregadoDTO = new EmpregadoDTO(); empregadoDTO.setIdEmpregado(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdEmpregado()); empregadoDTO = (EmpregadoDTO) empregadoService.restore(empregadoDTO); document.getElementById("nomeEmpregado").setInnerHTML(empregadoDTO.getNome()); ParecerDTO parecerDto = this.restoreParecer(prestacaoContasViagemDTO); if(parecerDto != null) { document.getElementById("corrigir").setValue(parecerDto.getComplementoJustificativa()); } } } /** * Restaura a requisi��o de viagem para a qual o presta��o de contas foi realizada * * @param idSolicitacao * @return * @throws ServiceException * @throws Exception */ private RequisicaoViagemDTO restoreRequisicaoViagem(Integer idSolicitacao) throws ServiceException, Exception{ RequisicaoViagemDTO requisicaoViagemDTO = new RequisicaoViagemDTO(); RequisicaoViagemService reqViagemService = (RequisicaoViagemService) ServiceLocator.getInstance().getService(RequisicaoViagemService.class, null); requisicaoViagemDTO.setIdSolicitacaoServico(idSolicitacao); requisicaoViagemDTO = (RequisicaoViagemDTO) reqViagemService.restore(requisicaoViagemDTO); if(requisicaoViagemDTO != null) { return requisicaoViagemDTO; } return null; } /** * Restaura o integrante ligado a esta presta��o de contas * * @param idsolicitacaoServico * @param idTarefa * @return * @throws Exception */ private IntegranteViagemDTO restoreIntegranteViagem(Integer idsolicitacaoServico, Integer idTarefa) throws Exception{ IntegranteViagemService integranteViagemService = (IntegranteViagemService) ServiceLocator.getInstance().getService(IntegranteViagemService.class, null); return integranteViagemService.getIntegranteByIdSolicitacaoAndTarefa(idsolicitacaoServico, idTarefa); } /** * Restaura o parecer que � informado quando a presta��o de contas � rejeitada * * @param prestacaoContasViagemDTO * @return * @throws Exception */ private ParecerDTO restoreParecer(PrestacaoContasViagemDTO prestacaoContasViagemDTO) throws Exception { ParecerService parecerService = (ParecerService) ServiceLocator.getInstance().getService(ParecerService.class, null); ParecerDTO parecerDTO = new ParecerDTO(); if (prestacaoContasViagemDTO.getIdAprovacao() != null) { parecerDTO.setIdParecer(prestacaoContasViagemDTO.getIdAprovacao()); return (ParecerDTO) parecerService.restore(parecerDTO); } return null; } /** * Adiciona o item a grid de itens de presta��o de contas e verifica se a nota fiscal foi emitida h� mais de 3 meses. * * @param document * @param request * @param response * @throws Exception */ public void adicionarItem(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) document.getBean(); RoteiroViagemService roteiroViagemService = (RoteiroViagemService) ServiceLocator.getInstance().getService(RoteiroViagemService.class, null); RoteiroViagemDTO roteiroViagemDTO = roteiroViagemService.findByIdIntegrante(prestacaoContasViagemDto.getIdIntegrante()); if(roteiroViagemDTO != null && prestacaoContasViagemDto.getData() != null && !prestacaoContasViagemDto.getData().equals("")){ Date dataViagem = UtilDatas.alteraData(roteiroViagemDTO.getIda(), -3, Calendar.MONTH ) ; Date dataPrestacao = UtilDatas.convertStringToDate(TipoDate.FORMAT_DATABASE , prestacaoContasViagemDto.getData().toString(), UtilI18N.getLocale()); if(dataViagem.compareTo(dataPrestacao) > 0){ document.alert("Nota fiscal emitida h� mais de 3 meses!"); document.getElementById("data").setValue(""); document.getElementById("data").setFocus(); return; } } document.executeScript("adicionarItem()"); } }