package gcom.gui.cadastro.imovel;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteEndereco;
import gcom.cadastro.cliente.ClienteImovel;
import gcom.cadastro.cliente.ClienteImovelEconomia;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.cliente.FiltroClienteEndereco;
import gcom.cadastro.cliente.FiltroClienteImovel;
import gcom.cadastro.cliente.FiltroClienteImovelEconomia;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.bean.ConsultarClienteRelacaoClienteImovelHelper;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.Intervalo;
import gcom.util.filtro.ParametroNaoNulo;
import gcom.util.filtro.ParametroNulo;
import gcom.util.filtro.ParametroSimples;
import gcom.util.filtro.ParametroSimplesDiferenteDe;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Action ExibirClienteRelacaoClienteImovelActionForm
*
* @author thiago toscano
* @date 10/03/2006
*/
public class ExibirClienteRelacaoClienteImovelAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest request,
HttpServletResponse httpServletResponse) {
ConsultarRelacaoClienteImovelActionForm form = (ConsultarRelacaoClienteImovelActionForm) actionForm;
HttpSession sessao = request.getSession(false);
removerAtributosSessao(sessao);
if ( !Util.verificarNaoVazio(form.getIdCliente()) ) {
throw new ActionServletException("erro.parametro.nao.informado",
null, "idCliente");
}
Cliente cliente = obterClienteInformadoESetarSessao(form,sessao);
setarClienteEnderecoSessaoERequest(cliente, sessao, request);
setarColecaoRelacaoClienteImovelHelperSessao(form, sessao);
setarColecaoClienteImovelEconomiaSessao(form, sessao);
return actionMapping.findForward("exibir");
}
/**
* M�todo retorna o objeto Cliente que presenta
* o cliente que o usu�rio informou na tela.
* Ele tamb�m seta esse cliente na sess�o.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private Cliente obterClienteInformadoESetarSessao(ConsultarRelacaoClienteImovelActionForm form,
HttpSession sessao) {
FiltroCliente filtroCliente = criarFiltroConsultarClienteInformadoUsuario(form);
Collection<Cliente> colecaoCliente = Fachada.getInstancia()
.pesquisarClienteDadosClienteEnderecoRelatorio(filtroCliente);
if(Util.isVazioOrNulo(colecaoCliente)){
throw new ActionServletException("atencao.pesquisa.nenhumresultado");
}
Cliente cliente = colecaoCliente.iterator().next();
sessao.setAttribute("cliente", cliente);
return cliente;
}
/**
*M�todo consulta ClienteImovelEconomia do cliente informado
*e ent�o seta essa cole��o na sess�o.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private void setarColecaoClienteImovelEconomiaSessao(ConsultarRelacaoClienteImovelActionForm form, HttpSession sessao) {
FiltroClienteImovelEconomia filtroClienteImovelEconomia = criarFiltroClienteImovelEconomia(form);
Collection<ClienteImovelEconomia> coelcaoClienteImovelEconomia = Fachada.getInstancia()
.pesquisar(filtroClienteImovelEconomia,ClienteImovelEconomia.class.getSimpleName());
sessao.setAttribute("collClienteImovelEconomia",coelcaoClienteImovelEconomia);
}
/**
* O m�todo consulta os ClienteImovel do cliente informado
* e a partir dessa cole��o cria e seta na sess�o uma cole��o de
* ConsultarClienteRelacaoClienteImovelHelper.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private void setarColecaoRelacaoClienteImovelHelperSessao(ConsultarRelacaoClienteImovelActionForm form, HttpSession sessao) {
FiltroClienteImovel filtroClienteImovel = criarFiltroClienteImovel(form);
Collection<ClienteImovel> colecaoClienteImovel = Fachada.getInstancia().pesquisar(filtroClienteImovel,
ClienteImovel.class.getName());
if(Util.isVazioOrNulo(colecaoClienteImovel)){
throw new ActionServletException( "atencao.cliente_relacao_imovel_nao_encontrado" );
}
criarColecaoRelacaoClienteImovelHelperESetarSessao(colecaoClienteImovel, sessao);
}
/**
* Esse m�todo cria e retorna o objeto Filtro respons�vel
* por consultar os ClienteImovelEconomia
* baseado nos parametros informado pelo usuario na tela de consulta.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private FiltroClienteImovelEconomia criarFiltroClienteImovelEconomia(ConsultarRelacaoClienteImovelActionForm form) {
FiltroClienteImovelEconomia filtroClienteImovelEconomia = new FiltroClienteImovelEconomia();
filtroClienteImovelEconomia.setConsultaSemLimites(true);
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovelEconomia.IMOVEL_ECONOMIA);
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovelEconomia.CLIENTE);
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovelEconomia.IMOVEL_ECONOMIEA_AREA_CONSTRUIDA_FAIXA);
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovelEconomia.IMOVEL_ECONOMIEA_IMOVEL_SUB_CATEGORIA);
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovelEconomia.IMOVEL_ECONOMIEA_IMOVEL_CATEGORIA);
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovelEconomia.IMOVEL);
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade("clienteImovelFimRelacaoMotivo");
filtroClienteImovelEconomia
.adicionarCaminhoParaCarregamentoEntidade("clienteRelacaoTipo");
filtroClienteImovelEconomia
.adicionarParametro(new ParametroSimples(
FiltroClienteImovelEconomia.CLIENTE_ID, form.getIdCliente()));
if ( Util.verificarNaoVazio(form.getIdClienteRelacaoTipo())) {
filtroClienteImovelEconomia
.adicionarParametro(new ParametroSimples(
FiltroClienteImovelEconomia.CLIENTE_RELACAO_TIPO,form.getIdClienteRelacaoTipo()));
}
if ( Util.verificarNaoVazio(form.getIdClienteImovelFimRelacaoMotivo())) {
filtroClienteImovelEconomia
.adicionarParametro(new ParametroSimples(
FiltroClienteImovelEconomia.FIM_RELACAO_MOTIVO,form.getIdClienteImovelFimRelacaoMotivo()));
}
if ( Util.verificarNaoVazio(form.getPeriodoInicialDataInicioRelacao())) {
Date periodoInicialDataInicioRelacao = Util
.converteStringParaDate(form.getPeriodoInicialDataInicioRelacao());
Date periodoFinalDataInicioRelacao = null;
if ( !Util.verificarNaoVazio(form.getPeriodoFinalDataInicioRelacao())) {
periodoFinalDataInicioRelacao = periodoInicialDataInicioRelacao;
} else {
periodoFinalDataInicioRelacao = Util
.converteStringParaDate(form.getPeriodoFinalDataInicioRelacao());
}
Calendar diInicio = Calendar.getInstance();
diInicio.setTime(periodoInicialDataInicioRelacao);
diInicio.set(Calendar.HOUR, 0);
diInicio.set(Calendar.MINUTE, 0);
diInicio.set(Calendar.SECOND, 0);
Calendar diFim = Calendar.getInstance();
diFim.setTime(periodoFinalDataInicioRelacao);
diFim.set(Calendar.HOUR, 23);
diFim.set(Calendar.MINUTE, 59);
diFim.set(Calendar.SECOND, 59);
filtroClienteImovelEconomia.adicionarParametro(new Intervalo(
FiltroClienteImovelEconomia.DATA_INICIO_RELACAO,diInicio.getTime(), diFim.getTime()));
}
if ( Util.verificarNaoVazio(form.getPeriodoInicialDataFimRelacao())) {
Date periodoInicialDataFimRelacao = Util
.converteStringParaDate(form.getPeriodoInicialDataFimRelacao());
Date periodoFinalDataFimRelacao = null;
if ( !Util.verificarNaoVazio(form.getPeriodoFinalDataFimRelacao())) {
periodoFinalDataFimRelacao = periodoInicialDataFimRelacao;
} else {
periodoFinalDataFimRelacao = Util
.converteStringParaDate(form.getPeriodoFinalDataFimRelacao());
}
Calendar diInicio = Calendar.getInstance();
diInicio.setTime(periodoInicialDataFimRelacao);
diInicio.set(Calendar.HOUR, 0);
diInicio.set(Calendar.MINUTE, 0);
diInicio.set(Calendar.SECOND, 0);
Calendar diFim = Calendar.getInstance();
diFim.setTime(periodoFinalDataFimRelacao);
diFim.set(Calendar.HOUR, 23);
diFim.set(Calendar.MINUTE, 59);
diFim.set(Calendar.SECOND, 59);
filtroClienteImovelEconomia.adicionarParametro(new Intervalo(
FiltroClienteImovelEconomia.DATA_FIM_RELACAO, diInicio.getTime(), diFim.getTime()));
}
if (Util.verificarNaoVazio(form.getSituacaoRelacao())) {
if(form.getSituacaoRelacao().equalsIgnoreCase("1")){
filtroClienteImovelEconomia
.adicionarParametro(new ParametroNulo(FiltroClienteImovelEconomia.DATA_FIM_RELACAO));
}else if (form.getSituacaoRelacao().equalsIgnoreCase("2")) {
filtroClienteImovelEconomia
.adicionarParametro(new ParametroNaoNulo(FiltroClienteImovelEconomia.DATA_FIM_RELACAO));
}
}
return filtroClienteImovelEconomia;
}
/**
* M�todo cria cole��o de ConsultarClienteRelacaoClienteImovelHelper
* a partir da cole��o de ClienteImovel passado como parametro
* e ent�o seta essa cole��o na Sess�o.
*
*@since 11/09/2009
*@author Marlon Patrick
*
* Altera��o que contabiliza a quantidade de imov�is
* diferentes que o cliente possui.
*
*@since 29/07/2011
*@author Davi Menezes
*/
private void criarColecaoRelacaoClienteImovelHelperESetarSessao(Collection<ClienteImovel> colecaoClienteImovel,
HttpSession sessao) {
Collection<ConsultarClienteRelacaoClienteImovelHelper> colecaoHelper = new ArrayList<ConsultarClienteRelacaoClienteImovelHelper>();
Iterator<ClienteImovel> iteClienteImovel = colecaoClienteImovel.iterator();
ClienteImovel clienteAnterior = null;
long contador = 0;
while(iteClienteImovel.hasNext()){
ClienteImovel clienteImovel = iteClienteImovel.next();
if(clienteAnterior == null || !clienteImovel.getImovel().equals(clienteAnterior.getImovel())){
contador++;
}
String enderecoImovel = Fachada.getInstancia().pesquisarEndereco(clienteImovel.getImovel().getId());
ConsultarClienteRelacaoClienteImovelHelper consultarClienteRelacaoClienteImovelHelper = new ConsultarClienteRelacaoClienteImovelHelper();
consultarClienteRelacaoClienteImovelHelper.setClienteImovel(clienteImovel);
consultarClienteRelacaoClienteImovelHelper.setEnderecoImovel(enderecoImovel);
colecaoHelper.add(consultarClienteRelacaoClienteImovelHelper);
clienteAnterior = clienteImovel;
}
sessao.setAttribute("qtdImoveis", contador);
sessao.setAttribute("collClienteImovel", colecaoHelper);
}
/**
* Esse m�todo cria e retorna o objeto Filtro respons�vel
* por consultar os ClienteImovel
* baseado nos parametros informado pelo usuario na tela de consulta.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private FiltroClienteImovel criarFiltroClienteImovel(ConsultarRelacaoClienteImovelActionForm form) {
FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();
filtroClienteImovel.setConsultaSemLimites(true);
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.CLIENTE_ID, form.getIdCliente()));
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.CLIENTE);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade("clienteRelacaoTipo");
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade("clienteImovelFimRelacaoMotivo");
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.IMOVEL);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.LOCALIDADE);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.SETOR_COMERCIAL);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.QUADRA);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.LOGRADOURO);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.BAIRRO);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.MUNICIPIO);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade(FiltroClienteImovel.CEP);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade("imovel."
+ FiltroImovel.UNIDADE_FEDERACAO);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade("imovel."
+ FiltroImovel.ENDERECO_REFERENCIA);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade("imovel."
+ FiltroImovel.LOGRADOURO_TIPO);
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade("imovel."
+ FiltroImovel.LOGRADOURO_TITULO);
if ( Util.verificarNaoVazio(form.getIdClienteRelacaoTipo())) {
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.CLIENTE_RELACAO_TIPO, form.getIdClienteRelacaoTipo()));
}
if (Util.verificarNaoVazio(form.getIdClienteImovelFimRelacaoMotivo())) {
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.FIM_RELACAO_MOTIVO, form.getIdClienteImovelFimRelacaoMotivo()));
}
if (Util.verificarNaoVazio(form.getPeriodoInicialDataInicioRelacao())) {
Date periodoInicialDataInicioRelacao = Util.converteStringParaDate(form
.getPeriodoInicialDataInicioRelacao());
Date periodoFinalDataInicioRelacao = null;
if ( !Util.verificarNaoVazio(form.getPeriodoFinalDataInicioRelacao())) {
periodoFinalDataInicioRelacao = periodoInicialDataInicioRelacao;
} else {
periodoFinalDataInicioRelacao = Util.converteStringParaDate(form
.getPeriodoFinalDataInicioRelacao());
}
Calendar diInicio = Calendar.getInstance();
diInicio.setTime(periodoInicialDataInicioRelacao);
diInicio.set(Calendar.HOUR, 0);
diInicio.set(Calendar.MINUTE, 0);
diInicio.set(Calendar.SECOND, 0);
Calendar diFim = Calendar.getInstance();
diFim.setTime(periodoFinalDataInicioRelacao);
diFim.set(Calendar.HOUR, 23);
diFim.set(Calendar.MINUTE, 59);
diFim.set(Calendar.SECOND, 59);
filtroClienteImovel.adicionarParametro(new Intervalo(
FiltroClienteImovel.DATA_INICIO_RELACAO, diInicio.getTime(), diFim.getTime()));
}
if ( Util.verificarNaoVazio(form.getPeriodoInicialDataFimRelacao())) {
Date periodoInicialDataFimRelacao = Util
.converteStringParaDate(form.getPeriodoInicialDataFimRelacao());
Date periodoFinalDataFimRelacao = null;
if ( !Util.verificarNaoVazio(form.getPeriodoFinalDataFimRelacao())) {
periodoFinalDataFimRelacao = periodoInicialDataFimRelacao;
} else {
periodoFinalDataFimRelacao = Util.converteStringParaDate(form
.getPeriodoFinalDataFimRelacao());
}
Calendar diInicio = Calendar.getInstance();
diInicio.setTime(periodoInicialDataFimRelacao);
diInicio.set(Calendar.HOUR, 0);
diInicio.set(Calendar.MINUTE, 0);
diInicio.set(Calendar.SECOND, 0);
Calendar diFim = Calendar.getInstance();
diFim.setTime(periodoFinalDataFimRelacao);
diFim.set(Calendar.HOUR, 23);
diFim.set(Calendar.MINUTE, 59);
diFim.set(Calendar.SECOND, 59);
filtroClienteImovel.adicionarParametro(new Intervalo(
FiltroClienteImovel.DATA_FIM_RELACAO, diInicio.getTime(), diFim.getTime()));
}
if ( Util.verificarNaoVazio(form.getSituacaoRelacao())) {
if(form.getSituacaoRelacao().equalsIgnoreCase("1")){
filtroClienteImovel.adicionarParametro(new ParametroNulo(
FiltroClienteImovel.DATA_FIM_RELACAO));
} else if (form.getSituacaoRelacao().equalsIgnoreCase("2")) {
filtroClienteImovel.adicionarParametro(new ParametroNaoNulo(
FiltroClienteImovel.DATA_FIM_RELACAO));
}
}
filtroClienteImovel.adicionarParametro(new ParametroSimplesDiferenteDe("imovel.indicadorExclusao",
ConstantesSistema.SIM));
return filtroClienteImovel;
}
/**
* Esse m�todo obtem o ClienteEndereco do Cliente
* passo como parametro e seta esse objeto na sess�o
* e na requisi��o.
*
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private void setarClienteEnderecoSessaoERequest(Cliente cliente,
HttpSession sessao, HttpServletRequest request) {
FiltroClienteEndereco filtroClienteEndereco = criarFiltroClienteEndereco(cliente);
Collection<ClienteEndereco> colecaoClienteEnderecos = Fachada.getInstancia()
.pesquisar(filtroClienteEndereco,ClienteEndereco.class.getName());
ClienteEndereco clienteEndereco = new ClienteEndereco();
if ( !Util.isVazioOrNulo(colecaoClienteEnderecos)) {
Iterator<ClienteEndereco> colecaoClienteEnderecosIterator = colecaoClienteEnderecos.iterator();
while (colecaoClienteEnderecosIterator.hasNext()) {
clienteEndereco = colecaoClienteEnderecosIterator.next();
if (clienteEndereco.getIndicadorEnderecoCorrespondencia()
.equals(ConstantesSistema.INDICADOR_ENDERECO_CORRESPONDENCIA)) {
request.setAttribute("enderecoCorrespondencia",clienteEndereco);
break;
}
}
}
sessao.setAttribute("clienteEndereco", clienteEndereco);
}
/**
* Cria o filtro responsavel por consultar os endere�os do cliente.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private FiltroClienteEndereco criarFiltroClienteEndereco(Cliente cliente) {
FiltroClienteEndereco filtroClienteEndereco = new FiltroClienteEndereco();
filtroClienteEndereco.adicionarParametro(new ParametroSimples(
FiltroClienteEndereco.CLIENTE_ID, cliente.getId()));
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");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("cliente");
return filtroClienteEndereco;
}
/**
* Esse m�todo cria o filtro
* respons�vel por consultar o cliente informado pelo usu�rio.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private FiltroCliente criarFiltroConsultarClienteInformadoUsuario(ConsultarRelacaoClienteImovelActionForm form) {
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.ID,form.getIdCliente()));
filtroCliente
.adicionarCaminhoParaCarregamentoEntidade(FiltroCliente.CLIENTE_ENDERECOS);
filtroCliente
.adicionarCaminhoParaCarregamentoEntidade(FiltroCliente.ORGAO_EXPEDIDOR_RG);
filtroCliente
.adicionarCaminhoParaCarregamentoEntidade(FiltroCliente.PROFISSAO);
filtroCliente
.adicionarCaminhoParaCarregamentoEntidade(FiltroCliente.UNIDADE_FEDERACAO);
filtroCliente
.adicionarCaminhoParaCarregamentoEntidade(FiltroCliente.RAMO_ATIVIDADE);
return filtroCliente;
}
/**
* Remove alguns atributos da sess�o que s�o usados na l�gica
* deste action.
*
*@since 11/09/2009
*@author Marlon Patrick
*/
private void removerAtributosSessao(HttpSession sessao) {
sessao.removeAttribute("imovel");
sessao.removeAttribute("collClienteImovel");
sessao.removeAttribute("collImovelSubCategoriaHelper");
sessao.removeAttribute("cliente");
sessao.removeAttribute("collClienteImovelEconomia");
}
}