package gcom.gui.cadastro;
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.ActionServletException;
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 org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
*
* [UC1036] Inserir Cadastro Email Cliente
*
* @author Fernando Fontelles
* @Date 07/07/2010
*
*/
public class InserirCadastroEmailClienteAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("validarDados");
//HttpSession sessao = httpServletRequest.getSession(false);
Fachada fachada = Fachada.getInstancia();
InserirCadastroEmailClienteActionForm form =
(InserirCadastroEmailClienteActionForm) actionForm;
EmailClienteAlterado emailClienteAlterado = new EmailClienteAlterado();
//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
boolean houveAlteracao = this.verificarAlteracaoDados(form);
if(!houveAlteracao){
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 difTamanho = form.getNomeCliente().length() - form.getNomeClienteAux().length();
//Integer diferenca = Math.abs(difTamanho);
Integer dif = StringUtils.getLevenshteinDistance(
form.getNomeCliente(), form.getNomeClienteAux());
if ( dif > 5 ){
throw new ActionServletException("atencao.alteracao.maxima.caracteres");
}
}
}
//Valida o CPF/CNPJ do Cliente
if ( form.getCpfCnpjCliente() != null && !form.getCpfCnpjCliente().equals("")){
// if ( form.getCpfCnpjCliente().length() == 11 ){
if ( form.isIndicadorCpf() ){
if ( form.getCpfCnpjCliente().length() < 11 ){
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 ){
throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
//� um CPF
boolean valido = gcom.util.Util.validacaoCPF(form.getCpfCnpjCliente());
form.setIndicadorCpf(true);
if ( !valido ){
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())) ){
throw new ActionServletException("atencao.ja.existe.cliente.com.cpfCnpj");
}
}
}
// }else if ( form.getCpfCnpjCliente().length() == 14 ){
}else if ( form.isIndicadorCnpj() ){
if ( form.getCpfCnpjCliente().length() < 14){
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 = count + 1;
}
}
if ( count >= 13 ){
throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
boolean valido = gcom.util.Util.validacaoCNPJ(form.getCpfCnpjCliente());
form.setIndicadorCnpj(true);
if ( !valido ){
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()) ) ){
throw new ActionServletException("atencao.ja.existe.cliente.com.cpfCnpj");
}
}
}
}else{
throw new ActionServletException("atencao.cliente_cpf_cnpj_invalido");
}
}else {
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 ){
throw new ActionServletException("atencao.cliente_cpf_solicitante_invalido");
}
}else{
throw new ActionServletException("atencao.cliente_cpf_solicitante_invalido");
}
}else {
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(" ")){
throw new ActionServletException("atencao.email.invalido");
}
}else{
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();
}
// Valida se os botoes confirmar foram acionados
if ( form.getConfirmarNomeCliente() == null || !form.getConfirmarNomeCliente().equals("confirmado") ){
throw new ActionServletException("atencao.necessario.confirmar.nome.cliente");
}
if ( httpServletRequest.getParameter("possuiDocumento") != null &&
(!httpServletRequest.getParameter("possuiDocumento").equals("true")
|| httpServletRequest.getParameter("possuiDocumento").equals("false"))){
if( form.getConfirmarCpfCnpjCliente() == null ||
!form.getConfirmarCpfCnpjCliente().equals("confirmado") ){
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("") ){
Integer telefone = Util.converterStringParaInteger(form.getTelefoneContato());
emailClienteAlterado.setTelefoneContato(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("telaSucesso");
Integer idIncluido = (Integer)fachada.inserir(emailClienteAlterado);
//Envia email para o cliente com link da confirma��o
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 urlAcessoInternet = "http://localhost:8080/gsan";
String url = urlAcessoInternet + "/inserirCadastroEmailClienteAction.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);
String mensagemSucesso = "Voc� receber� um e-mail para confirma��o dos dados alterados.";
montarPaginaSucesso(httpServletRequest, mensagemSucesso,
"Alterar outro email de cliente.",
"exibirInserirCadastroEmailClienteAction.do?voltar=sim");
} 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") ){
if ( httpServletRequest.getParameter("id") != null ){
retorno = actionMapping.findForward("telaSucesso");
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() ){
Imovel imovel = (Imovel) Util.retonarObjetoDeColecao(imoveis);
ImovelContaEnvio imovelContaEnvio = new ImovelContaEnvio();
imovelContaEnvio.setId(ImovelContaEnvio.ENVIAR_PARA_IMOVEL_E_PARA_EMAIL);
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.";
montarPaginaSucesso(httpServletRequest, mensagemSucesso,
"Alterar outro email de cliente.",
"exibirInserirCadastroEmailClienteAction.do?voltar=sim");
}
}
}
}
return retorno;
}
private boolean verificarAlteracaoDados(InserirCadastroEmailClienteActionForm 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;
}
}