package gcom.arrecadacao;
import gcom.arrecadacao.bean.ArrecadadorMovimentoItemHelper;
import gcom.arrecadacao.bean.PagamentoHelperCodigoBarras;
import gcom.arrecadacao.bean.RegistroHelperCodigoBarras;
import gcom.arrecadacao.bean.RegistroHelperCodigoBarrasTipoPagamento;
import gcom.arrecadacao.bean.RegistroHelperCodigoG;
import gcom.arrecadacao.pagamento.GuiaPagamento;
import gcom.arrecadacao.pagamento.Pagamento;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cobranca.DocumentoTipo;
import gcom.faturamento.conta.ContaGeral;
import gcom.faturamento.debito.DebitoTipo;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.ControladorException;
import gcom.util.ErroRepositorioException;
import gcom.util.Util;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.ejb.SessionBean;
/**
* Controlador Arrecadacao Juazeiro
*
* @author Rafael Corr�a
* @date 30/06/2009
*/
public class ControladorArrecadacaoJUAZEIROSEJB extends ControladorArrecadacao implements SessionBean {
private static final long serialVersionUID = 1L;
//==============================================================================================================
// M�TODOS EXCLUSIVOS DE JUAZEIRO
//==============================================================================================================
/**
* [UC0264] - Distribuir Dados do C�digo de Barras - LEGADO
*
* @author Rafael Corr�a
* @date 03/07/2009
*
* @param idPagamento
* @param tipoPagamento
* @param idEmpresa
* @return RegistroHelperCodigoBarrasTipoPagamento
* @throws ControladorException
*/
public RegistroHelperCodigoBarrasTipoPagamento distribuirDadosCodigoBarrasPorTipoPagamento(
String idPagamento, String tipoPagamento, String idEmpresa) throws ControladorException {
RegistroHelperCodigoBarrasTipoPagamento registroHelperCodigoBarrasTipoPagamento = new RegistroHelperCodigoBarrasTipoPagamento();
registroHelperCodigoBarrasTipoPagamento =
super.distribuirDadosCodigoBarrasPorTipoPagamento(idPagamento, tipoPagamento, idEmpresa);
//===============================================================================================================================
//LEGADO - JUAZEIRO
//===============================================================================================================================
if (tipoPagamento.equals(ConstantesSistema.CODIGO_TIPO_PAGAMENTO_LEGADO_JUAZEIRO.toString())){
String anoMes = idPagamento.substring(0, 6);
// Tipo de Documento
if (!Util.validarMesAnoSemBarra(anoMes) || new Integer(anoMes.substring(2,6)).intValue() > 2009 || new Integer(anoMes.substring(2,6)).intValue() < 1990) {
registroHelperCodigoBarrasTipoPagamento.setIdPagamento4(ConstantesSistema.CODIGO_TIPO_DOCUMENTO_GUIA_PAGAMENTO_LEGADO_JUAZEIRO.toString());
registroHelperCodigoBarrasTipoPagamento.setIdPagamento1(idPagamento.substring(0, 12).trim());
} else {
registroHelperCodigoBarrasTipoPagamento.setIdPagamento4(ConstantesSistema.CODIGO_TIPO_DOCUMENTO_CONTA_LEGADO_JUAZEIRO.toString());
String idImovel = idPagamento.substring(6, 11).trim();
// M�s/Ano da conta
registroHelperCodigoBarrasTipoPagamento.setIdPagamento1(anoMes);
//Im�vel
registroHelperCodigoBarrasTipoPagamento.setIdPagamento2(idImovel);
//Localidade
registroHelperCodigoBarrasTipoPagamento.setIdPagamento3(idPagamento.substring(11, 24).trim());
}
}
//===============================================================================================================================
return registroHelperCodigoBarrasTipoPagamento;
}
/**
* [UC0259] - Processar Pagamento com C�digo de Barras - LEGADO
*
* @author Rafael Corr�a
* @date 03/07/2009
*
* @param registroHelperCodigoBarras
* @param dataPagamento
* @param anoMesPagamento
* @param valorPagamento
* @param idFormaPagamento
* @param sistemaParametro
* @return PagamentoHelperCodigoBarras
* @throws ControladorException
*/
protected PagamentoHelperCodigoBarras processarPagamentosCodigoBarrasPorTipoPagamento(
RegistroHelperCodigoBarras registroHelperCodigoBarras, Date dataPagamento, Integer anoMesPagamento,
BigDecimal valorPagamento, Integer idFormaArrecadacao, SistemaParametro sistemaParametro, Usuario usuarioLogado)
throws ControladorException {
PagamentoHelperCodigoBarras pagamentoHelperCodigoBarras = null;
String tipoPagamento = registroHelperCodigoBarras.getTipoPagamento();
//LEGADO - COSANPA
//===============================================================================================================================
if (tipoPagamento.equals(ConstantesSistema.CODIGO_TIPO_PAGAMENTO_LEGADO_JUAZEIRO.toString())){
/*
* Caso o tipo de documento (G.05.7.1) tenha valor igual a 0 (Conta), caso contr�rio;
* ser� (Guia de Pagamento).
*/
if (registroHelperCodigoBarras.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento4().equals(ConstantesSistema.CODIGO_TIPO_DOCUMENTO_CONTA_LEGADO_JUAZEIRO.toString())){
//CONTA
pagamentoHelperCodigoBarras = this.processarPagamentosCodigoBarrasConta_JUAZEIRO_LEGADO(
registroHelperCodigoBarras, sistemaParametro,dataPagamento, anoMesPagamento, valorPagamento,
idFormaArrecadacao);
//===============================================================================================================================
} else{
//EXTRATO
pagamentoHelperCodigoBarras = processarPagamentosCodigoBarrasGuiaPagamento_JUAZEIRO_LEGADO(
registroHelperCodigoBarras, sistemaParametro, dataPagamento, anoMesPagamento, valorPagamento,
idFormaArrecadacao);
//===============================================================================================================================
}
}else{
pagamentoHelperCodigoBarras = super.processarPagamentosCodigoBarrasPorTipoPagamento(
registroHelperCodigoBarras, dataPagamento,
anoMesPagamento, valorPagamento,
idFormaArrecadacao, sistemaParametro, usuarioLogado);
}
return pagamentoHelperCodigoBarras;
}
/**
* [UC0259] - Processar Pagamento com C�digo de Barras
*
* LEGADO CONTA
*
* @autor: Rafael Corr�a
* @data: 03/07/2009
*/
protected PagamentoHelperCodigoBarras processarPagamentosCodigoBarrasConta_JUAZEIRO_LEGADO(
RegistroHelperCodigoBarras registroHelperCodigoBarras,
SistemaParametro sistemaParametro, Date dataPagamento,
Integer anoMesPagamento, BigDecimal valorPagamento,
Integer idFormaArrecadacao) throws ControladorException {
PagamentoHelperCodigoBarras pagamentoHelperCodigoBarras = new PagamentoHelperCodigoBarras();
String descricaoOcorrencia = "OK";
String indicadorAceitacaoRegistro = "1";
Collection colecaoPagamnetos = new ArrayList();
boolean idLocalidadeInvalida = false;
boolean matriculaImovelInvalida = false;
int anoMes = 0;
Integer idImovelNaBase = null;
Integer matriculaImovel = null;
boolean anoMesReferencia = false;
idLocalidadeInvalida = Util
.validarValorNaoNumerico(registroHelperCodigoBarras
.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento3());
if (idLocalidadeInvalida) {
descricaoOcorrencia = "C�DIGO DA LOCALIDADE N�O NUM�RICA";
}
String idImovelSemDigito = registroHelperCodigoBarras
.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento2();
matriculaImovelInvalida = Util
.validarValorNaoNumerico(idImovelSemDigito);
if (matriculaImovelInvalida) {
descricaoOcorrencia = "M�TRICULA DO IM�VEL INV�LIDA";
} else {
/*
* Verifica se existe a matricula do im�vel na base
*/
matriculaImovel = new Integer(idImovelSemDigito + Util.obterDigitoVerificadorModulo10(idImovelSemDigito));
idImovelNaBase = null;
try {
idImovelNaBase = repositorioImovel
.recuperarMatriculaImovel(matriculaImovel);
} catch (ErroRepositorioException e) {
throw new ControladorException("erro.sistema", e);
}
/*
* Se o id do imovel pesquisado na base for diferente de nulo
*/
if (idImovelNaBase == null) {
descricaoOcorrencia = "MATR�CULA DO IM�VEL N�O CADASTRADA";
}
}
anoMesReferencia = Util
.validarValorNaoNumerico(registroHelperCodigoBarras
.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento1());
if (!anoMesReferencia) {
// valida o ano mes de referencia da conta
anoMes = Util.formatarMesAnoParaAnoMes(Integer
.parseInt(registroHelperCodigoBarras
.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento1()));
anoMesReferencia = Util.validarAnoMesSemBarra("" + anoMes);
if (anoMesReferencia) {
descricaoOcorrencia = "ANO/M�S DE REFER�NCIA DA CONTA INV�LIDA";
}
} else {
descricaoOcorrencia = "ANO/M�S DE REFER�NCIA DA CONTA INV�LIDA";
}
if (descricaoOcorrencia.equals("OK")) {
Integer idLocalidade = null;
Integer idConta = null;
// Valida o amo mes de referencia da conta
int anoMesReferenciaInt = Util.formatarMesAnoParaAnoMes(Integer
.parseInt(registroHelperCodigoBarras
.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento1()));
Imovel imovel = new Imovel();
imovel.setId(idImovelNaBase);
try {
idConta = repositorioFaturamento
.pesquisarExistenciaContaComSituacaoAtual(imovel,
anoMesReferenciaInt);
} catch (ErroRepositorioException e) {
e.printStackTrace();
throw new ControladorException("erro.sistema", e);
}
/*
* Alterado por Raphael Rossiter em 09/01/2008 - Analistas: Eduardo e Aryed
* OBJ: Gerar os pagamentos associados com a localidade da conta e N�O com
* a localidade do im�vel.
*/
if (idConta == null || idConta.equals("")) {
descricaoOcorrencia = "CONTA INEXISTENTE";
try {
idLocalidade = repositorioLocalidade
.pesquisarIdLocalidade(idImovelNaBase);
} catch (ErroRepositorioException e) {
throw new ControladorException("erro.sistema", e);
}
}
else {
try {
idLocalidade = repositorioLocalidade
.pesquisarIdLocalidadePorConta(idConta);
} catch (ErroRepositorioException e) {
throw new ControladorException("erro.sistema", e);
}
}
// Cria o objeto pagamento para setar os dados
Pagamento pagamento = new Pagamento();
pagamento.setAnoMesReferenciaPagamento(anoMes);
/*
* Caso o ano mes da data de dedito seja maior que o ano mes de
* arrecada��o da tabela sistema parametro ent�o seta o ano mes da
* data de debito
*/
if (anoMesPagamento > sistemaParametro.getAnoMesArrecadacao()) {
pagamento.setAnoMesReferenciaArrecadacao(anoMesPagamento);
} else {
/*
* caso contrario seta o o ano mes arrecada��o da tabela sistema
* parametro
*/
pagamento.setAnoMesReferenciaArrecadacao(sistemaParametro
.getAnoMesArrecadacao());
}
pagamento.setValorPagamento(valorPagamento);
pagamento.setDataPagamento(dataPagamento);
pagamento.setPagamentoSituacaoAtual(null);
pagamento.setPagamentoSituacaoAnterior(null);
pagamento.setDebitoTipo(null);
// Verifica se o id da conta � diferente de nulo
if (idConta != null) {
ContaGeral conta = new ContaGeral();
conta.setId(idConta);
pagamento.setContaGeral(conta);
} else {
pagamento.setContaGeral(null);
}
pagamento.setGuiaPagamento(null);
// verifica se o id da conta � diferente de nulo
if (idLocalidade != null) {
Localidade localidade = new Localidade();
localidade.setId(idLocalidade);
pagamento.setLocalidade(localidade);
} else {
pagamento.setLocalidade(null);
}
DocumentoTipo documentoTipo = new DocumentoTipo();
documentoTipo.setId(DocumentoTipo.CONTA);
documentoTipo.setDescricaoDocumentoTipo(ConstantesSistema.TIPO_PAGAMENTO_CONTA);
pagamento.setDocumentoTipo(documentoTipo);
pagamento.setAvisoBancario(null);
if (idImovelNaBase != null) {
pagamento.setImovel(imovel);
} else {
pagamento.setImovel(null);
}
pagamento.setArrecadadorMovimentoItem(null);
ArrecadacaoForma arrecadacaoForma = new ArrecadacaoForma();
arrecadacaoForma.setId(idFormaArrecadacao);
pagamento.setArrecadacaoForma(arrecadacaoForma);
pagamento.setCliente(null);
pagamento.setUltimaAlteracao(new Date());
/*
* Alteracao referente ao relatorio de Float - Francisco : 14/07/08
*/
pagamento.setFatura(null);
pagamento.setCobrancaDocumento(null);
DocumentoTipo documentoAgregador = new DocumentoTipo();
documentoAgregador.setId(DocumentoTipo.CONTA);
pagamento.setDocumentoTipoAgregador(documentoAgregador);
pagamento.setDataProcessamento(new Date());
colecaoPagamnetos.add(pagamento);
} else {
// atribui o valor 2(N�O) ao indicador aceitacao
// registro
indicadorAceitacaoRegistro = "2";
}
// Seta os parametros que ser�o retornados
pagamentoHelperCodigoBarras.setColecaoPagamentos(colecaoPagamnetos);
pagamentoHelperCodigoBarras.setDescricaoOcorrencia(descricaoOcorrencia);
pagamentoHelperCodigoBarras
.setIndicadorAceitacaoRegistro(indicadorAceitacaoRegistro);
return pagamentoHelperCodigoBarras;
}
/**
* [UC0259] - Processar Pagamento com C�digo de Barras
*
* GUIA DE PAGAMENTO
*
* @autor: Rafael Corr�a
* @data: 02/05/2007
*/
protected PagamentoHelperCodigoBarras processarPagamentosCodigoBarrasGuiaPagamento_JUAZEIRO_LEGADO(
RegistroHelperCodigoBarras registroHelperCodigoBarras,
SistemaParametro sistemaParametro, Date dataPagamento,
Integer anoMesPagamento, BigDecimal valorPagamento,
Integer idFormaArrecadacao) throws ControladorException {
PagamentoHelperCodigoBarras pagamentoHelperCodigoBarras = new PagamentoHelperCodigoBarras();
String descricaoOcorrencia = "OK";
String indicadorAceitacaoRegistro = "1";
Collection colecaoPagamentos = new ArrayList();
GuiaPagamento guiaPagamento = null;
guiaPagamento = this.pesquisarExistenciaGuiaPagamentoPorNumeroGuiaFatura(registroHelperCodigoBarras.getRegistroHelperCodigoBarrasTipoPagamento().getIdPagamento1());
if (guiaPagamento == null) {
descricaoOcorrencia = "GUIA PAGAMENTO INEXISTENTE";
}
if (descricaoOcorrencia.equals("OK")) {
// Cria o objeto pagamento para setar os dados
Pagamento pagamento = new Pagamento();
pagamento.setAnoMesReferenciaPagamento(null);
/*
* Caso o ano mes da data de dedito seja maior que o ano mes de
* arrecada��o da tabela sistema parametro ent�o seta o ano mes da
* data de debito
*/
if (anoMesPagamento > sistemaParametro.getAnoMesArrecadacao()) {
pagamento.setAnoMesReferenciaArrecadacao(anoMesPagamento);
} else {
/*
* caso contrario seta o o ano mes arrecada��o da tabela sistema
* parametro
*/
pagamento.setAnoMesReferenciaArrecadacao(sistemaParametro
.getAnoMesArrecadacao());
}
pagamento.setValorPagamento(valorPagamento);
pagamento.setDataPagamento(dataPagamento);
pagamento.setPagamentoSituacaoAtual(null);
pagamento.setPagamentoSituacaoAnterior(null);
pagamento.setContaGeral(null);
if (guiaPagamento != null) {
pagamento.setDebitoTipo(guiaPagamento.getDebitoTipo());
pagamento.setGuiaPagamento(guiaPagamento);
pagamento.setLocalidade(guiaPagamento.getLocalidade());
pagamento.setImovel(guiaPagamento.getImovel());
}
DocumentoTipo documentoTipo = new DocumentoTipo();
if (guiaPagamento != null && guiaPagamento.getDebitoTipo().getId().equals(DebitoTipo.ENTRADA_PARCELAMENTO)){
documentoTipo.setId(DocumentoTipo.ENTRADA_DE_PARCELAMENTO);
} else {
documentoTipo.setId(DocumentoTipo.GUIA_PAGAMENTO);
}
documentoTipo.setDescricaoDocumentoTipo(ConstantesSistema.TIPO_PAGAMENTO_GUIA_PAGAMENTO);
pagamento.setDocumentoTipo(documentoTipo);
pagamento.setAvisoBancario(null);
pagamento.setArrecadadorMovimentoItem(null);
ArrecadacaoForma arrecadacaoForma = new ArrecadacaoForma();
arrecadacaoForma.setId(idFormaArrecadacao);
pagamento.setArrecadacaoForma(arrecadacaoForma);
pagamento.setCliente(null);
pagamento.setUltimaAlteracao(new Date());
pagamento.setFatura(null);
pagamento.setCobrancaDocumento(null);
/*
* Alteracao referente ao Relatorio do Float - Francisco: 14/07/08
*/
DocumentoTipo documentoAgregador = new DocumentoTipo();
documentoAgregador.setId(DocumentoTipo.GUIA_PAGAMENTO);
pagamento.setDocumentoTipoAgregador(documentoAgregador);
pagamento.setDataProcessamento(new Date());
colecaoPagamentos.add(pagamento);
} else {
// Atribui o valor 2(N�O) ao indicador aceitacao registro
indicadorAceitacaoRegistro = "2";
}
// Seta os parametros que ser�o retornados
pagamentoHelperCodigoBarras.setColecaoPagamentos(colecaoPagamentos);
pagamentoHelperCodigoBarras.setDescricaoOcorrencia(descricaoOcorrencia);
pagamentoHelperCodigoBarras
.setIndicadorAceitacaoRegistro(indicadorAceitacaoRegistro);
return pagamentoHelperCodigoBarras;
}
/**
* [UC0270] Apresentar An�lise do Movimento dos Arrecadadores
*
* @author Rafael Corr�a
* @date 03/07/2009
*
* @param registroHelperCodigoG
* @param arrecadadorMovimentoItemHelper
* @throws ControladorException
*/
public void distribuirDadosRegistroMovimentoArrecadadorPorTipoPagamento(RegistroHelperCodigoG registroHelperCodigoG,
ArrecadadorMovimentoItemHelper arrecadadorMovimentoItemHelper) throws ControladorException {
super.distribuirDadosRegistroMovimentoArrecadadorPorTipoPagamento(registroHelperCodigoG,
arrecadadorMovimentoItemHelper);
//LEGADO - JUAZEIRO
//===============================================================================================================================
if (registroHelperCodigoG.getRegistroHelperCodigoBarras()
.getTipoPagamento().equals(ConstantesSistema.CODIGO_TIPO_PAGAMENTO_LEGADO_JUAZEIRO.toString())){
/*
* Caso o tipo de documento (G.05.7.1) tenha valor igual a 1 (Conta_Legado), caso contr�rio;
* ser� (Extrato Legado).
*/
if (registroHelperCodigoG.getRegistroHelperCodigoBarras().getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento4().equals(ConstantesSistema.CODIGO_TIPO_DOCUMENTO_CONTA_LEGADO_JUAZEIRO.toString())){
String idImovelSemDigito = registroHelperCodigoG
.getRegistroHelperCodigoBarras()
.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento2();
String idImovel = idImovelSemDigito + Util.obterDigitoVerificadorModulo10(idImovelSemDigito);
arrecadadorMovimentoItemHelper.setIdentificacao(idImovel);
arrecadadorMovimentoItemHelper.setTipoPagamento(ConstantesSistema.TIPO_PAGAMENTO_CONTA);
}
else{
String identificacao = registroHelperCodigoG
.getRegistroHelperCodigoBarras()
.getRegistroHelperCodigoBarrasTipoPagamento()
.getIdPagamento1();
//GUIA DE PAGAMENTO
GuiaPagamento guiaPagamento = this.pesquisarExistenciaGuiaPagamentoPorNumeroGuiaFatura(
identificacao);
if (guiaPagamento != null && guiaPagamento.getImovel() != null){
arrecadadorMovimentoItemHelper.setIdentificacao(guiaPagamento.getImovel().getId().toString());
}
arrecadadorMovimentoItemHelper.setTipoPagamento(ConstantesSistema.TIPO_PAGAMENTO_GUIA_PAGAMENTO);
}
}
}
}