package gcom.gui.arrecadacao.pagamento; import gcom.arrecadacao.ArrecadacaoForma; import gcom.arrecadacao.FiltroAvisoBancario; import gcom.arrecadacao.aviso.AvisoBancario; import gcom.arrecadacao.pagamento.FiltroPagamentoSituacao; import gcom.arrecadacao.pagamento.GuiaPagamento; import gcom.arrecadacao.pagamento.Pagamento; import gcom.arrecadacao.pagamento.PagamentoSituacao; import gcom.cadastro.cliente.Cliente; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.localidade.Localidade; import gcom.cobranca.DocumentoTipo; import gcom.faturamento.conta.Conta; import gcom.faturamento.conta.ContaGeral; import gcom.faturamento.conta.ContaHistorico; import gcom.faturamento.debito.DebitoACobrarGeral; import gcom.faturamento.debito.DebitoTipo; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Action que finaliza a p�gina de atualizar pagamento * * @author Pedro Alexandre * @created 22/03/2006 */ public class AtualizarPagamentosAction extends GcomAction { /** * @author Pedro Alexandre * @date 22/03/2006 * * @param actionMapping * @param actionForm * @param httpServletRequest * @param httpServletResponse * @return */ public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { // Cria a vari�vel de retorno e seta o mapeamento para a tela de sucesso ActionForward retorno = actionMapping.findForward("telaSucesso"); // Recupera o form ManterPagamentoActionForm manterPagamentoActionForm = (ManterPagamentoActionForm) actionForm; // Recupera o pagamento que vai ser atualizado da sess�o Pagamento pagamentoAtualizacao = (Pagamento) this.getSessao(httpServletRequest).getAttribute("pagamento"); // Recupera o valor do pagamento atual e seta na vari�vel que vai // armazenar // o valor do pagamento anteriro BigDecimal valorPagamentoAnteriror = pagamentoAtualizacao.getValorPagamento(); // Recupera a vari�vel para indicar se o usu�rio apertou o bot�o de // confirmar da tela de confirma��o String confirmado = httpServletRequest.getParameter("confirmado"); // [FS0019] - Validar data do pagamento // Recupera a data de pagamento e verifica se a data � uma data v�lida String dataPagamentoString = manterPagamentoActionForm.getDataPagamento(); Date dataPagamento = null; SimpleDateFormat dataFormato = new SimpleDateFormat("dd/MM/yyyy"); try { dataPagamento = dataFormato.parse(dataPagamentoString); } catch (ParseException ex) { throw new ActionServletException("atencao.data_pagamento_invalida"); } // Recupera o c�digo da forma de arrecada��o e pesquisa o objeto no // sistema String idFormaArrecadacao = manterPagamentoActionForm.getIdFormaArrecadacao(); ArrecadacaoForma arrecadacaoForma = new ArrecadacaoForma(); arrecadacaoForma.setId(new Integer(idFormaArrecadacao)); // Recupera o c�digo do aviso banc�rio e pesquisa o objeto no sistema String idAvisoBancario = manterPagamentoActionForm.getIdAvisoBancario(); FiltroAvisoBancario filtroAvisoBancario = new FiltroAvisoBancario(); filtroAvisoBancario.adicionarParametro( new ParametroSimples( FiltroAvisoBancario.ID, idAvisoBancario)); AvisoBancario avisoBancario = (AvisoBancario) (this.getFachada().pesquisar(filtroAvisoBancario, AvisoBancario.class.getName())).iterator().next(); // Recupera o c�digo da situa��o atual do pagamento String idSituacaoAtualPagamento = manterPagamentoActionForm.getIdSituacaoAtualPagamento(); // cria as vari�veis que v�o armazenar as situa��es atual e anterior do // pagamento PagamentoSituacao situacaoPagamentoAtual = null; PagamentoSituacao situacaoPagamentoAnterior = null; // Caso a nova situa��o atual do pagamento tenha sido informada na // p�gina if (idSituacaoAtualPagamento != null && !idSituacaoAtualPagamento.trim().equalsIgnoreCase("")) { // Cria o filtro da situa��o de pagamento e pesquisa a situa��o // informada no sistema FiltroPagamentoSituacao filtroPagamentoSituacao = new FiltroPagamentoSituacao(); /* * Colocado por Raphael Rossiter em 19/10/2007 * OBJ:Selecionar apenas a situacao escolhida pelo usuario */ filtroPagamentoSituacao.adicionarParametro( new ParametroSimples(FiltroPagamentoSituacao.CODIGO, new Integer(idSituacaoAtualPagamento))); //Situa��o atual situacaoPagamentoAtual = (PagamentoSituacao) Util.retonarObjetoDeColecao( this.getFachada().pesquisar(filtroPagamentoSituacao, PagamentoSituacao.class.getName())); // Seta a situa��o atual do pagamento para a situa��o anterior situacaoPagamentoAnterior = pagamentoAtualizacao.getPagamentoSituacaoAtual(); } else { // Caso a nova situa��o do pagamento n�o tenha sido informada // o pagamento continua com as mesmas situa��es inalteradas if (pagamentoAtualizacao.getPagamentoSituacaoAtual() != null) { situacaoPagamentoAtual = pagamentoAtualizacao.getPagamentoSituacaoAtual(); } if (pagamentoAtualizacao.getPagamentoSituacaoAnterior() != null) { situacaoPagamentoAnterior = pagamentoAtualizacao.getPagamentoSituacaoAnterior(); } } // Recupera o valor do pagamento BigDecimal valorPagamentoNovo = Util.formatarMoedaRealparaBigDecimal(manterPagamentoActionForm.getValorPagamento()); // Recupera o c�digo do im�vel String idImovel = manterPagamentoActionForm.getIdImovel(); // Cria a vari�vel que vai armazenar o im�vel informado Imovel imovel = null; // Caso o usu�rio tenha informado o im�vel if (idImovel != null && !idImovel.trim().equalsIgnoreCase("")) { // [FS0004] - Verificar exist�ncia da matr�cula do im�vel imovel = this.getFachada().pesquisarImovelDigitado(new Integer(idImovel)); if (imovel == null) { throw new ActionServletException("atencao.naocadastrado", null, "Matr�cula do im�vel"); } } // Recupera o tipo de documento String idTipoDocumento = manterPagamentoActionForm.getIdTipoDocumento(); // Recupera o c�digo da localidade String idLocalidade = manterPagamentoActionForm.getIdLocalidade(); // Cria a vari�vel que vai armazenar a localidade informada Localidade localidade = null; // Caso o tipo de documento n�o seja conta if (!idTipoDocumento.equals(DocumentoTipo.CONTA.toString())) { if (idLocalidade != null && !idLocalidade.equalsIgnoreCase("")) { // [FS0003] - Verificar exist�ncia da localidade localidade = this.getFachada().pesquisarLocalidadeDigitada( new Integer(idLocalidade)); } } // Caso o im�vel tenha sido informado verificar se a localidade // informada � igual a do im�vel if (idImovel != null && !idImovel.equalsIgnoreCase("")) { if (idLocalidade == null || idLocalidade.equalsIgnoreCase("")) { idLocalidade = "" + imovel.getLocalidade().getId(); } else { // [FS0005] - Verificar localidade da matr�cula do im�vel if (!this.getFachada().verificarLocalidadeMatriculaImovel(idLocalidade,imovel)) { throw new ActionServletException( "atencao.localidade_imovel_diferente", imovel.getLocalidade().getId().toString(), idLocalidade); } } } // Recupera o tipo de d�bito String idTipoDebito = manterPagamentoActionForm.getIdTipoDebito(); // Cria a vari�vel que vai armazenar o tipo de d�bito DebitoTipo debitoTipo = null; // Caso nenhum tipo de documento informado, levanta uma exce��o para o // usu�rio // indicando que o tipo de documento n�o foi informado if (idTipoDocumento == null || idTipoDocumento.equalsIgnoreCase("")) { throw new ActionServletException("atencao.naoinformado", null, "Tipo de Documento"); } //[FS0025] � Verificar valor do aviso banc�rio //Caso o valor calculado do aviso banc�rio seja maior que valor informado if ((avisoBancario.getValorArrecadacaoCalculado().subtract(avisoBancario.getValorDevolucaoCalculado())) .compareTo(avisoBancario.getValorArrecadacaoInformado().subtract(avisoBancario.getValorDevolucaoInformado())) == 1 ){ throw new ActionServletException("atencao.soma_dos_valores_maior_informado"); } // Cria o objeto que vai armazenar o tipo de documento DocumentoTipo documentoTipo = new DocumentoTipo(); // Caso o tipo de documento seja conta if (idTipoDocumento.equals(DocumentoTipo.CONTA.toString())) { // Seta o tipo de documento para conta documentoTipo.setId(new Integer(DocumentoTipo.CONTA)); // Recupera a refer�ncia da conta String referenciaConta = manterPagamentoActionForm.getReferenciaConta(); // [FS0008] - Verificar exist�ncia da conta Conta conta = this.getFachada().pesquisarContaDigitada(idImovel,referenciaConta); ContaHistorico contaHistorico = this.getFachada().pesquisarContaHistoricoDigitada(idImovel,referenciaConta); // Caso a conta com a refer�ncia informada n�o esteja cadastrada // no sistema if (conta == null) { // Caso o usu�rio n�o tenha passado pela p�gina de // confirma��o if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")) { httpServletRequest.setAttribute( "caminhoActionConclusao", "/gsan/atualizarPagamentosAction.do"); // Monta a p�gina de confirma��o para perguntar se o // usu�rio quer atualizar // o pagamento mesmo sem a conta existir para a // refer�ncia e o im�vel informados return montarPaginaConfirmacao( "atencao.referencia.naocadastrada", httpServletRequest, actionMapping, referenciaConta); } } // Formata a refer�ncia da conta para AAAAMM Integer anoMesReferencia = new Integer(Util.formatarMesAnoParaAnoMesSemBarra(referenciaConta)); // [SB0004] Atualiza Pagamento // Atualiza o pagamento para conta pagamentoAtualizacao.setAnoMesReferenciaPagamento(anoMesReferencia); pagamentoAtualizacao.setValorPagamento(valorPagamentoNovo); pagamentoAtualizacao.setDataPagamento(dataPagamento); pagamentoAtualizacao.setPagamentoSituacaoAtual(situacaoPagamentoAtual); pagamentoAtualizacao.setPagamentoSituacaoAnterior(situacaoPagamentoAnterior); pagamentoAtualizacao.setDebitoTipo(null); ContaGeral contaGeral = new ContaGeral(); if (conta != null) { contaGeral.setId(conta.getId()); contaGeral.setConta(conta); }else if( contaHistorico != null ){ contaGeral.setId(contaHistorico.getId()); contaGeral.setContaHistorico(contaHistorico); } pagamentoAtualizacao.setContaGeral(contaGeral); pagamentoAtualizacao.setGuiaPagamento(null); pagamentoAtualizacao.setDebitoACobrarGeral(null); pagamentoAtualizacao.setLocalidade(imovel.getLocalidade()); pagamentoAtualizacao.setDocumentoTipo(documentoTipo); pagamentoAtualizacao.setImovel(imovel); pagamentoAtualizacao.setCliente(null); // Caso o tipo de documento seja guia de pagamento } else if (idTipoDocumento.equals(DocumentoTipo.GUIA_PAGAMENTO.toString())) { // Seta o tipo de documento para guia de pagamento documentoTipo.setId(new Integer(DocumentoTipo.GUIA_PAGAMENTO)); // Recupera o c�digo do cliente String idCliente = manterPagamentoActionForm.getIdCliente(); // [FS0006] - Verificar preenchimento do im�vel e do cliente this.getFachada().verificarPreeenchimentoImovelECliente(idImovel,idCliente); // Caso o usu�rio tenha informado o cliente // Recupera o cliente informado do sistema Cliente cliente = null; if (idCliente != null && !idCliente.trim().equalsIgnoreCase("")) { // [FS0007] - Verificar exist�ncia do c�digo do cliente cliente = this.getFachada().pesquisarClienteDigitado(new Integer(idCliente)); } // Recupera o c�digo da guia de pagamento String idGuiaPagamento = manterPagamentoActionForm.getIdGuiaPagamento(); // [FS0021] - Verificar preenchimento da guia de pagamento e do // tipo de d�bito this.getFachada().verificarPreeenchimentoGuiaPagamentoETipoDebito( idGuiaPagamento, idTipoDebito); // Caso o usu�rio informou a guia de pagamento // Recupera a guia de pagamento informada do sistema GuiaPagamento guiaPagamento = null; if (idGuiaPagamento != null && !idGuiaPagamento.trim().equals("")) { // [FS0022] - Verificar exist�ncia da guia de pagamento guiaPagamento = this.getFachada().pesquisarGuiaPagamentoDigitada( idImovel, idCliente, idGuiaPagamento); // Caso exista guia de pagamento, seta o tipo de d�bito da // guia de pagamento // para o tipo de d�bito do pagamento que vai ser inserido debitoTipo = guiaPagamento.getDebitoTipo(); // [FS0010] - Verificar localidade da guia de pagamento this.getFachada().verificarLocalidadeGuiaPagamento(guiaPagamento,idLocalidade); } // Caso o tipo de d�bito tenha sido informado if (idTipoDebito != null && !idTipoDebito.trim().equals("")) { // [FS0020] - Verificar exist�ncia do tipo de d�bito debitoTipo = this.getFachada().pesquisarTipoDebitoDigitado( new Integer(idTipoDebito)); // [FS0009] - Verificar exist�ncia de guia de pagamento com // o tipo de d�bito informado if (idImovel != null && !idImovel.trim().equalsIgnoreCase("")) { guiaPagamento = this.getFachada().verificarExistenciaGuiaPagamentoComTipoDebito( debitoTipo, idImovel, null); } if (idCliente != null && !idCliente.trim().equalsIgnoreCase("")) { guiaPagamento = this.getFachada().verificarExistenciaGuiaPagamentoComTipoDebito( debitoTipo, null, idCliente); } // Caso n�o exista nenhuma guia de pagamento com o tipo de // d�bito informado if (guiaPagamento == null) { // Caso o usu�rio n�o tenha passado pela p�gina de // confirma��o do wizard if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")) { // Monta a p�gina de confirma��o para perguntar se o // usu�rio quer inserir // o pagamento mesmo sem existir guia de pagamento // para o tipo de d�bito e o im�vel // ou cliente informados if (idImovel != null && !idImovel.trim().equalsIgnoreCase("")) { httpServletRequest.setAttribute( "caminhoActionConclusao", "/gsan/atualizarPagamentosAction.do"); return montarPaginaConfirmacao( "atencao.guia_pagamento.naocadastrada", httpServletRequest, actionMapping, debitoTipo.getDescricao(), "Im�vel", idImovel); } return montarPaginaConfirmacao( "atencao.guia_pagamento.naocadastrada", httpServletRequest, actionMapping, debitoTipo.getDescricao(), "Cliente", idCliente); } } } // [SB0004] Atualiza Pagamento // Atualiza o pagamento para a guia de pagamento pagamentoAtualizacao.setAnoMesReferenciaPagamento(null); pagamentoAtualizacao.setValorPagamento(valorPagamentoNovo); pagamentoAtualizacao.setDataPagamento(dataPagamento); pagamentoAtualizacao.setPagamentoSituacaoAtual(situacaoPagamentoAtual); pagamentoAtualizacao.setPagamentoSituacaoAnterior(situacaoPagamentoAnterior); pagamentoAtualizacao.setDebitoTipo(debitoTipo); pagamentoAtualizacao.setContaGeral(null); pagamentoAtualizacao.setGuiaPagamento(guiaPagamento); pagamentoAtualizacao.setDebitoACobrarGeral(null); pagamentoAtualizacao.setLocalidade(localidade); pagamentoAtualizacao.setDocumentoTipo(documentoTipo); pagamentoAtualizacao.setImovel(imovel); pagamentoAtualizacao.setCliente(cliente); // Caso o tipo de documento seja d�bito a cobrar } else if (idTipoDocumento.equals(DocumentoTipo.DEBITO_A_COBRAR.toString())) { // Seta o tipo de documento do pagamento para d�bito a cobrar documentoTipo.setId(new Integer(DocumentoTipo.DEBITO_A_COBRAR)); // Recupera o c�digo do d�bito a cobrar String idDebitoACobrar = manterPagamentoActionForm.getIdDebitoACobrar(); // [FS0023] - Verificar preenchimento do d�bito a cobrar e do // tipo de d�bito this.getFachada().verificarPreeenchimentoDebitoACobrarETipoDebito( idDebitoACobrar, idTipoDebito); BigDecimal valorInformado = Util.formatarMoedaRealparaBigDecimal( manterPagamentoActionForm.getValorPagamento()); // Caso o usu�rio informou o d�bito a cobrar // Recupera o d�bito a cobrar informado do sistema DebitoACobrarGeral debitoACobrarGeral = null; if (idDebitoACobrar != null && !idDebitoACobrar.trim().equals("")) { // [FS0024] - Verificar exist�ncia do d�bito a cobrar debitoACobrarGeral = this.getFachada().pesquisarDebitoACobrarGeralDigitado( idImovel, idDebitoACobrar); if(debitoACobrarGeral.getDebitoACobrar() != null){ // Caso exista o d�bito a cobrar, seta o tipo de d�bito do // d�bito a cobrar // para o tipo de d�bito do pagamento que vai ser inserido debitoTipo = debitoACobrarGeral.getDebitoACobrar().getDebitoTipo(); //[FS0013] - Verificar localidade do d�bito a cobrar this.getFachada().verificarLocalidadeDebitoACobrarGeral(debitoACobrarGeral,idLocalidade); BigDecimal valorFaltaDebito = BigDecimal.ZERO; BigDecimal valorDebito = debitoACobrarGeral.getDebitoACobrar().getValorDebito(); short numeroPrestacaoDebito = debitoACobrarGeral.getDebitoACobrar().getNumeroPrestacaoDebito(); short numeroPrestacaoCobrada = debitoACobrarGeral.getDebitoACobrar().getNumeroPrestacaoCobradas(); // valorDebito = // valorDebito.divide(new BigDecimal(numeroPrestacaoDebito+"")); valorDebito = Util.dividirArredondando(valorDebito, new BigDecimal(numeroPrestacaoDebito+"") ); valorFaltaDebito = valorFaltaDebito.add(debitoACobrarGeral.getDebitoACobrar().getValorDebito()); valorFaltaDebito = valorFaltaDebito.subtract(valorDebito); valorFaltaDebito = valorFaltaDebito.multiply(new BigDecimal(numeroPrestacaoCobrada+"")); if(!valorInformado.equals(valorFaltaDebito)){ debitoACobrarGeral = null; } }else if(debitoACobrarGeral.getDebitoACobrarHistorico() !=null){ // Caso exista o d�bito a cobrar, seta o tipo de d�bito do // d�bito a cobrar // para o tipo de d�bito do pagamento que vai ser inserido debitoTipo = debitoACobrarGeral.getDebitoACobrarHistorico().getDebitoTipo(); //[FS0013] - Verificar localidade do d�bito a cobrar this.getFachada().verificarLocalidadeDebitoACobrarGeral( debitoACobrarGeral,idLocalidade); BigDecimal valorFaltaDebito = BigDecimal.ZERO; BigDecimal valorDebito = debitoACobrarGeral.getDebitoACobrarHistorico().getValorDebito(); short numeroPrestacaoDebito = debitoACobrarGeral.getDebitoACobrarHistorico().getPrestacaoDebito(); short numeroPrestacaoCobrada = debitoACobrarGeral.getDebitoACobrarHistorico().getPrestacaoCobradas(); valorDebito = valorDebito.divide(new BigDecimal(numeroPrestacaoDebito+"")); valorFaltaDebito = valorFaltaDebito.add(debitoACobrarGeral.getDebitoACobrarHistorico().getValorDebito()); valorFaltaDebito = valorFaltaDebito.subtract(valorDebito); valorFaltaDebito = valorFaltaDebito.multiply(new BigDecimal(numeroPrestacaoCobrada+"")); if(!valorInformado.equals(valorFaltaDebito)){ debitoACobrarGeral = null; } } } // Caso o tipo de d�bito tenha sido informado if (idTipoDebito != null && !idTipoDebito.trim().equals("")) { // [FS0020] - Verificar exist�ncia do tipo de d�bito debitoTipo = this.getFachada().pesquisarTipoDebitoDigitado( new Integer(idTipoDebito)); // [FS0012] - Verificar exist�ncia de d�bito a cobrar com o // tipo de d�bito debitoACobrarGeral = this.getFachada().verificarExistenciaDebitoACobrarGeralComTipoDebito( debitoTipo, idImovel, valorInformado); // Caso n�o exista nenhum d�bito a cobrar com o tipo de // d�bito informado if (debitoACobrarGeral.getDebitoACobrar() == null && debitoACobrarGeral.getDebitoACobrarHistorico() == null) { // Caso o usu�rio n�o tenha passado pela p�gina de // confirma��o do wizard if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")) { httpServletRequest.setAttribute( "caminhoActionConclusao", "/gsan/atualizarPagamentosAction.do"); // Monta a p�gina de confirma��o do wizard para // perguntar se o usu�rio quer inserir // o pagamento mesmo sem existir d�bito a cobrar // para o tipo de d�bito e o im�vel informados return montarPaginaConfirmacao( "atencao.debito_a_cobrar.naocadastrado", httpServletRequest, actionMapping, debitoTipo.getDescricao(), idImovel); } } } // [SB0004] Atualiza Pagamento // Atualiza o pagamento para o d�bito a cobrar pagamentoAtualizacao.setAnoMesReferenciaPagamento(null); pagamentoAtualizacao.setValorPagamento(valorPagamentoNovo); pagamentoAtualizacao.setDataPagamento(dataPagamento); pagamentoAtualizacao.setPagamentoSituacaoAtual(situacaoPagamentoAtual); pagamentoAtualizacao.setPagamentoSituacaoAnterior(situacaoPagamentoAnterior); pagamentoAtualizacao.setDebitoTipo(debitoTipo); pagamentoAtualizacao.setContaGeral(null); pagamentoAtualizacao.setGuiaPagamento(null); //DebitoACobrarGeral debitoACobrarGeral = null; if(debitoACobrarGeral != null){ if(debitoACobrarGeral.getDebitoACobrar() != null){ debitoACobrarGeral.setId(debitoACobrarGeral.getDebitoACobrar().getId()); }else if(debitoACobrarGeral.getDebitoACobrarHistorico() != null){ debitoACobrarGeral.setId(debitoACobrarGeral.getDebitoACobrarHistorico().getId()); } } pagamentoAtualizacao.setDebitoACobrarGeral(debitoACobrarGeral); pagamentoAtualizacao.setLocalidade(localidade); pagamentoAtualizacao.setDocumentoTipo(documentoTipo); pagamentoAtualizacao.setImovel(imovel); pagamentoAtualizacao.setCliente(null); } this.getFachada().atualizarPagamento(pagamentoAtualizacao); // Alterado por S�vio Luiz data:16/03/2007 BigDecimal valorArrecadacaoCalculado = avisoBancario.getValorArrecadacaoCalculado(); valorArrecadacaoCalculado = valorArrecadacaoCalculado.subtract(valorPagamentoAnteriror); valorArrecadacaoCalculado = valorArrecadacaoCalculado.add(valorPagamentoNovo); avisoBancario.setValorArrecadacaoCalculado(valorArrecadacaoCalculado); avisoBancario.setUltimaAlteracao(new Date()); this.getFachada().atualizar(avisoBancario); // Caso o retorno seja para a tela de sucesso, // Monta a tela de sucesso if (retorno.getName().equalsIgnoreCase("telaSucesso")) { montarPaginaSucesso(httpServletRequest, "Pagamento atualizado com sucesso.", "Realizar outra Manuten��o de Pagamento", "exibirFiltrarPagamentoAction.do?tela=manterPagamento&menu=sim"); } // Retorna o mapeamento contido na vari�vel retorno return retorno; } }