package br.com.centralit.citcorpore.ajaxForms; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Date; 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.HTMLTable; import br.com.centralit.citcorpore.bean.CidadesDTO; import br.com.centralit.citcorpore.bean.EmpregadoDTO; import br.com.centralit.citcorpore.bean.ItemPrestacaoContasViagemDTO; 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.CidadesService; import br.com.centralit.citcorpore.negocio.DespesaViagemService; import br.com.centralit.citcorpore.negocio.EmpregadoService; import br.com.centralit.citcorpore.negocio.IntegranteViagemService; import br.com.centralit.citcorpore.negocio.ItemPrestacaoContasViagemService; 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.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 PrestacaoContasViagem extends AjaxFormAction { public Class getBeanClass() { return PrestacaoContasViagemDTO.class; } /** * 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; } RequisicaoViagemService requisicaoViagemService = (RequisicaoViagemService) ServiceLocator.getInstance().getService(RequisicaoViagemService.class, null); IntegranteViagemService integranteViagemService = (IntegranteViagemService) ServiceLocator.getInstance().getService(IntegranteViagemService.class, null); PrestacaoContasViagemService prestacaoContasViagemService = (PrestacaoContasViagemService) ServiceLocator.getInstance().getService(PrestacaoContasViagemService.class, null); DespesaViagemService despesaViagemService = (DespesaViagemService) ServiceLocator.getInstance().getService(DespesaViagemService.class, null); PrestacaoContasViagemDTO prestacaoContasViagemDTO = (PrestacaoContasViagemDTO) document.getBean(); RequisicaoViagemDTO requisicaoViagemDTO = new RequisicaoViagemDTO(); requisicaoViagemDTO.setIdSolicitacaoServico(prestacaoContasViagemDTO.getIdSolicitacaoServico()); requisicaoViagemDTO = (RequisicaoViagemDTO) requisicaoViagemService.restore(requisicaoViagemDTO); if(requisicaoViagemDTO != null){ requisicaoViagemDTO.setIdTarefa(prestacaoContasViagemDTO.getIdTarefa()); prestacaoContasViagemDTO.setIntegranteViagemDto(integranteViagemService.getIntegranteByIdSolicitacaoAndTarefa(prestacaoContasViagemDTO.getIdSolicitacaoServico(), prestacaoContasViagemDTO.getIdTarefa())); } DecimalFormat decimal = (DecimalFormat) NumberFormat.getCurrencyInstance(new Locale("pt", "BR")); decimal.applyPattern("#,##0.00"); Double totalPrestacaoContas = 0.0; if(prestacaoContasViagemDTO.getIntegranteViagemDto() != null) { totalPrestacaoContas = despesaViagemService.getTotalDespesaViagemPrestacaoContas(prestacaoContasViagemDTO.getIdSolicitacaoServico(), prestacaoContasViagemDTO.getIntegranteViagemDto().getIdEmpregado()); } prestacaoContasViagemDTO.setValorDiferenca(totalPrestacaoContas); prestacaoContasViagemDTO.setTotalLancamentos(0.0); prestacaoContasViagemDTO.setTotalPrestacaoContas(totalPrestacaoContas); if(prestacaoContasViagemDTO.getIntegranteViagemDto() != null){ RoteiroViagemDTO roteiroViagemDTO = new RoteiroViagemDTO(); CidadesDTO origem = null; CidadesDTO destino = null; RoteiroViagemService roteiroViagemService = (RoteiroViagemService) ServiceLocator.getInstance().getService(RoteiroViagemService.class, null); CidadesService cidadesService = (CidadesService) ServiceLocator.getInstance().getService(CidadesService.class, null); StringBuilder textoNomeIntegranteViagem = new StringBuilder(); roteiroViagemDTO = roteiroViagemService.findByIdIntegrante(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdIntegranteViagem()); origem = (CidadesDTO) ((List) cidadesService.findNomeByIdCidade(roteiroViagemDTO.getOrigem())).get(0); destino = (CidadesDTO) ((List) cidadesService.findNomeByIdCidade(roteiroViagemDTO.getDestino())).get(0); // Verifica se o funcionario tem um responsavel pela prestacao de contas if(!prestacaoContasViagemDTO.getIntegranteViagemDto().getIdRespPrestacaoContas().equals(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdEmpregado())) { EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null); EmpregadoDTO empregadoDTO = new EmpregadoDTO(); empregadoDTO.setIdEmpregado(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdRespPrestacaoContas()); empregadoDTO = (EmpregadoDTO) empregadoService.restore(empregadoDTO); textoNomeIntegranteViagem.append(empregadoDTO.getNome() + " em nome de " + prestacaoContasViagemDTO.getIntegranteViagemDto().getNome()); } else { textoNomeIntegranteViagem.append(prestacaoContasViagemDTO.getIntegranteViagemDto().getNome()); } textoNomeIntegranteViagem.append(" - ida " + UtilDatas.convertDateToString(TipoDate.DATE_DEFAULT, roteiroViagemDTO.getIda(), UtilI18N.getLocale())); textoNomeIntegranteViagem.append(" - volta " + UtilDatas.convertDateToString(TipoDate.DATE_DEFAULT, roteiroViagemDTO.getVolta(), UtilI18N.getLocale())); textoNomeIntegranteViagem.append(" - " + origem.getNomeCidade() + "/" + origem.getNomeUf()); textoNomeIntegranteViagem.append(" - " + destino.getNomeCidade() + "/" + destino.getNomeUf()); document.getElementById("nomeIntegranteViagem").setInnerHTML(textoNomeIntegranteViagem.toString()); prestacaoContasViagemDTO.setIdEmpregado(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdEmpregado()); prestacaoContasViagemDTO.setIdResponsavel(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdRespPrestacaoContas()); prestacaoContasViagemDTO.setIdIntegrante(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdIntegranteViagem()); Integer idPrestacaoContasViagem = prestacaoContasViagemService.recuperaIdPrestacaoSeExistir(prestacaoContasViagemDTO.getIdSolicitacaoServico(), prestacaoContasViagemDTO.getIntegranteViagemDto().getIdEmpregado()); prestacaoContasViagemDTO.setIdPrestacaoContasViagem(idPrestacaoContasViagem); } if(prestacaoContasViagemDTO.getIdPrestacaoContasViagem() != null) { this.restore(document, request, response, prestacaoContasViagemDTO); } else { HTMLForm form = document.getForm("form"); form.clear(); form.setValues(prestacaoContasViagemDTO); } // document.getElementById("valorDiferencaAux").setValue(decimal.format(prestacaoContasViagemDTO.getValorDiferenca())); // document.getElementById("valorDiferenca").setValue(prestacaoContasViagemDTO.getValorDiferenca().toString()); } /** * Restaura os dados ao clicar em um registro. * * @param document * @param request * @param response * @param prestacaoContasViagemDto * @throws Exception * @author renato.jesus */ public void restore(DocumentHTML document, HttpServletRequest request, HttpServletResponse response, PrestacaoContasViagemDTO prestacaoContasViagemDTO) throws Exception { ItemPrestacaoContasViagemService itemPrestacaoContasViagemService = (ItemPrestacaoContasViagemService) ServiceLocator.getInstance().getService(ItemPrestacaoContasViagemService.class, null); Collection<ItemPrestacaoContasViagemDTO> colItemPrestacaoContasViagemDTO = itemPrestacaoContasViagemService.recuperaItensPrestacao(prestacaoContasViagemDTO); if(colItemPrestacaoContasViagemDTO != null && !colItemPrestacaoContasViagemDTO.isEmpty()) { Double totalLancamentos = 0.0; for(ItemPrestacaoContasViagemDTO itemPrestacaoContasViagemDTO : colItemPrestacaoContasViagemDTO) { totalLancamentos += itemPrestacaoContasViagemDTO.getValor(); } prestacaoContasViagemDTO.setTotalLancamentos(totalLancamentos); prestacaoContasViagemDTO.setValorDiferenca(prestacaoContasViagemDTO.getTotalPrestacaoContas() - totalLancamentos); prestacaoContasViagemDTO.setIdIntegrante(prestacaoContasViagemDTO.getIntegranteViagemDto().getIdIntegranteViagem()); HTMLTable tabelaItemPrestacaoContasViagem = document.getTableById("tabelaItemPrestacaoContasViagem"); tabelaItemPrestacaoContasViagem.deleteAllRows(); tabelaItemPrestacaoContasViagem.addRowsByCollection( colItemPrestacaoContasViagemDTO, new String[] {"numeroDocumento", "data", "nomeFornecedor", "valor", "descricao", ""}, new String[] {"numeroDocumento"}, UtilI18N.internacionaliza(request, "citcorpore.comum.registroJaAdicionado"), new String[] {"gerarButtonsTable"}, null, null); } HTMLForm form = document.getForm("form"); form.clear(); form.setValues(prestacaoContasViagemDTO); } /** * Inclui registro. * * @param document * @param request * @param response * @throws Exception * @author renato.jesus */ public void save(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) document.getBean(); PrestacaoContasViagemService prestacaoContasViagemService = (PrestacaoContasViagemService) ServiceLocator.getInstance().getService(PrestacaoContasViagemService.class, null); prestacaoContasViagemDto.setListaItemPrestacaoContasViagemDTO((ArrayList<ItemPrestacaoContasViagemDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(ItemPrestacaoContasViagemDTO.class, "listItens", request)); if (prestacaoContasViagemDto.getIdPrestacaoContasViagem() == null || prestacaoContasViagemDto.getIdPrestacaoContasViagem().intValue() == 0) { prestacaoContasViagemService.create(prestacaoContasViagemDto); document.alert(UtilI18N.internacionaliza(request, "MSG05")); } else { prestacaoContasViagemService.update(prestacaoContasViagemDto); document.alert(UtilI18N.internacionaliza(request, "MSG06")); } HTMLForm form = document.getForm("form"); form.clear(); document.executeScript("deleteAllRows()"); } /** * Calcula e atualiza os valores dos campos "Total Presta��o de Contas", "Total Lan�amentos" e "Valor Diferen�a" * * @param document * @param request * @param response * @throws Exception * @author renato.jesus */ public void atualizarValores(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { PrestacaoContasViagemDTO prestacaoContasViagemDto = (PrestacaoContasViagemDTO) document.getBean(); Double valor = 0.0; DecimalFormat decimal = (DecimalFormat) NumberFormat.getCurrencyInstance(new Locale("pt", "BR")); decimal.applyPattern("#,##0.00"); // Verifica se � para retirar ou acrescentar if(request.getParameter("retirarValor").equals("S")) { valor = -prestacaoContasViagemDto.getValor(); document.getElementById("retirarValor").setValue(""); document.getElementById("valor").setValue(""); } else { valor = prestacaoContasViagemDto.getValor(); } Double totalLancamentos = prestacaoContasViagemDto.getTotalLancamentos() + valor; Double valorDiferenca = prestacaoContasViagemDto.getValorDiferenca() - valor; prestacaoContasViagemDto.setTotalLancamentos(totalLancamentos); prestacaoContasViagemDto.setValorDiferenca(valorDiferenca); prestacaoContasViagemDto.setValor(null); HTMLForm form = document.getForm("form"); form.clear(); form.setValues(prestacaoContasViagemDto); document.executeScript("limparCamposFormulario();"); } /** * 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()"); } }