package gcom.cadastro.atualizacaocadastral.command; import gcom.atualizacaocadastral.ControladorAtualizacaoCadastralLocal; import gcom.cadastro.ArquivoTextoAtualizacaoCadastral; import gcom.cadastro.IRepositorioCadastro; import gcom.cadastro.SituacaoAtualizacaoCadastral; import gcom.cadastro.atualizacaocadastral.FiltroImovelAtualizacaoCadastral; import gcom.cadastro.cliente.Cliente; import gcom.cadastro.cliente.ClienteAtualizacaoCadastral; import gcom.cadastro.cliente.ClienteFoneAtualizacaoCadastral; import gcom.cadastro.cliente.ControladorClienteLocal; import gcom.cadastro.cliente.IClienteAtualizacaoCadastral; import gcom.cadastro.cliente.IRepositorioClienteImovel; import gcom.cadastro.endereco.ControladorEnderecoLocal; import gcom.cadastro.imovel.IRepositorioImovel; import gcom.cadastro.imovel.ImovelAtualizacaoCadastral; import gcom.cadastro.imovel.ImovelRamoAtividadeAtualizacaoCadastral; import gcom.cadastro.imovel.ImovelSubcategoriaAtualizacaoCadastral; import gcom.cadastro.imovel.ImovelTipoOcupanteQuantidadeAtualizacaoCadastral; import gcom.fachada.Fachada; import gcom.interceptor.Interceptador; import gcom.interceptor.ObjetoTransacao; import gcom.interceptor.RegistradorOperacao; 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.seguranca.transacao.AlteracaoTipo; import gcom.seguranca.transacao.ControladorTransacaoLocal; import gcom.seguranca.transacao.FiltroTabelaColuna; import gcom.seguranca.transacao.Tabela; import gcom.seguranca.transacao.TabelaAtualizacaoCadastral; import gcom.seguranca.transacao.TabelaColuna; import gcom.seguranca.transacao.TabelaColunaAtualizacaoCadastral; import gcom.seguranca.transacao.TabelaLinhaColunaAlteracao; import gcom.util.ConstantesSistema; import gcom.util.ControladorException; import gcom.util.ControladorUtilLocal; import gcom.util.ParserUtil; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Iterator; import org.apache.commons.lang.StringUtils; import org.jboss.logging.Logger; public abstract class AbstractAtualizacaoCadastralCommand { private static Logger logger = Logger.getLogger(AbstractAtualizacaoCadastralCommand.class); protected ParserUtil parser; protected IRepositorioCadastro repositorioCadastro; protected ControladorUtilLocal controladorUtil; protected ControladorTransacaoLocal controladorTransacao; protected IRepositorioImovel repositorioImovel; protected ControladorEnderecoLocal controladorEndereco; protected ControladorAtualizacaoCadastralLocal controladorAtualizacaoCadastral; protected ControladorClienteLocal controladorCliente; public AbstractAtualizacaoCadastralCommand(){ } public AbstractAtualizacaoCadastralCommand(ParserUtil parser){ this.parser = parser; } public AbstractAtualizacaoCadastralCommand( ParserUtil parser, IRepositorioCadastro repositorioCadastro, ControladorUtilLocal controladorUtil, ControladorTransacaoLocal controladorTransacao, IRepositorioImovel repositorioImovel, ControladorEnderecoLocal controladorEndereco, ControladorAtualizacaoCadastralLocal controladorAtualizacaoCadastral, ControladorClienteLocal controladorCliente) { this.parser = parser; this.repositorioCadastro = repositorioCadastro; this.controladorUtil = controladorUtil; this.controladorTransacao = controladorTransacao; this.repositorioImovel = repositorioImovel; this.controladorEndereco = controladorEndereco; this.controladorAtualizacaoCadastral = controladorAtualizacaoCadastral; this.controladorCliente = controladorCliente; } public abstract void execute(AtualizacaoCadastral atualizacao) throws Exception; @SuppressWarnings({ "rawtypes", "unchecked" }) public void salvarTabelaColunaAtualizacaoCadastral(AtualizacaoCadastral atualizacaoCadastral, Object objetoAtualizacaoCadastralBase, Object objetoAtualizacaoCadastralTxt, int matriculaImovel, int tipoOperacao) throws ControladorException { Collection<TabelaLinhaColunaAlteracao> colunasAlteradas = null; ArquivoTextoAtualizacaoCadastral arquivoTexto = atualizacaoCadastral.getArquivoTexto(); Interceptador interceptador = Interceptador.getInstancia(); try { Integer idImovel = null; RegistradorOperacao registradorOperacao = new RegistradorOperacao(Operacao.OPERACAO_CARREGAR_DADOS_ATUALIZACAO_CADASTRAL, matriculaImovel, matriculaImovel, new UsuarioAcaoUsuarioHelper(Usuario.USUARIO_BATCH, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); colunasAlteradas = interceptador.compareObjetoTransacao((ObjetoTransacao) objetoAtualizacaoCadastralTxt, (ObjetoTransacao) objetoAtualizacaoCadastralBase, null); registradorOperacao.registrarOperacao((ObjetoTransacao) objetoAtualizacaoCadastralTxt); Collection<TabelaColunaAtualizacaoCadastral> colecaoTabelaColunaAtualizacaoCadastral = new ArrayList<TabelaColunaAtualizacaoCadastral>(); if (colunasAlteradas != null && !colunasAlteradas.isEmpty()) { TabelaAtualizacaoCadastral tabelaAtualizacaoCadastral = new TabelaAtualizacaoCadastral(); AlteracaoTipo alteracaoTipo = new AlteracaoTipo(); alteracaoTipo.setId(tipoOperacao); tabelaAtualizacaoCadastral.setAlteracaoTipo(alteracaoTipo); Tabela tabela = new Tabela(); Long idPorTempo = Calendar.getInstance().getTimeInMillis(); if (objetoAtualizacaoCadastralBase instanceof ClienteAtualizacaoCadastral) { IClienteAtualizacaoCadastral base = (IClienteAtualizacaoCadastral) objetoAtualizacaoCadastralBase; ClienteAtualizacaoCadastral txt = (ClienteAtualizacaoCadastral) objetoAtualizacaoCadastralTxt; if (base.getIdCliente() != null){ idPorTempo = (long) base.getIdCliente(); } tabelaAtualizacaoCadastral.setIdRegistroAlterado(idPorTempo); tabelaAtualizacaoCadastral.setCodigoCliente(idPorTempo); tabelaAtualizacaoCadastral.setOperacaoEfetuada(txt.getOperacaoEfetuada()); tabela.setId(Tabela.CLIENTE_ATUALIZACAO_CADASTRAL); tabelaAtualizacaoCadastral.setIndicadorPrincipal(new Short("2")); } else if (objetoAtualizacaoCadastralBase instanceof ImovelAtualizacaoCadastral) { ImovelAtualizacaoCadastral base = (ImovelAtualizacaoCadastral) objetoAtualizacaoCadastralBase; ImovelAtualizacaoCadastral txt = (ImovelAtualizacaoCadastral) objetoAtualizacaoCadastralTxt; if (base.getIdImovel() != null){ idPorTempo = (long) base.getIdImovel(); } tabelaAtualizacaoCadastral.setIdRegistroAlterado(idPorTempo); tabelaAtualizacaoCadastral.setOperacaoEfetuada(txt.getOperacaoEfetuada()); tabela.setId(Tabela.IMOVEL_ATUALIZACAO_CADASTRAL); tabelaAtualizacaoCadastral.setIndicadorPrincipal(new Short("1")); idImovel = base.getIdImovel(); } else if (objetoAtualizacaoCadastralBase instanceof ClienteFoneAtualizacaoCadastral) { ClienteFoneAtualizacaoCadastral txt = (ClienteFoneAtualizacaoCadastral) objetoAtualizacaoCadastralTxt; tabelaAtualizacaoCadastral.setIndicadorPrincipal(new Short("2")); tabela.setId(Tabela.CLIENTE_FONE_ATUALIZACAO_CADASTRAL); if (txt.getIdCliente() != null){ idPorTempo = (long) txt.getIdCliente(); } tabelaAtualizacaoCadastral.setCodigoCliente(idPorTempo); tabelaAtualizacaoCadastral.setOperacaoEfetuada(txt.getOperacaoEfetuada()); tabelaAtualizacaoCadastral.setIdRegistroAlterado(idPorTempo); } else if (objetoAtualizacaoCadastralBase instanceof ImovelSubcategoriaAtualizacaoCadastral) { ImovelSubcategoriaAtualizacaoCadastral txt = (ImovelSubcategoriaAtualizacaoCadastral) objetoAtualizacaoCadastralTxt; tabelaAtualizacaoCadastral.setIdRegistroAlterado((long) matriculaImovel); tabelaAtualizacaoCadastral.setOperacaoEfetuada(txt.getOperacaoEfetuada()); tabelaAtualizacaoCadastral.setComplemento(txt.getDescricaoCategoria() + " - " + txt.getDescricaoSubcategoria()); tabela.setId(Tabela.IMOVEL_SUBCATEGORIA_ATUALIZACAO_CADASTRAL); tabelaAtualizacaoCadastral.setIndicadorPrincipal(new Short("2")); } else if (objetoAtualizacaoCadastralBase instanceof ImovelRamoAtividadeAtualizacaoCadastral) { ImovelRamoAtividadeAtualizacaoCadastral txt = (ImovelRamoAtividadeAtualizacaoCadastral) objetoAtualizacaoCadastralTxt; tabelaAtualizacaoCadastral.setIdRegistroAlterado((long) matriculaImovel); tabelaAtualizacaoCadastral.setOperacaoEfetuada(txt.getOperacaoEfetuada()); tabela.setId(Tabela.IMOVEL_RAMO_ATIVIDADE_ATUALIZACAO_CADASTRAL); tabelaAtualizacaoCadastral.setIndicadorPrincipal(new Short("2")); } else if (objetoAtualizacaoCadastralBase instanceof ImovelTipoOcupanteQuantidadeAtualizacaoCadastral) { ImovelTipoOcupanteQuantidadeAtualizacaoCadastral txt = (ImovelTipoOcupanteQuantidadeAtualizacaoCadastral) objetoAtualizacaoCadastralTxt; tabelaAtualizacaoCadastral.setIdRegistroAlterado((long) matriculaImovel); tabelaAtualizacaoCadastral.setOperacaoEfetuada(txt.getOperacaoEfetuada()); tabelaAtualizacaoCadastral.setComplemento(txt.getTipoOcupante().getDescricao()); tabela.setId(Tabela.IMOVEL_QUANTIDADE_TIPO_OCUPANTE_ATUALIZACAO_CADASTRAL); tabelaAtualizacaoCadastral.setIndicadorPrincipal(new Short("2")); } tabelaAtualizacaoCadastral.setCodigoImovel(matriculaImovel); tabelaAtualizacaoCadastral.setLeiturista(arquivoTexto.getLeiturista()); tabelaAtualizacaoCadastral.setArquivoTextoAtualizacaoCadastral(arquivoTexto); tabelaAtualizacaoCadastral.setTabela(tabela); tabelaAtualizacaoCadastral.setIndicadorAutorizado(ConstantesSistema.INDICADOR_REGISTRO_NAO_ACEITO); Iterator colunasAlteradasIter = colunasAlteradas.iterator(); while (colunasAlteradasIter.hasNext()) { TabelaLinhaColunaAlteracao tabelaLinhaColunaAlteracao = (TabelaLinhaColunaAlteracao) colunasAlteradasIter.next(); TabelaColunaAtualizacaoCadastral tabelaColunaAtualizacaoCadastral = new TabelaColunaAtualizacaoCadastral(); tabelaColunaAtualizacaoCadastral.setColunaValorAnterior(tabelaLinhaColunaAlteracao.getConteudoColunaAnterior()); tabelaColunaAtualizacaoCadastral.setColunaValorAtual(tabelaLinhaColunaAlteracao.getConteudoColunaAtual()); tabelaColunaAtualizacaoCadastral.setIndicadorAutorizado(ConstantesSistema.INDICADOR_REGISTRO_NAO_ACEITO); tabelaColunaAtualizacaoCadastral.setTabelaAtualizacaoCadastral(tabelaAtualizacaoCadastral); FiltroTabelaColuna filtroColuna = new FiltroTabelaColuna(); filtroColuna.adicionarParametro(new ParametroSimples(FiltroTabelaColuna.COLUNA, tabelaLinhaColunaAlteracao.getTabelaColuna().getColuna())); filtroColuna.adicionarParametro(new ParametroSimples(FiltroTabelaColuna.TABELA, tabela)); Collection<TabelaColuna> tabelas = Fachada.getInstancia().pesquisar(filtroColuna, TabelaColuna.class.getName()); if (tabelas.isEmpty()){ throw new Exception("Nao ha registro em tabela_coluna para " + tabelaLinhaColunaAlteracao.getTabelaColuna().getColuna()); } for (TabelaColuna tabelaColuna : tabelas) { tabelaLinhaColunaAlteracao.setTabelaColuna(tabelaColuna); } tabelaColunaAtualizacaoCadastral.setTabelaColuna(tabelaLinhaColunaAlteracao.getTabelaColuna()); colecaoTabelaColunaAtualizacaoCadastral.add(tabelaColunaAtualizacaoCadastral); } controladorTransacao.inserirOperacaoEfetuadaAtualizacaoCadastral( ((ObjetoTransacao) objetoAtualizacaoCadastralTxt).getUsuarioAcaoUsuarioHelp(), ((ObjetoTransacao) objetoAtualizacaoCadastralTxt).getOperacaoEfetuada(), tabelaAtualizacaoCadastral, colecaoTabelaColunaAtualizacaoCadastral); if (idImovel != null) { atualizarSituacaoImovelAtualizacaoCadastral(idImovel, SituacaoAtualizacaoCadastral.TRANSMITIDO); } } } catch (Exception e) { logger.error("Erro ao persistir alteracao na coluna.", e); } } private void atualizarSituacaoImovelAtualizacaoCadastral(Integer idImovel, Integer situacao) throws ControladorException { FiltroImovelAtualizacaoCadastral filtroImovel = new FiltroImovelAtualizacaoCadastral(); filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovelAtualizacaoCadastral.ID, idImovel)); @SuppressWarnings("unchecked") ImovelAtualizacaoCadastral imovel = (ImovelAtualizacaoCadastral) Util.retonarObjetoDeColecao(controladorUtil.pesquisar(filtroImovel, ImovelAtualizacaoCadastral.class.getName())); if (imovel != null){ imovel.setIdSituacaoAtualizacaoCadastral(situacao); controladorUtil.atualizar(imovel); } } protected Integer getTipoOperacaoCliente(Integer matricula, Integer matriculaImovel, String cpfCliente, Short clienteRelacaoTipo, IRepositorioClienteImovel repositorioClienteImovel) throws Exception { if (matricula == null || matricula == 0){ return AlteracaoTipo.INCLUSAO; } Cliente cliente = repositorioClienteImovel.pesquisarClienteImovelTipo(matricula, matriculaImovel, clienteRelacaoTipo.intValue()); if (cliente != null){ if (StringUtils.equals(cliente.getCnpj(), cpfCliente) || StringUtils.equals(cliente.getCpf(), cpfCliente)){ return AlteracaoTipo.ALTERACAO; }else{ Collection<Cliente> clientes = controladorCliente.pesquisarClientePorCpfCnpj(cpfCliente); if (clientes.isEmpty()){ return AlteracaoTipo.ALTERACAO; }else{ return AlteracaoTipo.INCLUSAO; } } }else{ return AlteracaoTipo.INCLUSAO; } } }