package gcom.gui.cadastro.imovel;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteImovelEconomia;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.imovel.ImovelEconomia;
import gcom.cadastro.imovel.ImovelSubcategoria;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.filtro.ParametroSimples;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
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 respons�vel para a adi��o da cole��o de cliente imovel economia
*
* @author S�vio Luiz
* @created 19 de Maio de 2004
*/
public class AdicionarInformarEconomiaPopupAction extends GcomAction {
/**
* Description of the Method
*
* @param actionMapping
* Description of the Parameter
* @param actionForm
* Description of the Parameter
* @param httpServletRequest
* Description of the Parameter
* @param httpServletResponse
* Description of the Parameter
* @return Description of the Return Value
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Cria a sess�o
HttpSession sessao = httpServletRequest.getSession(false);
//Obt�m o action form
EconomiaPopupActionForm economiaPopupActionForm = (EconomiaPopupActionForm) actionForm;
ActionForward retorno = null;
if (economiaPopupActionForm.getBotaoAdicionar() != null
&& !economiaPopupActionForm.getBotaoAdicionar().equals("")) {
if (economiaPopupActionForm.getBotaoAdicionar().equals("atualizar")) {
retorno = actionMapping.findForward("atualizarEconomiaPopup");
}
if (economiaPopupActionForm.getBotaoAdicionar().equals("inserir")) {
//Prepara o retorno da A��o
retorno = actionMapping.findForward("inserirEconomiaPopup");
ImovelSubcategoria imovelSubCategoria = (ImovelSubcategoria) sessao
.getAttribute("imovelSubCategoria");
Collection imovelEconomias = null;
if (imovelSubCategoria.getImovelEconomias() == null
|| imovelSubCategoria.getImovelEconomias().equals("")) {
imovelEconomias = new ArrayList();
} else {
imovelEconomias = imovelSubCategoria.getImovelEconomias();
}
if (imovelEconomias.size() + 1 > imovelSubCategoria
.getQuantidadeEconomias()) {
throw new ActionServletException(
"atencao.quantidade_ultrapassada.imovel_economia",
null, new Integer(imovelSubCategoria
.getImovelEconomias().size()).toString());
}
}
}
//Obt�m a fachada
Fachada fachada = Fachada.getInstancia();
//Cria��o dos objetos
String idCliente = null;
Cliente cliente = null;
Collection clientes = null;
Collection colecaoClientesImoveisEconomia = null;
ImovelEconomia imovelEconomia = (ImovelEconomia) sessao
.getAttribute("imovelEconomia");
//parametro que testa se dar� um reload(true) ou nao(false)
httpServletRequest.setAttribute("testeInserir", "false");
//HashSet verifica se existe objeto igual na collection
if (sessao.getAttribute("colecaoClientesImoveisEconomia") != null) {
colecaoClientesImoveisEconomia = (Collection) sessao
.getAttribute("colecaoClientesImoveisEconomia");
} else {
colecaoClientesImoveisEconomia = new HashSet();
}
SimpleDateFormat dataFormato = new SimpleDateFormat("dd/MM/yyyy");
Date dataInicioRelacao = null;
try {
dataInicioRelacao = dataFormato.parse(economiaPopupActionForm
.getDataInicioClienteImovelRelacao());
} catch (ParseException ex) {
dataInicioRelacao = null;
}
Date dataCorrente = null;
Calendar a = Calendar.getInstance();
a.set(Calendar.SECOND, 0);
a.set(Calendar.MILLISECOND, 0);
a.set(Calendar.HOUR, 0);
a.set(Calendar.MINUTE, 0);
dataCorrente = a.getTime();
//caso a data de inicio da rela��o seja anterior que a data atual
if (dataInicioRelacao.after(dataCorrente)) {
throw new ActionServletException(
"atencao.data_inicio_relacao_cliente_imovel");
}
if (economiaPopupActionForm.getIdCliente() != null
&& !economiaPopupActionForm.getIdCliente().trim()
.equalsIgnoreCase("")) {
FiltroCliente filtroCliente = new FiltroCliente();
idCliente = (String) economiaPopupActionForm.getIdCliente();
//Adiciona parametro
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.ID, idCliente));
//Realiza a pesquisa de cliente
clientes = fachada
.pesquisar(filtroCliente, Cliente.class.getName());
if (clientes != null && !clientes.isEmpty()) {
//O cliente foi encontrado
cliente = new Cliente();
cliente = (Cliente) clientes.iterator().next();
//inicializa o tipo do cliente imovel
ClienteRelacaoTipo clienteRelacaoTipo = new ClienteRelacaoTipo();
//recupera id do tipo do cliente imovel
clienteRelacaoTipo.setId(new Integer(economiaPopupActionForm
.getClienteRelacaoTipo()));
//recupera a descricao do tipo do cliente imovel
clienteRelacaoTipo.setDescricao(economiaPopupActionForm
.getTextoSelecionadoEconomia());
//inicializa o cliente imovel
ClienteImovelEconomia clienteImovelEconomia = new ClienteImovelEconomia(
dataInicioRelacao, null, new Date(), null, cliente,
clienteRelacaoTipo, null);
if (!colecaoClientesImoveisEconomia
.contains(clienteImovelEconomia)) {
if (imovelEconomia != null && !imovelEconomia.equals("")) {
if (imovelEconomia.getClienteImovelEconomias()
.contains(clienteImovelEconomia)) {
throw new ActionServletException(
"atencao.ja_cadastradado.cliente_imovel_usuario");
}
}
//verifica se o tipo do cliente � usu�rio
if (clienteImovelEconomia.getClienteRelacaoTipo().getId()
.shortValue() == ClienteRelacaoTipo.USUARIO
.shortValue()) {
if (economiaPopupActionForm.getIdClienteImovelUsuario() == null
|| (economiaPopupActionForm
.getIdClienteImovelUsuario().equals(""))) {
economiaPopupActionForm
.setIdClienteImovelUsuario(cliente.getId()
.toString());
//adiciona o cliente imovel na cole��o de
// imovelClientesNovos
colecaoClientesImoveisEconomia
.add(clienteImovelEconomia);
} else {
throw new ActionServletException(
"atencao.ja_cadastradado.cliente_imovel_usuario");
}
} else {
if (imovelEconomia != null) {
Collection clientesImoveisEconoiasCadastradas = imovelEconomia
.getClienteImovelEconomias();
//cria um iterator da cole��o de clientes imoveis
// economia
Iterator clienteImovelEconomiaCadastradaIterator = clientesImoveisEconoiasCadastradas
.iterator();
//verifica cada cliente imovel economia
while (clienteImovelEconomiaCadastradaIterator
.hasNext()) {
ClienteImovelEconomia clienteImovelEconomiaCadastrada = (ClienteImovelEconomia) clienteImovelEconomiaCadastradaIterator
.next();
//se o cliente imovel economia da cole��o for
// igual ao cliente imovel economia que
//est� querendo cadastrar.
if (clienteImovelEconomiaCadastrada
.getCliente().getId().equals(
clienteImovelEconomia
.getCliente().getId())) {
//verifica se esse cliente imovel economia
// cadastrado � propiet�rio
if (clienteImovelEconomiaCadastrada
.getClienteRelacaoTipo().getId()
.shortValue() == ClienteRelacaoTipo.PROPRIETARIO
.shortValue()) {
throw new ActionServletException(
"atencao.ja_cadastrado_cliente_imovel_propietario");
}
}
}
}
colecaoClientesImoveisEconomia
.add(clienteImovelEconomia);
}
SimpleDateFormat dataFormatoAtual = new SimpleDateFormat(
"dd/MM/yyyy");
//joga em dataInicial a parte da data
String dataAtual = dataFormatoAtual.format(new Date());
economiaPopupActionForm
.setDataInicioClienteImovelRelacao(dataAtual);
//manda para a sess�o a cole��o de imovelClienteNovos
sessao.setAttribute("colecaoClientesImoveisEconomia",
colecaoClientesImoveisEconomia);
} else {
throw new ActionServletException(
"atencao.ja_cadastradado.cliente_imovel");
}
} else {
throw new ActionServletException(
"atencao.pesquisa.nenhumresultado", null, "cliente");
}
}
if (!colecaoClientesImoveisEconomia.isEmpty()){
economiaPopupActionForm.setColecaoCliente("SIM");
} else {
economiaPopupActionForm.setColecaoCliente(null);
}
httpServletRequest.setAttribute("i","i");
return retorno;
}
}