package gcom.gui.cadastro.cliente;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteEndereco;
import gcom.cadastro.cliente.ClienteFone;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.cliente.FiltroClienteEndereco;
import gcom.cadastro.cliente.FiltroClienteFone;
import gcom.cadastro.imovel.Imovel;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.gui.StatusWizard;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
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.action.DynaActionFormClass;
import org.apache.struts.config.FormBeanConfig;
import org.apache.struts.config.ModuleConfig;
import org.apache.struts.validator.DynaValidatorForm;
/**
* Action para a pr�-exibi��o da p�gina de Atualizar Cliente
*
* @author rodrigo
*/
public class ExibirAtualizarClienteAction extends GcomAction {
/**
* M�todo que � executado primeiro
*
* @param actionMapping
* Mapeamento do Struts
* @param actionForm
* Form do Funcion�rio
* @param httpServletRequest
* Request Atual
* @param httpServletResponse
* Response Atual
* @return Retorno do Mapeamento do Struts
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// ------------Parte que inicializa o processo de
// atualiza��o----------------------------------
// localiza o action no objeto actionmapping
ActionForward retorno = actionMapping
.findForward("atualizarClienteNomeTipo");
// obt�m a inst�ncia da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
// Obt�m a inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
String codigoCliente = null;
StatusWizard statusWizard = null;
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
if (httpServletRequest.getParameter("desfazer") == null) {
if (httpServletRequest.getParameter("idRegistroAtualizacao") != null) {
codigoCliente = (String) httpServletRequest
.getParameter("idRegistroAtualizacao");
} else if (httpServletRequest.getAttribute("idRegistroAtualizacao") != null) {
codigoCliente = (String) httpServletRequest
.getAttribute("idRegistroAtualizacao");
}
//[UC1049] - Atualizar Dados Cadastrais PROMAIS
//link para tela de sucesso
String linkSucesso = (String) httpServletRequest.getParameter("linkSucesso");
if(linkSucesso != null && !linkSucesso.equals("")){
sessao.setAttribute("linkSucesso", linkSucesso);
}
// Verifica se chegou no atualizar cliente atraves da tela de
// filtrar devido a um unico registro
// ou atraves da lista de imoveis no manter cliente
if (sessao.getAttribute("atualizar") != null
|| httpServletRequest.getParameter("sucesso") != null ) {
statusWizard = new StatusWizard(
"atualizarClienteWizardAction",
"atualizarClienteAction",
"cancelarAtualizarClienteAction",
"exibirFiltrarClienteAction",
"exibirAtualizarClienteAction.do",
codigoCliente);
sessao.removeAttribute("atualizar");
} else if(httpServletRequest.getParameter("promais") != null){
statusWizard = new StatusWizard(
"atualizarClienteWizardAction",
"atualizarClienteAction",
"cancelarAtualizarClienteAction",
"exibirConsultarImovelAction",
"exibirAtualizarClienteAction.do",
codigoCliente);
} else {
statusWizard = new StatusWizard(
"atualizarClienteWizardAction",
"atualizarClienteAction",
"cancelarAtualizarClienteAction",
"exibirManterClienteAction",
"exibirAtualizarClienteAction.do",
codigoCliente);
}
statusWizard
.inserirNumeroPaginaCaminho(statusWizard.new StatusWizardItem(
1, "ClienteNomeTipoA.gif", "ClienteNomeTipoD.gif",
"exibirAtualizarClienteNomeTipoAction",
"atualizarClienteNomeTipoAction"));
statusWizard
.inserirNumeroPaginaCaminho(statusWizard.new StatusWizardItem(
2, "ClientePessoaA.gif", "ClientePessoaD.gif",
"exibirAtualizarClientePessoaAction",
"atualizarClientePessoaAction"));
statusWizard
.inserirNumeroPaginaCaminho(statusWizard.new StatusWizardItem(
3, "ClienteEnderecoA.gif", "ClienteEnderecoD.gif",
"exibirAtualizarClienteEnderecoAction",
"atualizarClienteEnderecoAction"));
statusWizard
.inserirNumeroPaginaCaminho(statusWizard.new StatusWizardItem(
4, "ClienteTelefoneA.gif", "ClienteTelefoneD.gif",
"exibirAtualizarClienteTelefoneAction",
"atualizarClienteTelefoneAction"));
// manda o statusWizard para a sessao
sessao.setAttribute("statusWizard", statusWizard);
} else {
statusWizard = (StatusWizard) sessao.getAttribute("statusWizard");
codigoCliente = statusWizard.getId();
}
// limpa a sess�o
sessao.removeAttribute("colecaoClienteFone");
//**********************************************************************
// Autor: Ivan Sergio
// Data: 23/07/2009
// CRC2103
// Guarda o endereco do Imovel para o caso em que o Inserir/Manter
// cliente � invocado pelo Inserir/Manter Imovel como PopUp
//**********************************************************************
if (sessao.getAttribute("colecaoEnderecos") != null) {
Collection colecaoEndereco = (Collection) sessao.getAttribute("colecaoEnderecos");
Object obj = (Object) colecaoEndereco.iterator().next();
if (obj instanceof Imovel) {
sessao.setAttribute("colecaoEnderecosImovel", sessao.getAttribute("colecaoEnderecos"));
}
}
sessao.removeAttribute("colecaoEnderecos");
//**********************************************************************
sessao.removeAttribute("foneTipos");
sessao.removeAttribute("municipios");
sessao.removeAttribute("colecaoResponsavelSuperiores");
sessao.removeAttribute("InserirEnderecoActionForm");
// Retira o actionForm da sess�o para criar um novo mais abaixo na linha 192
sessao.removeAttribute("ClienteActionForm");
sessao.removeAttribute("tipoPesquisaRetorno");
sessao.removeAttribute("clienteAtualizacao");
// Cria o filtro para cliente
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.ID,
codigoCliente));
filtroCliente
.adicionarCaminhoParaCarregamentoEntidade(FiltroCliente.CLIENTE_RESPONSAVEL);
filtroCliente
.adicionarCaminhoParaCarregamentoEntidade("clienteTipo");
// pesquisa a cole�ao de cliente(s)
Collection clientes = fachada.pesquisar(filtroCliente, Cliente.class
.getName());
// Caso a cole��o esteja vazia, indica erro inesperado
if (clientes == null || clientes.isEmpty()) {
throw new ActionServletException("erro.sistema");
} else {
// O cliente que ser� atualizado
Cliente cliente = (Cliente) ((List) clientes).get(0);
if (cliente.getId() != null && !cliente.getId().equals("")) {
statusWizard.adicionarItemHint("C�digo:", cliente.getId()
.toString());
}
if (cliente.getNome() != null && !cliente.getNome().equals("")) {
statusWizard.adicionarItemHint("Nome:", cliente.getNome());
}
if (cliente.getCnpj() != null && !cliente.getCnpj().equals("")) {
statusWizard.adicionarItemHint("CNPJ:", cliente
.getCnpjFormatado());
} else if (cliente.getCpf() != null && !cliente.getCpf().equals("")) {
statusWizard.adicionarItemHint("CPF:", cliente
.getCpfFormatado());
}
Collection colecaoClienteCadastradoTarifaSocial = fachada.verificarClienteUsuarioCadastradoTarifaSocial(cliente.getId());
if (colecaoClienteCadastradoTarifaSocial != null && !colecaoClienteCadastradoTarifaSocial.isEmpty()) {
if (!fachada.verificarPermissaoAtualizarUsuarioTarifaSocial(usuarioLogado)) {
throw new ActionServletException("atencao.usuario.sem.permissao.atualizar.usuario.tarifa_social");
}
}
/**
* @author Hugo Leonardo
* @data 20/09/2010
* @crc 4763
* @analista Ana Cristina
*
* [UC0009] Manter Cliente
* [FS0008] - Verificar permiss�o especial para cliente de im�vel p�blico
*
*/
if(Util.verificarNaoVazio(codigoCliente)){
if( fachada.verificarExistenciaImovelPublico(cliente.getId())){
boolean possuiPermissaoAtualizarClienteImoveisPublicos =
fachada.verificarPermissaoEspecialAtiva(
PermissaoEspecial.ALTERAR_CLIENTE_PARA_IMOVEIS_PUBLICOS, usuarioLogado);
if(!possuiPermissaoAtualizarClienteImoveisPublicos){
throw new ActionServletException(
"atencao.nao_usuario_nao_possui_permissao_alterar_cliente");
}
}
}
// Manda o cliente na sess�o
sessao.setAttribute("clienteAtualizacao", cliente);
// Formato para a convers�o de datas
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
/******************************************************************************************/
/** C�digo para criar um actionForm totalmente novo - Esta foi a solu��o encontrada para **/
/** a passagem do inserir direto para o atualizar, fazendo as substitui��o dos dados do **/
/** form de mesmo nome corretamente, � preciso pegar o form pelo httpServletRequest no **/
/** exibir da primeira aba (neste caso ExibirAtualizarClienteNomeTipoAction) **/
/******************************************************************************************/
ModuleConfig module = actionMapping.getModuleConfig();
FormBeanConfig formBeanConfig = module
.findFormBeanConfig("ClienteActionForm");
DynaActionFormClass dynaClass = DynaActionFormClass
.createDynaActionFormClass(formBeanConfig);
DynaValidatorForm clienteActionForm = null;
try {
clienteActionForm = (DynaValidatorForm) dynaClass.newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
/******************************************************************************************/
clienteActionForm.set("codigoCliente", cliente.getId().toString());
clienteActionForm.set("nome", formatarResultado(cliente.getNome()));
clienteActionForm.set("nomeAbreviado", formatarResultado(cliente
.getNomeAbreviado()));
clienteActionForm.set("indicadorExibicaoNomeConta", formatarResultado(cliente.getIndicadorUsoNomeFantasiaConta() + ""));
clienteActionForm.set("email",
formatarResultado(cliente.getEmail()));
if(cliente.getDataVencimento() != null){
clienteActionForm.set("diaVencimento", cliente.getDataVencimento().toString());
}else{
clienteActionForm.set("diaVencimento", "");
}
clienteActionForm.set("indicadorPessoaFisicaJuridica", cliente.getClienteTipo().getIndicadorPessoaFisicaJuridica().toString());
clienteActionForm.set("tipoPessoa", new Short(""
+ cliente.getClienteTipo().getId()));
// Criado para compara��o
clienteActionForm.set("tipoPessoaAntes", new Short(""
+ cliente.getClienteTipo().getId()));
clienteActionForm.set("cpf", formatarResultado(""
+ cliente.getCpf()));
clienteActionForm
.set("rg", formatarResultado("" + cliente.getRg()));
if (cliente.getDataEmissaoRg() != null) {
clienteActionForm.set("dataEmissao", formatoData.format(cliente
.getDataEmissaoRg()));
} else {
clienteActionForm.set("dataEmissao", "");
}
clienteActionForm.set("idOrgaoExpedidor", formatarResultado(cliente
.getOrgaoExpedidorRg()));
clienteActionForm.set("idUnidadeFederacao",
formatarResultado(cliente.getUnidadeFederacao()));
if (cliente.getDataNascimento() != null) {
clienteActionForm.set("dataNascimento", formatoData
.format(cliente.getDataNascimento()));
} else {
clienteActionForm.set("dataNascimento", "");
}
clienteActionForm.set("idProfissao", formatarResultado(cliente
.getProfissao()));
clienteActionForm.set("idPessoaSexo", formatarResultado(cliente
.getPessoaSexo()));
clienteActionForm.set("nomeMae", formatarResultado(cliente.getNomeMae()));
if (cliente.getCnpj() != null) {
clienteActionForm.set("cnpj", cliente.getCnpj().toString());
}
clienteActionForm.set("idRamoAtividade", formatarResultado(cliente
.getRamoAtividade()));
if (cliente.getCliente() != null) {
clienteActionForm.set("codigoClienteResponsavel",
formatarResultado(cliente.getCliente().getId()
.toString()));
clienteActionForm.set("nomeClienteResponsavel",
formatarResultado(cliente.getCliente().getNome()));
}
if(cliente.getIndicadorAcaoCobranca() != null){
clienteActionForm.set("indicadorAcaoCobranca","" + cliente.getIndicadorAcaoCobranca());
}else{
clienteActionForm.set("indicadorAcaoCobranca","" + ConstantesSistema.INDICADOR_USO_ATIVO);
}
// Seta a cole��o de endere�os do usu�rio
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("logradouroCep");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("enderecoTipo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroInicial.logradouroTipo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroInicial.logradouroTitulo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroFinal.logradouroTipo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroFinal.logradouroTitulo");
Collection enderecosCliente = fachada.pesquisar(
filtroClienteEndereco, ClienteEndereco.class.getName());
Iterator iterator = null;
if (enderecosCliente != null) {
iterator = enderecosCliente.iterator();
// Percorrer a cole��o dos endere�os para setar no form qual o
// endere�o do cliente que
// foi selecionado como o de correspond�ncia
while (iterator.hasNext()) {
ClienteEndereco clienteEndereco = (ClienteEndereco) iterator
.next();
if(clienteEndereco.getLogradouroBairro()!=null)
if (clienteEndereco
.getIndicadorEnderecoCorrespondencia()
.equals(
ConstantesSistema.INDICADOR_ENDERECO_CORRESPONDENCIA)) {
clienteActionForm
.set(
"enderecoCorrespondenciaSelecao",
new Long(
obterTimestampIdObjeto(clienteEndereco)));
break;
}
}
sessao.setAttribute("colecaoEnderecos", enderecosCliente);
}
// Seta a cole��o de telefones do usu�rio
FiltroClienteFone filtroClienteFone = new FiltroClienteFone();
filtroClienteFone.adicionarParametro(new ParametroSimples(
FiltroClienteFone.CLIENTE_ID, cliente.getId()));
/*filtroClienteFone
.adicionarCaminhoParaCarregamentoEntidade("foneTipo.descricao");*/
filtroClienteFone.adicionarCaminhoParaCarregamentoEntidade("foneTipo");
Collection telefonesCliente = fachada.pesquisar(filtroClienteFone,
ClienteFone.class.getName());
if (telefonesCliente != null) {
iterator = telefonesCliente.iterator();
// Percorrer a cole��o dos telefones para setar no form qual o
// telefone do cliente que
// foi selecionado como o principal
while (iterator.hasNext()) {
ClienteFone clienteFone = (ClienteFone) iterator.next();
if (clienteFone != null) {
if (clienteFone.getIndicadorTelefonePadrao() != null
&& clienteFone
.getIndicadorTelefonePadrao()
.equals(
ConstantesSistema.INDICADOR_TELEFONE_PRINCIPAL)) {
clienteActionForm
.set(
"indicadorTelefonePadrao",
new Long(
obterTimestampIdObjeto(clienteFone)));
break;
}
}
}
}
// Verifica o indicador de uso
clienteActionForm.set("indicadorUso", cliente.getIndicadorUso()
.toString());
clienteActionForm.set("indicadorAcrescimos", cliente.getIndicadorAcrescimos()
.toString());
clienteActionForm.set("indicadorGeraFaturaAntecipada", cliente.getIndicadorGeraFaturaAntecipada().toString());
if (cliente.getDataVencimento() != null) {
clienteActionForm.set("indicadorVencimentoMesSeguinte", cliente.getIndicadorVencimentoMesSeguinte().toString());
}
if (cliente.getIndicadorPermiteNegativacao() != null){
if (cliente.getIndicadorPermiteNegativacao().equals(ConstantesSistema.SIM)){
clienteActionForm.set("indicadorPermiteNegativacao", ConstantesSistema.NAO.toString());
} else {
clienteActionForm.set("indicadorPermiteNegativacao", ConstantesSistema.SIM.toString());
}
}
// Seta a cole��o de telefones do usu�rio
sessao.setAttribute("colecaoClienteFone", telefonesCliente);
// Seta o form na sess�o
// sessao.setAttribute("ClienteActionForm", clienteActionForm);
// Manda o form para a primeira p�gina do processo para que depois
// ela seja colocada na sess�o
httpServletRequest.setAttribute("ClienteActionForm", clienteActionForm);
/**
* Autor: Paulo Diniz
* Data: 11/07/2011
* [RR2011061059]
* [UC0009] Manter Cliente
* [FS0013] Verificar permissão especial alterar cliente inativo
*/
if(cliente.getIndicadorUso() != null && cliente.getIndicadorUso().intValue() == 2){
sessao.setAttribute("desabilitarCampos", true);
}else{
sessao.setAttribute("desabilitarCampos", false);
}
}
if(httpServletRequest.getParameter("promais")!=null){
sessao.setAttribute("promais",httpServletRequest.getParameter("promais"));
sessao.setAttribute("idImovel",httpServletRequest.getParameter("idImovel"));
sessao.setAttribute("caminhoVoltarPromais", statusWizard.getCaminhoActionVoltarFiltro());
}
// devolve o mapeamento de retorno
return retorno;
}
/**
* < <Descri��o do m�todo>>
*
* @param parametro
* Descri��o do par�metro
* @return Descri��o do retorno
*/
private String formatarResultado(String parametro) {
if (parametro != null && !parametro.trim().equals("")
&& !parametro.trim().equals("null")) {
return parametro.trim();
} else {
return "";
}
}
/**
* < <Descri��o do m�todo>>
*
* @param parametro
* Descri��o do par�metro
* @return Descri��o do retorno
*/
private Integer formatarResultado(Object parametro) {
if (parametro != null) {
try {
return (Integer) parametro.getClass().getMethod("getId",
(Class[]) null).invoke(parametro, (Object[]) null);
} catch (SecurityException ex) {
return null;
} catch (NoSuchMethodException ex) {
return null;
} catch (InvocationTargetException ex) {
return null;
} catch (IllegalArgumentException ex) {
return null;
} catch (IllegalAccessException ex) {
return null;
}
} else {
return new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO);
}
}
}