package gcom.cobranca.contratoparcelamento; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; import javax.ejb.CreateException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import gcom.arrecadacao.ArrecadacaoForma; import gcom.arrecadacao.Arrecadador; import gcom.arrecadacao.ArrecadadorContrato; import gcom.arrecadacao.ControladorArrecadacaoLocal; import gcom.arrecadacao.ControladorArrecadacaoLocalHome; import gcom.arrecadacao.FiltroArrecadador; import gcom.arrecadacao.FiltroArrecadadorContrato; import gcom.arrecadacao.aviso.AvisoBancario; import gcom.arrecadacao.pagamento.GuiaPagamento; import gcom.arrecadacao.pagamento.GuiaPagamentoItem; import gcom.arrecadacao.pagamento.Pagamento; import gcom.atendimentopublico.ordemservico.OrdemServico; import gcom.atendimentopublico.registroatendimento.RegistroAtendimento; import gcom.cadastro.cliente.Cliente; import gcom.cadastro.cliente.ClienteEndereco; import gcom.cadastro.cliente.ControladorClienteLocal; import gcom.cadastro.cliente.ControladorClienteLocalHome; import gcom.cadastro.cliente.FiltroClienteEndereco; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.localidade.Localidade; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.cobranca.CobrancaDebitoSituacao; import gcom.cobranca.CobrancaDocumento; import gcom.cobranca.CobrancaDocumentoItem; import gcom.cobranca.CobrancaForma; import gcom.cobranca.ControladorCobrancaLocal; import gcom.cobranca.ControladorCobrancaLocalHome; import gcom.cobranca.DocumentoEmissaoForma; import gcom.cobranca.DocumentoTipo; import gcom.cobranca.FiltroCobrancaDocumentoItem; import gcom.cobranca.NegativadorMovimentoRegItem; import gcom.cobranca.bean.ContaValoresHelper; import gcom.cobranca.parcelamento.Parcelamento; import gcom.cobranca.parcelamento.ParcelamentoSituacao; import gcom.fachada.Fachada; import gcom.faturamento.ControladorFaturamentoLocal; import gcom.faturamento.ControladorFaturamentoLocalHome; import gcom.faturamento.GuiaPagamentoGeral; import gcom.faturamento.IRepositorioFaturamento; import gcom.faturamento.RepositorioFaturamentoHBM; import gcom.faturamento.conta.Conta; import gcom.faturamento.conta.ContaGeral; import gcom.faturamento.conta.ContaMotivoRevisao; import gcom.faturamento.debito.DebitoACobrar; import gcom.faturamento.debito.DebitoACobrarGeral; import gcom.faturamento.debito.DebitoCreditoSituacao; import gcom.faturamento.debito.DebitoTipo; import gcom.financeiro.FinanciamentoTipo; import gcom.financeiro.lancamento.LancamentoItemContabil; import gcom.gui.ActionServletException; import gcom.gui.cobranca.contratoparcelamento.DebitosClienteHelper; import gcom.interceptor.RegistradorOperacao; import gcom.relatorio.cobranca.RelatorioEmitirContratoParcelamentoPorClienteBean; import gcom.relatorio.cobranca.RelatorioEmitirContratoParcelamentoPorClienteSubCliBean; import gcom.relatorio.cobranca.RelatorioEmitirContratoParcelamentoPorClienteSubContaBean; import gcom.relatorio.cobranca.RelatorioEmitirContratoParcelamentoPorClienteSubDebitoACobrarBean; import gcom.relatorio.cobranca.RelatorioEmitirContratoParcelamentoPorClienteSubParcBean; import gcom.relatorio.cobranca.contratoparcelamento.EmitirExtratoContratoParcelamentoPorClienteHelper; import gcom.relatorio.cobranca.contratoparcelamento.FiltrarRelatorioEmitirContratoParcelamentoPorClienteHelper; import gcom.relatorio.cobranca.contratoparcelamento.RelatorioEmitirExtratoContratoParcelamentoPorClienteBean; import gcom.relatorio.cobranca.contratoparcelamento.RelatorioManterContratoParcelamentoPorClienteBean; import gcom.relatorio.cobranca.contratoparcelamento.RelatorioManterContratoParcelamentoRDBean; import gcom.relatorio.cobranca.contratoparcelamento.SubRelatorioCondicoesPagtoManterContratoParcelamentoPorClienteBean; import gcom.relatorio.cobranca.contratoparcelamento.SubRelatorioDadosPagtoManterContratoParcelamentoPorClienteBean; import gcom.seguranca.acesso.Funcionalidade; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.acesso.usuario.UsuarioAcao; import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper; import gcom.spcserasa.ControladorSpcSerasaLocal; import gcom.spcserasa.ControladorSpcSerasaLocalHome; import gcom.spcserasa.FiltroNegativadorMovimentoRegItem; import gcom.util.CodigoBarras; import gcom.util.ConstantesJNDI; import gcom.util.ConstantesSistema; import gcom.util.ControladorException; import gcom.util.ControladorUtilLocal; import gcom.util.ControladorUtilLocalHome; import gcom.util.ErroRepositorioException; import gcom.util.ServiceLocator; import gcom.util.ServiceLocatorException; import gcom.util.SistemaException; import gcom.util.Util; import gcom.util.filtro.ComparacaoCampos; import gcom.util.filtro.ComparacaoTexto; import gcom.util.filtro.ParametroSimples; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; /** * Defini��o da l�gica de neg�cio do Session Bean de ControladorContratoParcelamento * * @author Paulo Diniz * @created 18 de mar�o de 2011 */ public class ControladorContratoParcelamentoSEJB implements SessionBean { private static final long serialVersionUID = 1L; private IRepositorioContratoParcelamento repositorioContratoParcelamento; protected IRepositorioFaturamento repositorioFaturamento; SessionContext sessionContext; /** * < <Descri��o do m�todo>> * * @exception CreateException * Descri��o da exce��o */ public void ejbCreate() throws CreateException { repositorioContratoParcelamento = RepositorioContratoParcelamentoHBM.getInstancia(); repositorioFaturamento = RepositorioFaturamentoHBM.getInstancia(); } /** * < <Descri��o do m�todo>> */ public void ejbRemove() { } /** * < <Descri��o do m�todo>> */ public void ejbActivate() { } /** * < <Descri��o do m�todo>> */ public void ejbPassivate() { } /** * Seta o valor de sessionContext * * @param sessionContext * O novo valor de sessionContext */ public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } /** * Retorna o valor de controladorUtil * * @return O valor de controladorUtil */ private ControladorUtilLocal getControladorUtil() { ControladorUtilLocalHome localHome = null; ControladorUtilLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorUtilLocalHome) locator .getLocalHome(ConstantesJNDI.CONTROLADOR_UTIL_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas � // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * Retorna o valor de controladorCliente * * @return O valor de controladorCliente */ private ControladorClienteLocal getControladorCliente() { ControladorClienteLocalHome localHome = null; ControladorClienteLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorClienteLocalHome) locator .getLocalHome(ConstantesJNDI.CONTROLADOR_CLIENTE_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * Author: Rafael Santos Data: 04/01/2006 * * Retorna o valor do Controlador de Cobranca * * @return O valor de controladorCobrancaLocal */ private ControladorCobrancaLocal getControladorCobranca() { ControladorCobrancaLocalHome localHome = null; ControladorCobrancaLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorCobrancaLocalHome) locator .getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_COBRANCA_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * Retorna o valor de controladorLocalidade * * @return O valor de controladorLocalidade */ private ControladorFaturamentoLocal getControladorFaturamento() { ControladorFaturamentoLocalHome localHome = null; ControladorFaturamentoLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorFaturamentoLocalHome) locator .getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_FATURAMENTO_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } protected ControladorSpcSerasaLocal getControladorSpcSerasa() { ControladorSpcSerasaLocalHome localHome = null; ControladorSpcSerasaLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorSpcSerasaLocalHome) locator .getLocalHome(ConstantesJNDI.CONTROLADOR_SPC_SERASA_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas � // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } protected ControladorArrecadacaoLocal getControladorArrecadacao() { ControladorArrecadacaoLocalHome localHome = null; ControladorArrecadacaoLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorArrecadacaoLocalHome) locator .getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_ARRECADACAO_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas � // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * Inseri um ContratoParcelamento e suas QuantidadesPrestacoes associadas * * [UC1133] Inserir Resolu��o de Diretoria para Contratos de Parcelamento por Cliente * * * @author Paulo Diniz * @date 16/03/2011 * * @param contrato * @param parcelas que o contrato possui * @throws ControladorException */ public Integer inserirContratoParcelamentoRD(ContratoParcelamentoRD contrato, List<QuantidadePrestacoes> parcelas, Usuario usuarioLogado) throws ControladorException{ Integer retorno = null; try{ contrato.setUltimaAlteracao(new Date()); retorno = (Integer) this.getControladorUtil().inserir(contrato); contrato.setId(retorno); for (QuantidadePrestacoes prestacoes : parcelas) { prestacoes.setContratoRD(contrato); this.getControladorUtil().inserir(prestacoes); } // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_INSERIR_CONTRATO_PARCELAMENTO_RD, contrato.getId(), contrato.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(contrato); // ------------ REGISTRAR TRANSA��O ---------------- }catch (Exception ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } return retorno; } /** * Atualizar um ContratoParcelamento e suas QuantidadesPrestacoes associadas * * [UC1133] Inserir Resolu��o de Diretoria para Contratos de Parcelamento por Cliente * * * @author Paulo Diniz * @date 16/03/2011 * * @param contrato * @param parcelas que o contrato possui * @throws ControladorException */ public void atualizarContratoParcelamentoRD(ContratoParcelamentoRD contrato, List<QuantidadePrestacoes> parcelasAtualizar, Usuario usuarioLogado) throws ControladorException{ try{ contrato.setUltimaAlteracao(new Date()); this.getControladorUtil().atualizar(contrato); boolean atualizarPrestacoes = false; // [FS0003] - Atualiza��o realizada por outro usu�rio FiltroContratoParcelamentoRD filtro = new FiltroContratoParcelamentoRD(); filtro.adicionarParametro(new ParametroSimples( FiltroContratoParcelamentoRD.CONTRATO_PARCELAMENTO_RD_ID, contrato.getId())); Collection colecao = getControladorUtil() .pesquisar(filtro, ContratoParcelamentoRD.class.getName()); if (colecao == null || colecao.isEmpty()) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizacao.timestamp"); } ContratoParcelamentoRD contratoBase = (ContratoParcelamentoRD) colecao .iterator().next(); if (contratoBase.getUltimaAlteracao().after( contrato.getUltimaAlteracao())) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizacao.timestamp"); } FiltroQuantidadePrestacoes filtroParcelas = new FiltroQuantidadePrestacoes(FiltroQuantidadePrestacoes.QTD_FATURAS_PARCELADAS); filtroParcelas.adicionarParametro(new ComparacaoTexto( FiltroQuantidadePrestacoes.CONTRATO_PARCELAMENTO_RD_NUMERO, contrato.getNumero().toUpperCase())); List<QuantidadePrestacoes> parcelasAntes = new ArrayList<QuantidadePrestacoes>(this.getControladorUtil().pesquisar(filtroParcelas,QuantidadePrestacoes.class.getName())); Collections.sort(parcelasAntes, new ComparatorParcela()); Collections.sort(parcelasAtualizar, new ComparatorParcela()); if(parcelasAntes.size() != parcelasAtualizar.size()){ atualizarPrestacoes = true; }else{ for (int i = 0; i < parcelasAntes.size(); i++) { if(parcelasAntes.get(i).getQtdFaturasParceladas().intValue() != parcelasAtualizar.get(i).getQtdFaturasParceladas().intValue() || parcelasAntes.get(i).getTaxaJuros().doubleValue() != parcelasAtualizar.get(i).getQtdFaturasParceladas().doubleValue()){ atualizarPrestacoes = true; } } } if(atualizarPrestacoes){ for (int i = 0; i < parcelasAntes.size(); i++) { this.getControladorUtil().remover(parcelasAntes.get(i)); } for (QuantidadePrestacoes prestacoes : parcelasAtualizar) { prestacoes.setContratoRD(contrato); this.getControladorUtil().inserir(prestacoes); } } // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_ATUALIZAR_CONTRATO_PARCELAMENTO_RD, contrato.getId(), contrato.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(contrato); // ------------ REGISTRAR TRANSA��O ---------------- }catch (Exception ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * Pesquisa ContratoParcelamentoRD por numero * * [UC1133] Inserir Resolu��o de Diretoria para Contratos de Parcelamento por Cliente * * * @author Paulo Diniz * @date 16/03/2011 * * @param numero do contrato * @throws ControladorException */ public ContratoParcelamentoRD pesquisarContratoParcelamentoRDPorNumero(String numero) throws ControladorException{ try { return repositorioContratoParcelamento.pesquisarContratoParcelamentoRDPorNumero(numero); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * Atualizar um ContratoParcelamento e suas QuantidadesPrestacoes associadas * * [UC1134] Manter Resolu��o de Diretoria para Contratos de Parcelamento por Cliente * * * @author Paulo Diniz * @date 16/03/2011 * * @param contrato * @param parcelas que o contrato possui * @throws ControladorException */ public boolean excluirContratosParcelamentoRD(String[] ids, Usuario usuarioLogado) throws ControladorException{ boolean retorno = false; try { for (String id : ids) { FiltroContratoParcelamentoRD filtroContrato = new FiltroContratoParcelamentoRD(); filtroContrato.adicionarParametro(new ComparacaoCampos(FiltroContratoParcelamentoRD.CONTRATO_PARCELAMENTO_RD_ID, id)); ContratoParcelamentoRD contrato = this.pesquisarContratoParcelamentoRDPorID(Integer.parseInt(id)); FiltroQuantidadePrestacoes filtroParcela = new FiltroQuantidadePrestacoes(FiltroQuantidadePrestacoes.QTD_FATURAS_PARCELADAS); filtroParcela.adicionarParametro(new ComparacaoTexto( FiltroQuantidadePrestacoes.CONTRATO_PARCELAMENTO_RD_NUMERO, contrato.getNumero().toUpperCase())); List<QuantidadePrestacoes> parcelas = new ArrayList<QuantidadePrestacoes>(this.getControladorUtil().pesquisar(filtroParcela,QuantidadePrestacoes.class.getName())); for (QuantidadePrestacoes prestacoes : parcelas) { this.getControladorUtil().remover(prestacoes); } this.getControladorUtil().remover(contrato); // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_ATUALIZAR_CONTRATO_PARCELAMENTO_RD, contrato.getId(), contrato.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(contrato); // ------------ REGISTRAR TRANSA��O ---------------- retorno = true; } } catch (Exception ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } return retorno; } /** * Pesquisa ContratoParcelamentoRD por id * * [UC1134] Manter Resolu��o de Diretoria para Contratos de Parcelamento por Cliente * * * @author Paulo Diniz * @date 16/03/2011 * * @param numero do contrato * @throws ControladorException */ public ContratoParcelamentoRD pesquisarContratoParcelamentoRDPorID(Integer id) throws ControladorException{ try { return repositorioContratoParcelamento.pesquisarContratoParcelamentoRDPorID(id); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * Verifica Resolu��o de Diretoria associada a um Contrato Parcelamento n�o Encerrado * * [UC1134] Atualizar Resolu��o de Diretoria para Contratos de Parcelamento por Cliente * * * @author Paulo Diniz * @date 10/04/2011 * */ public boolean verificaResolucaoDiretoriaAssociadaContratoParcelamentoNaoEncerrado(Integer id) throws ControladorException{ try { return repositorioContratoParcelamento.verificaResolucaoDiretoriaAssociadaContratoParcelamentoNaoEncerrado(id); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * Verifica Conta Vinculada a um Contrato Parcelamento por Cliente Item * * [UC1143] Consultar Dados do Contrato de Parcelamento por Cliente * * * @author Paulo Diniz * @date 10/05/2011 * */ public boolean verificaContaVinculadaAContratoParcel(Integer idConta, Integer idContrato) throws ControladorException { try { return repositorioContratoParcelamento.verificaContaVinculadaAContratoParcel(idConta, idContrato); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * Gerar Relatorio dos ContratoParcelamentoRD selecionados * * [UC1134] Manter Resolu��o de Diretoria para Contratos de Parcelamento por Cliente * * * @author Paulo Diniz * @date 16/03/2011 * * @param ids dos Contratos * @param filtro da Busca * @throws ControladorException */ public List<RelatorioManterContratoParcelamentoRDBean> gerarRelatorioManterContratoParcelamentoRD(FiltroContratoParcelamentoRD filtro) throws ControladorException{ filtro.adicionarCaminhoParaCarregamentoEntidade("cobrancaForma"); List<RelatorioManterContratoParcelamentoRDBean> beans = new ArrayList<RelatorioManterContratoParcelamentoRDBean>(); List<ContratoParcelamentoRD> contratosPesquisa = new ArrayList<ContratoParcelamentoRD>(this.getControladorUtil().pesquisar(filtro, ContratoParcelamentoRD.class.getName())); for (ContratoParcelamentoRD contratoRD : contratosPesquisa) { FiltroQuantidadePrestacoes filtroParcela = new FiltroQuantidadePrestacoes(FiltroQuantidadePrestacoes.QTD_FATURAS_PARCELADAS); filtroParcela.adicionarParametro(new ComparacaoTexto( FiltroQuantidadePrestacoes.CONTRATO_PARCELAMENTO_RD_NUMERO, contratoRD.getNumero().toUpperCase())); List<QuantidadePrestacoes> parcelas = new ArrayList<QuantidadePrestacoes>(this.getControladorUtil().pesquisar(filtroParcela,QuantidadePrestacoes.class.getName())); if(parcelas != null && parcelas.size() > 0){ for (QuantidadePrestacoes parcela : parcelas) { RelatorioManterContratoParcelamentoRDBean bean = new RelatorioManterContratoParcelamentoRDBean(); bean.setNumero(contratoRD.getNumero()); bean.setAssunto(contratoRD.getAssunto()); bean.setQtdFaturasParceladas(contratoRD.getQtdFaturasParceladas().toString()); bean.setFormaPagamento(contratoRD.getCobrancaForma().getDescricao()); if(contratoRD.getIndicadorDebitoAcrescimo().intValue() == 1){ bean.setIndicadorDebitoAcrescimo("Sim"); }else{ bean.setIndicadorDebitoAcrescimo("N�o"); } if(contratoRD.getIndicadorInformarParcela().intValue() == 1){ bean.setIndicadorInformarParcela("Sim"); }else{ bean.setIndicadorInformarParcela("N�o"); } if(contratoRD.getIndicadorParcelamentoJuros().intValue() == 1){ bean.setIndicadorParcelamentoJuros("Sim"); }else{ bean.setIndicadorParcelamentoJuros("N�o"); } bean.setVigenciaInicial(contratoRD.getDataVigenciaInicioFormatada()); bean.setVigenciaFinal(contratoRD.getDataVigenciaFinalFormatada()); bean.setParcelas(parcela.getQtdFaturasParceladas().toString()); bean.setTaxaJuros(parcela.getTaxaJuros().toString()); beans.add(bean); } }else{ RelatorioManterContratoParcelamentoRDBean bean = new RelatorioManterContratoParcelamentoRDBean(); bean.setNumero(contratoRD.getNumero()); bean.setAssunto(contratoRD.getAssunto()); bean.setQtdFaturasParceladas(contratoRD.getQtdFaturasParceladas().toString()); bean.setFormaPagamento(contratoRD.getCobrancaForma().getDescricao()); if(contratoRD.getIndicadorDebitoAcrescimo().intValue() == 1){ bean.setIndicadorDebitoAcrescimo("Sim"); }else{ bean.setIndicadorDebitoAcrescimo("N�o"); } if(contratoRD.getIndicadorInformarParcela().intValue() == 1){ bean.setIndicadorInformarParcela("Sim"); }else{ bean.setIndicadorInformarParcela("N�o"); } if(contratoRD.getIndicadorParcelamentoJuros().intValue() == 1){ bean.setIndicadorParcelamentoJuros("Sim"); }else{ bean.setIndicadorParcelamentoJuros("N�o"); } bean.setVigenciaInicial(contratoRD.getDataVigenciaInicioFormatada()); bean.setVigenciaFinal(contratoRD.getDataVigenciaFinalFormatada()); bean.setParcelas(""); bean.setTaxaJuros(""); beans.add(bean); } } return beans; } /** * Gerar Relatorio dos ContratoParcelamentoPorCLiente selecionados * * [UC1137] Manter Contrato de Parcelamento por Cliente * * * @author Paulo Diniz * @date 16/03/2011 * * @param ids dos Contratos * @param filtro da Busca * @throws ControladorException */ public List<RelatorioManterContratoParcelamentoPorClienteBean> gerarRelatorioManterContratoParcelamentoPorCliente(FiltroContratoParcelamentoCliente filtroContrato) throws ControladorException { filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("cliente"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.contratoAnterior"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.parcelamentoSituacao"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.usuarioResponsavel"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.relacaoAnterior"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.relacaoCliente"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.resolucaoDiretoria"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.cobrancaForma"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.motivoDesfazer"); filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.qtdPrestacoesDaRDEscolhida"); List<RelatorioManterContratoParcelamentoPorClienteBean> beans = new ArrayList<RelatorioManterContratoParcelamentoPorClienteBean>(); List<ContratoParcelamentoCliente> contratosPesquisa = new ArrayList<ContratoParcelamentoCliente>(this.getControladorUtil().pesquisar(filtroContrato, ContratoParcelamentoCliente.class.getName())); for (ContratoParcelamentoCliente contratoCliente : contratosPesquisa) { RelatorioManterContratoParcelamentoPorClienteBean beanContrato = new RelatorioManterContratoParcelamentoPorClienteBean(); beanContrato.setClienteDescricao(contratoCliente.getCliente().getNome()); beanContrato.setNumeroContrato(contratoCliente.getContrato().getNumero()); if(contratoCliente.getContrato().getContratoAnterior() != null){ beanContrato.setNumeroContratoAnterior(contratoCliente.getContrato().getContratoAnterior().getNumero()); beanContrato.setTipoRelacaoAnterior(contratoCliente.getContrato().getRelacaoAnterior().getDescricao()); }else{ beanContrato.setNumeroContratoAnterior(""); beanContrato.setTipoRelacaoAnterior(""); } beanContrato.setClienteDescricao(contratoCliente.getCliente().getDescricao()); beanContrato.setUsuarioDescricao(contratoCliente.getContrato().getUsuarioResponsavel().getNomeUsuario()); beanContrato.setDataContrato(contratoCliente.getContrato().getDataContratoFormatada()); if(contratoCliente.getContrato().getDataImplantacao() != null){ beanContrato.setDataImplantacao(Util.formatarData(contratoCliente.getContrato().getDataImplantacao())); }else{ beanContrato.setDataImplantacao(""); } if(contratoCliente.getContrato().getAnoMesDebitoInicio() != null){ beanContrato.setDataReferenciaInicial(contratoCliente.getContrato().getAnoMesDebitoInicioFormatado()); }else{ beanContrato.setDataReferenciaInicial(""); } if(contratoCliente.getContrato().getAnoMesDebitoFinal() != null){ beanContrato.setDataReferenciaFinal(contratoCliente.getContrato().getAnoMesDebitoFinalFormatado()); }else{ beanContrato.setDataReferenciaFinal(""); } if(contratoCliente.getContrato().getDataVencimentoInicio() != null){ beanContrato.setDataVencimentoInicial(contratoCliente.getContrato().getDataVencimentoInicioFormatada()); }else{ beanContrato.setDataVencimentoInicial(""); } if(contratoCliente.getContrato().getDataVencimentoFinal() != null){ beanContrato.setDataVencimentoFinal(contratoCliente.getContrato().getDataVencimentoFinalFormatada()); }else{ beanContrato.setDataVencimentoFinal(""); } if(contratoCliente.getContrato().getValorParcelamentoACobrar() != null && contratoCliente.getContrato().getValorParcelamentoACobrar().floatValue() > 0f){ beanContrato.setSituacaoPagamento("Pendente"); }else{ beanContrato.setSituacaoPagamento("Pago"); } if(contratoCliente.getContrato().getMotivoDesfazer() != null){ beanContrato.setSituacaoCancelamento("Sim"); beanContrato.setDataCancelamento(Util.formatarData(contratoCliente.getContrato().getDataCancelamento())); beanContrato.setMotivoCancelamento(""); }else{ beanContrato.setSituacaoCancelamento("N�o"); beanContrato.setDataCancelamento(""); beanContrato.setMotivoCancelamento(""); } beanContrato.setObservacao(contratoCliente.getContrato().getObservacao()); BigDecimal totalDebito = contratoCliente.getContrato().getValorDebitoAtualizado(); if(contratoCliente.getContrato().getValorDebitoAtualizado() != null && contratoCliente.getContrato().getValorTotalAcrescImpontualidade() != null){ totalDebito = contratoCliente.getContrato().getValorDebitoAtualizado().subtract(contratoCliente.getContrato().getValorTotalAcrescImpontualidade()); } beanContrato.setTotalDebito(Util.formatarMoedaReal(totalDebito)); beanContrato.setTotalDebitoAtualizado(Util.formatarMoedaReal(contratoCliente.getContrato().getValorDebitoAtualizado())); beanContrato.setTotalAcrescImpontualidade(Util.formatarMoedaReal(contratoCliente.getContrato().getValorTotalAcrescImpontualidade())); beanContrato.setTotalDebitoComAcresc(Util.formatarMoedaReal(contratoCliente.getContrato().getValorDebitoAtualizado())); beanContrato.setTaxaJuros(Util.formatarMoedaReal(contratoCliente.getContrato().getTaxaJuros())+"%"); beanContrato.setValorParcelado(Util.formatarMoedaReal(contratoCliente.getContrato().getValorTotalParcelado())); if(contratoCliente.getContrato().getValorJurosParcelamento() != null){ beanContrato.setTotalJuros(Util.formatarMoedaReal(contratoCliente.getContrato().getValorJurosParcelamento())); }else{ beanContrato.setTotalJuros(""); } if(contratoCliente.getContrato().getValorParcelamentoACobrar() != null){ beanContrato.setValorParceladoACobrar(Util.formatarMoedaReal(contratoCliente.getContrato().getValorParcelamentoACobrar())); }else{ beanContrato.setValorParceladoACobrar(""); } FiltroPrestacaoContratoParcelamento filtroPrestacao = new FiltroPrestacaoContratoParcelamento(); filtroPrestacao.adicionarParametro(new ParametroSimples(FiltroPrestacaoContratoParcelamento.CONTRATO_PARCELAMENTO_ID, contratoCliente.getContrato().getId())); Collection<PrestacaoContratoParcelamento> collParcelas = getControladorUtil().pesquisar(filtroPrestacao, PrestacaoContratoParcelamento.class.getName()); List<SubRelatorioCondicoesPagtoManterContratoParcelamentoPorClienteBean> subRelatorioCondicoes = new ArrayList<SubRelatorioCondicoesPagtoManterContratoParcelamentoPorClienteBean>(); List<SubRelatorioDadosPagtoManterContratoParcelamentoPorClienteBean> subRelatorioDadosPagto = new ArrayList<SubRelatorioDadosPagtoManterContratoParcelamentoPorClienteBean>(); for (PrestacaoContratoParcelamento prestacao : collParcelas) { SubRelatorioCondicoesPagtoManterContratoParcelamentoPorClienteBean beanCondicoes = new SubRelatorioCondicoesPagtoManterContratoParcelamentoPorClienteBean(); beanCondicoes.setParcelaNumero(prestacao.getNumero()+ "/" + collParcelas.size()); beanCondicoes.setDataVencParcel(prestacao.getDataVencimentoFormatada()); beanCondicoes.setValorParcel(Util.formatarMoedaReal(prestacao.getValor())); if(this.verificaPrestacaoPaga(prestacao.getId())){ beanCondicoes.setSituacaoParcel("Paga"); SubRelatorioDadosPagtoManterContratoParcelamentoPorClienteBean beanDadosPagto = new SubRelatorioDadosPagtoManterContratoParcelamentoPorClienteBean(); beanDadosPagto.setParcelaNumero(prestacao.getNumero()+ "/" + collParcelas.size()); beanDadosPagto.setDataVenc(prestacao.getDataVencimentoFormatada()); beanDadosPagto.setDataPagto(prestacao.getDataPagamentoFormatada()); beanDadosPagto.setValParcel(Util.formatarMoedaReal(prestacao.getValor())); beanDadosPagto.setValPagto(Util.formatarMoedaReal(prestacao.getValorPagamento())); FiltroPrestacaoItemContratoParcelamento filtroPrestItem = new FiltroPrestacaoItemContratoParcelamento(); filtroPrestItem.adicionarParametro(new ParametroSimples(FiltroPrestacaoItemContratoParcelamento.PRESTACAO_ID, prestacao.getId().intValue())); Collection<PrestacaoItemContratoParcelamento> itensPagos = getControladorUtil().pesquisar(filtroPrestItem, PrestacaoItemContratoParcelamento.class.getName()); if(itensPagos != null && itensPagos.size() != 0){ beanDadosPagto.setQtdItensPagos(itensPagos.size() +""); }else{ beanDadosPagto.setQtdItensPagos("0"); } subRelatorioDadosPagto.add(beanDadosPagto); }else{ beanCondicoes.setSituacaoParcel(""); } subRelatorioCondicoes.add(beanCondicoes); } beanContrato.setArrayJRDadosCondicoesParcel(subRelatorioCondicoes); beanContrato.setArrayJRDadosPagamento(subRelatorioDadosPagto); beans.add(beanContrato); } return beans; } /** * [UC1136] Inserir Contrato de Parcelamento por Cliente * * [SB0014] - Inserir Contrato de Parcelamento Por Cliente * * Permite a inclus�o de contrato de parcelamento por cliente. * * @author Paulo Diniz, Mariana Victor * @date 16/03/2011, 21/07/2011 * * @param contrato * @throws ControladorException */ public Integer inserirContratoParcelamentoPorCliente(ContratoParcelamento contrato, Usuario usuarioLogado, ContratoParcelamentoCliente clienteContrato, ContratoParcelamentoCliente clienteSuperiorContrato, List<DebitosClienteHelper> listaDebitos, List<PrestacaoContratoParcelamento> listaDeParcelas) throws ControladorException{ Integer idContrato = null; try{ contrato.setUltimaAlteracao(new Date()); idContrato = (Integer) this.getControladorUtil().inserir(contrato); contrato.setId(idContrato); if(clienteContrato != null){ clienteContrato.setContrato(contrato); clienteContrato.setIndicadorClienteSuperior(new Short("2")); clienteContrato.setUltimaAlteracao( new Date()); clienteContrato.setClienteSuperior(null); Integer idClienteContratoInserido = (Integer) this.getControladorUtil().inserir(clienteContrato); clienteContrato.setId(idClienteContratoInserido); }else if(clienteSuperiorContrato != null){ clienteSuperiorContrato.setContrato(contrato); clienteSuperiorContrato.setIndicadorClienteSuperior(new Short("1")); clienteSuperiorContrato.setUltimaAlteracao( new Date()); clienteSuperiorContrato.setClienteSuperior(null); Integer idClienteContratoSuperiorInserido = (Integer) this.getControladorUtil().inserir(clienteSuperiorContrato); clienteSuperiorContrato.setId(idClienteContratoSuperiorInserido); Collection<Integer> clientesVinculados = this.getControladorCliente().pesquisarClientesAssociadosResponsavel(clienteSuperiorContrato.getCliente().getId().intValue()); for (Integer idCliente : clientesVinculados) { ContratoParcelamentoCliente contratoParcelCliente = new ContratoParcelamentoCliente(); contratoParcelCliente.setContrato(contrato); Cliente cliente = new Cliente(); cliente.setId(idCliente); contratoParcelCliente.setCliente(cliente); contratoParcelCliente.setIndicadorClienteSuperior(new Short("2")); contratoParcelCliente.setUltimaAlteracao( new Date()); contratoParcelCliente.setClienteSuperior(clienteSuperiorContrato); this.getControladorUtil().inserir(contratoParcelCliente); } } for (DebitosClienteHelper debitosClienteHelper : listaDebitos) { ContratoParcelamentoItem parcelItem = new ContratoParcelamentoItem(); parcelItem.setContrato(contrato); DocumentoTipo docTipo = new DocumentoTipo(); docTipo.setId(debitosClienteHelper.getTipoDocumento()); parcelItem.setDocumentoTipo(docTipo); parcelItem.setValorItem(debitosClienteHelper.getValorItem()); parcelItem.setValarAcrescImpont(debitosClienteHelper.getValorAcrescImpont()); parcelItem.setUltimaAlteracao(new Date()); parcelItem.setIndicadorItemCancelado(new Short("2")); if (debitosClienteHelper.getTipoDocumento().compareTo(DocumentoTipo.CONTA) == 0) { ContaGeral contaGeral = new ContaGeral(); contaGeral.setId(debitosClienteHelper.getIdentificadorItem()); parcelItem.setContaGeral(contaGeral); Collection colecaoContas = (Collection) this.getControladorFaturamento().obterConta(contaGeral.getId()); Conta conta = (Conta)colecaoContas.iterator().next(); if(conta.getDataRevisao() != null){ getControladorFaturamento().retirarRevisaoConta(colecaoContas, conta.getId().intValue()+"", usuarioLogado, false, Funcionalidade.INSERIR_CONTRATO_PARCELAMENTO_POR_CLIENTE ); } ContaMotivoRevisao motivoRevisao = new ContaMotivoRevisao(); motivoRevisao.setId(ContaMotivoRevisao.CONTA_EM_CONTRATO_PARCELAMENTO); getControladorFaturamento().colocarRevisaoConta(colecaoContas, conta.getId()+"", motivoRevisao, usuarioLogado); } else if (debitosClienteHelper.getTipoDocumento().compareTo(DocumentoTipo.DEBITO_A_COBRAR) == 0) { DebitoACobrarGeral debitoACobrarGeral = new DebitoACobrarGeral(); debitoACobrarGeral.setId(debitosClienteHelper.getIdentificadorItem()); parcelItem.setDebitoACobrarGeral(debitoACobrarGeral); DebitoACobrar debitoACobrar = this.getControladorFaturamento().obterDebitoACobrar(debitoACobrarGeral.getId()); Collection colecaoDebitoACobrar = new ArrayList(); colecaoDebitoACobrar.add(debitoACobrar); if(debitoACobrar.getDataRevisao() != null){ getControladorFaturamento().retirarRevisaoDebitoACobrar(colecaoDebitoACobrar, usuarioLogado); } ContaMotivoRevisao motivoRevisao = new ContaMotivoRevisao(); motivoRevisao.setId(ContaMotivoRevisao.DEBITO_A_COBRAR_EM_CONTRATO_PARCELAMENTO); getControladorFaturamento().colocarRevisaoDebitoACobrar(colecaoDebitoACobrar, motivoRevisao, usuarioLogado); } this.getControladorUtil().inserir(parcelItem); } int indicadorGuiaAcrecImpontualidade = 2; if(contrato.getIndicadorDebitosAcrescimos().intValue() == 1 && contrato.getValorTotalAcrescImpontualidade() != null && contrato.getValorTotalAcrescImpontualidade().floatValue() > 0.0){ indicadorGuiaAcrecImpontualidade = 1; } int indicadorGuiaJurosSobreContratoParcel = 2; if(contrato.getIndicadorParcelamentoJuros().intValue() == 1 && contrato.getValorJurosParcelamento() != null && contrato.getValorJurosParcelamento().floatValue() > 0.0){ indicadorGuiaJurosSobreContratoParcel = 1; } Date dataVencPacel = contrato.getDataVencimentoPrimParcela(); List<PrestacaoContratoParcelamento> colecaoPrestacaoContratoParcelamento = new ArrayList<PrestacaoContratoParcelamento>(); PrestacaoContratoParcelamento prestacaoContratoParcelamento = listaDeParcelas.get(0); prestacaoContratoParcelamento.setDataVencimento(dataVencPacel); prestacaoContratoParcelamento.setContratoParcelamento(contrato); prestacaoContratoParcelamento.setUltimaAlteracao(new Date()); Integer idPrestacao = (Integer) this.getControladorUtil().inserir(prestacaoContratoParcelamento); prestacaoContratoParcelamento.setId(idPrestacao); colecaoPrestacaoContratoParcelamento.add(prestacaoContratoParcelamento); for (int i = 1; i < listaDeParcelas.size(); i++) { prestacaoContratoParcelamento = listaDeParcelas.get(i); Date dataParcel = Util.adicionarNumeroDiasDeUmaData(listaDeParcelas.get(i-1).getDataVencimento(), 30); prestacaoContratoParcelamento.setDataVencimento(dataParcel); prestacaoContratoParcelamento.setContratoParcelamento(contrato); prestacaoContratoParcelamento.setUltimaAlteracao(new Date()); idPrestacao = (Integer) this.getControladorUtil().inserir(prestacaoContratoParcelamento); prestacaoContratoParcelamento.setId(idPrestacao); colecaoPrestacaoContratoParcelamento.add(prestacaoContratoParcelamento); } if(indicadorGuiaJurosSobreContratoParcel == 1){ BigDecimal valorPrimeiraGuia = new BigDecimal("0"); BigDecimal valorDaGuia = contrato.getValorJurosParcelamento().divide(new BigDecimal(listaDeParcelas.size()),2 , BigDecimal.ROUND_UP); BigDecimal totalSomaGuias = valorDaGuia.multiply(new BigDecimal(listaDeParcelas.size())); BigDecimal diferenca = contrato.getValorJurosParcelamento().subtract(totalSomaGuias); valorPrimeiraGuia = valorDaGuia.add(diferenca); for (int i = 0; i < listaDeParcelas.size(); i++) { prestacaoContratoParcelamento = listaDeParcelas.get(i); GuiaPagamento guia = new GuiaPagamento(); guia.setDataEmissao(new Date()); //Primeira guia com diferenca ajustada if(i == 0){ guia.setValorDebito(valorPrimeiraGuia); }else{ guia.setValorDebito(valorDaGuia); } DebitoTipo debitoTipo = this.repositorioFaturamento .obterDebitoTipoCodigoConstante(DebitoTipo.JUROS_SOBRE_CONTR_PARCELAMENTO); guia.setDebitoTipo(debitoTipo); FinanciamentoTipo financiamentoTipo = new FinanciamentoTipo(); financiamentoTipo.setId(FinanciamentoTipo.JUROS_PARCELAMENTO); guia.setFinanciamentoTipo(financiamentoTipo); guia.setDataVencimento(prestacaoContratoParcelamento.getDataVencimento()); guia.setLocalidade(new Localidade()); guia.setImovel(new Imovel()); guia.setRegistroAtendimento(new RegistroAtendimento()); guia.setOrdemServico(new OrdemServico()); Cliente cliente = null; if(clienteContrato != null){ cliente = clienteContrato.getCliente(); }else if(clienteSuperiorContrato != null){ cliente = clienteSuperiorContrato.getCliente(); } guia.setCliente(cliente); guia.setAnoMesReferenciaContabil(contrato.getAnoMesReferenciaFaturamento()); LancamentoItemContabil lancamentoItemContabil = new LancamentoItemContabil(LancamentoItemContabil.JUROS_SOBRE_CONTRATO_PARCELAMENTO); guia.setLancamentoItemContabil(lancamentoItemContabil); guia.setDebitoCreditoSituacaoAnterior(null); DebitoCreditoSituacao debitoCreditoSituacaoAtual = new DebitoCreditoSituacao(DebitoCreditoSituacao.NORMAL); guia.setDebitoCreditoSituacaoAtual(debitoCreditoSituacaoAtual); guia.setUsuario(contrato.getUsuarioResponsavel()); guia.setObservacao("GUIA GERADA NA IMPLANTA��O DO CONTRATO DE PARCELAMENTO POR CLIENTE " + contrato.getNumero()+ " da tabela cobranca.CONTRATO_PARCEL"); guia.setIndicadorEmitirObservacao(new Short("2")); guia.setNumeroPrestacaoDebito(Short.parseShort("1")); guia.setNumeroPrestacaoTotal(Short.parseShort("1")); Collection colecaoGuiaPagamentoItem = new ArrayList(); GuiaPagamentoItem guiaPagamentoItem = new GuiaPagamentoItem(); guiaPagamentoItem.setDebitoTipo(debitoTipo); guiaPagamentoItem.setValorDebito(guia.getValorDebito()); guiaPagamentoItem.setUltimaAlteracao(new Date()); colecaoGuiaPagamentoItem.add(guiaPagamentoItem); //LOCA_ID da tabela LOCALIDADE com LOCA_ICSEDE = 1 Localidade localidadeSede = getControladorCobranca().pesquisarLocalidadeSede(); String ids[] = getControladorFaturamento().inserirGuiaPagamento(guia, contrato.getUsuarioResponsavel(), contrato.getNumeroDiasEntreVencimentoParcel(), colecaoGuiaPagamentoItem, localidadeSede, true); //[SB0017] Vincula Guia GuiaPagamentoGeral guiaGeral = new GuiaPagamentoGeral(); guiaGeral.setId(Integer.parseInt(ids[0])); ContratoParcelamentoItem contratoParcelItem = new ContratoParcelamentoItem(); contratoParcelItem.setIndicadorItemCancelado(new Short("2")); contratoParcelItem.setContrato(contrato); DocumentoTipo docTipo = new DocumentoTipo(); docTipo.setId(DocumentoTipo.GUIA_PAGAMENTO); contratoParcelItem.setDocumentoTipo(docTipo); contratoParcelItem.setDebitoACobrarGeral(null); contratoParcelItem.setContaGeral(null); contratoParcelItem.setGuiaPagamentoGeral(guiaGeral); contratoParcelItem.setCreditoARealizarGeral(null); if(i == 0){ contratoParcelItem.setValorItem(valorPrimeiraGuia); }else{ contratoParcelItem.setValorItem(valorDaGuia); } contratoParcelItem.setValarAcrescImpont(null); contratoParcelItem.setUltimaAlteracao(new Date()); getControladorUtil().inserir(contratoParcelItem); } } if(indicadorGuiaAcrecImpontualidade == 1){ BigDecimal valorPrimeiraGuia = new BigDecimal("0"); BigDecimal valorDaGuia = contrato.getValorTotalAcrescImpontualidade().divide(new BigDecimal(listaDeParcelas.size()),2 , BigDecimal.ROUND_UP); BigDecimal totalSomaGuias = valorDaGuia.multiply(new BigDecimal(listaDeParcelas.size())); BigDecimal diferenca = contrato.getValorTotalAcrescImpontualidade().subtract(totalSomaGuias); valorPrimeiraGuia = valorDaGuia.add(diferenca); for (int i = 0; i < listaDeParcelas.size(); i++) { prestacaoContratoParcelamento = listaDeParcelas.get(i); GuiaPagamento guia = new GuiaPagamento(); guia.setDataEmissao(new Date()); //Primeira guia com diferenca ajustada if(i == 0){ guia.setValorDebito(valorPrimeiraGuia); }else{ guia.setValorDebito(valorDaGuia); } DebitoTipo debitoTipo = new DebitoTipo(); debitoTipo.setId(DebitoTipo.ACRESCIMOS_POR_IMPONTUALIDADE); guia.setDebitoTipo(debitoTipo); FinanciamentoTipo financiamentoTipo = new FinanciamentoTipo(); financiamentoTipo.setId(FinanciamentoTipo.ENTRADA_PARCELAMENTO); guia.setFinanciamentoTipo(financiamentoTipo); guia.setDataVencimento(prestacaoContratoParcelamento.getDataVencimento()); guia.setLocalidade(new Localidade()); guia.setImovel(new Imovel()); guia.setRegistroAtendimento(new RegistroAtendimento()); guia.setOrdemServico(new OrdemServico()); Cliente cliente = null; if(clienteContrato != null){ cliente = clienteContrato.getCliente(); }else if(clienteSuperiorContrato != null){ cliente = clienteSuperiorContrato.getCliente(); } guia.setCliente(cliente); guia.setAnoMesReferenciaContabil(contrato.getAnoMesReferenciaFaturamento()); LancamentoItemContabil lancamentoItemContabil = new LancamentoItemContabil(LancamentoItemContabil.ACRESCIMOS_POR_IMPONTUALIDADE); guia.setLancamentoItemContabil(lancamentoItemContabil); guia.setDebitoCreditoSituacaoAnterior(null); DebitoCreditoSituacao debitoCreditoSituacaoAtual = new DebitoCreditoSituacao(DebitoCreditoSituacao.NORMAL); guia.setDebitoCreditoSituacaoAtual(debitoCreditoSituacaoAtual); guia.setUsuario(contrato.getUsuarioResponsavel()); guia.setObservacao("GUIA GERADA NA IMPLANTA��O DO CONTRATO DE PARCELAMENTO POR CLIENTE " + contrato.getNumero()+ " da tabela cobranca.CONTRATO_PARCEL"); guia.setIndicadorEmitirObservacao(new Short("2")); guia.setNumeroPrestacaoDebito(Short.parseShort("1")); guia.setNumeroPrestacaoTotal(Short.parseShort("1")); Collection colecaoGuiaPagamentoItem = new ArrayList(); GuiaPagamentoItem guiaPagamentoItem = new GuiaPagamentoItem(); guiaPagamentoItem.setDebitoTipo(debitoTipo); guiaPagamentoItem.setValorDebito(guia.getValorDebito()); guiaPagamentoItem.setUltimaAlteracao(new Date()); colecaoGuiaPagamentoItem.add(guiaPagamentoItem); //LOCA_ID da tabela LOCALIDADE com LOCA_ICSEDE = 1 Localidade localidadeSede = getControladorCobranca().pesquisarLocalidadeSede(); String ids[] = getControladorFaturamento().inserirGuiaPagamento(guia, contrato.getUsuarioResponsavel(), contrato.getNumeroDiasEntreVencimentoParcel(), colecaoGuiaPagamentoItem, localidadeSede, true); //[SB0017] Vincula Guia GuiaPagamentoGeral guiaGeral = new GuiaPagamentoGeral(); guiaGeral.setId(Integer.parseInt(ids[0])); ContratoParcelamentoItem contratoParcelItem = new ContratoParcelamentoItem(); contratoParcelItem.setIndicadorItemCancelado(new Short("2")); contratoParcelItem.setContrato(contrato); DocumentoTipo docTipo = new DocumentoTipo(); docTipo.setId(DocumentoTipo.GUIA_PAGAMENTO); contratoParcelItem.setDocumentoTipo(docTipo); contratoParcelItem.setDebitoACobrarGeral(null); contratoParcelItem.setContaGeral(null); contratoParcelItem.setGuiaPagamentoGeral(guiaGeral); contratoParcelItem.setCreditoARealizarGeral(null); if(i == 0){ contratoParcelItem.setValorItem(valorPrimeiraGuia); }else{ contratoParcelItem.setValorItem(valorDaGuia); } contratoParcelItem.setValarAcrescImpont(null); contratoParcelItem.setUltimaAlteracao(new Date()); getControladorUtil().inserir(contratoParcelItem); } } // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_INSERIR_CONTRATO_PARCELAMENTO_POR_CLIENTE, contrato.getId(), contrato.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(contrato); // ------------ REGISTRAR TRANSA��O ---------------- // 1.7. Caso a forma de pagamento seja cobran�a por extrato if (contrato.getCobrancaForma() != null && contrato.getCobrancaForma().getId() != null && contrato.getCobrancaForma().getId().compareTo(CobrancaForma.COBRANCA_POR_EXTRATO) == 0) { // O sistema gera o extrato do contrato de parcelamento por cliente // (<<Inclui>> [UC1200 - Gerar Extrato de Contrato Parcelamento Por Cliente] // passando o cliente e as parcelas). Cliente cliente = null; if (clienteSuperiorContrato != null && clienteSuperiorContrato.getCliente() != null && clienteSuperiorContrato.getCliente().getId() != null) { cliente = clienteSuperiorContrato.getCliente(); } else if (clienteContrato != null && clienteContrato.getCliente() != null && clienteContrato.getCliente().getId() != null) { cliente = clienteContrato.getCliente(); } this.gerarExtratoDeContratoParcelamentoPorCliente(cliente.getId(), colecaoPrestacaoContratoParcelamento); } }catch (Exception ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } return idContrato; } /** * Consultar Contrato de Parcelamento por Cliente Com Pagamento jah efetuado * * [UC1143] Consultar Dados do Contrato de Parcelamento por Cliente * * * @author Paulo Diniz * @date 10/05/2011 * */ public boolean verificaContratoParcelComPagamentoFeito(Integer idContrato) throws ControladorException{ try { return repositorioContratoParcelamento.verificaContratoParcelComPagamentoFeito(idContrato); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * Consultar Se Prestacao Ja Esta Paga * * [UC1143] Consultar Dados do Contrato de Parcelamento por Cliente * * * @author Paulo Diniz * @date 10/05/2011 * */ public boolean verificaPrestacaoPaga(Integer idPrestacao) throws ControladorException{ try { return repositorioContratoParcelamento.verificaPrestacaoPaga(idPrestacao); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * * Pesquisa os dados do contrato de parcelamento * [FS0003] - Validar contrato * * @author Mariana Victor * @data 03/06/2011 */ public Object[] pesquisarDadosContratoParcelamento(String numeroContrato) throws ControladorException { try { return repositorioContratoParcelamento.pesquisarDadosContratoParcelamento(numeroContrato); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * * Pesquisa os dados do contrato de parcelamento * [FS0003] - Validar contrato * * @author Mariana Victor * @data 03/06/2011 */ public Integer pesquisarDadosContratoParcelamentoNumeroParcelasPagas(Integer idContrato) throws ControladorException { try { return repositorioContratoParcelamento.pesquisarDadosContratoParcelamentoNumeroParcelasPagas(idContrato); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * * Pesquisa os dados do contrato de parcelamento por cliente * [FS0005] - Verificar exist�ncia de contratos para o cliente * * @author Mariana Victor * @data 03/06/2011 */ public Collection<Object[]> pesquisarDadosContratoParcelamentoPorCliente(Integer idCliente) throws ControladorException { try { return repositorioContratoParcelamento.pesquisarDadosContratoParcelamentoPorCliente(idCliente); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * * Pesquisa os dados do contrato de parcelamento por cliente * [SB0002] - Informar Dados do Pagamento * * @author Mariana Victor * @data 06/06/2011 */ public Object[] pesquisarDadosContratoParcelamentoPorClienteSelecionado(Integer idContrato) throws ControladorException { try { return repositorioContratoParcelamento.pesquisarDadosContratoParcelamentoPorClienteSelecionado(idContrato); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * * Desvincula a guia de pagamento do contrato de parcelamento, * atualizando dados do contrato na tabela cobranca.CONTRATO_PARCEL_ITEM * * @author Mariana Victor * @data 08/06/2011 * * @param * @return void */ public void atualizarContratoParcelamentoItemDesvincularGuiaContrato(String[] idsGuias) throws ControladorException { try { repositorioContratoParcelamento.atualizarContratoParcelamentoItemDesvincularGuiaContrato(idsGuias); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * * [SB0003] - Efetuar Pagamento da Parcela do Contrato de Parcelamento Por Cliente * * @author Mariana Victor * @since 06/06/2011 * */ public Object[] efetuarPagamentoParcelaContratoParcelamentoPorCliente(InformarPagamentoContratoParcelamentoHelper helper, Usuario usuarioLogado) throws ControladorException { Object[] retorno = new Object[2]; AvisoBancario avisoBancario = null; BigDecimal valorCalculadoPagamento = BigDecimal.ZERO; Collection<Pagamento> colecaoPagamento = new ArrayList(); Fachada fachada = Fachada.getInstancia(); try { Date dataPagamento = Util.converteStringParaDate(helper.getDataPagamento()); ContratoParcelamento contratoParcelamento = this.repositorioContratoParcelamento .pesquisarContratoParcelamento( new Integer(helper.getIdRegistro())); Object[] dadosPrestacao = this.repositorioContratoParcelamento .pesquisarDadosContratoParcelamentoPorClienteSelecionado(contratoParcelamento.getId()); Integer numeroPrestacao = (Integer) dadosPrestacao[0]; BigDecimal valorMinimo = (BigDecimal) dadosPrestacao[1]; Date dataVencimento = (Date) dadosPrestacao[2]; Integer idPrestacao = (Integer) dadosPrestacao[3]; PrestacaoContratoParcelamento prestacaoContratoParcelamento = new PrestacaoContratoParcelamento(); prestacaoContratoParcelamento.setId(idPrestacao); prestacaoContratoParcelamento.setValor(valorMinimo); prestacaoContratoParcelamento.setNumero(numeroPrestacao); prestacaoContratoParcelamento.setDataVencimento(dataVencimento); prestacaoContratoParcelamento.setContratoParcelamento(contratoParcelamento); if(helper.getIdArrecadador() != null && !helper.getIdArrecadador().trim().equals("")) { //1.2. Gera o aviso banc�rio para o pagamento da parcela //[SB0004 - Gerar Aviso Banc�rio]. avisoBancario = this.gerarAvisoBancario(helper, fachada, prestacaoContratoParcelamento); } //Primeira Etapa do Pagamento da Parcela //[SB0005 - Gerar Pagamento Guias Juros de Parcelamento e Guias de Acr�scimos] retorno = this.gerarPagamentoGuiasJurosParcelamentoGuiasAcrescimos(helper, fachada, contratoParcelamento, valorCalculadoPagamento, avisoBancario, prestacaoContratoParcelamento, usuarioLogado, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; //Segunda Etapa do Pagamento da Parcela //[SB0006 - Gerar Pagamento para Itens de D�bito do Contrato]. retorno = this.gerarPagamentoItensDebitoContrato(helper, fachada, contratoParcelamento, valorCalculadoPagamento, usuarioLogado, avisoBancario, prestacaoContratoParcelamento, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; //Terceira Etapa do Pagamento da Parcela BigDecimal valorArrecadacaoInformado = null; BigDecimal valorArrecadacaoCalculado = null; if(avisoBancario != null) { //1.5. O sistema atualiza o aviso banc�rio com o valor do pagamento calculado avisoBancario.setValorArrecadacaoCalculado(valorCalculadoPagamento); avisoBancario.setUltimaAlteracao(new Date()); fachada.atualizar(avisoBancario); valorArrecadacaoInformado = avisoBancario.getValorArrecadacaoInformado(); valorArrecadacaoCalculado = avisoBancario.getValorArrecadacaoCalculado(); } else { valorArrecadacaoInformado = prestacaoContratoParcelamento.getValor(); valorArrecadacaoCalculado = valorCalculadoPagamento; } FiltroContratoParcelamento filtroContratoParcelamento = new FiltroContratoParcelamento(); filtroContratoParcelamento.adicionarParametro(new ParametroSimples( FiltroContratoParcelamento.ID, contratoParcelamento.getId())); Collection colecaoContratoParcelamento = fachada.pesquisar( filtroContratoParcelamento, ContratoParcelamento.class.getName()); contratoParcelamento = (ContratoParcelamento) Util.retonarObjetoDeColecao(colecaoContratoParcelamento); //1.6. O sistema atualiza os dados do contrato na tabela cobranca.CONTRATO_PARCEL // Caso n�o haja mais valor a cobrar if (valorArrecadacaoInformado.compareTo(valorArrecadacaoCalculado) > 0){ contratoParcelamento.setValorParcelamentoACobrar( BigDecimal.ZERO); } else { contratoParcelamento.setValorParcelamentoACobrar( contratoParcelamento.getValorParcelamentoACobrar().subtract(prestacaoContratoParcelamento.getValor())); } // Caso n�o haja mais valor a cobrar if (valorArrecadacaoInformado.compareTo(valorArrecadacaoCalculado) > 0 || prestacaoContratoParcelamento.getNumero().compareTo(contratoParcelamento.getNumeroPrestacoes()) == 0){ ParcelamentoSituacao parcelamentoSituacao = new ParcelamentoSituacao(); parcelamentoSituacao.setId(ParcelamentoSituacao.CONCLUIDO); contratoParcelamento.setParcelamentoSituacao(parcelamentoSituacao); } contratoParcelamento.setUltimaAlteracao(new Date()); fachada.atualizar(contratoParcelamento); // 1.7. O sistema atualiza os dados da parcela paga na tabela cobranca.CONTRATO_PARCEL_PREST prestacaoContratoParcelamento.setValorPagamento(valorCalculadoPagamento); prestacaoContratoParcelamento.setDataPagamento(dataPagamento); prestacaoContratoParcelamento.setUltimaAlteracao(new Date()); fachada.atualizar(prestacaoContratoParcelamento); // 1.8. Caso n�o haja mais valor a cobrar if (valorArrecadacaoInformado.compareTo(valorArrecadacaoCalculado) > 0){ // 1.8.1. O sistema cria um pagamento com o VALOR RESTANTE // (AVBC_VLARRECADACAOINFORMADO menos AVBC_VLARRECADACAOCALCULADO). Pagamento pagamento = new Pagamento(); // Caso o ano/m�s da "Data do Pagamento" seja maior que // a PARM_AMREFERENCIAARRECADACAO da tabela SISTEMA_PARAMETROS SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); Integer anoMesSistemaParametro = sistemaParametro.getAnoMesArrecadacao(); Integer anoMesDataLancamento = Util.formataAnoMes(dataPagamento); if (anoMesDataLancamento > anoMesSistemaParametro) { pagamento.setAnoMesReferenciaArrecadacao(anoMesDataLancamento); } else { pagamento.setAnoMesReferenciaArrecadacao(anoMesSistemaParametro); } // VALOR RESTANTE pagamento.setValorPagamento(valorArrecadacaoInformado.subtract(valorArrecadacaoCalculado)); // "Data do Pagamento" informada pagamento.setDataPagamento(dataPagamento); // LOCA_ID da tabela cadastro.LOCALIDADE com LOCA_ICSEDE=1 (um) Localidade localidadeSede = getControladorCobranca().pesquisarLocalidadeSede(); pagamento.setLocalidade(localidadeSede); // DOTP_ID da tabela cobranca.DOCUMENTO _TIPO para DOTP_DSDOCUMENTOTIPO = "CONTA" DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.CONTA); pagamento.setDocumentoTipo(documentoTipo); // AVBC_ID da tabela arrecada��o.AVISO_BANCARIO pagamento.setAvisoBancario(avisoBancario); // ARFM_ID da tabela arrecada��o.AVISO_BANCARIO pagamento.setArrecadacaoForma(avisoBancario.getArrecadacaoForma()); // Data e Hora corrente pagamento.setUltimaAlteracao(new Date()); Cliente clienteContrato = this.repositorioContratoParcelamento.pesquisarClienteContrato(contratoParcelamento.getId()).getCliente(); pagamento.setCliente(clienteContrato); // Inclui o pagamento na tabela arrecadacao.PAGAMENTO this.getControladorUtil().inserir(pagamento); // 1.8.2. E o sistema cancela as guias de juros e/ou acr�scimos, caso existam // 1.8.2.1. Seleciona as guias de pagamento do contrato, atuais e sem pagamento Collection<Object[]> dadosGuias = this.repositorioContratoParcelamento .pesquisarGuiasPagamentoContratoAtuaisSemPagamento(contratoParcelamento.getId()); GuiaPagamento guiaPagamento = new GuiaPagamento(); Collection guiasPagamento = new ArrayList(); String[] registrosRemocao = null; if (dadosGuias != null && !dadosGuias.isEmpty()) { Iterator iterator = dadosGuias.iterator(); registrosRemocao = new String[dadosGuias.size()]; int posicao = 0; // 1.8.2.2. Para as guias de pagamento selecionadas: while(iterator.hasNext()) { Object[] dadosGuia = (Object[]) iterator.next(); Integer idGuia = (Integer) dadosGuia[0]; Integer anoMesContabil = (Integer) dadosGuia[3]; Date dataEmissao = (Date) dadosGuia[5]; Date dataVencimentoGuia = (Date) dadosGuia[6]; BigDecimal valorDebito = (BigDecimal) dadosGuia[7]; Short indicadoCobrancaMulta = (Short) dadosGuia[8]; Short indicadorEmitirObservacao = (Short) dadosGuia[9]; Cliente cliente = new Cliente(); Imovel imovel = new Imovel(); FinanciamentoTipo financiamentoTipo = new FinanciamentoTipo(); Localidade localidade = new Localidade(); DebitoTipo debitoTipo = new DebitoTipo(); LancamentoItemContabil lancamentoItemContabil = new LancamentoItemContabil(); if (dadosGuia[1] != null) { Integer idCliente = (Integer) dadosGuia[1]; cliente.setId(idCliente); } if (dadosGuia[2] != null) { Integer idImovel = (Integer) dadosGuia[2]; imovel.setId(idImovel); } if (dadosGuia[4] != null) { Integer idFinanciamentoTipo = (Integer) dadosGuia[4]; financiamentoTipo.setId(idFinanciamentoTipo); } if (dadosGuia[10] != null) { Integer idLocalidade = (Integer) dadosGuia[10]; localidade.setId(idLocalidade); } if (dadosGuia[11] != null) { Integer idDebitoTipo = (Integer) dadosGuia[11]; debitoTipo.setId(idDebitoTipo); } if (dadosGuia[12] != null) { Integer idLancamentoItemContabil = (Integer) dadosGuia[12]; lancamentoItemContabil.setId(idLancamentoItemContabil); } GuiaPagamento guia = new GuiaPagamento(); guia.setId(idGuia); guia.setAnoMesReferenciaContabil(anoMesContabil); guia.setUltimaAlteracao(new Date()); guia.setDataEmissao(dataEmissao); guia.setDataVencimento(dataVencimentoGuia); guia.setValorDebito(valorDebito); guia.setIndicadoCobrancaMulta(indicadoCobrancaMulta); guia.setIndicadorEmitirObservacao(indicadorEmitirObservacao); if (cliente != null) { guia.setCliente(cliente); } if (imovel != null) { guia.setImovel(imovel); } if (financiamentoTipo != null) { guia.setFinanciamentoTipo(financiamentoTipo); } if (localidade != null) { guia.setLocalidade(localidade); } if (debitoTipo != null) { guia.setDebitoTipo(debitoTipo); } if (lancamentoItemContabil != null) { guia.setLancamentoItemContabil(lancamentoItemContabil); } guiasPagamento.add(guia); registrosRemocao[posicao] = idGuia.toString(); if (posicao == 0) { guiaPagamento.setCliente(cliente); guiaPagamento.setImovel(imovel); } posicao++; } // 1.8.2.2.1. Cancela as guias de pagamento // 1.8.2.2.1.1. <<Inclui>> [UC0188 - Manter Guia de Pagamento] - [SB0001 - Cancelar Guia de Pagamento] fachada.manterGuiaPagamento(guiaPagamento, guiasPagamento, registrosRemocao, null, usuarioLogado); } } } catch (Exception ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } retorno[0] = avisoBancario; retorno[1] = colecaoPagamento; return retorno; } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * [SB0004] - Gerar Aviso Banc�rio * * @author Mariana Victor * @throws ErroRepositorioException * @since 06/06/2011 * */ private AvisoBancario gerarAvisoBancario(InformarPagamentoContratoParcelamentoHelper helper, Fachada fachada, PrestacaoContratoParcelamento prestacaoContratoParcelamento) throws ErroRepositorioException { AvisoBancario avisoBancario = new AvisoBancario(); // Pesquisa o Arrecadador FiltroArrecadador filtroArrecadador = new FiltroArrecadador(); filtroArrecadador.adicionarParametro(new ParametroSimples( FiltroArrecadador.CODIGO_AGENTE,helper.getIdArrecadador())); Collection colecaoArrecadador = fachada.pesquisar( filtroArrecadador, Arrecadador.class.getName()); if (colecaoArrecadador == null || colecaoArrecadador.isEmpty()) { throw new ActionServletException("atencao.pesquisa_inexistente", new String[]{"Arrecadador"}); } Arrecadador arrecadador = (Arrecadador) Util.retonarObjetoDeColecao(colecaoArrecadador); // Pesquisa o ArrecadadorContrato para pegar a conta banc�ria FiltroArrecadadorContrato filtroArrecadadorContrato = new FiltroArrecadadorContrato(); filtroArrecadadorContrato.adicionarParametro(new ParametroSimples( FiltroArrecadadorContrato.ARRECADADOR_ID, arrecadador.getId())); Collection colecaoArrecadadorContrato = fachada.pesquisar( filtroArrecadadorContrato, ArrecadadorContrato.class.getName()); if (colecaoArrecadadorContrato == null || colecaoArrecadadorContrato.isEmpty()) { throw new ActionServletException("atencao.pesquisa_inexistente", new String[]{"Contrato de Arrecadador"}); } ArrecadadorContrato arrecadadorContrato = (ArrecadadorContrato) Util.retonarObjetoDeColecao(colecaoArrecadadorContrato); // Cria a Arrecada��oForma do tipo "Dep�sito" ArrecadacaoForma arrecadacaoForma = new ArrecadacaoForma(); arrecadacaoForma.setId(ArrecadacaoForma.DEPOSITO); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); Date dataPagamento = Util.converteStringParaDate(helper.getDataPagamento()); Integer anoMesSistemaParametro = sistemaParametro.getAnoMesArrecadacao(); Integer anoMesDataLancamento = Util.formataAnoMes(dataPagamento); Integer anoMes = null; //Caso o ano/m�s da data do lan�amento ("Data do Pagamento" informada) // seja maior que o PARM_AMREFERENCIAARRECADACAO da tabela SISTEMA_PARAMETROS if (anoMesDataLancamento > anoMesSistemaParametro) { anoMes = anoMesDataLancamento; } else { anoMes = anoMesSistemaParametro; } //1. O sistema gera os dados do aviso banc�rio na tabela arrecadacao.AVISO_BANCARIO com os seguintes valores avisoBancario.setArrecadador(arrecadador); avisoBancario.setDataLancamento(dataPagamento); avisoBancario.setNumeroSequencial(new Short("0")); avisoBancario.setDataPrevista(prestacaoContratoParcelamento.getDataVencimento()); avisoBancario.setDataRealizada(dataPagamento); avisoBancario.setValorRealizado(prestacaoContratoParcelamento.getValor()); avisoBancario.setValorArrecadacaoCalculado(BigDecimal.ZERO); avisoBancario.setValorDevolucaoCalculado(BigDecimal.ZERO); avisoBancario.setValorArrecadacaoInformado(prestacaoContratoParcelamento.getValor()); avisoBancario.setValorDevolucaoInformado(BigDecimal.ZERO); avisoBancario.setValorContabilizado(BigDecimal.ZERO); avisoBancario.setAnoMesReferenciaArrecadacao(anoMes); avisoBancario.setIndicadorCreditoDebito(ConstantesSistema.SIM); avisoBancario.setNumeroDocumento(prestacaoContratoParcelamento.getId()); avisoBancario.setUltimaAlteracao(new Date()); avisoBancario.setContaBancaria(arrecadadorContrato.getContaBancariaDepositoArrecadacao()); avisoBancario.setArrecadadorMovimento(null); avisoBancario.setArrecadacaoForma(arrecadacaoForma); Integer idAvisoBancario = (Integer) fachada.inserir(avisoBancario); avisoBancario.setId(idAvisoBancario); return avisoBancario; } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * [SB0005] - Gerar Pagamento Guias Juros de Parcelamento e Guias de Acr�scimos * * @author Mariana Victor * @throws ErroRepositorioException * @throws NumberFormatException * @throws ControladorException * @since 06/06/2011 * */ private Object[] gerarPagamentoGuiasJurosParcelamentoGuiasAcrescimos(InformarPagamentoContratoParcelamentoHelper helper, Fachada fachada, ContratoParcelamento contratoParcelamento, BigDecimal valorCalculadoPagamento, AvisoBancario avisoBancario, PrestacaoContratoParcelamento prestacaoContratoParcelamento, Usuario usuarioLogado, Collection<Pagamento> colecaoPagamento) throws NumberFormatException, ErroRepositorioException, ControladorException{ Object[] retorno = new Object[2]; //1.1. Caso o parcelamento tenha sido realizado com juros if (contratoParcelamento.getIndicadorParcelamentoJuros() != null && contratoParcelamento.getIndicadorParcelamentoJuros().compareTo(ConstantesSistema.SIM) == 0 && contratoParcelamento.getValorJurosParcelamento() != null && contratoParcelamento.getValorJurosParcelamento().compareTo(BigDecimal.ZERO) != 0) { DebitoTipo debitoTipo = this.repositorioFaturamento .obterDebitoTipoCodigoConstante(DebitoTipo.JUROS_SOBRE_CONTR_PARCELAMENTO); Object[] dadosGuia = this.repositorioContratoParcelamento.pesquisarGuiaDeJurosOuComAcrescimos( contratoParcelamento.getId(), debitoTipo.getId(), prestacaoContratoParcelamento.getId()); if (dadosGuia != null) { Integer idGuia = (Integer) dadosGuia[0]; BigDecimal valorItem = (BigDecimal) dadosGuia[1]; Integer idContratoParcItem = (Integer) dadosGuia[2]; Integer idLoca = (Integer) dadosGuia[3]; Integer idImovel = (Integer) dadosGuia[4]; Integer idCliente = (Integer) dadosGuia[5]; BigDecimal valorPrestacao = prestacaoContratoParcelamento.getValor(); Integer numeroPrestacao = prestacaoContratoParcelamento.getNumero(); //[FS0009 - Verificar valor da guia de juros superior ao valor restante do pagamento] if (valorItem.compareTo( valorPrestacao.subtract(valorCalculadoPagamento)) > 0) { throw new ActionServletException("atencao.contrato_parcelamento_por_cliente.guia_juros.superior_ao.valor_restante_pagamento", new String[] {"juros", idGuia.toString(), Util.formatarMoedaReal(valorItem), Util.formatarMoedaReal(valorPrestacao.subtract(valorCalculadoPagamento)), numeroPrestacao.toString(), contratoParcelamento.getNumero() }); } DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.GUIA_PAGAMENTO); Localidade localidade = new Localidade(); localidade.setId(idLoca); Imovel imovel = new Imovel(); imovel.setId(idImovel); Cliente cliente = new Cliente(); cliente.setId(idCliente); GuiaPagamento guia = new GuiaPagamento(); guia.setId(idGuia); guia.setLocalidade(localidade); guia.setImovel(imovel); guia.setCliente(cliente); GuiaPagamentoGeral guiaGeral = new GuiaPagamentoGeral(); guiaGeral.setGuiaPagamento(guia); ContratoParcelamentoItem contratoParcelamentoItem = new ContratoParcelamentoItem(); contratoParcelamentoItem.setId(idContratoParcItem); contratoParcelamentoItem.setContrato(contratoParcelamento); contratoParcelamentoItem.setValorItem(valorItem); contratoParcelamentoItem.setGuiaPagamentoGeral(guiaGeral); contratoParcelamentoItem.setDocumentoTipo(documentoTipo); //[SB0007 - Gerar Pagamento], passando Indicador Pagamento Complementar com o valor 2 (dois) retorno = this.gerarPagamento(helper, fachada, valorCalculadoPagamento, new Short("2"), DocumentoTipo.GUIA_PAGAMENTO, debitoTipo.getId(), prestacaoContratoParcelamento, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; } } //1.2. Caso o parcelamento tenha sido realizado com acr�scimos por impontualidade if (contratoParcelamento.getIndicadorDebitosAcrescimos() != null && contratoParcelamento.getIndicadorDebitosAcrescimos().compareTo(ConstantesSistema.SIM) == 0 && contratoParcelamento.getValorTotalAcrescImpontualidade() != null && contratoParcelamento.getValorTotalAcrescImpontualidade().compareTo(BigDecimal.ZERO) != 0) { Object[] dadosGuia = this.repositorioContratoParcelamento.pesquisarGuiaDeJurosOuComAcrescimos( contratoParcelamento.getId(), DebitoTipo.ACRESCIMOS_POR_IMPONTUALIDADE, prestacaoContratoParcelamento.getId()); if (dadosGuia != null) { Integer idGuia = (Integer) dadosGuia[0]; BigDecimal valorItem = (BigDecimal) dadosGuia[1]; Integer idContratoParcItem = (Integer) dadosGuia[2]; Integer idLoca = (Integer) dadosGuia[3]; Integer idImovel = null; Integer idCliente = null; if (dadosGuia[4] != null) { idImovel = (Integer) dadosGuia[4]; } if (dadosGuia[5] != null) { idCliente = (Integer) dadosGuia[5]; } BigDecimal valorPrestacao = prestacaoContratoParcelamento.getValor(); Integer numeroPrestacao = prestacaoContratoParcelamento.getNumero(); //[FS0010 - Verificar valor da guia de acr�scimos superior ao valor restante do pagamento] if (valorItem.compareTo( valorPrestacao.subtract(valorCalculadoPagamento)) > 0) { throw new ActionServletException("atencao.contrato_parcelamento_por_cliente.guia_juros.superior_ao.valor_restante_pagamento", new String[] {"acr�scimos", idGuia.toString(), Util.formatarMoedaReal(valorItem), Util.formatarMoedaReal(valorPrestacao.subtract(valorCalculadoPagamento)), numeroPrestacao.toString(), contratoParcelamento.getNumero() }); } DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.GUIA_PAGAMENTO); Localidade localidade = new Localidade(); localidade.setId(idLoca); Imovel imovel = new Imovel(); if (idImovel != null) { imovel.setId(idImovel); } Cliente cliente = new Cliente(); if (idCliente != null) { cliente.setId(idCliente); } GuiaPagamento guia = new GuiaPagamento(); guia.setId(idGuia); guia.setLocalidade(localidade); guia.setImovel(imovel); guia.setCliente(cliente); GuiaPagamentoGeral guiaGeral = new GuiaPagamentoGeral(); guiaGeral.setGuiaPagamento(guia); ContratoParcelamentoItem contratoParcelamentoItem = new ContratoParcelamentoItem(); contratoParcelamentoItem.setId(idContratoParcItem); contratoParcelamentoItem.setContrato(contratoParcelamento); contratoParcelamentoItem.setValorItem(valorItem); contratoParcelamentoItem.setGuiaPagamentoGeral(guiaGeral); contratoParcelamentoItem.setDocumentoTipo(documentoTipo); //[SB0007 - Gerar Pagamento], passando Indicador Pagamento Complementar com o valor 2 (dois). retorno = this.gerarPagamento(helper, fachada, valorCalculadoPagamento, new Short("2"), DocumentoTipo.GUIA_PAGAMENTO, DebitoTipo.ACRESCIMOS_POR_IMPONTUALIDADE, prestacaoContratoParcelamento, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; } } retorno[0] = valorCalculadoPagamento; retorno[1] = colecaoPagamento; return retorno; } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * [SB0006] - Gerar Pagamento para Itens de D�bito do Contrato * * @author Mariana Victor * @throws ErroRepositorioException * @throws ControladorException * @since 06/06/2011 * */ private Object[] gerarPagamentoItensDebitoContrato(InformarPagamentoContratoParcelamentoHelper helper, Fachada fachada, ContratoParcelamento contratoParcelamento, BigDecimal valorCalculadoPagamento, Usuario usuarioLogado, AvisoBancario avisoBancario, PrestacaoContratoParcelamento prestacaoContratoParcelamento, Collection<Pagamento> colecaoPagamento) throws ErroRepositorioException, ControladorException{ Object[] retorno = new Object[2]; // 1.1. Caso a parcela paga if (helper.getNumeroParcela() != null && new Integer(helper.getNumeroParcela()).compareTo(new Integer(1)) >0) { Object[] dadosItem = this.repositorioContratoParcelamento .pesquisarItemDebitoValorPagoAMenor(contratoParcelamento.getId()); //1.1.1. Caso exista item de d�bito com valor pago a menor if (dadosItem != null) { Integer idItem = (Integer) dadosItem[0]; Integer idDocTipo = (Integer) dadosItem[1]; BigDecimal valorItem = (BigDecimal) dadosItem[2]; //1.1.1.1. Caso o item de d�bito seja do tipo conta if (idDocTipo.compareTo(DocumentoTipo.CONTA) == 0) { // seleciona a conta com valor pago a menor Object[] dadosConta = this.repositorioContratoParcelamento.pesquisarContaValorPagoAMenor(idItem); //1.1.1.1.1. Caso a conta tenha sido selecionada: if(dadosConta != null) { Integer idConta = (Integer) dadosConta[0]; Integer anoMesConta = (Integer) dadosConta[1]; Integer idLoca = (Integer) dadosConta[2]; Integer idImovel = (Integer) dadosConta[3]; Localidade localidade = new Localidade(); localidade.setId(idLoca); Imovel imovel = new Imovel(); imovel.setId(idImovel); Conta conta = new Conta(); conta.setId(idConta); conta.setReferencia(anoMesConta); conta.setLocalidade(localidade); conta.setImovel(imovel); ContaGeral contaGeral = new ContaGeral(); contaGeral.setConta(conta); contaGeral.setId(idConta); DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.CONTA); ContratoParcelamentoItem contratoParcelamentoItem = new ContratoParcelamentoItem(); contratoParcelamentoItem.setId(idItem); contratoParcelamentoItem.setValorItem(valorItem); contratoParcelamentoItem.setContaGeral(contaGeral); contratoParcelamentoItem.setContrato(contratoParcelamento); contratoParcelamentoItem.setDocumentoTipo(documentoTipo); // 1.1.1.1.1.1. O sistema gera o pagamento complementar para a conta [SB0007 - Gerar Pagamento], // passando Indicador Pagamento Complementar com o valor 1 (um). retorno = this.gerarPagamento(helper, fachada, valorCalculadoPagamento, ConstantesSistema.SIM, DocumentoTipo.CONTA, null, prestacaoContratoParcelamento, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; Collection colecaoConta = new ArrayList(); colecaoConta.add(conta); Date dataPagamento = Util.converteStringParaDate(helper.getDataPagamento()); //<<Inclui>> [UC0151] Alterar Vencimento de Conta this.getControladorFaturamento().alterarVencimentoConta(colecaoConta, null, dataPagamento, usuarioLogado); } } // 1.1.1.2. Caso o item de d�bito seja do tipo d�bito a cobrar if (idDocTipo.compareTo(DocumentoTipo.DEBITO_A_COBRAR) == 0) { // seleciona o d�bito a cobrar com valor pago a menor Object[] dadosDebitoACobrar = this.repositorioContratoParcelamento.pesquisarDebitoACobrarValorPagoAMenor(idItem); // 1.1.1.2.1. Caso o d�bito a cobrar tenha sido selecionado if (dadosDebitoACobrar != null) { Integer idDebitoACobrar = (Integer) dadosDebitoACobrar[0]; Integer anoMesDebito = (Integer) dadosDebitoACobrar[1]; Integer idLoca = (Integer) dadosDebitoACobrar[2]; Integer idImovel = (Integer) dadosDebitoACobrar[3]; Integer idDebitoTipo = (Integer) dadosDebitoACobrar[4]; Localidade localidade = new Localidade(); localidade.setId(idLoca); Imovel imovel = new Imovel(); imovel.setId(idImovel); DebitoACobrar debitoACobrar = new DebitoACobrar(); debitoACobrar.setId(idDebitoACobrar); debitoACobrar.setAnoMesReferenciaDebito(anoMesDebito); debitoACobrar.setLocalidade(localidade); debitoACobrar.setImovel(imovel); DebitoACobrarGeral debitoACobrarGeral = new DebitoACobrarGeral(); debitoACobrarGeral.setDebitoACobrar(debitoACobrar); debitoACobrarGeral.setId(idDebitoACobrar); DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.DEBITO_A_COBRAR); ContratoParcelamentoItem contratoParcelamentoItem = new ContratoParcelamentoItem(); contratoParcelamentoItem.setId(idItem); contratoParcelamentoItem.setValorItem(valorItem); contratoParcelamentoItem.setDebitoACobrarGeral(debitoACobrarGeral); contratoParcelamentoItem.setContrato(contratoParcelamento); contratoParcelamentoItem.setDocumentoTipo(documentoTipo); // 1.1.1.2.1.1. O sistema gera o pagamento complementar para o d�bito a cobrar // [SB0007 - Gerar Pagamento], passando Indicador Pagamento Complementar com o valor 1 (um). retorno = this.gerarPagamento(helper, fachada, valorCalculadoPagamento, ConstantesSistema.SIM, DocumentoTipo.DEBITO_A_COBRAR, idDebitoTipo, prestacaoContratoParcelamento, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; } } } } Collection<Object[]> dadosItensDebito = this.repositorioContratoParcelamento .pesquisarItensDebitoACobrar(contratoParcelamento.getId()); // 1.2. Caso existam itens de d�bito do tipo d�bito a cobrar para gera��o de pagamento if (dadosItensDebito != null && !dadosItensDebito.isEmpty()) { Iterator iteratorItens = dadosItensDebito.iterator(); // 1.2.1. Para cada item de d�bito do tipo debito a cobrar selecionado: while(iteratorItens.hasNext()) { Object[] dadosItem = (Object[]) iteratorItens.next(); Integer idItem = (Integer) dadosItem[0]; BigDecimal valorItem = (BigDecimal) dadosItem[1]; Integer idDebito = (Integer) dadosItem[2]; Integer anoMesDebito = (Integer) dadosItem[3]; Integer idLoca = (Integer) dadosItem[4]; Integer idImovel = (Integer) dadosItem[5]; Integer idDebitoTipo = (Integer) dadosItem[6]; // 1.2.1.1. Caso ainda exista saldo para completar o valor pago if ((prestacaoContratoParcelamento.getValor().subtract(valorCalculadoPagamento)) .compareTo(BigDecimal.ZERO) > 0) { Localidade localidade = new Localidade(); localidade.setId(idLoca); Imovel imovel = new Imovel(); imovel.setId(idImovel); DebitoACobrar debitoACobrar = new DebitoACobrar(); debitoACobrar.setId(idDebito); debitoACobrar.setAnoMesCobrancaDebito(anoMesDebito); debitoACobrar.setLocalidade(localidade); debitoACobrar.setImovel(imovel); DebitoACobrarGeral debitoACobrarGeral = new DebitoACobrarGeral(); debitoACobrarGeral.setDebitoACobrar(debitoACobrar); debitoACobrarGeral.setId(idDebito); DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.DEBITO_A_COBRAR); ContratoParcelamentoItem contratoParcelamentoItem = new ContratoParcelamentoItem(); contratoParcelamentoItem.setId(idItem); contratoParcelamentoItem.setValorItem(valorItem); contratoParcelamentoItem.setDebitoACobrarGeral(debitoACobrarGeral); contratoParcelamentoItem.setContrato(contratoParcelamento); contratoParcelamentoItem.setDocumentoTipo(documentoTipo); // 1.2.1.1.1. O sistema gera o pagamento para debito a cobrar // [SB0007 - Gerar Pagamento], passando Indicador Pagamento Complementar com o valor 2 (dois). retorno = this.gerarPagamento(helper, fachada, valorCalculadoPagamento, ConstantesSistema.NAO, DocumentoTipo.DEBITO_A_COBRAR, idDebitoTipo, prestacaoContratoParcelamento, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; } } } Collection<Object[]> dadosItensConta = this.repositorioContratoParcelamento .pesquisarItensDebitoConta(contratoParcelamento.getId()); // 1.3. Caso existam itens de d�bito do tipo conta para gera��o de pagamento if (dadosItensConta != null && !dadosItensConta.isEmpty()) { Iterator iteratorItens = dadosItensConta.iterator(); while(iteratorItens.hasNext()) { Object[] dadosItem = (Object[]) iteratorItens.next(); Integer idItem = (Integer) dadosItem[0]; BigDecimal valorItem = (BigDecimal) dadosItem[1]; Integer idConta = (Integer) dadosItem[2]; Integer anoMesConta = (Integer) dadosItem[3]; Integer idLoca = (Integer) dadosItem[4]; Integer idImovel = (Integer) dadosItem[5]; if ((prestacaoContratoParcelamento.getValor().subtract(valorCalculadoPagamento)) .compareTo(BigDecimal.ZERO) > 0) { Localidade localidade = new Localidade(); localidade.setId(idLoca); Imovel imovel = new Imovel(); imovel.setId(idImovel); Conta conta = new Conta(); conta.setId(idConta); conta.setReferencia(anoMesConta); conta.setLocalidade(localidade); conta.setImovel(imovel); ContaGeral contaGeral = new ContaGeral(); contaGeral.setConta(conta); contaGeral.setId(idConta); DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.CONTA); ContratoParcelamentoItem contratoParcelamentoItem = new ContratoParcelamentoItem(); contratoParcelamentoItem.setId(idItem); contratoParcelamentoItem.setValorItem(valorItem); contratoParcelamentoItem.setContaGeral(contaGeral); contratoParcelamentoItem.setContrato(contratoParcelamento); contratoParcelamentoItem.setDocumentoTipo(documentoTipo); retorno = this.gerarPagamento(helper, fachada, valorCalculadoPagamento, ConstantesSistema.NAO, DocumentoTipo.CONTA, null, prestacaoContratoParcelamento, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorCalculadoPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; Collection colecaoConta = new ArrayList(); colecaoConta.add(conta); Date dataPagamento = Util.converteStringParaDate(helper.getDataPagamento()); //<<Inclui>> [UC0151] Alterar Vencimento de Conta this.getControladorFaturamento().alterarVencimentoConta(colecaoConta, null, dataPagamento, usuarioLogado); } } } retorno[0] = valorCalculadoPagamento; retorno[1] = colecaoPagamento; return retorno; } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * [SB0007] - Gerar Pagamento * * @author Mariana Victor * @throws ErroRepositorioException * @throws ControladorException * @since 06/06/2011 * */ private Object[] gerarPagamento(InformarPagamentoContratoParcelamentoHelper helper, Fachada fachada, BigDecimal valorCalculadoPagamento, Short indicadorPagamentoComplementar, Integer documentoTipo, Integer debitoTipo, PrestacaoContratoParcelamento prestacaoContratoParcelamento, ContratoParcelamentoItem contratoParcelamentoItem, AvisoBancario avisoBancario, Usuario usuarioLogado, Collection<Pagamento> colecaoPagamento) throws ErroRepositorioException, ControladorException { Object[] retorno = new Object[2]; ContratoParcelamento contratoParcelamento = contratoParcelamentoItem.getContrato(); BigDecimal valorPagamento = null; // 1.1.1. Caso o pagamento seja complementar (Indicador Pagamento Complementar com o valor 1 (um)): if (indicadorPagamentoComplementar.compareTo(ConstantesSistema.SIM) == 0) { BigDecimal valorPagoItem = this.repositorioContratoParcelamento.pesquisarValorPagoItem( contratoParcelamento.getId(), contratoParcelamentoItem.getId()); // 1.1.1.1. Caso o valor do item menos valor j� pago para o item // seja superior ao valor restante da parcela if (contratoParcelamentoItem.getValorItem().subtract(valorPagoItem).compareTo( prestacaoContratoParcelamento.getValor().subtract(valorCalculadoPagamento)) > 0){ valorPagamento = prestacaoContratoParcelamento.getValor().subtract(valorCalculadoPagamento); } else { // 1.1.1.2. Caso contr�rio, ou seja, o valor do item n�o seja superior // ao valor restante da parcela: valorPagamento = contratoParcelamentoItem.getValorItem().subtract(valorPagoItem); } // 1.1.2. Caso contr�rio, ou seja, o pagamento n�o � complementar: } else if (indicadorPagamentoComplementar.compareTo(ConstantesSistema.NAO) == 0) { // 1.1.2.1. Caso o valor do item seja superior ao valor restante da parcela if (contratoParcelamentoItem.getValorItem().compareTo( prestacaoContratoParcelamento.getValor().subtract(valorCalculadoPagamento)) > 0){ valorPagamento = prestacaoContratoParcelamento.getValor().subtract(valorCalculadoPagamento); } else { // 1.1.2.2. Caso contr�rio, ou seja, o valor do item n�o seja superior ao valor restante da parcela valorPagamento = contratoParcelamentoItem.getValorItem(); } } // 1.2.1. Caso o item de d�bito seja do tipo conta if (documentoTipo.compareTo(DocumentoTipo.CONTA) == 0) { //[SB0008 - Gerar Pagamento para Conta] retorno = this.gerarPagamentoConta(helper, fachada, valorPagamento, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; // 1.2.2. Caso o item de d�bito seja do tipo guia de pagamento } else if (documentoTipo.compareTo(DocumentoTipo.GUIA_PAGAMENTO) == 0) { //[SB0009 - Gerar Pagamento para Guia de Pagamento]. retorno = this.gerarPagamentoGuiaPagamento(helper, fachada, valorPagamento, debitoTipo, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; // 1.2.3. Caso o item de d�bito seja do tipo d�bito a cobrar } else if (documentoTipo.compareTo(DocumentoTipo.DEBITO_A_COBRAR) == 0) { // [SB0010 - Gerar Pagamento para D�bito a Cobrar]. retorno = this.gerarPagamentoDebitoACobrar(helper, fachada, valorPagamento, debitoTipo, contratoParcelamentoItem, avisoBancario, usuarioLogado, colecaoPagamento); valorPagamento = (BigDecimal) retorno[0]; colecaoPagamento = (Collection<Pagamento>) retorno[1]; } //1.4. O sistema acumula o valor calculado do pagamento valorCalculadoPagamento = valorCalculadoPagamento.add(valorPagamento); //1.5. O sistema vincula o item de d�bito pago � parcela paga PrestacaoItemContratoParcelamento prestacaoItemContratoParcelamento = new PrestacaoItemContratoParcelamento(); prestacaoItemContratoParcelamento.setPrestacao(prestacaoContratoParcelamento); prestacaoItemContratoParcelamento.setItem(contratoParcelamentoItem); prestacaoItemContratoParcelamento.setValorPago(valorPagamento); prestacaoItemContratoParcelamento.setUltimaAlteracao(new Date()); fachada.inserir(prestacaoItemContratoParcelamento); retorno[0] = valorCalculadoPagamento; retorno[1] = colecaoPagamento; return retorno; } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * [SB0008] - Gerar Pagamento para Conta * * @author Mariana Victor * @throws ControladorException * @throws ErroRepositorioException * @since 06/06/2011 * */ private Object[] gerarPagamentoConta(InformarPagamentoContratoParcelamentoHelper helper, Fachada fachada, BigDecimal valorPagamento, ContratoParcelamentoItem contratoParcelamentoItem, AvisoBancario avisoBancario, Usuario usuarioLogado, Collection<Pagamento> colecaoPagamento) throws ControladorException, ErroRepositorioException{ Object[] retorno = new Object[2]; Date dataPagamento = Util.converteStringParaDate(helper.getDataPagamento()); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); Integer anoMesSistemaParametro = sistemaParametro.getAnoMesArrecadacao(); Integer anoMesDataPagamento = Util.formataAnoMes(dataPagamento); Integer anoMes = null; if (anoMesDataPagamento > anoMesSistemaParametro) { anoMes = anoMesDataPagamento; } else { anoMes = anoMesSistemaParametro; } Conta conta = contratoParcelamentoItem.getContaGeral().getConta(); Pagamento pagamento = new Pagamento(); pagamento.setAnoMesReferenciaPagamento(conta.getReferencia()); pagamento.setAnoMesReferenciaArrecadacao(anoMes); pagamento.setValorPagamento(valorPagamento); pagamento.setDataPagamento(dataPagamento); pagamento.setPagamentoSituacaoAtual(null); pagamento.setPagamentoSituacaoAnterior(null); pagamento.setDebitoTipo(null); pagamento.setContaGeral(contratoParcelamentoItem.getContaGeral()); pagamento.setGuiaPagamento(null); pagamento.setDebitoACobrarGeral(null); pagamento.setLocalidade(conta.getLocalidade()); pagamento.setDocumentoTipo(contratoParcelamentoItem.getDocumentoTipo()); pagamento.setAvisoBancario(avisoBancario); pagamento.setImovel(conta.getImovel()); pagamento.setArrecadadorMovimentoItem(null); if (avisoBancario != null){ pagamento.setArrecadacaoForma(avisoBancario.getArrecadacaoForma()); } else { pagamento.setArrecadacaoForma(helper.getArrecadacaoForma()); } pagamento.setUltimaAlteracao(new Date()); pagamento.setCliente(null); if (avisoBancario != null){ // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_INFORMAR_PAGAMENTO_CONTRATO_PARCELAMENTO_POR_CLIENTE,pagamento.getId(), pagamento.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(pagamento); // ------------ REGISTRAR TRANSA��O ---------------- //1. O sistema inclui o pagamento na tabela arrecadacao.PAGAMENTO Integer idPagamento = (Integer) fachada.inserir(pagamento); pagamento.setId(idPagamento); } // 2. O sistema verifica se existe item de documento de cobran�a associado a esta conta // 3. Caso existam itens de documento de cobran�a associados a esta conta, o sistema atualiza a situa��o // do item do documento de cobran�a referente � Conta na tabela cobranca.COBRANCA_DOCUMENTO_ITEM getControladorCobranca().atualizarSituacaoCobrancaDocumentoItemAPartirPagamento(pagamento, CobrancaDebitoSituacao.PAGO, dataPagamento); // 4. O sistema verifica se existem itens de negativa��o associados a esta conta // <<Inclui>> [UC0937 - Obter Itens de Negativa��o Associados � Conta] Collection colecaoNegativadorMovimentoRegItem = this.getControladorSpcSerasa() .obterItensNegativacaoAssociadosAConta(pagamento.getImovel().getId(), conta.getReferencia()); // 5. Caso existam itens de negativa��o associados a esta conta if(colecaoNegativadorMovimentoRegItem != null && !colecaoNegativadorMovimentoRegItem.isEmpty()){ // 5.1. Para cada item de negativa��o retornado, o sistema atualiza o item de negativa��o com os dados do pagamento Iterator iterNmri = colecaoNegativadorMovimentoRegItem.iterator(); while (iterNmri.hasNext()) { Integer idItemNegativacao = (Integer) iterNmri.next(); //[SB0011 - Atualizar Item da Negativa��o] this.atualizarItemNegativacao(fachada, idItemNegativacao,pagamento); } } colecaoPagamento.add(pagamento); retorno[0] = valorPagamento; retorno[1] = colecaoPagamento; return retorno; } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * [SB0009] - Gerar Pagamento para Guia de Pagamento * * @author Mariana Victor * @throws ControladorException * @throws ErroRepositorioException * @since 06/06/2011 * */ private Object[] gerarPagamentoGuiaPagamento(InformarPagamentoContratoParcelamentoHelper helper, Fachada fachada, BigDecimal valorPagamento, Integer idDebitoTipo, ContratoParcelamentoItem contratoParcelamentoItem, AvisoBancario avisoBancario, Usuario usuarioLogado, Collection<Pagamento> colecaoPagamento) throws ControladorException, ErroRepositorioException{ Object[] retorno = new Object[2]; Date dataPagamento = Util.converteStringParaDate(helper.getDataPagamento()); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); Integer anoMesSistemaParametro = sistemaParametro.getAnoMesArrecadacao(); Integer anoMesDataLancamento = Util.formataAnoMes(dataPagamento); Integer anoMes = null; if (anoMesDataLancamento > anoMesSistemaParametro) { anoMes = anoMesDataLancamento; } else { anoMes = anoMesSistemaParametro; } DebitoTipo debitoTipo = new DebitoTipo(); debitoTipo.setId(idDebitoTipo); GuiaPagamento guiaPagamento = new GuiaPagamento(); guiaPagamento.setId(contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getId()); Pagamento pagamento = new Pagamento(); pagamento.setAnoMesReferenciaArrecadacao(anoMes); pagamento.setValorPagamento(valorPagamento); pagamento.setDataPagamento(dataPagamento); pagamento.setDebitoTipo(debitoTipo); pagamento.setGuiaPagamento(guiaPagamento); pagamento.setLocalidade(contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getLocalidade()); pagamento.setDocumentoTipo(contratoParcelamentoItem.getDocumentoTipo()); pagamento.setAvisoBancario(avisoBancario); pagamento.setImovel(contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getImovel()); if (avisoBancario != null){ pagamento.setArrecadacaoForma(avisoBancario.getArrecadacaoForma()); } else { pagamento.setArrecadacaoForma(helper.getArrecadacaoForma()); } pagamento.setUltimaAlteracao(new Date()); pagamento.setCliente(contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getCliente()); if (avisoBancario != null){ // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_INFORMAR_PAGAMENTO_CONTRATO_PARCELAMENTO_POR_CLIENTE,pagamento.getId(), pagamento.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(pagamento); // ------------ REGISTRAR TRANSA��O ---------------- //1. O sistema inclui o pagamento na tabela arrecadacao.PAGAMENTO Integer idPagamento = (Integer) fachada.inserir(pagamento); pagamento.setId(idPagamento); } //2. O sistema verifica se existe item de documento de cobran�a associado a esta guia de pagamento //3. Caso existam itens de documento de cobran�a associados a esta guia de pagamento, o sistema atualiza a situa��o // do item do documento de cobran�a referente � Guia de Pagamento na tabela cobranca.COBRANCA_DOCUMENTO_ITEM getControladorCobranca().atualizarSituacaoCobrancaDocumentoItemAPartirPagamento(pagamento, CobrancaDebitoSituacao.PAGO, dataPagamento); //4. O sistema verifica se existem itens de negativa��o associados a esta guia de pagamento // <<Inclui>> [UC1009 - Obter Itens de Negativa��o Associados � Guia] Collection colecaoNegativadorMovimentoRegItem = this.getControladorSpcSerasa(). obterNegativadorMovimentoRegItemAssociadosAGuiaPagamento( contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getId()); //5. Caso existam itens de negativa��o associados a esta guia de pagamento if(colecaoNegativadorMovimentoRegItem != null && !colecaoNegativadorMovimentoRegItem.isEmpty()){ //5.1. Para cada item de negativa��o retornado, o sistema atualiza o item de negativa��o com os dados do pagamento Iterator iterNmri = colecaoNegativadorMovimentoRegItem.iterator(); while (iterNmri.hasNext()) { Integer idItemNegativacao = (Integer) iterNmri.next(); //[SB0011 - Atualizar Item da Negativa��o]. this.atualizarItemNegativacao(fachada, idItemNegativacao,pagamento); } } colecaoPagamento.add(pagamento); retorno[0] = valorPagamento; retorno[1] = colecaoPagamento; return retorno; } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * [SB0011] - Atualizar Item da Negativa��o * * @author Mariana Victor * @throws ErroRepositorioException * @since 06/06/2011 * */ private void atualizarItemNegativacao(Fachada fachada, Integer idItemNegativacao, Pagamento pagamento) throws ErroRepositorioException{ Integer codigoExclusao = this.repositorioContratoParcelamento.pesquisarCodigoExclusaoNegativacao(idItemNegativacao); FiltroNegativadorMovimentoRegItem filtroNegativadorMovimentoRegItem = new FiltroNegativadorMovimentoRegItem(); filtroNegativadorMovimentoRegItem.adicionarParametro(new ParametroSimples( FiltroNegativadorMovimentoRegItem.ID, idItemNegativacao)); Collection colecaoNegativadorMovimentoRegItem = fachada.pesquisar( filtroNegativadorMovimentoRegItem, NegativadorMovimentoRegItem.class.getName()); NegativadorMovimentoRegItem negativadorMovimentoRegItem = (NegativadorMovimentoRegItem) Util.retonarObjetoDeColecao(colecaoNegativadorMovimentoRegItem); negativadorMovimentoRegItem.setValorPago(pagamento.getValorPagamento()); CobrancaDebitoSituacao cobrancaDebitoSituacao = new CobrancaDebitoSituacao(); cobrancaDebitoSituacao.setId(CobrancaDebitoSituacao.PAGO); if (codigoExclusao == null) { //1. Caso a negativa��o n�o esteja exclu�da negativadorMovimentoRegItem.setCobrancaDebitoSituacao(cobrancaDebitoSituacao); negativadorMovimentoRegItem.setDataSituacaoDebito(pagamento.getDataPagamento()); } else { //2. Caso contr�rio, atualiza o item da negativa��o negativadorMovimentoRegItem.setCobrancaDebitoSituacaoAposExclusao(cobrancaDebitoSituacao); negativadorMovimentoRegItem.setDataSituacaoDebitoAposExclusao(pagamento.getDataPagamento()); } negativadorMovimentoRegItem.setUltimaAlteracao(new Date()); fachada.atualizar(negativadorMovimentoRegItem); } /** * [UC1141] Emitir Contrato de Parcelamento por Cliente * * Retorna os registros com os dados a serem impressos no relat�rio * * @author Mariana Victor * @throws ControladorException * @since 10/06/2011 * */ public List<RelatorioEmitirContratoParcelamentoPorClienteBean> pesquisarDadosRelatorioContratoParcelamentoPorCliente( FiltrarRelatorioEmitirContratoParcelamentoPorClienteHelper helper) throws ControladorException { try { List<RelatorioEmitirContratoParcelamentoPorClienteBean> colecaoBean = new ArrayList(); RelatorioEmitirContratoParcelamentoPorClienteBean bean = new RelatorioEmitirContratoParcelamentoPorClienteBean(); // [SB0001] - Emitir Dados Gerais do Contrato // 1.2.1. N�mero do Contrato if (helper.getContratoParcelamento() != null && helper.getContratoParcelamento().getNumero() != null) { bean.setNumeroContrato(helper.getContratoParcelamento().getNumero()); } // 1.2.2.1. No. Contrato Anterior if (helper.getContratoParcelamento().getContratoAnterior() != null) { bean.setNumeroContratoAnt(helper.getContratoParcelamento().getContratoAnterior().getNumero()); } // 1.2.2.2. Tipo Rela��o if (helper.getContratoParcelamento().getContratoAnterior() != null && helper.getContratoParcelamento().getRelacaoAnterior() != null && helper.getContratoParcelamento().getRelacaoAnterior().getDescricao() != null) { bean.setTipoRelacao(helper.getContratoParcelamento().getRelacaoAnterior().getDescricao()); } // 1.3.1. Data do Contrato if (helper.getContratoParcelamento().getDataContrato() != null) { bean.setDataContrato(helper.getContratoParcelamento().getDataContrato()); // 1.3.2. Momento da Implanta��o do Contrato bean.setDataImplContrato(helper.getContratoParcelamento().getDataImplantacao()); } // 1.4.1. Usu�rio Respons�vel if (helper.getUsuarioResponsavel() != null) { bean.setUsResponsavel(helper.getUsuarioResponsavel()); } if (helper.getCliente() != null) { FiltroContratoParcelamentoCliente filtroContratoParcelamentoCliente = new FiltroContratoParcelamentoCliente(); filtroContratoParcelamentoCliente.adicionarParametro(new ParametroSimples( FiltroContratoParcelamentoCliente.ID_CONTRATO, helper.getContratoParcelamento().getId())); filtroContratoParcelamentoCliente.adicionarCaminhoParaCarregamentoEntidade( FiltroContratoParcelamentoCliente.CLIENTE); filtroContratoParcelamentoCliente.adicionarCaminhoParaCarregamentoEntidade( FiltroContratoParcelamentoCliente.CLIENTE_SUPERIOR); Collection colecaoContratoParcelamentoCliente = Fachada.getInstancia() .pesquisar(filtroContratoParcelamentoCliente, ContratoParcelamentoCliente.class.getName()); if (colecaoContratoParcelamentoCliente != null && !colecaoContratoParcelamentoCliente.isEmpty()) { ContratoParcelamentoCliente contratoParcelamentoCliente = this.retornaClienteSuperior(colecaoContratoParcelamentoCliente); // 1.5.1. Caso o contrato tenha sido implantado para um cliente superior, // emitir o cliente superior e os clientes a ele vinculados: if (contratoParcelamentoCliente != null) { // 1.5.1.1. Cliente Superior: bean.setTipoCliente("Cliente Superior"); // 1.5.1.1.1. c�digo bean.setCodigoCliente(contratoParcelamentoCliente.getCliente().getId().toString()); // 1.5.1.1.2. nome bean.setNomeCliente(contratoParcelamentoCliente.getCliente().getNome()); // 1.5.1.1.3. CNPJ bean.setCnpjCliente(contratoParcelamentoCliente.getCliente().getCnpjFormatado()); // 1.5.1.2. Rela��o dos Clientes Vinculados ao Cliente FiltroContratoParcelamentoCliente filtroClientesVinculados = new FiltroContratoParcelamentoCliente(); filtroClientesVinculados.adicionarParametro(new ParametroSimples( FiltroContratoParcelamentoCliente.ID_CONTRATO, helper.getContratoParcelamento().getId())); filtroClientesVinculados.adicionarParametro(new ParametroSimples( FiltroContratoParcelamentoCliente.INDICADOR_CLIENTE_SUPERIOR, ConstantesSistema.NAO)); filtroClientesVinculados.adicionarCaminhoParaCarregamentoEntidade( FiltroContratoParcelamentoCliente.CLIENTE); Collection colecaoClientesVinculados = Fachada.getInstancia() .pesquisar(filtroClientesVinculados, ContratoParcelamentoCliente.class.getName()); if (colecaoClientesVinculados != null && !colecaoClientesVinculados.isEmpty()) { Iterator iterator = colecaoClientesVinculados.iterator(); List<RelatorioEmitirContratoParcelamentoPorClienteSubCliBean> colecaoSubClientesVinculados = new ArrayList(); //1.5.1.2.1. Para cada cliente vinculado ao cliente superior while(iterator.hasNext()) { RelatorioEmitirContratoParcelamentoPorClienteSubCliBean subBean = new RelatorioEmitirContratoParcelamentoPorClienteSubCliBean(); ContratoParcelamentoCliente clientesVinculados = (ContratoParcelamentoCliente) iterator.next(); // 1.5.1.2.1.1. c�digo subBean.setIdClienteVinculado(clientesVinculados.getCliente().getId().toString()); // 1.5.1.2.1.2. nome subBean.setNomeClienteVinculado(clientesVinculados.getCliente().getNome()); // 1.5.1.2.1.3. CNPJ if (clientesVinculados.getCliente().getCnpj() != null) { subBean.setCnpjClienteVinculado(clientesVinculados.getCliente().getCnpjFormatado()); } else if (clientesVinculados.getCliente().getCpf() != null) { // ou CPF subBean.setCnpjClienteVinculado(clientesVinculados.getCliente().getCpfFormatado()); } colecaoSubClientesVinculados.add(subBean); } bean.setArrayJRDadosClientesVinculados(colecaoSubClientesVinculados); } } else { // 1.5.2. Caso contr�rio, ou seja, o contrato n�o foi implantado para um cliente superior, // emitir o cliente do contrato contratoParcelamentoCliente = (ContratoParcelamentoCliente) Util.retonarObjetoDeColecao(colecaoContratoParcelamentoCliente); // 1.5.2.1. Cliente: bean.setTipoCliente("Cliente"); // 1.5.2.1.1. c�digo bean.setCodigoCliente(contratoParcelamentoCliente.getCliente().getId().toString()); // 1.5.2.1.2. nome bean.setNomeCliente(contratoParcelamentoCliente.getCliente().getNome()); // 1.5.2.1.3. CNPJ bean.setCnpjCliente(contratoParcelamentoCliente.getCliente().getCnpjFormatado()); // 1.5.2.1.4. tipo da rela��o if (helper.getContratoParcelamento().getRelacaoCliente() != null) { bean.setTipoRelacao(helper.getContratoParcelamento().getRelacaoCliente().getDescricao()); } } } } // 1.6.1. D�bito selecionado para negocia��o if (helper.getContratoParcelamento().getIndicadorResponsavel() != null) { // caso o d�bito selecionado tenha sido o indicado na conta if (helper.getContratoParcelamento().getIndicadorResponsavel().compareTo(new Short("1")) == 0) { bean.setDebitoSelecionado("Indicado na Conta"); } // caso o d�bito selecionado tenha sido o atual do im�vel if (helper.getContratoParcelamento().getIndicadorResponsavel().compareTo(new Short("2")) == 0) { bean.setDebitoSelecionado("Atual no Im�vel"); } // caso o d�bito selecionado tenha sido o indicado na conta e o atual do im�vel if (helper.getContratoParcelamento().getIndicadorResponsavel().compareTo(new Short("3")) == 0) { bean.setDebitoSelecionado("Indicado na Conta e Atual do Im�vel"); } } // 1.7.1. Per�odo de Refer�ncia do D�bito if (helper.getContratoParcelamento().getAnoMesDebitoInicioFormatado() != null && helper.getContratoParcelamento().getAnoMesDebitoFinalFormatado() != null){ bean.setPeriodoReferenciaDebito( helper.getContratoParcelamento().getAnoMesDebitoInicioFormatado() + " a " + helper.getContratoParcelamento().getAnoMesDebitoFinalFormatado()); } // 1.8.1. Per�odo de Vencimento do D�bito if (helper.getContratoParcelamento().getDataVencimentoInicioFormatada() != null && helper.getContratoParcelamento().getDataVencimentoFinalFormatada() != null){ bean.setPeriodoVencimentoDebito( helper.getContratoParcelamento().getDataVencimentoInicioFormatada() + " a " + helper.getContratoParcelamento().getDataVencimentoFinalFormatada()); } // 1.9.1. Observa��o if (helper.getContratoParcelamento().getObservacao() != null) { bean.setObservacaoDebito(helper.getContratoParcelamento().getObservacao()); } else { bean.setObservacaoDebito("-"); } // 1.10.1. Situa��o de Cancelamento // caso o contrato esteja cancelado if (helper.getContratoParcelamento().getMotivoDesfazer() != null) { bean.setSituacaoCancelamento("Cancelado"); } else { // caso o contrato n�o esteja cancelado bean.setSituacaoCancelamento("N�o Cancelado"); } // 1.11.1. Situa��o de Pagamento // caso o contrato esteja pendente if (helper.getContratoParcelamento().getValorParcelamentoACobrar() != null && helper.getContratoParcelamento().getValorParcelamentoACobrar().compareTo(BigDecimal.ZERO) > 0) { bean.setSituacaoPagamento("Pendente"); } else { // caso o contrato esteja pago bean.setSituacaoPagamento("Pago"); } // [SB0002] - Emitir D�bitos do Cliente if ((helper.getColecaoContaItens() != null && !helper.getColecaoContaItens().isEmpty())) { Iterator iteratorConta = helper.getColecaoContaItens().iterator(); ArrayList<RelatorioEmitirContratoParcelamentoPorClienteSubContaBean> colecaoSubContaBean = new ArrayList(); // 1.2.1. Contas while(iteratorConta.hasNext()) { ContratoParcelamentoItem contratoParcelamentoItem = (ContratoParcelamentoItem) iteratorConta.next(); RelatorioEmitirContratoParcelamentoPorClienteSubContaBean subBean = new RelatorioEmitirContratoParcelamentoPorClienteSubContaBean(); ContaGeral contaGeral = contratoParcelamentoItem.getContaGeral(); Conta conta = contaGeral.getConta(); // 1.2.1.1. Matr�cula subBean.setMatricula(conta.getImovel().getId().toString()); // 1.2.1.2. M�s/Ano de Refer�ncia subBean.setAnoMesConta(conta.getFormatarAnoMesParaMesAno()); // 1.2.1.3. Vencimento subBean.setVencimentoConta(Util.formatarData(conta.getDataVencimentoConta())); // 1.2.1.4. Valor �gua subBean.setValorAgua(conta.getValorAgua()); // 1.2.1.5. Valor Esgoto subBean.setValorEsgoto(conta.getValorEsgoto()); // 1.2.1.6. Valor D�bitos subBean.setValorDebitos(conta.getDebitos()); // 1.2.1.7. Valor Cr�ditos subBean.setValorCreditos(conta.getValorCreditos()); // 1.2.1.8. Valor Impostos subBean.setValorImpostos(conta.getValorImposto()); // 1.2.1.9. Valor Conta BigDecimal valorConta = BigDecimal.ZERO; if (conta.getValorAgua() != null) { valorConta = valorConta.add(conta.getValorAgua()); } if (conta.getValorEsgoto() != null) { valorConta = valorConta.add(conta.getValorEsgoto()); } if (conta.getDebitos() != null) { valorConta = valorConta.add(conta.getDebitos()); } if (conta.getValorCreditos() != null) { valorConta = valorConta.subtract(conta.getValorCreditos()); } if (conta.getValorImposto() != null) { valorConta = valorConta.subtract(conta.getValorImposto()); } subBean.setValorConta(valorConta); // 1.2.1.10. Acr�sc. Impont. if (contratoParcelamentoItem.getValarAcrescImpont() != null && contratoParcelamentoItem.getValarAcrescImpont().compareTo(BigDecimal.ZERO) != 0) { subBean.setAcrescImpont(contratoParcelamentoItem.getValarAcrescImpont()); } else { subBean.setAcrescImpont(contratoParcelamentoItem.getValorTotalContaValores()); } // 1.2.1.11. Situa��o subBean.setSituacaoConta(conta.getDebitoCreditoSituacaoAtual().getDescricaoAbreviada()); // 1.2.1.12. Desvinculada do Contrato? if (contratoParcelamentoItem.getIndicadorItemCancelado() != null && contratoParcelamentoItem.getIndicadorItemCancelado().compareTo(ConstantesSistema.SIM) == 0) { subBean.setDesvinculadaContrato("SIM"); } else { subBean.setDesvinculadaContrato("N�O"); } colecaoSubContaBean.add(subBean); } bean.setArrayJRDadosContas(colecaoSubContaBean); } if(helper.getColecaoItensDebitoACobrar() != null && !helper.getColecaoItensDebitoACobrar().isEmpty()){ Iterator iteratorDebitoACobrar = helper.getColecaoItensDebitoACobrar().iterator(); ArrayList<RelatorioEmitirContratoParcelamentoPorClienteSubDebitoACobrarBean> colecaoSubDebitoACobrarBean = new ArrayList(); BigDecimal totalDebitoACobrar = new BigDecimal("0"); //1.3.1 Debito a Cobrar while(iteratorDebitoACobrar.hasNext()){ RelatorioEmitirContratoParcelamentoPorClienteSubDebitoACobrarBean subBean = new RelatorioEmitirContratoParcelamentoPorClienteSubDebitoACobrarBean(); ContratoParcelamentoItem contratoParcelamentoItem = (ContratoParcelamentoItem) iteratorDebitoACobrar.next(); DebitoACobrarGeral debitoGeral = contratoParcelamentoItem.getDebitoACobrarGeral(); //1.3.1.1 subBean.setMatricula(debitoGeral.getDebitoACobrar().getImovel().getMatriculaFormatada()); //1.3.1.2 subBean.setTipoDebito(debitoGeral.getDebitoACobrar().getDebitoTipo().getDescricao()); //1.3.1.3 subBean.setMesAnoReferencia(debitoGeral.getDebitoACobrar().getFormatarAnoMesReferenciaDebito()); //1.3.1.4 subBean.setMesAnoCobranca(debitoGeral.getDebitoACobrar().getFormatarAnoMesCobrancaDebito()); //1.3.1.5 String parcelasACobrar = (debitoGeral.getDebitoACobrar().getNumeroPrestacaoDebitoMenosBonus()-debitoGeral.getDebitoACobrar().getNumeroPrestacaoCobradas()) + ""; subBean.setParcelasACobrar(parcelasACobrar); //1.3.1.6 subBean.setValorACobrar(Util.formatarBigDecimalParaStringComVirgula(debitoGeral.getDebitoACobrar().getValorDebito())); if(debitoGeral.getDebitoACobrar().getValorDebito() != null){ totalDebitoACobrar = totalDebitoACobrar.add(debitoGeral.getDebitoACobrar().getValorDebito()); } colecaoSubDebitoACobrarBean.add(subBean); } bean.setArrayJRDadosDebitosACobrar(colecaoSubDebitoACobrarBean); bean.setTotalDocsDebitoACobrar(colecaoSubDebitoACobrarBean.size() + " doc(s)"); bean.setTotalValorACobrar(Util.formatarBigDecimalParaStringComVirgula(totalDebitoACobrar)); }else{ ArrayList<RelatorioEmitirContratoParcelamentoPorClienteSubDebitoACobrarBean> colecaoSubDebitoACobrarBean = new ArrayList(); colecaoSubDebitoACobrarBean.add(new RelatorioEmitirContratoParcelamentoPorClienteSubDebitoACobrarBean()); bean.setArrayJRDadosDebitosACobrar(colecaoSubDebitoACobrarBean); bean.setTotalDocsDebitoACobrar("0 doc(s)"); bean.setTotalValorACobrar("0,00"); } // 1.4.1. Total do D�bito BigDecimal totalDebito = BigDecimal.ZERO; if (helper.getContratoParcelamento().getValorDebitoAtualizado() != null) { totalDebito = totalDebito.add( helper.getContratoParcelamento().getValorDebitoAtualizado()); } if (helper.getContratoParcelamento().getValorTotalAcrescImpontualidade() != null) { totalDebito = totalDebito.subtract( helper.getContratoParcelamento().getValorTotalAcrescImpontualidade()); } bean.setTotalDebito(totalDebito); // 1.4.2. Total do D�bito Atualizado BigDecimal totalDebitoAtualizado = BigDecimal.ZERO; if (helper.getContratoParcelamento().getValorDebitoAtualizado() != null) { totalDebitoAtualizado = helper.getContratoParcelamento().getValorDebitoAtualizado(); } bean.setTotalDebitoAtualizado(totalDebitoAtualizado); // [SB0003] - Emitir Dados do Parcelamento // 1.2. Linha 2: // 1.2.1. Resolu��o de Diretoria if (helper.getContratoParcelamento().getResolucaoDiretoria() != null) { bean.setResolucaoDiretoria(helper.getContratoParcelamento().getResolucaoDiretoria().getNumero()); } else { bean.setResolucaoDiretoria("-"); } // 1.3.1. D�bito com Acr�scimos? if (helper.getContratoParcelamento().getIndicadorDebitosAcrescimos() != null && helper.getContratoParcelamento().getIndicadorDebitosAcrescimos().compareTo(ConstantesSistema.SIM) == 0) { bean.setDebitoAcrescimos("SIM"); } else { bean.setDebitoAcrescimos("N�O"); } // 1.4.1. Parcelamento com Juros? if (helper.getContratoParcelamento().getIndicadorParcelamentoJuros() != null && helper.getContratoParcelamento().getIndicadorParcelamentoJuros().compareTo(ConstantesSistema.SIM) == 0) { bean.setParcelamentoJuros("SIM"); } else { bean.setParcelamentoJuros("N�O"); } // 1.5.1. Permite Informar o Valor da Parcela? if (helper.getContratoParcelamento().getIndicadorPermiteInformarValorParcel() != null && helper.getContratoParcelamento().getIndicadorPermiteInformarValorParcel().compareTo(ConstantesSistema.SIM) == 0) { bean.setInformarValorParcela("SIM"); } else { bean.setInformarValorParcela("N�O"); } // 1.6.1. Forma de Pagamento if (helper.getContratoParcelamento().getCobrancaForma() != null) { bean.setFormaPagamento(helper.getContratoParcelamento().getCobrancaForma().getDescricao()); } // 1.7.1. Valor do D�bito if (helper.getContratoParcelamento().getValorDebitoAtualizado() != null) { BigDecimal valorDebito = helper.getContratoParcelamento().getValorDebitoAtualizado(); if (helper.getContratoParcelamento().getValorTotalAcrescImpontualidade() != null) { valorDebito.subtract(helper.getContratoParcelamento().getValorTotalAcrescImpontualidade()); } bean.setValorDebito(valorDebito); } else { bean.setValorDebito(BigDecimal.ZERO); } // 1.8.1. Valor dos Acr�scimos por Impontualidade if (helper.getContratoParcelamento().getValorTotalAcrescImpontualidade() != null) { bean.setValorAcrescImpontualidade(helper.getContratoParcelamento().getValorTotalAcrescImpontualidade()); } else { bean.setValorAcrescImpontualidade(BigDecimal.ZERO); } // 1.9.1. Taxa de Juros (%) if (helper.getContratoParcelamento().getTaxaJuros() != null) { bean.setTaxaJuros(helper.getContratoParcelamento().getTaxaJuros()); } else { bean.setTaxaJuros(BigDecimal.ZERO); } // 1.10.1. Valor dos Juros de Parcelamento if (helper.getContratoParcelamento().getValorJurosParcelamento() != null) { bean.setValorJurosParc(helper.getContratoParcelamento().getValorJurosParcelamento()); } else { bean.setValorJurosParc(BigDecimal.ZERO); } // 1.11.1. Valor Parcelado if (helper.getContratoParcelamento().getValorTotalParcelado() != null) { bean.setValorParcelado(helper.getContratoParcelamento().getValorTotalParcelado()); } else { bean.setValorParcelado(BigDecimal.ZERO); } // 1.12.1. Valor Parcelado a Cobrar if (helper.getContratoParcelamento().getValorParcelamentoACobrar() != null) { bean.setValorParceladoACobrar(helper.getContratoParcelamento().getValorParcelamentoACobrar()); } else { bean.setValorParceladoACobrar(BigDecimal.ZERO); } // 1.13.1. Parcelas Collection<PrestacaoContratoParcelamento> colecaoParcelas = helper.getColecaoParcelas(); if (colecaoParcelas != null && !colecaoParcelas.isEmpty()) { Iterator iterator = colecaoParcelas.iterator(); ArrayList<RelatorioEmitirContratoParcelamentoPorClienteSubParcBean> colecaoSubBean = new ArrayList(); while(iterator.hasNext()) { RelatorioEmitirContratoParcelamentoPorClienteSubParcBean subBean = new RelatorioEmitirContratoParcelamentoPorClienteSubParcBean(); PrestacaoContratoParcelamento prestacaoContratoParcelamento = (PrestacaoContratoParcelamento) iterator.next(); subBean.setParcelaPrestacoes(prestacaoContratoParcelamento.getNumero().toString() + "/" + helper.getContratoParcelamento().getNumeroPrestacoes()); subBean.setDataVencimento(prestacaoContratoParcelamento.getDataVencimentoFormatada()); subBean.setValorParcela(Util.formatarMoedaReal(prestacaoContratoParcelamento.getValor())); if (this.repositorioContratoParcelamento.pesquisarParcelaPaga(prestacaoContratoParcelamento.getId())) { subBean.setSituacao("Paga"); } else { subBean.setSituacao("-"); } colecaoSubBean.add(subBean); } bean.setArrayJRDadosParcelas(colecaoSubBean); } colecaoBean.add(bean); return colecaoBean; } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public ContratoParcelamentoCliente retornaClienteSuperior(Collection<ContratoParcelamentoCliente> colecaoContratoParcelamentoCliente) { Iterator iterator = colecaoContratoParcelamentoCliente.iterator(); while(iterator.hasNext()) { ContratoParcelamentoCliente contratoParcelamentoCliente = (ContratoParcelamentoCliente) iterator.next(); if (contratoParcelamentoCliente.getIndicadorClienteSuperior() != null && contratoParcelamentoCliente.getIndicadorClienteSuperior().compareTo(ConstantesSistema.SIM) == 0) { return contratoParcelamentoCliente; } } return null; } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * Permite a atualiza��o de contrato de parcelamento por cliente. * * @author Paulo Diniz, Mariana Victor * @date 16/03/2011, 27/07/2011 * * @param contrato * @throws ControladorException */ public void atualizaContratoParcelamentoPorCliente(ContratoParcelamento contrato, Usuario usuarioLogado, ContratoParcelamentoCliente clienteContrato, ContratoParcelamentoCliente clienteSuperiorContrato, List<DebitosClienteHelper> listaDebitos, List<DebitosClienteHelper> listaDebitosAnterior, List<PrestacaoContratoParcelamento> listaDeParcelas) throws ControladorException { try{ contrato.setUltimaAlteracao(new Date()); this.getControladorUtil().atualizar(contrato); repositorioContratoParcelamento.removerClientesVinculadosAContratoParcelamento(contrato.getId()); if (clienteContrato != null) { clienteContrato.setContrato(contrato); clienteContrato.setIndicadorClienteSuperior(new Short("2")); clienteContrato.setUltimaAlteracao( new Date()); clienteContrato.setClienteSuperior(null); Integer idClienteContratoInserido = (Integer) this.getControladorUtil().inserir(clienteContrato); clienteContrato.setId(idClienteContratoInserido); } else if (clienteSuperiorContrato != null) { clienteSuperiorContrato.setContrato(contrato); clienteSuperiorContrato.setIndicadorClienteSuperior(new Short("1")); clienteSuperiorContrato.setUltimaAlteracao( new Date()); clienteSuperiorContrato.setClienteSuperior(null); Integer idClienteContratoSuperiorInserido = (Integer) this.getControladorUtil().inserir(clienteSuperiorContrato); clienteSuperiorContrato.setId(idClienteContratoSuperiorInserido); Collection<Integer> clientesVinculados = this.getControladorCliente().pesquisarClientesAssociadosResponsavel(clienteSuperiorContrato.getCliente().getId().intValue()); for (Integer idCliente : clientesVinculados) { ContratoParcelamentoCliente contratoParcelCliente = new ContratoParcelamentoCliente(); contratoParcelCliente.setContrato(contrato); Cliente cliente = new Cliente(); cliente.setId(idCliente); contratoParcelCliente.setCliente(cliente); contratoParcelCliente.setIndicadorClienteSuperior(new Short("2")); contratoParcelCliente.setUltimaAlteracao( new Date()); contratoParcelCliente.setClienteSuperior(clienteSuperiorContrato); this.getControladorUtil().inserir(contratoParcelCliente); } } //1.3.1 - Remover os Itens de Debio atuais for (DebitosClienteHelper debitosClienteHelper : listaDebitosAnterior) { if (debitosClienteHelper.getTipoDocumento().compareTo(DocumentoTipo.CONTA) == 0) { ContaGeral contaGeral = new ContaGeral(); contaGeral.setId(debitosClienteHelper.getIdentificadorItem()); Collection colecaoContas = (Collection) this.getControladorFaturamento().obterConta(contaGeral.getId()); Conta conta = (Conta)colecaoContas.iterator().next(); if(conta.getDataRevisao() != null){ getControladorFaturamento().retirarRevisaoConta(colecaoContas, conta.getId().intValue()+"", usuarioLogado, false, Funcionalidade.MANTER_CONTRATO_PARCELAMENTO_POR_CLIENTE ); } } else if (debitosClienteHelper.getTipoDocumento().compareTo(DocumentoTipo.DEBITO_A_COBRAR) == 0) { DebitoACobrarGeral debitoACobrarGeral = new DebitoACobrarGeral(); debitoACobrarGeral.setId(debitosClienteHelper.getIdentificadorItem()); DebitoACobrar debitoACobrar = this.getControladorFaturamento().obterDebitoACobrar(debitoACobrarGeral.getId()); Collection colecaoDebitoACobrar = new ArrayList(); colecaoDebitoACobrar.add(debitoACobrar); if(debitoACobrar.getDataRevisao() != null){ getControladorFaturamento().retirarRevisaoDebitoACobrar(colecaoDebitoACobrar, usuarioLogado); } } } repositorioContratoParcelamento.removerItensDebitosVinculadosAContratoParcelamento(contrato.getId()); for (DebitosClienteHelper debitosClienteHelper : listaDebitos) { ContratoParcelamentoItem parcelItem = new ContratoParcelamentoItem(); parcelItem.setContrato(contrato); parcelItem.setValorItem(debitosClienteHelper.getValorItem()); parcelItem.setValarAcrescImpont(debitosClienteHelper.getValorAcrescImpont()); parcelItem.setUltimaAlteracao(new Date()); parcelItem.setIndicadorItemCancelado(new Short("2")); if (debitosClienteHelper.getTipoDocumento().compareTo(DocumentoTipo.CONTA) == 0) { DocumentoTipo docTipo = new DocumentoTipo(); docTipo.setId(DocumentoTipo.CONTA); ContaGeral contaGeral = new ContaGeral(); contaGeral.setId(debitosClienteHelper.getIdentificadorItem()); parcelItem.setDocumentoTipo(docTipo); parcelItem.setContaGeral(contaGeral); Collection colecaoContas = (Collection) this.getControladorFaturamento().obterConta(contaGeral.getId()); Conta conta = (Conta)colecaoContas.iterator().next(); if(conta.getDataRevisao() != null){ getControladorFaturamento().retirarRevisaoConta(colecaoContas, conta.getId().intValue()+"", usuarioLogado, false, Funcionalidade.MANTER_CONTRATO_PARCELAMENTO_POR_CLIENTE ); } ContaMotivoRevisao motivoRevisao = new ContaMotivoRevisao(); motivoRevisao.setId(ContaMotivoRevisao.CONTA_EM_CONTRATO_PARCELAMENTO); getControladorFaturamento().colocarRevisaoConta(colecaoContas, conta.getId()+"", motivoRevisao, usuarioLogado); } else if (debitosClienteHelper.getTipoDocumento().compareTo(DocumentoTipo.DEBITO_A_COBRAR) == 0) { DocumentoTipo docTipo = new DocumentoTipo(); docTipo.setId(DocumentoTipo.DEBITO_A_COBRAR); DebitoACobrarGeral debitoACobrarGeral = new DebitoACobrarGeral(); debitoACobrarGeral.setId(debitosClienteHelper.getIdentificadorItem()); parcelItem.setDocumentoTipo(docTipo); parcelItem.setDebitoACobrarGeral(debitoACobrarGeral); DebitoACobrar debitoACobrar = this.getControladorFaturamento().obterDebitoACobrar(debitoACobrarGeral.getId()); Collection colecaoDebitoACobrar = new ArrayList(); colecaoDebitoACobrar.add(debitoACobrar); if(debitoACobrar.getDataRevisao() != null){ getControladorFaturamento().retirarRevisaoDebitoACobrar(colecaoDebitoACobrar, usuarioLogado); } ContaMotivoRevisao motivoRevisao = new ContaMotivoRevisao(); motivoRevisao.setId(ContaMotivoRevisao.DEBITO_A_COBRAR_EM_CONTRATO_PARCELAMENTO); getControladorFaturamento().colocarRevisaoDebitoACobrar(colecaoDebitoACobrar, motivoRevisao, usuarioLogado); } this.getControladorUtil().inserir(parcelItem); } int indicadorGuiaAcrecImpontualidade = 2; if(contrato.getIndicadorDebitosAcrescimos().intValue() == 1 && contrato.getValorTotalAcrescImpontualidade() != null && contrato.getValorTotalAcrescImpontualidade().floatValue() > 0.0){ indicadorGuiaAcrecImpontualidade = 1; } int indicadorGuiaJurosSobreContratoParcel = 2; if(contrato.getIndicadorParcelamentoJuros().intValue() == 1 && contrato.getValorJurosParcelamento() != null && contrato.getValorJurosParcelamento().floatValue() > 0.0){ indicadorGuiaJurosSobreContratoParcel = 1; } FiltroCobrancaDocumentoItem filtroCobrancaDocumentoItem = new FiltroCobrancaDocumentoItem(); filtroCobrancaDocumentoItem.adicionarParametro(new ParametroSimples( FiltroCobrancaDocumentoItem.PRESTACAO_CONTRATO_PARCELAMENTO_ID, contrato.getId())); Collection colecaoItens = this.getControladorUtil().pesquisar(filtroCobrancaDocumentoItem, CobrancaDocumentoItem.class.getName()); Integer idDocumentoCobranca = null; if (colecaoItens != null && !colecaoItens.isEmpty()) { Iterator iterator = colecaoItens.iterator(); while(iterator.hasNext()) { CobrancaDocumentoItem item = (CobrancaDocumentoItem) iterator.next(); idDocumentoCobranca = item.getCobrancaDocumento().getId(); repositorioContratoParcelamento.removerItemDocumentoCobrancaVinculadoAContratoParcelamento(item.getId()); } } if (idDocumentoCobranca != null) { repositorioContratoParcelamento.removerDocumentoCobrancaVinculadoAContratoParcelamento(idDocumentoCobranca); } //1.6.1 Remover Parcelas repositorioContratoParcelamento.removerPrestacoesVinculadasAContratoParcelamento(contrato.getId()); Date dataVencPacel = contrato.getDataVencimentoPrimParcela(); List<PrestacaoContratoParcelamento> colecaoPrestacaoContratoParcelamento = new ArrayList<PrestacaoContratoParcelamento>(); PrestacaoContratoParcelamento prestacaoContratoParcelamento = listaDeParcelas.get(0); prestacaoContratoParcelamento.setDataVencimento(dataVencPacel); prestacaoContratoParcelamento.setContratoParcelamento(contrato); prestacaoContratoParcelamento.setUltimaAlteracao(new Date()); Integer idPrestacao = (Integer) this.getControladorUtil().inserir(prestacaoContratoParcelamento); prestacaoContratoParcelamento.setId(idPrestacao); colecaoPrestacaoContratoParcelamento.add(prestacaoContratoParcelamento); for (int i = 1; i < listaDeParcelas.size(); i++) { prestacaoContratoParcelamento = listaDeParcelas.get(i); Date dataParcel = Util.adicionarNumeroDiasDeUmaData(listaDeParcelas.get(i-1).getDataVencimento(), 30); prestacaoContratoParcelamento.setDataVencimento(dataParcel); prestacaoContratoParcelamento.setContratoParcelamento(contrato); prestacaoContratoParcelamento.setUltimaAlteracao(new Date()); idPrestacao = (Integer) this.getControladorUtil().inserir(prestacaoContratoParcelamento); prestacaoContratoParcelamento.setId(idPrestacao); colecaoPrestacaoContratoParcelamento.add(prestacaoContratoParcelamento); } FiltroContratoParcelamentoItem filtroGuiaJuros = new FiltroContratoParcelamentoItem(); filtroGuiaJuros.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO); filtroGuiaJuros.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_CLIENTE); filtroGuiaJuros.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_IMOVEL); filtroGuiaJuros.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_IMOVEL_LOCALIDADE); filtroGuiaJuros.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.CONTRATO_ID, contrato.getId().intValue())); filtroGuiaJuros.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.DOCUMENTO_TIPO_ID, DocumentoTipo.GUIA_PAGAMENTO)); filtroGuiaJuros.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_DEBITO_TIPO_COD_CONST, DebitoTipo.JUROS_SOBRE_CONTR_PARCELAMENTO)); Collection<ContratoParcelamentoItem> contratoItensManter = (Collection<ContratoParcelamentoItem>) getControladorUtil().pesquisar(filtroGuiaJuros, ContratoParcelamentoItem.class.getName()); if(contratoItensManter != null && !contratoItensManter.isEmpty()){ GuiaPagamento guiaPagamentoManter = new GuiaPagamento(); Collection<GuiaPagamento> guiasPagamentoManter = new ArrayList<GuiaPagamento>(); String[] registrosRemocao = new String[contratoItensManter.size()]; int posicao = 0; for (ContratoParcelamentoItem contratoParcelamentoItem : contratoItensManter) { Integer anoMesContabil = (Integer) contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getAnoMesReferenciaContabil(); Cliente cliente = new Cliente(); Imovel imovel = new Imovel(); if (contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getCliente() != null) { Integer idCliente = (Integer) contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getCliente().getId(); cliente.setId(idCliente); } if (contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getImovel() != null) { Integer idImovel = (Integer) contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getImovel().getId(); imovel.setId(idImovel); } GuiaPagamento guia = contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento(); guia.setAnoMesReferenciaContabil(anoMesContabil); if (cliente != null) { guia.setCliente(cliente); } if (imovel != null) { guia.setImovel(imovel); } guiasPagamentoManter.add(guia); registrosRemocao[posicao] = guia.getId().toString(); if (posicao == 0) { guiaPagamentoManter.setCliente(cliente); guiaPagamentoManter.setImovel(imovel); } posicao++; } // 1.6.3.1.1 Cancela a guia de pagamento de Juros sobre Contrato // 1.6.3.1.1.1 <<Inclui>> [UC0188 - Manter Guia de Pagamento] - [SB0001 - Cancelar Guia de Pagamento] getControladorFaturamento().manterGuiaPagamento(guiaPagamentoManter, guiasPagamentoManter, registrosRemocao, null, usuarioLogado); } if(indicadorGuiaJurosSobreContratoParcel == 1){ BigDecimal valorPrimeiraGuia = new BigDecimal("0"); BigDecimal valorDaGuia = contrato.getValorJurosParcelamento().divide(new BigDecimal(listaDeParcelas.size()),2 , BigDecimal.ROUND_UP); BigDecimal totalSomaGuias = valorDaGuia.multiply(new BigDecimal(listaDeParcelas.size())); BigDecimal diferenca = contrato.getValorJurosParcelamento().subtract(totalSomaGuias); valorPrimeiraGuia = valorDaGuia.add(diferenca); for (int i = 0; i < listaDeParcelas.size(); i++) { prestacaoContratoParcelamento = listaDeParcelas.get(i); GuiaPagamento guia = new GuiaPagamento(); guia.setDataEmissao(new Date()); //Primeira guia com diferenca ajustada if(i == 0){ guia.setValorDebito(valorPrimeiraGuia); }else{ guia.setValorDebito(valorDaGuia); } DebitoTipo debitoTipo = this.repositorioFaturamento .obterDebitoTipoCodigoConstante(DebitoTipo.JUROS_SOBRE_CONTR_PARCELAMENTO); guia.setDebitoTipo(debitoTipo); FinanciamentoTipo financiamentoTipo = new FinanciamentoTipo(); financiamentoTipo.setId(FinanciamentoTipo.JUROS_PARCELAMENTO); guia.setFinanciamentoTipo(financiamentoTipo); guia.setDataVencimento(prestacaoContratoParcelamento.getDataVencimento()); guia.setLocalidade(new Localidade()); guia.setImovel(new Imovel()); guia.setRegistroAtendimento(new RegistroAtendimento()); guia.setOrdemServico(new OrdemServico()); Cliente cliente = null; if(clienteContrato != null){ cliente = clienteContrato.getCliente(); }else if(clienteSuperiorContrato != null){ cliente = clienteSuperiorContrato.getCliente(); } guia.setCliente(cliente); guia.setAnoMesReferenciaContabil(contrato.getAnoMesReferenciaFaturamento()); LancamentoItemContabil lancamentoItemContabil = new LancamentoItemContabil(LancamentoItemContabil.JUROS_SOBRE_CONTRATO_PARCELAMENTO); guia.setLancamentoItemContabil(lancamentoItemContabil); guia.setDebitoCreditoSituacaoAnterior(null); DebitoCreditoSituacao debitoCreditoSituacaoAtual = new DebitoCreditoSituacao(DebitoCreditoSituacao.NORMAL); guia.setDebitoCreditoSituacaoAtual(debitoCreditoSituacaoAtual); guia.setUsuario(contrato.getUsuarioResponsavel()); guia.setObservacao("GUIA GERADA NA IMPLANTA��O DO CONTRATO DE PARCELAMENTO POR CLIENTE " + contrato.getNumero()+ " da tabela cobranca.CONTRATO_PARCEL"); guia.setIndicadorEmitirObservacao(new Short("2")); guia.setNumeroPrestacaoDebito(Short.parseShort("1")); guia.setNumeroPrestacaoTotal(Short.parseShort("1")); Collection colecaoGuiaPagamentoItem = new ArrayList(); GuiaPagamentoItem guiaPagamentoItem = new GuiaPagamentoItem(); guiaPagamentoItem.setDebitoTipo(debitoTipo); guiaPagamentoItem.setValorDebito(guia.getValorDebito()); guiaPagamentoItem.setUltimaAlteracao(new Date()); colecaoGuiaPagamentoItem.add(guiaPagamentoItem); //LOCA_ID da tabela LOCALIDADE com LOCA_ICSEDE = 1 Localidade localidadeSede = getControladorCobranca().pesquisarLocalidadeSede(); String ids[] = getControladorFaturamento().inserirGuiaPagamento(guia, contrato.getUsuarioResponsavel(), contrato.getNumeroDiasEntreVencimentoParcel(), colecaoGuiaPagamentoItem, localidadeSede, true); //[SB0017] Vincula Guia GuiaPagamentoGeral guiaGeral = new GuiaPagamentoGeral(); guiaGeral.setId(Integer.parseInt(ids[0])); ContratoParcelamentoItem contratoParcelItem = new ContratoParcelamentoItem(); contratoParcelItem.setIndicadorItemCancelado(new Short("2")); contratoParcelItem.setContrato(contrato); DocumentoTipo docTipo = new DocumentoTipo(); docTipo.setId(DocumentoTipo.GUIA_PAGAMENTO); contratoParcelItem.setDocumentoTipo(docTipo); contratoParcelItem.setDebitoACobrarGeral(null); contratoParcelItem.setContaGeral(null); contratoParcelItem.setGuiaPagamentoGeral(guiaGeral); contratoParcelItem.setCreditoARealizarGeral(null); if(i == 0){ contratoParcelItem.setValorItem(valorPrimeiraGuia); }else{ contratoParcelItem.setValorItem(valorDaGuia); } contratoParcelItem.setValarAcrescImpont(null); contratoParcelItem.setUltimaAlteracao(new Date()); getControladorUtil().inserir(contratoParcelItem); } } FiltroContratoParcelamentoItem filtroGuiaAcrescImpont = new FiltroContratoParcelamentoItem(); filtroGuiaAcrescImpont.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO); filtroGuiaAcrescImpont.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_CLIENTE); filtroGuiaAcrescImpont.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_IMOVEL); filtroGuiaAcrescImpont.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_IMOVEL_LOCALIDADE); filtroGuiaAcrescImpont.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.CONTRATO_ID, contrato.getId().intValue())); filtroGuiaAcrescImpont.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.DOCUMENTO_TIPO_ID, DocumentoTipo.GUIA_PAGAMENTO)); filtroGuiaAcrescImpont.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.GUIA_PAGAMENTO_GERAL_GUIA_PAGAMENTO_DEBITO_TIPO_ID, DebitoTipo.ACRESCIMOS_POR_IMPONTUALIDADE)); contratoItensManter = (Collection<ContratoParcelamentoItem>) getControladorUtil().pesquisar(filtroGuiaAcrescImpont, ContratoParcelamentoItem.class.getName()); if(contratoItensManter != null && !contratoItensManter.isEmpty()){ GuiaPagamento guiaPagamentoManter = new GuiaPagamento(); Collection<GuiaPagamento> guiasPagamentoManter = new ArrayList<GuiaPagamento>(); String[] registrosRemocao = new String[contratoItensManter.size()]; int posicao = 0; for (ContratoParcelamentoItem contratoParcelamentoItem : contratoItensManter) { Integer anoMesContabil = (Integer) contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getAnoMesReferenciaContabil(); Cliente cliente = new Cliente(); Imovel imovel = new Imovel(); if (contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getCliente() != null) { Integer idCliente = (Integer) contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getCliente().getId(); cliente.setId(idCliente); } if (contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getImovel() != null) { Integer idImovel = (Integer) contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento().getImovel().getId(); imovel.setId(idImovel); } GuiaPagamento guia = contratoParcelamentoItem.getGuiaPagamentoGeral().getGuiaPagamento(); guia.setAnoMesReferenciaContabil(anoMesContabil); if (cliente != null) { guia.setCliente(cliente); } if (imovel != null) { guia.setImovel(imovel); } guiasPagamentoManter.add(guia); registrosRemocao[posicao] = guia.getId().toString(); if (posicao == 0) { guiaPagamentoManter.setCliente(cliente); guiaPagamentoManter.setImovel(imovel); } posicao++; } // 1.6.2.1.1 Cancela a guia de pagamento de Juros sobre Contrato // 1.6.2.1.1.1 <<Inclui>> [UC0188 - Manter Guia de Pagamento] - [SB0001 - Cancelar Guia de Pagamento] getControladorFaturamento().manterGuiaPagamento(guiaPagamentoManter, guiasPagamentoManter, registrosRemocao, null, usuarioLogado); } if(indicadorGuiaAcrecImpontualidade == 1){ BigDecimal valorPrimeiraGuia = new BigDecimal("0"); BigDecimal valorDaGuia = contrato.getValorTotalAcrescImpontualidade().divide(new BigDecimal(listaDeParcelas.size()),2 , BigDecimal.ROUND_UP); BigDecimal totalSomaGuias = valorDaGuia.multiply(new BigDecimal(listaDeParcelas.size())); BigDecimal diferenca = contrato.getValorTotalAcrescImpontualidade().subtract(totalSomaGuias); valorPrimeiraGuia = valorDaGuia.add(diferenca); for (int i = 0; i < listaDeParcelas.size(); i++) { prestacaoContratoParcelamento = listaDeParcelas.get(i); GuiaPagamento guia = new GuiaPagamento(); guia.setDataEmissao(new Date()); //Primeira guia com diferenca ajustada if(i == 0){ guia.setValorDebito(valorPrimeiraGuia); }else{ guia.setValorDebito(valorDaGuia); } DebitoTipo debitoTipo = new DebitoTipo(); debitoTipo.setId(DebitoTipo.ACRESCIMOS_POR_IMPONTUALIDADE); guia.setDebitoTipo(debitoTipo); FinanciamentoTipo financiamentoTipo = new FinanciamentoTipo(); financiamentoTipo.setId(FinanciamentoTipo.ENTRADA_PARCELAMENTO); guia.setFinanciamentoTipo(financiamentoTipo); guia.setDataVencimento(prestacaoContratoParcelamento.getDataVencimento()); guia.setLocalidade(new Localidade()); guia.setImovel(new Imovel()); guia.setRegistroAtendimento(new RegistroAtendimento()); guia.setOrdemServico(new OrdemServico()); Cliente cliente = null; if(clienteContrato != null){ cliente = clienteContrato.getCliente(); }else if(clienteSuperiorContrato != null){ cliente = clienteSuperiorContrato.getCliente(); } guia.setCliente(cliente); guia.setAnoMesReferenciaContabil(contrato.getAnoMesReferenciaFaturamento()); LancamentoItemContabil lancamentoItemContabil = new LancamentoItemContabil(LancamentoItemContabil.ACRESCIMOS_POR_IMPONTUALIDADE); guia.setLancamentoItemContabil(lancamentoItemContabil); guia.setDebitoCreditoSituacaoAnterior(null); DebitoCreditoSituacao debitoCreditoSituacaoAtual = new DebitoCreditoSituacao(DebitoCreditoSituacao.NORMAL); guia.setDebitoCreditoSituacaoAtual(debitoCreditoSituacaoAtual); guia.setUsuario(contrato.getUsuarioResponsavel()); guia.setObservacao("GUIA GERADA NA IMPLANTA��O DO CONTRATO DE PARCELAMENTO POR CLIENTE " + contrato.getNumero()+ " da tabela cobranca.CONTRATO_PARCEL"); guia.setIndicadorEmitirObservacao(new Short("2")); guia.setNumeroPrestacaoDebito(Short.parseShort("1")); guia.setNumeroPrestacaoTotal(Short.parseShort("1")); Collection colecaoGuiaPagamentoItem = new ArrayList(); GuiaPagamentoItem guiaPagamentoItem = new GuiaPagamentoItem(); guiaPagamentoItem.setDebitoTipo(debitoTipo); guiaPagamentoItem.setValorDebito(guia.getValorDebito()); guiaPagamentoItem.setUltimaAlteracao(new Date()); colecaoGuiaPagamentoItem.add(guiaPagamentoItem); //LOCA_ID da tabela LOCALIDADE com LOCA_ICSEDE = 1 Localidade localidadeSede = getControladorCobranca().pesquisarLocalidadeSede(); String ids[] = getControladorFaturamento().inserirGuiaPagamento(guia, contrato.getUsuarioResponsavel(), contrato.getNumeroDiasEntreVencimentoParcel(), colecaoGuiaPagamentoItem, localidadeSede, true); //[SB0017] Vincula Guia GuiaPagamentoGeral guiaGeral = new GuiaPagamentoGeral(); guiaGeral.setId(Integer.parseInt(ids[0])); ContratoParcelamentoItem contratoParcelItem = new ContratoParcelamentoItem(); contratoParcelItem.setIndicadorItemCancelado(new Short("2")); contratoParcelItem.setContrato(contrato); DocumentoTipo docTipo = new DocumentoTipo(); docTipo.setId(DocumentoTipo.GUIA_PAGAMENTO); contratoParcelItem.setDocumentoTipo(docTipo); contratoParcelItem.setDebitoACobrarGeral(null); contratoParcelItem.setContaGeral(null); contratoParcelItem.setGuiaPagamentoGeral(guiaGeral); contratoParcelItem.setCreditoARealizarGeral(null); if(i == 0){ contratoParcelItem.setValorItem(valorPrimeiraGuia); }else{ contratoParcelItem.setValorItem(valorDaGuia); } contratoParcelItem.setValarAcrescImpont(null); contratoParcelItem.setUltimaAlteracao(new Date()); getControladorUtil().inserir(contratoParcelItem); } } // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_INSERIR_CONTRATO_PARCELAMENTO_POR_CLIENTE, contrato.getId(), contrato.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(contrato); // ------------ REGISTRAR TRANSA��O ---------------- // 1.7. Caso a forma de pagamento seja cobran�a por extrato if (contrato.getCobrancaForma() != null && contrato.getCobrancaForma().getId() != null && contrato.getCobrancaForma().getId().compareTo(CobrancaForma.COBRANCA_POR_EXTRATO) == 0) { // O sistema gera o extrato do contrato de parcelamento por cliente // (<<Inclui>> [UC1200 - Gerar Extrato de Contrato Parcelamento Por Cliente] // passando o cliente e as parcelas). Cliente cliente = null; if (clienteSuperiorContrato != null && clienteSuperiorContrato.getCliente() != null && clienteSuperiorContrato.getCliente().getId() != null) { cliente = clienteSuperiorContrato.getCliente(); } else if (clienteContrato != null && clienteContrato.getCliente() != null && clienteContrato.getCliente().getId() != null) { cliente = clienteContrato.getCliente(); } this.gerarExtratoDeContratoParcelamentoPorCliente(cliente.getId(), colecaoPrestacaoContratoParcelamento); } }catch (Exception ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * Consulta o id da RD relacionada ao contrato de parcelamento * * @author Mariana Victor * @data 29/06/2011 */ public Integer pesquisarRDContratoParcelamento(Integer idContratoParcelamento) throws ControladorException { try { return repositorioContratoParcelamento.pesquisarRDContratoParcelamento(idContratoParcelamento); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * Consulta os dados das contas vinculadas ao contrato de parcelamento * * @author Mariana Victor * @data 02/07/2011 */ public Collection<ContaValoresHelper> pesquisarDadosDasContasContratoParcelamento(Integer idContratoParcelamento) throws ControladorException { try { return repositorioContratoParcelamento.pesquisarDadosDasContasContratoParcelamento(idContratoParcelamento); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * [FS0008] - Verificar exist�ncia do contrato anterior * * @author Mariana Victor * @data 08/07/2011 */ public Boolean verificarExistenciaContratoAnterior(String numeroContratoAnterior) throws ControladorException { try { return repositorioContratoParcelamento.verificarExistenciaContratoAnterior(numeroContratoAnterior); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * [FS0037] - Verificar situa��o do contrato anterior * * Retorna a situa��o de parcelamento do contrato * * @author Mariana Victor * @data 08/07/2011 */ public Boolean verificarSituacaoContratoAnterior(String numeroContratoAnterior) throws ControladorException { try { return repositorioContratoParcelamento.verificarSituacaoContratoAnterior(numeroContratoAnterior); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente * * [SB0010] - Gerar Pagamento para D�bito a Cobrar * * @author Mariana Victor * @throws ControladorException * @throws ErroRepositorioException * @since 22/07/2011 * */ private Object[] gerarPagamentoDebitoACobrar(InformarPagamentoContratoParcelamentoHelper helper, Fachada fachada, BigDecimal valorPagamento, Integer idDebitoTipo, ContratoParcelamentoItem contratoParcelamentoItem, AvisoBancario avisoBancario, Usuario usuarioLogado, Collection<Pagamento> colecaoPagamento) throws ControladorException, ErroRepositorioException{ Object[] retorno = new Object[2]; Date dataPagamento = Util.converteStringParaDate(helper.getDataPagamento()); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); Integer anoMesSistemaParametro = sistemaParametro.getAnoMesArrecadacao(); Integer anoMesDataLancamento = Util.formataAnoMes(dataPagamento); Integer anoMes = null; if (anoMesDataLancamento > anoMesSistemaParametro) { anoMes = anoMesDataLancamento; } else { anoMes = anoMesSistemaParametro; } DebitoTipo debitoTipo = new DebitoTipo(); debitoTipo.setId(idDebitoTipo); DebitoACobrarGeral debitoACobrarGeral = contratoParcelamentoItem.getDebitoACobrarGeral(); debitoACobrarGeral.setId(contratoParcelamentoItem.getDebitoACobrarGeral().getDebitoACobrar().getId()); Pagamento pagamento = new Pagamento(); pagamento.setAnoMesReferenciaArrecadacao(anoMes); pagamento.setValorPagamento(valorPagamento); pagamento.setDataPagamento(dataPagamento); pagamento.setDebitoTipo(debitoTipo); pagamento.setDebitoACobrarGeral(contratoParcelamentoItem.getDebitoACobrarGeral()); pagamento.setLocalidade(contratoParcelamentoItem.getDebitoACobrarGeral().getDebitoACobrar().getLocalidade()); pagamento.setDocumentoTipo(contratoParcelamentoItem.getDocumentoTipo()); pagamento.setAvisoBancario(avisoBancario); pagamento.setImovel(contratoParcelamentoItem.getDebitoACobrarGeral().getDebitoACobrar().getImovel()); if (avisoBancario != null){ pagamento.setArrecadacaoForma(avisoBancario.getArrecadacaoForma()); } else { pagamento.setArrecadacaoForma(helper.getArrecadacaoForma()); } pagamento.setUltimaAlteracao(new Date()); if (avisoBancario != null){ // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_INFORMAR_PAGAMENTO_CONTRATO_PARCELAMENTO_POR_CLIENTE,pagamento.getId(), pagamento.getId(), new UsuarioAcaoUsuarioHelper(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(pagamento); // ------------ REGISTRAR TRANSA��O ---------------- // 1. O sistema inclui o pagamento na tabela arrecadacao.PAGAMENTO com os seguintes valores: Integer idPagamento = (Integer) fachada.inserir(pagamento); pagamento.setId(idPagamento); } // 2. O sistema verifica se existe item de documento de cobran�a associado a este d�bito a cobrar // 3. Caso existam itens de documento de cobran�a associados a este d�bito a cobrar, // o sistema atualiza a situa��o do item do documento de cobran�a referente ao D�bito a Cobrar // na tabela cobranca.COBRANCA_DOCUMENTO_ITEM getControladorCobranca().atualizarSituacaoCobrancaDocumentoItemAPartirPagamento(pagamento, CobrancaDebitoSituacao.PAGO, dataPagamento); colecaoPagamento.add(pagamento); retorno[0] = valorPagamento; retorno[1] = colecaoPagamento; return retorno; } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * Consulta os dados dos d�bitos a cobrar vinculados ao contrato de parcelamento * * @author Mariana Victor * @data 26/07/2011 */ public Collection<DebitoACobrar> pesquisarDadosDosDebitosACobrarContratoParcelamento( Integer idContratoParcelamento) throws ControladorException { try { return repositorioContratoParcelamento.pesquisarDadosDosDebitosACobrarContratoParcelamento(idContratoParcelamento); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC0184] Manter D�bito A Cobrar * * Verifica se o d�bito a cobrar est� vinculado a um Contrato Parcelamento por Cliente * * @author Mariana Victor * @date 28/07/2011 */ public boolean verificaDebitoACobrarVinculadoContratoParcelamentoCliente( Integer idDebitoACobrar) throws ControladorException { try { return repositorioContratoParcelamento. verificaDebitoACobrarVinculadoContratoParcelamentoCliente(idDebitoACobrar); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1200] Gerar Extrato de Contrato Parcelamento por Cliente * * Este caso de uso permite gerar o extrato do contrato de parcelamento do cliente. * * @author Mariana Victor * @date 28/07/2011 */ public void gerarExtratoDeContratoParcelamentoPorCliente ( Integer idCliente, List<PrestacaoContratoParcelamento> colecaoPrestacaoContratoParcelamento) throws ControladorException { // 2. O sistema Gera o extrato do contrato de // [SB0001] - Gerar Documento de Cobran�a Cliente cliente = new Cliente(); cliente.setId(idCliente); DocumentoTipo documentoTipo = new DocumentoTipo(); documentoTipo.setId(DocumentoTipo.EXTRATO_CONTRATO_PARCELAMENTO); BigDecimal valorTotalPrestacoes = BigDecimal.ZERO; Iterator iterator = colecaoPrestacaoContratoParcelamento.iterator(); while (iterator.hasNext()) { PrestacaoContratoParcelamento prestacao = (PrestacaoContratoParcelamento) iterator.next(); valorTotalPrestacoes = valorTotalPrestacoes.add(prestacao.getValor()); } DocumentoEmissaoForma documentoEmissaoForma = new DocumentoEmissaoForma(); documentoEmissaoForma.setId(DocumentoEmissaoForma.INDIVIDUAL); CobrancaDocumento cobrancaDocumento = new CobrancaDocumento(); cobrancaDocumento.setCliente(cliente); cobrancaDocumento.setDocumentoTipo(documentoTipo); // Seta com qualquer valor para inserir, depois da inser��o pegar o id // do documentoCobranca gerado para atualizar o mesmo registro cobrancaDocumento.setSequencialImpressao(new Integer("1")); cobrancaDocumento.setEmissao(new Date()); cobrancaDocumento.setValorDocumento(valorTotalPrestacoes); cobrancaDocumento.setValorAcrescimos(BigDecimal.ZERO); cobrancaDocumento.setDocumentoEmissaoForma(documentoEmissaoForma); cobrancaDocumento.setUltimaAlteracao(new Date()); // 1. O sistema gera o documento de cobran�a Integer idCobrancaDocumento = (Integer) this.getControladorUtil().inserir(cobrancaDocumento); // Atualiza o n�mero do sequencial do documento com o c�digo do // documento de cobran�a gerado cobrancaDocumento.setId(idCobrancaDocumento); cobrancaDocumento.setNumeroSequenciaDocumento(idCobrancaDocumento); this.getControladorUtil().atualizar(cobrancaDocumento); // 2. Para cada presta��o da lista recebida, o sistema gera os itens do documento de cobran�a iterator = colecaoPrestacaoContratoParcelamento.iterator(); while (iterator.hasNext()) { PrestacaoContratoParcelamento prestacao = (PrestacaoContratoParcelamento) iterator.next(); DocumentoTipo documentoTipoPrestacao = new DocumentoTipo(); documentoTipoPrestacao.setId(DocumentoTipo.EXTRATO_CONTRATO_PARCELAMENTO); CobrancaDocumentoItem cobrancaDocumentoItem = new CobrancaDocumentoItem(); cobrancaDocumentoItem.setCobrancaDocumento(cobrancaDocumento); cobrancaDocumentoItem.setDocumentoTipo(documentoTipoPrestacao); cobrancaDocumentoItem.setValorItemCobrado(prestacao.getValor()); cobrancaDocumentoItem.setPrestacaoContratoParcelamento(prestacao); cobrancaDocumentoItem.setUltimaAlteracao(new Date()); this.getControladorUtil().inserir(cobrancaDocumentoItem); } } /** * [UC1201] Emitir Extrato de Contrato de Parcelamento por Cliente * * 1. O sistema obt�m os dados do contrato de parcelamento por cliente * * @author Mariana Victor * @data 30/07/2011 */ public ContratoParcelamento obterDadosContratoParcelamento(String numeroContratoParcelamento) throws ControladorException { try { return repositorioContratoParcelamento. obterDadosContratoParcelamento(numeroContratoParcelamento); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1201] Emitir Extrato de Contrato de Parcelamento por Cliente * * 2.2. Dados do Parcelamento * * @author Mariana Victor * @data 30/07/2011 */ public Collection<PrestacaoContratoParcelamento> obterDadosPrestacoesContratoParcelamento(Integer idContratoParcelamento) throws ControladorException { try { return repositorioContratoParcelamento. obterDadosPrestacoesContratoParcelamento(idContratoParcelamento); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1201] Emitir Extrato de Contrato de Parcelamento por Cliente * * Retorna os registros com os dados a serem impressos no relat�rio * * @author Mariana Victor * @throws ControladorException * @data 30/07/2011 * */ public List<RelatorioEmitirExtratoContratoParcelamentoPorClienteBean> pesquisarDadosRelatorioEmitirExtratoContratoParcelamentoPorCliente( EmitirExtratoContratoParcelamentoPorClienteHelper helper, Collection<PrestacaoContratoParcelamentoHelper> colecaoHelper) throws ControladorException { List<RelatorioEmitirExtratoContratoParcelamentoPorClienteBean> colecaoBean = new ArrayList(); try { SistemaParametro sistemaParametro = Fachada.getInstancia().pesquisarParametrosDoSistema(); // [SB0001] - Emitir Extrato de D�bito do Cliente em Formato PDF String numeroContrato = helper.getNumeroContrato(); String totalParcelas = "" + colecaoHelper.size(); String nomeCliente = helper.getNomeCliente(); String codigoCliente = helper.getCodigoCliente(); String enderecoCliente = ""; FiltroClienteEndereco filtroClienteEndereco = new FiltroClienteEndereco(); filtroClienteEndereco.adicionarParametro(new ParametroSimples( FiltroClienteEndereco.CLIENTE_ID, codigoCliente)); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTipo"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTitulo"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("enderecoReferencia"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroBairro.bairro.municipio.unidadeFederacao"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.cep"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroInicial.logradouroTipo"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroInicial.logradouroTitulo"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroFinal.logradouroTipo"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroFinal.logradouroTitulo"); filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("enderecoTipo"); Collection colecaoEnderecoCliente = this.getControladorUtil().pesquisar( filtroClienteEndereco, ClienteEndereco.class.getName()); if (colecaoEnderecoCliente != null && !colecaoEnderecoCliente.isEmpty()) { ClienteEndereco clienteEndereco = (ClienteEndereco) ((List) colecaoEnderecoCliente).get(0); enderecoCliente = clienteEndereco.getEnderecoFormatado(); } Integer parcelaIncial = null; Integer parcelaFinal = null; boolean todasParcelas = false; if (helper.getParcelaEmissao() != null && !helper.getParcelaEmissao().toString().trim().equals("") && !helper.getParcelaEmissao().toString().trim().equals("-1")) { if (helper.getParcelaEmissao().toString().trim().equalsIgnoreCase("todas")) { todasParcelas = true; } else { parcelaIncial = new Integer(helper.getParcelaEmissao()); parcelaFinal = new Integer(helper.getParcelaEmissao()); } } else { parcelaIncial = helper.getInicioParcelas(); parcelaFinal = helper.getFimParcelas(); } Iterator iterator = colecaoHelper.iterator(); while (iterator.hasNext()) { PrestacaoContratoParcelamentoHelper prestacao = (PrestacaoContratoParcelamentoHelper) iterator.next(); if (todasParcelas || (new Integer(prestacao.getNumeroParcela()).compareTo(parcelaIncial) >= 0 && new Integer(prestacao.getNumeroParcela()).compareTo(parcelaFinal) <= 0)) { CobrancaDocumentoItem cobrancaDocumentoItem = this.repositorioContratoParcelamento. obterDocumentoCobrancaPrestacao(prestacao.getIdParcela()); CobrancaDocumento cobrancaDocumento = cobrancaDocumentoItem.getCobrancaDocumento(); // 1. Para cada presta��o, o sistema emite um extrato de d�bito: RelatorioEmitirExtratoContratoParcelamentoPorClienteBean bean = new RelatorioEmitirExtratoContratoParcelamentoPorClienteBean(); // 1.1. Linha 1: // 1.1.1. Nome do cliente bean.setNomeCliente1(nomeCliente); // 1.1.2. C�digo do cliente bean.setCodigoClienteResponsavel1(codigoCliente); // 1.2. Linha 2: // 1.2.1. Endere�o bean.setEnderecoCliente1(enderecoCliente); // 1.2.2. Sequencial bean.setSeqDocCobranca1("" + cobrancaDocumento.getNumeroSequenciaDocumento()); // 1.2.3. N� Parcelamento bean.setNumeroParcelamento1(numeroContrato); // 1.3. Linha 3: // 1.3.1.1. Parcela bean.setNumeroParcela1(prestacao.getNumeroParcela()); bean.setTotalParcelas(totalParcelas); // 1.3.1.2. Vencimento bean.setVencimentoFatura1(prestacao.getDataVencimento()); // 1.3.1.3. Valor R$ bean.setValorFatura1(prestacao.getValorParcela()); // 1.4. Linha 7: // 1.4.1. Data de Emiss�o bean.setDataEmissao1(Util.formatarData(new Date())); // 1.4.2. Valor total d�bitos bean.setValorFatura1(prestacao.getValorParcela()); String valorParcela = prestacao.getValorParcela().replace(".", ""); valorParcela = valorParcela.replace(",", "."); BigDecimal valorParcelaBigDec = new BigDecimal(valorParcela); // 1.5. Caso a empresa tenha estabelecido um valor padr�o para emiss�o do extrato no formato de ficha de compensa��o // 1.5.1. Caso o valor a pagar seja maior ou igual ao valor padr�o para emiss�o do extrato no formato de ficha de compensa��o // emitir no formato ficha de compensa��o if (sistemaParametro.getValorExtratoFichaComp() != null && sistemaParametro.getValorExtratoFichaComp().compareTo(BigDecimal.ZERO) > 0 && valorParcelaBigDec.compareTo(sistemaParametro.getValorExtratoFichaComp()) > 0) { // [SB0002] - Formatar Linhas para Emiss�o de Ficha de Compensa��o - Cliente bean.setSubRelatorio1("relatorioEmitirExtratoContratoParcelamentoClienteFichaCompensacao.jasper"); // [SB0004 - Obter Representa��o num�rica do Nosso N�mero da Ficha de Compensa��o] StringBuilder nossoNumero = Fachada.getInstancia().obterNossoNumeroFichaCompensacao( DocumentoTipo.EXTRATO_CONTRATO_PARCELAMENTO.toString(), prestacao.getIdParcela().toString()) ; String nossoNumeroSemDV = nossoNumero.toString().substring(0,nossoNumero.length() - 2); String fatorVencimento = CodigoBarras.obterFatorVencimento(Util.converteStringParaDate(prestacao.getDataVencimento())); String especificacaoCodigoBarra = CodigoBarras. obterEspecificacaoCodigoBarraFichaCompensacao( ConstantesSistema.CODIGO_BANCO_FICHA_COMPENSACAO, ConstantesSistema.CODIGO_MOEDA_FICHA_COMPENSACAO, valorParcelaBigDec, nossoNumeroSemDV.toString(), ConstantesSistema.CARTEIRA_FICHA_COMPENSACAO, fatorVencimento); String representacaoNumericaCodigoBarraFichaCompensacao = CodigoBarras.obterRepresentacaoNumericaCodigoBarraFichaCompensacao(especificacaoCodigoBarra); // 1.1.2. Representa��o num�rica do c�digo de barras // 1.16.1. C�digo de Barras bean.setRepresentacaoNumericaCodBarraFormatada1(representacaoNumericaCodigoBarraFichaCompensacao); bean.setRepresentacaoNumericaCodBarraSemDigito1(especificacaoCodigoBarra); //1.7. Linha 11,5: //1.7.1. Nosso N�mero bean.setNossoNumero(nossoNumeroSemDV); // 1.14. Linha 17: // 1.14.1. Sacado ? parte 1 bean.setSacadoParte01(nomeCliente); // 1.14.3. Sacado ? parte 3 bean.setSacadoParte03(codigoCliente); } else { // 1.5.2. Caso contr�rio, emitir no formato padr�o // 1.6. Caso contr�rio, emitir no formato padr�o bean.setSubRelatorio1("relatorioEmitirExtratoContratoParcelamentoClienteEmissaoPadrao.jasper"); // representa��o num�rica do c�digo de barras String representacaoNumericaCodBarra = ""; // Obt�m a representa��o num�rica do // c�digode // barra representacaoNumericaCodBarra = this .getControladorArrecadacao() .obterRepresentacaoNumericaCodigoBarra( 8, // 1.3.1.1. Tipo de pagamento valorParcelaBigDec, // 1.3.1.2. Valor do c�digo de barras 0, // 1.3.1.3. C�digo da localidade null, // 1.3.1.4. Matr�cula do im�vel null, // 1.3.1.5. M�s e Ano de Refer�ncia das Contas null, // 1.3.1.6. D�gito verificador da refer�ncia da conta no m�dulo 10 null, // 1.3.1.7. C�digo do Tipo do D�bito null, // 1.3.1.8. Ano da Emiss�o da Guia de Pagamento String .valueOf(prestacao.getIdParcela()), // 1.3.1.9. Seq�encial do Documento de Cobran�a DocumentoTipo.EXTRATO_CONTRATO_PARCELAMENTO, // 1.3.1.10. C�digo do Tipo de Documento new Integer(codigoCliente), //1.3.1.11. C�digo do Cliente Respons�vel null, // 1.3.1.12. Sequencial do documento de cobran�a null); // Formata a representa��o n�merica do // c�digo de // barras String representacaoNumericaCodBarraFormatada = representacaoNumericaCodBarra .substring(0, 11) + "-" + representacaoNumericaCodBarra.substring( 11, 12) + " " + representacaoNumericaCodBarra.substring( 12, 23) + "-" + representacaoNumericaCodBarra.substring( 23, 24) + " " + representacaoNumericaCodBarra.substring( 24, 35) + "-" + representacaoNumericaCodBarra.substring( 35, 36) + " " + representacaoNumericaCodBarra.substring( 36, 47) + "-" + representacaoNumericaCodBarra.substring( 47, 48); String representacaoNumericaCodBarraSemDigito = representacaoNumericaCodBarra .substring(0, 11) + representacaoNumericaCodBarra.substring(12, 23) + representacaoNumericaCodBarra.substring(24, 35) + representacaoNumericaCodBarra.substring(36, 47); // 1.3.1. Representa��o num�rica do c�digo de barras // 1.4.1. C�digo de barras do documento de cobran�a bean.setRepresentacaoNumericaCodBarraFormatada1(representacaoNumericaCodBarraFormatada); bean.setRepresentacaoNumericaCodBarraSemDigito1(representacaoNumericaCodBarraSemDigito); } ArrayList aux = new ArrayList(); aux.add(bean); bean.setArrayJRSubrelatorioBean1(new JRBeanCollectionDataSource(aux)); colecaoBean.add(bean); } } } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } return colecaoBean; } /** * [UC1136] Inserir Contrato de Parcelamento por Cliente * * Retorna os dados do d�bito a cobrar caso exista algum pagamento para o mesmo. * * @author Mariana Victor * @data 03/08/2011 */ public Object[] obterDadosDebitoACobrarPagoAMenor(Integer idDebitoACobrar) throws ControladorException { try { return repositorioContratoParcelamento. obterDadosDebitoACobrarPagoAMenor(idDebitoACobrar); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * @author Mariana Victor * @data 05/08/2011 */ public ContratoParcelamento pesquisarContratoParcelamentoCompleto(Integer idContrato, String numeroContrato) throws ControladorException { try { return repositorioContratoParcelamento. pesquisarContratoParcelamentoCompleto(idContrato, numeroContrato); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1201] Emitir Extrato de Contrato de Parcelamento por Cliente * * @author Mariana Victor * @data 06/08/2011 */ public Integer pesquisarIdClientecontrato(Integer idContratoParcelamento) throws ControladorException { try { return repositorioContratoParcelamento. pesquisarIdClientecontrato(idContratoParcelamento); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1140] Cancelar Contrato de Parcelamento por Cliente * * @author Mariana Victor * @data 06/08/2011 */ public ContratoParcelamentoCliente pesquisarClienteContrato(Integer idContratoParcelamento) throws ControladorException { try { return repositorioContratoParcelamento. pesquisarClienteContrato(idContratoParcelamento); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * @author Mariana Victor * @data 12/08/2011 */ public ContratoParcelamentoCliente pesquisarClienteContrato( Integer idContratoParcelamento, Integer idCliente) throws ControladorException { try { return repositorioContratoParcelamento. pesquisarClienteContrato(idContratoParcelamento, idCliente); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * @author Mariana Victor * @data 15/08/2011 */ public Collection<ContratoParcelamentoCliente> pesquisarClienteContrato( Integer idContratoParcelamento, Short indicadorClienteSuperior) throws ControladorException { try { return repositorioContratoParcelamento. pesquisarClienteContrato(idContratoParcelamento, indicadorClienteSuperior); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1141] Emitir Contrato de Parcelamento por Cliente * * @author Mariana Victor * @created 29/08/2011 * * @param idContratoParcelamento * @exception ErroRepositorioException */ public Collection<ContratoParcelamentoItem> pesquisarContratoParcelamentoItem( Integer idContratoParcelamento, Integer idDocumentoTipo) throws ControladorException { try { return repositorioContratoParcelamento. pesquisarContratoParcelamentoItem(idContratoParcelamento, idDocumentoTipo); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * [UC1136] Inserir Contrato de Parcelamento por Cliente * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * Calcula e retorna os valores das parcelas do contrato de parcelamento. * * @author Mariana Victor * @data 29/08/2011 */ public InserirContratoParcelamentoValoresParcelasHelper calcularValoresParcelasContratoParcelamento( BigDecimal valorContaSelecaoTotal, BigDecimal acrescimo, String indicadorDebitoAcresc, String indicadorParcelJuros, BigDecimal jurosBigDec, int numeroParcelInicial, int numeroParcelFinal) throws ControladorException { InserirContratoParcelamentoValoresParcelasHelper helper = new InserirContratoParcelamentoValoresParcelasHelper(); SistemaParametro sistemaParametro = this.getControladorUtil().pesquisarParametrosDoSistema(); List<PrestacaoContratoParcelamento> listaDeParcelas = new ArrayList(); List<Float> listaValoresDistintos = new ArrayList<Float>(); BigDecimal valorParcelado = BigDecimal.ZERO; BigDecimal valorEntrada = BigDecimal.ZERO; BigDecimal valorTotalServico = null; if(Integer.parseInt(indicadorDebitoAcresc) == ContratoParcelamento.DEBITO_ACRESCIMO_SIM.intValue()) { valorTotalServico = acrescimo; } else { valorTotalServico = valorContaSelecaoTotal; } if(new Short(indicadorParcelJuros).compareTo(ConstantesSistema.SIM) == 0) { BigDecimal taxaJuros = new BigDecimal("0.00"); BigDecimal valorPrestacao = new BigDecimal("0.00"); taxaJuros = Util.dividirArredondando(jurosBigDec, new BigDecimal( 100 )); if (sistemaParametro.getIndicadorTabelaPrice() != null && sistemaParametro.getIndicadorTabelaPrice().equals( ConstantesSistema.SIM ) ){ valorPrestacao = this.getControladorFaturamento().calcularPrestacao( taxaJuros.multiply( new BigDecimal( 100 ) ), numeroParcelFinal, valorTotalServico, valorEntrada ); valorPrestacao = valorPrestacao.setScale( 2, BigDecimal.ROUND_HALF_DOWN); listaValoresDistintos.add(valorPrestacao.floatValue()); for(;numeroParcelInicial <= numeroParcelFinal; numeroParcelInicial++){ PrestacaoContratoParcelamento prestacao = new PrestacaoContratoParcelamento(); prestacao.setNumero(numeroParcelInicial); prestacao.setValor(valorPrestacao); listaDeParcelas.add(prestacao); valorParcelado = valorParcelado.add(valorPrestacao); } } else { BigDecimal valorUm = new BigDecimal("1.00"); BigDecimal fatorPrestacao = valorUm.add(taxaJuros.setScale(4, BigDecimal.ROUND_HALF_UP)); fatorPrestacao = fatorPrestacao.setScale(4, BigDecimal.ROUND_HALF_UP).pow(numeroParcelFinal); BigDecimal valorFuturo = (valorTotalServico.multiply(fatorPrestacao)).setScale(4, BigDecimal.ROUND_HALF_UP); valorPrestacao = Util.dividirArredondando(valorFuturo.setScale( Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), new BigDecimal(numeroParcelFinal)); listaValoresDistintos.add(valorPrestacao.floatValue()); for(;numeroParcelInicial <= numeroParcelFinal; numeroParcelInicial++){ PrestacaoContratoParcelamento prestacao = new PrestacaoContratoParcelamento(); prestacao.setNumero(numeroParcelInicial); prestacao.setValor(valorPrestacao); listaDeParcelas.add(prestacao); valorParcelado = valorParcelado.add(valorPrestacao); } } } else { if(Integer.parseInt(indicadorDebitoAcresc) == ContratoParcelamento.DEBITO_ACRESCIMO_SIM.intValue()) { valorParcelado = acrescimo; } else { valorParcelado = valorContaSelecaoTotal; } BigDecimal valorParcela = valorParcelado.divide(new BigDecimal(numeroParcelFinal),2 , BigDecimal.ROUND_UP); BigDecimal totalSomaParcelas = valorParcela.multiply(new BigDecimal(numeroParcelFinal)); listaValoresDistintos.add(valorParcela.floatValue()); for(;numeroParcelInicial < numeroParcelFinal; numeroParcelInicial++){ PrestacaoContratoParcelamento prestacao = new PrestacaoContratoParcelamento(); prestacao.setNumero(numeroParcelInicial); prestacao.setValor(valorParcela); listaDeParcelas.add(prestacao); } BigDecimal diferenca = valorParcelado.subtract(totalSomaParcelas); if(diferenca.floatValue() != 0.0){ listaValoresDistintos.add(valorParcela.add(diferenca).floatValue()); } PrestacaoContratoParcelamento prestacao = new PrestacaoContratoParcelamento(); prestacao.setNumero(numeroParcelInicial); prestacao.setValor(valorParcela.add(diferenca)); listaDeParcelas.add(prestacao); } helper.setValorParcelado(valorParcelado); helper.setListaDeParcelas(listaDeParcelas); helper.setListaValoresDistintos(listaValoresDistintos); return helper; } /** * [UC1136] Inserir Contrato de Parcelamento por Cliente * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * Calcula e retorna os valores das parcelas do contrato de parcelamento a partir de uma RD. * * @author Mariana Victor * @data 29/08/2011 */ public InserirContratoParcelamentoValoresParcelasHelper calcularValoresParcelasContratoParcelamentoRD( BigDecimal valorContaSelecaoTotal, BigDecimal valorContaComAcrescimo, String indicadorDebitoAcresc, String indicadorParcelJuros, ContratoParcelamento contratoParcelamento, QuantidadePrestacoes quantidadePrestacoes) throws ControladorException { InserirContratoParcelamentoValoresParcelasHelper helper = new InserirContratoParcelamentoValoresParcelasHelper(); List<PrestacaoContratoParcelamento> listaDeParcelas = new ArrayList(); BigDecimal valorParcelado = BigDecimal.ZERO; SistemaParametro sistemaParametro = this.getControladorUtil().pesquisarParametrosDoSistema(); contratoParcelamento.setIndicadorParcelaInformadaPeloUsuario(new Short("2")); contratoParcelamento.setQtdPrestacoesDaRDEscolhida(quantidadePrestacoes); BigDecimal valorJurosParcelamento = null; BigDecimal valorPrestacao = new BigDecimal("0.00"); if(contratoParcelamento.getIndicadorParcelamentoJuros().intValue() == 1){ if(new Short(indicadorParcelJuros).compareTo(ConstantesSistema.SIM) == 0){ BigDecimal taxaJuros = new BigDecimal("0.00"); BigDecimal valorEntrada = BigDecimal.ZERO; BigDecimal valorTotalServico = null; if(Integer.parseInt(indicadorDebitoAcresc) == ContratoParcelamento.DEBITO_ACRESCIMO_SIM.intValue()) { valorTotalServico = valorContaComAcrescimo; } else { valorTotalServico = valorContaSelecaoTotal; } taxaJuros = Util.dividirArredondando(quantidadePrestacoes.getTaxaJuros(), new BigDecimal( 100 )); if (sistemaParametro.getIndicadorTabelaPrice() != null && sistemaParametro.getIndicadorTabelaPrice().equals( ConstantesSistema.SIM ) ) { valorPrestacao = this.getControladorFaturamento().calcularPrestacao( taxaJuros.multiply( new BigDecimal( 100 ) ), quantidadePrestacoes.getQtdFaturasParceladas(), valorTotalServico, valorEntrada ); valorPrestacao = valorPrestacao.setScale( 2, BigDecimal.ROUND_HALF_DOWN); for(int i = 1;i <= quantidadePrestacoes.getQtdFaturasParceladas(); i++){ valorParcelado = valorParcelado.add(valorPrestacao); } valorJurosParcelamento = valorParcelado.subtract(valorTotalServico); } else { BigDecimal valorUm = new BigDecimal("1.00"); BigDecimal fatorPrestacao = valorUm.add(taxaJuros.setScale(4, BigDecimal.ROUND_HALF_UP)); fatorPrestacao = fatorPrestacao.setScale(4, BigDecimal.ROUND_HALF_UP).pow(quantidadePrestacoes.getQtdFaturasParceladas()); BigDecimal valorFuturo = (valorTotalServico.multiply(fatorPrestacao)).setScale(4, BigDecimal.ROUND_HALF_UP); valorPrestacao = Util.dividirArredondando(valorFuturo.setScale( Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), new BigDecimal(quantidadePrestacoes.getQtdFaturasParceladas())); for(int i = 1;i <= quantidadePrestacoes.getQtdFaturasParceladas(); i++){ valorParcelado = valorParcelado.add(valorPrestacao); } valorJurosParcelamento = valorParcelado.subtract(valorTotalServico); } } else { if(contratoParcelamento.getIndicadorDebitosAcrescimos().intValue() == ContratoParcelamento.DEBITO_ACRESCIMO_SIM.intValue()){ valorParcelado = valorContaComAcrescimo; }else{ valorParcelado = valorContaSelecaoTotal; } valorPrestacao = valorParcelado.divide(new BigDecimal(""+quantidadePrestacoes.getQtdFaturasParceladas()),2, BigDecimal.ROUND_HALF_UP); } if(valorJurosParcelamento != null && valorJurosParcelamento.compareTo(BigDecimal.ZERO) > 0){ contratoParcelamento.setValorDebitoAtualizado(valorParcelado.subtract(valorJurosParcelamento)); }else{ contratoParcelamento.setValorDebitoAtualizado(valorParcelado); } contratoParcelamento.setValorJurosParcelamento(valorJurosParcelamento); contratoParcelamento.setTaxaJuros(quantidadePrestacoes.getTaxaJuros()); }else{ if(Integer.parseInt(indicadorDebitoAcresc) == ContratoParcelamento.DEBITO_ACRESCIMO_SIM.intValue()){ valorParcelado = valorContaComAcrescimo; }else{ valorParcelado = valorContaSelecaoTotal; } contratoParcelamento.setValorDebitoAtualizado(valorParcelado); contratoParcelamento.setValorJurosParcelamento(null); contratoParcelamento.setTaxaJuros(null); } contratoParcelamento.setValorTotalParcelado(valorParcelado); contratoParcelamento.setValorParcelamentoACobrar(valorParcelado); listaDeParcelas = new ArrayList<PrestacaoContratoParcelamento>(); BigDecimal diferenca = valorParcelado.subtract( valorPrestacao.multiply(new BigDecimal(""+quantidadePrestacoes.getQtdFaturasParceladas()))); PrestacaoContratoParcelamento prestacao = new PrestacaoContratoParcelamento(); prestacao.setNumero(1); prestacao.setValor(valorPrestacao.add(diferenca)); listaDeParcelas.add(prestacao); for(int i = 2; i <= quantidadePrestacoes.getQtdFaturasParceladas(); i++){ prestacao = new PrestacaoContratoParcelamento(); prestacao.setNumero(i); prestacao.setValor(valorPrestacao); listaDeParcelas.add(prestacao); } helper.setValorParcelado(valorParcelado); helper.setListaDeParcelas(listaDeParcelas); helper.setContratoParcelamento(contratoParcelamento); return helper; } /** * [UC1139] Atualizar Contrato de Parcelamento por Cliente * * @author Mariana Victor * @data 13/09/2011 */ public CobrancaForma pesquisarFormaPagamentoRD( Integer idRD) throws ControladorException { try { return repositorioContratoParcelamento. pesquisarFormaPagamentoRD(idRD); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } }