package gcom.gui.cadastro.imovel;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteImovel;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.Imovel;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
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 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;
import org.apache.struts.validator.DynaValidatorForm;
/**
* Action respons�vel por adicionar na cole��o a rela��o entre o cliente imovel,
* o cliente e a data de inicio da rela��o
*
* @author S�vio Luiz
* @created 16 de Maio de 2004
*/
public class AdicionarAtualizarImovelClienteAction extends GcomAction {
/**
* < <Descri��o do m�todo>>
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
@SuppressWarnings("rawtypes")
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("adicionarAtualizarImovelCliente");
// obtendo uma instancia da sessao
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
DynaValidatorForm inserirImovelActionForm = (DynaValidatorForm) actionForm;
Fachada fachada = Fachada.getInstancia();
Collection imovelClientesNovos = null;
Imovel imovel = (Imovel) sessao.getAttribute("imovelAtualizacao");
if (sessao.getAttribute("imovelClientesNovos") != null) {
imovelClientesNovos = (Collection) sessao.getAttribute("imovelClientesNovos");
} else {
imovelClientesNovos = new ArrayList();
}
// inst�ncia um cliente
Cliente cliente = new Cliente();
// teste se o cliente ja foi pesquisado com enter
if (inserirImovelActionForm.get("idCliente") != null) {
// recupera o id do cliente
String idCliente = (String) inserirImovelActionForm.get("idCliente");
// inst�ncia o filtro do cliente
FiltroCliente filtroCliente = new FiltroCliente();
// adiciona o parametro no filtro
filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.ID, idCliente));
// faz a pesquisa do cliente
Collection clientesObjs = fachada.pesquisar(filtroCliente, Cliente.class.getName());
// recupera o cliente da cole��o pesquisada
if (!clientesObjs.isEmpty()) {
cliente = (Cliente) clientesObjs.iterator().next();
} else {
throw new ActionServletException("atencao.naocadastrado", null, "Cliente");
}
}
// inicializa o tipo do cliente imovel
ClienteRelacaoTipo clienteRelacaoTipo = new ClienteRelacaoTipo();
// recupera id do tipo do cliente imovel
clienteRelacaoTipo.setId((Integer) inserirImovelActionForm.get("tipoClienteImovel"));
// recupera a descricao do tipo do cliente imovel
clienteRelacaoTipo.setDescricao((String) inserirImovelActionForm.get("textoSelecionado"));
SimpleDateFormat dataFormato = new SimpleDateFormat("dd/MM/yyyy");
Date dataInicioRelacao = null;
if (inserirImovelActionForm.get("dataInicioClienteImovelRelacao") != null
&& !((String) inserirImovelActionForm.get("dataInicioClienteImovelRelacao")).equals("")) {
try {
dataInicioRelacao = dataFormato.parse((String) inserirImovelActionForm.get("dataInicioClienteImovelRelacao"));
} catch (ParseException ex) {
dataInicioRelacao = null;
}
}
Date dataCorrente = null;
Calendar data = Calendar.getInstance();
data.set(Calendar.SECOND, 0);
data.set(Calendar.MILLISECOND, 0);
data.set(Calendar.HOUR, 0);
data.set(Calendar.MINUTE, 0);
dataCorrente = data.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 (dataInicioRelacao == null) {
dataInicioRelacao = new Date();
}
// inicializa o cliente imovel
ClienteImovel clienteImovel = new ClienteImovel(dataInicioRelacao, null, null, cliente, clienteRelacaoTipo);
// Verifica permiss�o especial para manter cliente
// responsavel do imovel.
Categoria categoria = fachada.obterPrincipalCategoriaImovel(imovel.getId());
if (categoria.getId().compareTo(Categoria.PUBLICO) == 0
&& clienteImovel.getClienteRelacaoTipo().getId().compareTo(ClienteRelacaoTipo.RESPONSAVEL.intValue()) == 0) {
boolean possuiPermissaoManterClienteResponsavelImoveisPublicos = fachada.verificarPermissaoEspecialAtiva(
PermissaoEspecial.ALTERAR_CLIENTE_RESPONSAVEL_PARA_IMOVEIS_PUBLICOS, usuarioLogado);
if (!possuiPermissaoManterClienteResponsavelImoveisPublicos) {
throw new ActionServletException("atencao.nao_usuario_nao_possui_permissao_alterar_cliente_reponsavel");
}
}
// Adiciona o imovel ao cliente imovel
clienteImovel.setImovel(imovel);
// Coloca a data de ultima altera��o para identificar o objeto
clienteImovel.setUltimaAlteracao(new Date());
if (!imovelClientesNovos.contains(clienteImovel)) {
// verifica se o tipo do cliente � usu�rio ou � respons�vel
if (clienteImovel.isClienteUsuario()) {
if (sessao.getAttribute("idClienteImovelUsuario") == null || sessao.getAttribute("idClienteImovelUsuario").equals("")) {
if (imovel != null && imovel.getImovelPerfil() != null && imovel.getImovelPerfil().getId() != null
&& imovel.getImovelPerfil().getId().equals(ConstantesSistema.INDICADOR_TARIFA_SOCIAL)) {
throw new ActionServletException("atencao.cliente_na_tarifa_social", null, "usu�rio");
}
sessao.setAttribute("idClienteImovelUsuario", cliente.getId().toString());
httpServletRequest.setAttribute("idClienteImovelUsuario", cliente.getId().toString());
clienteImovel.setIndicadorNomeConta(new Short((short) 2));
imovelClientesNovos.add(clienteImovel);
} else {
throw new ActionServletException("atencao.ja_cadastradado.cliente_imovel_usuario");
}
} else if (clienteImovel.isClienteResponsavel()) {
if (sessao.getAttribute("idClienteImovelResponsavel") == null || sessao.getAttribute("idClienteImovelResponsavel").equals("")) {
sessao.setAttribute("idClienteImovelResponsavel", cliente.getId().toString());
clienteImovel.setIndicadorNomeConta(new Short((short) 2));
imovelClientesNovos.add(clienteImovel);
} else {
throw new ActionServletException("atencao.ja_cadastradado.cliente_imovel_responsavel");
}
} else {
// sever para cliente do tipo proprietario adiciona o cliente imovel na cole��o de imovelClientesNovos
clienteImovel.setIndicadorNomeConta(new Short((short) 2));
imovelClientesNovos.add(clienteImovel);
}
inserirImovelActionForm.set("idCliente", null);
inserirImovelActionForm.set("nomeCliente", null);
// manda para a sess�o a cole��o de imovelClienteNovos
sessao.setAttribute("imovelClientesNovos", imovelClientesNovos);
} else {
throw new ActionServletException("atencao.ja_cadastradado.cliente_imovel");
}
return retorno;
}
}