package gcom.gui.portal;
import gcom.cadastro.EmailClienteAlterado;
import gcom.cadastro.EnvioEmail;
import gcom.cadastro.FiltroEmailClienteAlterado;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.imovel.ImovelContaEnvio;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.gui.GcomAction;
import gcom.util.Util;
import gcom.util.email.ErroEmailException;
import gcom.util.email.ServicosEmail;
import gcom.util.filtro.ParametroSimples;
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.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
*
* [RM2923] Inserir Cadastro Email Cliente - Loja Virtual da Compesa
*
* @author Magno Gouveia
* @date 19/05/2011
*
*/
public class InserirCadastroEmailClientePortalAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("validarDados");
Fachada fachada = Fachada.getInstancia();
InserirCadastroEmailClientePortalActionForm form = (InserirCadastroEmailClientePortalActionForm) actionForm;
EmailClienteAlterado emailClienteAlterado = new EmailClienteAlterado();
httpServletRequest.setAttribute("voltarServicos", true);
//Acessando direto pelo link, sem ser pelo link do email
if (httpServletRequest.getParameter("confirmar") == null
|| !httpServletRequest.getParameter("confirmar").equals("sim")) {
// [FS0008] Verificar se os dados foram alterados
if (!this.verificarAlteracaoDados(form)) {
httpServletRequest.setAttribute("naoHouveAlteracao", true);
return retorno;
// throw new ActionServletException("atencao.nao_houve_alteracao");
}
//Valida se foram alterados mais de 5 digitos no nome do cliente
if (form.getNomeCliente() != null
&& !form.getNomeCliente().equals("")
&& form.getNomeClienteAux() != null && !form.getNomeClienteAux().equals("")){
if (!form.getNomeCliente().equals(form.getNomeClienteAux())) {
Integer dif = StringUtils.getLevenshteinDistance(form.getNomeCliente(), form.getNomeClienteAux());
if (dif > 5) {
httpServletRequest.setAttribute("alteracaoMaximaCaracteres", true);
return retorno;
// throw new ActionServletException("atencao.alteracao.maxima.caracteres");
}
}
}
//Valida o CPF/CNPJ do Cliente
if (form.getCpfCnpjCliente() != null
&& !form.getCpfCnpjCliente().equals("")) {
if (form.isIndicadorCpf()) {
if (form.getCpfCnpjCliente().length() < 11) {
httpServletRequest.setAttribute("clienteCpfCnpjInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
Integer count = 0;
for (int i = 0; i < 10; i++) {
char cpf = form.getCpfCnpjCliente().charAt(i);
char cpfAux = form.getCpfCnpjCliente().charAt(i+1);
if (cpf == cpfAux) {
count = count + 1;
}
}
if (count >= 10) {
httpServletRequest.setAttribute("clienteCpfCnpjInvalido", true);
return retorno;
//throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
//� um CPF
boolean valido = gcom.util.Util.validacaoCPF(form.getCpfCnpjCliente());
form.setIndicadorCpf(true);
if (!valido) {
httpServletRequest.setAttribute("clienteCpfCnpjInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
} else {
//Verifica se o cpf ja esta associado a outro cliente
String cpf = form.getCpfCnpjCliente();
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro( new ParametroSimples( FiltroCliente.CPF, cpf));
Collection clientes = fachada.pesquisar(filtroCliente, Cliente.class.getName());
if (clientes != null && !clientes.isEmpty()) {
Cliente cliente = (Cliente) Util.retonarObjetoDeColecao(clientes);
if (clientes.size() >= 1
&& !(cliente.getId().equals(form.getIdCliente()))) {
httpServletRequest.setAttribute("clienteCpfCnpjJaExiste", true);
return retorno;
// throw new ActionServletException("atencao.ja.existe.cliente.com.cpfCnpj");
}
}
}
} else if (form.isIndicadorCnpj()) {
if (form.getCpfCnpjCliente().length() < 14) {
httpServletRequest.setAttribute("clienteCpfCnpjInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
//� um CNPJ
Integer count = 0;
for (int i = 0; i < 13; i++) {
char cpf = form.getCpfCnpjCliente().charAt(i);
char cpfAux = form.getCpfCnpjCliente().charAt(i+1);
if (cpf == cpfAux) {
count++;
}
}
if (count >= 13) {
httpServletRequest.setAttribute("clienteCpfCnpjInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
boolean valido = gcom.util.Util.validacaoCNPJ(form.getCpfCnpjCliente());
form.setIndicadorCnpj(true);
if (!valido) {
httpServletRequest.setAttribute("clienteCpfCnpjInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
} else {
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro( new ParametroSimples( FiltroCliente.CNPJ, form.getCpfCnpjCliente()));
Collection clientes = fachada.pesquisar(filtroCliente, Cliente.class.getName());
if (clientes != null && !clientes.isEmpty()) {
Cliente cliente = (Cliente) Util.retonarObjetoDeColecao(clientes);
if (clientes.size() >= 1
&& !(cliente.getId().equals(form.getIdCliente()))) {
httpServletRequest.setAttribute("clienteCpfCnpjJaExiste", true);
return retorno;
// throw new ActionServletException("atencao.ja.existe.cliente.com.cpfCnpj");
}
}
}
} else {
httpServletRequest.setAttribute("clienteCpfCnpjInvalido", true);
return retorno;
//throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
} else {
httpServletRequest.setAttribute("cpfCnpjObrigatorio", true);
return retorno;
// throw new ActionServletException("atencao.cpf_cpnf_obrigatorio");
}
//Valida o CPF do Solicitante
if (form.getCpfSolicitante() != null
&& !form.getCpfSolicitante().equals("")) {
if (form.getCpfSolicitante().length() == 11) {
//� um CPF
boolean valido = gcom.util.Util.validacaoCPF(form.getCpfSolicitante());
if (!valido) {
httpServletRequest.setAttribute("clienteCpfSolicitanteInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cliente_cpf_solicitante_invalido");
}
} else {
httpServletRequest.setAttribute("clienteCpfSolicitanteInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cliente_cpf_solicitante_invalido");
}
} else {
httpServletRequest.setAttribute("clienteCpfSolicitanteInvalido", true);
return retorno;
// throw new ActionServletException("atencao.cpf_solicitante_obrigatorio");
}
//Valida o email
if (form.getEmail() != null && !form.getEmail().equals("")) {
String email = form.getEmail();
if (!email.contains("@") || email.contains(" ")) {
httpServletRequest.setAttribute("emailInvalido", true);
return retorno;
// throw new ActionServletException("atencao.email.invalido");
}
} else {
httpServletRequest.setAttribute("usuarioEmailNulo", true);
return retorno;
// throw new ActionServletException("atencao.usuario.email.nula");
}
//Preparar dados para armazenar na tabela
Cliente idCliente = new Cliente();
idCliente.setId(form.getIdCliente());
//Dados Anteriores
String nomeClienteAnterior = form.getNomeClienteAux().toUpperCase();
String cpfAnterior = "";
if (form.isIndicadorCpf()) {
cpfAnterior = form.getCpfCnpjClienteAux();
}
String cnpjAnterior = "";
if (form.isIndicadorCnpj()) {
cnpjAnterior = form.getCpfCnpjClienteAux();
}
String emailAnterior = form.getEmailAux().toUpperCase();
String nomeSolicitante = form.getNomeSolicitante().toUpperCase();
String cpfSolicitante = form.getCpfSolicitante();
String nomeClienteAtual = form.getNomeCliente().toUpperCase();
String cpfClienteAtual = "";
if (form.isIndicadorCpf()) {
cpfClienteAtual = form.getCpfCnpjCliente();
}
String cnpjClienteAtual = "";
if (form.isIndicadorCnpj()) {
cnpjClienteAtual = form.getCpfCnpjCliente();
}
if (httpServletRequest.getParameter("possuiDocumento") != null
&& (!httpServletRequest.getParameter("possuiDocumento").equals("true") || httpServletRequest.getParameter("possuiDocumento").equals("false"))) {
if (form.getConfirmarCpfCnpjCliente() == null
|| !form.getConfirmarCpfCnpjCliente().equals("confirmado")) {
httpServletRequest.setAttribute("necessarioConfirmarCpfCnpjCliente", true);
return retorno;
// throw new ActionServletException("atencao.necessario.confirmar.cpfCnpj.cliente");
}
}
String emailAtual = form.getEmail();
emailClienteAlterado = new EmailClienteAlterado(idCliente, nomeClienteAnterior,
cpfAnterior, cnpjAnterior, emailAnterior, nomeSolicitante, cpfSolicitante, nomeClienteAtual,
cpfClienteAtual, cnpjClienteAtual, emailAtual, new Date());
//Seta o telefone para contato se o mesmo estiver preenchido
if (form.getTelefoneContato() != null && !form.getTelefoneContato().equals("")) {
String telefone = form.getTelefoneContato().trim();
telefone = telefone.replace("(", "");
telefone = telefone.replace(")", "");
telefone = telefone.replace("-", "");
telefone = telefone.replace(" ", "");
emailClienteAlterado.setTelefoneContato(Util.converterStringParaInteger(telefone));
}
emailClienteAlterado.setUltimaAlteracao(new Date());
if (httpServletRequest.getParameter("enviarEmail") == null
|| !httpServletRequest.getParameter("enviarEmail").equals("sim")) {
httpServletRequest.setAttribute("enviarConfirmacao", "OK");
}
if (httpServletRequest.getParameter("enviarEmail") != null
&& httpServletRequest.getParameter("enviarEmail").equals("sim")) {
retorno = actionMapping.findForward("emailCadastradoComSucesso");
Integer idIncluido = (Integer)fachada.inserir(emailClienteAlterado);
EnvioEmail envioEmail = fachada.pesquisarEnvioEmail(EnvioEmail.INSERIR_CADASTRO_EMAIL_CLIENTE);
String emailRemetente = envioEmail.getEmailRemetente();
String tituloMensagem = "Cadastramento de Email";
String emailReceptor = form.getEmail();
String mensagem = envioEmail.getCorpoMensagem();
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
String urlAcessoInternet = sistemaParametro.getUrlAcessoInternet();
String url = urlAcessoInternet + "/inserirCadastroEmailClientePortalAction.do?id=" + idIncluido
+ "&confirmar=sim&idImovel=" + form.getMatricula();
mensagem = mensagem
+ " - Voc� acessou o site da Compesa para cadastrar seu email e/ou alterar os dados cadastrais ? Caso positivo clique no link abaixo: \n \n \n"
+ url
+ "\n\n\n Esse � um e-mail autom�tico. N�o � necess�rio respond�-lo.";
httpServletRequest.setAttribute("desabilitaMenu",true);
try {
ServicosEmail.enviarMensagem(emailRemetente, emailReceptor, tituloMensagem, mensagem);
httpServletRequest.setAttribute("emailCadastradoComSucesso", true);
httpServletRequest.setAttribute("respostaCliente", "Voc� receber� um e-mail para confirma��o dos dados alterados.");
} catch (ErroEmailException erroEnviarEmail) {
erroEnviarEmail.printStackTrace();
}
}
}
//Quando o usu�rio clicar no link enviado por email
if (httpServletRequest.getParameter("confirmar") != null
&& httpServletRequest.getParameter("confirmar").equals("sim")) {
HttpSession sessao = httpServletRequest.getSession(false);
if (httpServletRequest.getParameter("id") != null) {
Integer idEmailConfirmar = Util.converterStringParaInteger(httpServletRequest.getParameter("id"));
FiltroEmailClienteAlterado filtroEmailCliente = new FiltroEmailClienteAlterado();
filtroEmailCliente.adicionarParametro(new ParametroSimples(FiltroEmailClienteAlterado.ID, idEmailConfirmar));
Collection dadosCliente = fachada.pesquisar(filtroEmailCliente, EmailClienteAlterado.class.getName());
if (dadosCliente != null && !dadosCliente.isEmpty()) {
EmailClienteAlterado dadoCliente = (EmailClienteAlterado) gcom.util.Util.retonarObjetoDeColecao(dadosCliente);
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.ID, dadoCliente.getIdCliente()));
Collection clientes = fachada.pesquisar(filtroCliente, Cliente.class.getName());
if (clientes != null && !clientes.isEmpty()) {
Cliente cliente = (Cliente) gcom.util.Util.retonarObjetoDeColecao(clientes);
cliente.setNome(dadoCliente.getNomeClienteAtual());
cliente.setCpf(dadoCliente.getCpfAtual());
cliente.setCnpj(dadoCliente.getCnpjAtual());
cliente.setEmail(dadoCliente.getEmailAtual());
//Atualiza os dados do cliente que foram alterados
fachada.atualizar(cliente);
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID,httpServletRequest.getParameter("idImovel")));
Collection imoveis = fachada.pesquisar(filtroImovel, Imovel.class.getName());
if (imoveis != null && !imoveis.isEmpty()) {
ImovelContaEnvio imovelContaEnvio = new ImovelContaEnvio();
imovelContaEnvio.setId(ImovelContaEnvio.ENVIAR_PARA_IMOVEL_E_PARA_EMAIL);
Imovel imovel = (Imovel) Util.retonarObjetoDeColecao(imoveis);
imovel.setImovelContaEnvio(imovelContaEnvio);
fachada.atualizar(imovel);
}
//Atualiza a hr da confirmacao e a ultima alteracao
dadoCliente.setConfirmacaoOnline(new Date());
dadoCliente.setUltimaAlteracao(new Date());
fachada.atualizar(dadoCliente);
httpServletRequest.setAttribute("desabilitaMenu",true);
String mensagemSucesso = "Os dados do cliente "
+ cliente.getNome().toUpperCase()
+ " foram atualizados com sucesso.";
sessao.setAttribute("mensagemSucesso", mensagemSucesso);
}
}
}
}
return retorno;
}
private boolean verificarAlteracaoDados(InserirCadastroEmailClientePortalActionForm form) {
if (form.getNomeCliente() != null && form.getNomeClienteAux() != null
&& !form.getNomeCliente().equals(form.getNomeClienteAux()))
return true;
if (form.getCpfCnpjCliente() != null
&& form.getCpfCnpjClienteAux() != null
&& !form.getCpfCnpjCliente().equals(form.getCpfCnpjClienteAux()))
return true;
if (form.getEmail() != null && form.getEmailAux() != null
&& !form.getEmail().equals(form.getEmailAux()))
return true;
if (form.getNomeCliente() != null && form.getNomeClienteAux() == null)
return true;
if (form.getCpfCnpjCliente() != null
&& form.getCpfCnpjClienteAux() == null)
return true;
if (form.getEmail() != null && form.getEmailAux() == null)
return true;
return false;
}
}