package gcom.gui.cadastro.tarifasocial;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteImovel;
import gcom.cadastro.cliente.ClienteImovelEconomia;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.ClienteTipo;
import gcom.cadastro.cliente.FiltroClienteRelacaoTipo;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.imovel.ImovelEconomia;
import gcom.cadastro.tarifasocial.FiltroTarifaSocialCartaoTipo;
import gcom.cadastro.tarifasocial.TarifaSocialDadoEconomia;
import gcom.cadastro.tarifasocial.bean.TarifaSocialHelper;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ConectorOr;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
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;
/**
* @author Rafael Corr�a
* @since 16/01/2007
*/
public class ExibirAtualizarTarifaSocialClienteAction extends GcomAction {
/**
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("exibirCliente");
Fachada fachada = Fachada.getInstancia();
// Pega uma instancia da sessao
HttpSession sessao = httpServletRequest.getSession(false);
AtualizarDadosTarifaSocialClienteActionForm atualizarDadosTarifaSocialClienteActionForm = (AtualizarDadosTarifaSocialClienteActionForm) actionForm;
FiltroClienteRelacaoTipo filtroClienteRelacaoTipo = new FiltroClienteRelacaoTipo();
filtroClienteRelacaoTipo.adicionarParametro(new ParametroSimples(
FiltroClienteRelacaoTipo.CLIENTE_RELACAO_TIPO_ID,
ClienteRelacaoTipo.PROPRIETARIO, ConectorOr.CONECTOR_OR, 2));
filtroClienteRelacaoTipo.adicionarParametro(new ParametroSimples(
FiltroClienteRelacaoTipo.CLIENTE_RELACAO_TIPO_ID,
ClienteRelacaoTipo.USUARIO.intValue()));
filtroClienteRelacaoTipo.adicionarParametro(new ParametroSimples(
FiltroTarifaSocialCartaoTipo.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoTipoRelacao = fachada.pesquisar(
filtroClienteRelacaoTipo, ClienteRelacaoTipo.class.getName());
sessao.setAttribute("colecaoTipoRelacao", colecaoTipoRelacao);
Date dataAtual = new Date();
if (httpServletRequest.getAttribute("telaLimpa") != null
|| sessao.getAttribute("telaLimpa") != null) {
sessao.removeAttribute("telaLimpa");
atualizarDadosTarifaSocialClienteActionForm.setIdCliente("");
atualizarDadosTarifaSocialClienteActionForm.setNomeCliente("");
atualizarDadosTarifaSocialClienteActionForm
.setClienteRelacaoTipo(""
+ ConstantesSistema.NUMERO_NAO_INFORMADO);
atualizarDadosTarifaSocialClienteActionForm
.setDataInicioRelacao(Util.formatarData(dataAtual));
}
sessao.removeAttribute("colecaoClienteImovelRemover");
sessao.removeAttribute("colecaoClienteImovelEconomiaRemover");
String idCliente = atualizarDadosTarifaSocialClienteActionForm
.getIdCliente();
Cliente cliente = null;
if (idCliente != null && !idCliente.trim().equals("")) {
cliente = fachada
.pesquisarClienteComClienteTipoTarifaSocial(new Integer(
idCliente));
if (cliente != null) {
atualizarDadosTarifaSocialClienteActionForm
.setNomeCliente(cliente.getNome());
} else {
httpServletRequest.setAttribute("codigoClienteNaoEncontrada", true);
atualizarDadosTarifaSocialClienteActionForm.setIdCliente("");
atualizarDadosTarifaSocialClienteActionForm
.setNomeCliente("Cliente Inexistente");
}
}
TarifaSocialHelper tarifaSocialHelper = (TarifaSocialHelper) sessao
.getAttribute("tarifaSocialHelper");
Collection colecaoClienteImovel = null;
Collection colecaoClienteImovelEconomia = null;
if (sessao.getAttribute("colecaoClienteImovel") == null
&& sessao.getAttribute("colecaoClienteImovelEconomia") == null) {
if (tarifaSocialHelper.getColecaoClientesImoveis() == null
&& tarifaSocialHelper.getColecaoClientesImoveisEconomias() == null) {
// Uma Economia
if (tarifaSocialHelper.getClienteImovel() != null) {
Integer idImovel = tarifaSocialHelper.getClienteImovel()
.getImovel().getId();
colecaoClienteImovel = fachada
.pesquisarClientesImovelTarifaSocial(idImovel);
sessao.setAttribute("colecaoClienteImovel",
colecaoClienteImovel);
} else {
Integer idImovelEconomia = tarifaSocialHelper
.getClienteImovelEconomia().getImovelEconomia()
.getId();
colecaoClienteImovelEconomia = fachada
.pesquisarClientesImovelEconomiaTarifaSocial(idImovelEconomia);
sessao.setAttribute("colecaoClienteImovelEconomia",
colecaoClienteImovelEconomia);
}
} else {
if (tarifaSocialHelper.getColecaoClientesImoveis() != null) {
colecaoClienteImovel = tarifaSocialHelper
.getColecaoClientesImoveis();
sessao.setAttribute("colecaoClienteImovel",
colecaoClienteImovel);
} else {
colecaoClienteImovelEconomia = tarifaSocialHelper
.getColecaoClientesImoveisEconomias();
sessao.setAttribute("colecaoClienteImovelEconomia",
colecaoClienteImovelEconomia);
}
}
}
// Adiciona um cliente im�vel a cole��o
if (httpServletRequest.getParameter("adicionar") != null) {
TarifaSocialHelper tarifaSocialHelperAtualizar = (TarifaSocialHelper) sessao
.getAttribute("tarifaSocialHelperAtualizar");
if (cliente != null) {
String idTipoRelacao = atualizarDadosTarifaSocialClienteActionForm
.getClienteRelacaoTipo();
String dataInicioRelacao = atualizarDadosTarifaSocialClienteActionForm
.getDataInicioRelacao();
if (idTipoRelacao != null
&& !idTipoRelacao.equals(""
+ ConstantesSistema.NUMERO_NAO_INFORMADO)) {
ClienteRelacaoTipo clienteRelacaoTipo = new ClienteRelacaoTipo();
clienteRelacaoTipo.setId(new Integer(idTipoRelacao));
if (idTipoRelacao.equals(ClienteRelacaoTipo.PROPRIETARIO
.toString())) {
if (cliente.getClienteTipo()
.getIndicadorPessoaFisicaJuridica().equals(
ClienteTipo.INDICADOR_PESSOA_FISICA)) {
if ((cliente.getCpf() == null || cliente.getCpf()
.equals(""))
&& (cliente.getRg() == null || cliente
.getRg().equals(""))) {
throw new ActionServletException(
"atencao.cliente.imovel.proprietario.pessoa_fisica.sem.documento");
}
} else {
if (cliente.getCnpj() == null
|| cliente.getCnpj().equals("")) {
throw new ActionServletException(
"atencao.cliente.imovel.proprietario.pessoa_juridica.sem.documento");
}
}
clienteRelacaoTipo.setDescricao("PROPRIETARIO");
} else if (idTipoRelacao.equals(ClienteRelacaoTipo.USUARIO
.toString())) {
if ((cliente.getCpf() == null || cliente.getCpf()
.equals(""))
&& (cliente.getRg() == null || cliente.getRg()
.equals(""))) {
throw new ActionServletException(
"atencao.cliente.imovel.usuario.pessoa_fisica.sem.documento");
}
Collection colecaoImovel = null;
if (tarifaSocialHelperAtualizar.getClienteImovel() != null) {
colecaoImovel = fachada
.verificarClienteCadastradoManterTarifaSocialUmaEconomia(
new Integer(idCliente),
tarifaSocialHelperAtualizar
.getClienteImovel()
.getImovel().getId());
} else if (tarifaSocialHelperAtualizar
.getClienteImovelEconomia() != null) {
colecaoImovel = fachada
.verificarClienteCadastradoManterTarifaSocialMultiplasEconomias(
new Integer(idCliente),
tarifaSocialHelperAtualizar
.getClienteImovelEconomia()
.getImovelEconomia()
.getId());
}
if (colecaoImovel != null && !colecaoImovel.isEmpty()) {
Imovel imovel = (Imovel) colecaoImovel.iterator()
.next();
throw new ActionServletException(
"atencao.usuario.ja_cadastrado_tarifasocial.sem.encerramento",
null, imovel.getId().toString());
}
clienteRelacaoTipo.setDescricao("USUARIO");
}
Date dataInicioRelacaoFormatada = null;
if (dataInicioRelacao != null
&& !dataInicioRelacao.trim().equals("")) {
dataInicioRelacaoFormatada = Util
.converteStringParaDate(dataInicioRelacao);
// [FS0018] - Verificar Data de In�cio da Rela��o
if (dataInicioRelacaoFormatada.compareTo(dataAtual) > 0) {
throw new ActionServletException(
"atencao.data_inicio_relacao_cliente_imovel");
}
if (cliente.getDataNascimento() != null) {
if (dataInicioRelacaoFormatada.compareTo(cliente
.getDataNascimento()) < 0) {
throw new ActionServletException(
"atencao.data_inicio_relacao_cliente_imovel.data_nascimento");
}
}
} else {
dataInicioRelacaoFormatada = dataAtual;
}
boolean mudouRetorno = false;
// Verifica se o usu�rio a ser inserido est� na tarifa
// social em outro im�vel com motivo de revis�o que permita
// recadastramento. Em caso afirmativo muda o retorno para
// um popup solicitando que ele selecione o motivo da
// exclus�o da tarifa social do im�vel anterior
if (idTipoRelacao.equals(ClienteRelacaoTipo.USUARIO
.toString())) {
// Verifica se j� existe um usu�rio
// Uma Economia
if (sessao.getAttribute("colecaoClienteImovel") != null) {
colecaoClienteImovel = (Collection) sessao
.getAttribute("colecaoClienteImovel");
boolean existeUsuario = false;
Iterator colecaoClienteImovelIterator = colecaoClienteImovel
.iterator();
while (colecaoClienteImovelIterator.hasNext()) {
ClienteImovel clienteImovelValidar = (ClienteImovel) colecaoClienteImovelIterator
.next();
if (clienteImovelValidar
.getClienteRelacaoTipo()
.getId()
.toString()
.equals("" + ClienteRelacaoTipo.USUARIO)) {
existeUsuario = true;
break;
}
}
if (existeUsuario) {
throw new ActionServletException(
"atencao.ja_cadastradado.cliente_imovel_usuario");
}
}
// M�ltiplas Economias
else {
colecaoClienteImovelEconomia = (Collection) sessao
.getAttribute("colecaoClienteImovelEconomia");
Iterator colecaoClienteImovelEconomiaIterator = colecaoClienteImovelEconomia
.iterator();
boolean existeUsuario = false;
while (colecaoClienteImovelEconomiaIterator
.hasNext()) {
ClienteImovelEconomia clienteImovelEconomiaValidar = (ClienteImovelEconomia) colecaoClienteImovelEconomiaIterator
.next();
if (clienteImovelEconomiaValidar
.getClienteRelacaoTipo()
.getId()
.toString()
.equals("" + ClienteRelacaoTipo.USUARIO)) {
existeUsuario = true;
break;
}
}
if (existeUsuario) {
throw new ActionServletException(
"atencao.ja_cadastradado.cliente_imovel_usuario");
}
}
Collection colecaoClientesUsuarioExistenteTarifaSocial = fachada
.pesquisarClientesUsuarioExistenteTarifaSocial(cliente
.getId());
if (colecaoClientesUsuarioExistenteTarifaSocial != null
&& !colecaoClientesUsuarioExistenteTarifaSocial
.isEmpty()) {
mudouRetorno = true;
retorno = actionMapping
.findForward("exibirRemoverImovelAnteriorTarifaSocial");
TarifaSocialDadoEconomia tarifaSocialDadoEconomiaImovelAnterior = (TarifaSocialDadoEconomia) Util
.retonarObjetoDeColecao(colecaoClientesUsuarioExistenteTarifaSocial);
sessao.setAttribute(
"tarifaSocialDadoEconomiaImovelAnterior",
tarifaSocialDadoEconomiaImovelAnterior);
sessao.setAttribute(
"clienteTarifaSocialImovelAnterior",
cliente);
sessao.setAttribute("dataInicioRelacao",
dataInicioRelacaoFormatada);
}
}
if (!mudouRetorno) {
// Uma Economia
if (sessao.getAttribute("colecaoClienteImovel") != null) {
ClienteImovel clienteImovel = new ClienteImovel();
clienteImovel.setCliente(cliente);
clienteImovel
.setClienteRelacaoTipo(clienteRelacaoTipo);
Imovel imovel = tarifaSocialHelper
.getClienteImovel().getImovel();
clienteImovel
.setDataInicioRelacao(dataInicioRelacaoFormatada);
clienteImovel.setImovel(imovel);
colecaoClienteImovel = (Collection) sessao
.getAttribute("colecaoClienteImovel");
if (idTipoRelacao.equals(ClienteRelacaoTipo.USUARIO
.toString())) {
tarifaSocialHelperAtualizar
.setClienteImovel(clienteImovel);
sessao.setAttribute(
"tarifaSocialHelperAtualizar",
tarifaSocialHelperAtualizar);
} else if (idTipoRelacao
.equals(ClienteRelacaoTipo.PROPRIETARIO
.toString())) {
Iterator colecaoClienteImovelIterator = colecaoClienteImovel
.iterator();
boolean existeProprietario = false;
while (colecaoClienteImovelIterator.hasNext()) {
ClienteImovel clienteImovelValidar = (ClienteImovel) colecaoClienteImovelIterator
.next();
if (clienteImovelValidar
.getClienteRelacaoTipo()
.getId()
.equals(
ClienteRelacaoTipo.PROPRIETARIO)
&& clienteImovelValidar
.getCliente().getId()
.equals(cliente.getId())) {
existeProprietario = true;
break;
}
}
if (existeProprietario) {
throw new ActionServletException(
"atencao.tarifasocial.cliente_proprietario_duplicidade");
}
}
colecaoClienteImovel.add(clienteImovel);
sessao.setAttribute("colecaoClienteImovel",
colecaoClienteImovel);
Collection colecaoClientesInseridos = null;
if (tarifaSocialHelperAtualizar
.getColecaoClientesInseridos() != null) {
colecaoClientesInseridos = tarifaSocialHelperAtualizar
.getColecaoClientesInseridos();
} else {
colecaoClientesInseridos = new ArrayList();
}
colecaoClientesInseridos.add(clienteImovel);
tarifaSocialHelperAtualizar
.setColecaoClientesInseridos(colecaoClientesInseridos);
sessao.setAttribute("tarifaSocialHelperAtualizar",
tarifaSocialHelperAtualizar);
}
// M�ltiplas Economias
else {
ClienteImovelEconomia clienteImovelEconomia = new ClienteImovelEconomia();
clienteImovelEconomia.setCliente(cliente);
clienteImovelEconomia
.setClienteRelacaoTipo(clienteRelacaoTipo);
ImovelEconomia imovelEconomia = tarifaSocialHelper
.getClienteImovelEconomia()
.getImovelEconomia();
clienteImovelEconomia
.setDataInicioRelacao(dataInicioRelacaoFormatada);
clienteImovelEconomia
.setImovelEconomia(imovelEconomia);
colecaoClienteImovelEconomia = (Collection) sessao
.getAttribute("colecaoClienteImovelEconomia");
if (idTipoRelacao.equals(ClienteRelacaoTipo.USUARIO
.toString())) {
tarifaSocialHelperAtualizar
.setClienteImovelEconomia(clienteImovelEconomia);
sessao.setAttribute(
"tarifaSocialHelperAtualizar",
tarifaSocialHelperAtualizar);
} else if (idTipoRelacao
.equals(ClienteRelacaoTipo.PROPRIETARIO
.toString())) {
Iterator colecaoClienteImovelEconomiaIterator = colecaoClienteImovelEconomia
.iterator();
boolean existeProprietario = false;
while (colecaoClienteImovelEconomiaIterator
.hasNext()) {
ClienteImovelEconomia clienteImovelEconomiaValidar = (ClienteImovelEconomia) colecaoClienteImovelEconomiaIterator
.next();
if (clienteImovelEconomiaValidar
.getCliente().getId().equals(
cliente.getId())
&& clienteImovelEconomiaValidar
.getClienteRelacaoTipo()
.getId()
.toString()
.equals(
ClienteRelacaoTipo.PROPRIETARIO
.toString())) {
existeProprietario = true;
break;
}
}
if (existeProprietario) {
throw new ActionServletException(
"atencao.tarifasocial.cliente_proprietario_duplicidade");
}
}
colecaoClienteImovelEconomia
.add(clienteImovelEconomia);
sessao.setAttribute("colecaoClienteImovelEconomia",
colecaoClienteImovelEconomia);
Collection colecaoClientesInseridos = null;
if (tarifaSocialHelperAtualizar
.getColecaoClientesInseridos() != null) {
colecaoClientesInseridos = tarifaSocialHelperAtualizar
.getColecaoClientesEconomiaInseridos();
} else {
colecaoClientesInseridos = new ArrayList();
}
colecaoClientesInseridos.add(clienteImovelEconomia);
tarifaSocialHelperAtualizar
.setColecaoClientesEconomiaInseridos(colecaoClientesInseridos);
sessao.setAttribute("tarifaSocialHelperAtualizar",
tarifaSocialHelperAtualizar);
}
}
atualizarDadosTarifaSocialClienteActionForm
.setIdCliente("");
atualizarDadosTarifaSocialClienteActionForm
.setNomeCliente("");
atualizarDadosTarifaSocialClienteActionForm
.setDataInicioRelacao(Util.formatarData(dataAtual));
atualizarDadosTarifaSocialClienteActionForm
.setClienteRelacaoTipo(""
+ ConstantesSistema.NUMERO_NAO_INFORMADO);
}
}
}
return retorno;
}
}