package gcom.gui.cadastro.cliente;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteTipo;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.filtro.ParametroSimples;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
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.validator.DynaValidatorForm;
/**
* Description of the Class
*
* @author Rodrigo
*/
public class AtualizarClientePessoaAction 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) {
// localiza o action no objeto actionmapping
ActionForward retorno = actionMapping
.findForward("gerenciadorProcesso");
// Pega o actionform da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
DynaValidatorForm form = (DynaValidatorForm) sessao
.getAttribute("ClienteActionForm");
Fachada fachada = Fachada.getInstancia();
// Verifica se o usu�rio informou o CPF/RG - CNPJ
String cpf = (String) form.get("cpf");
String rg = (String) form.get("rg");
String cnpj = (String) form.get("cnpj");
// Pega o cliente que est� sendo atualizado da sess�o
Cliente clienteAtualizacao = (Cliente) sessao
.getAttribute("clienteAtualizacao");
// O usu�rio � pessoa f�sica
if (cpf != null && !cpf.trim().equalsIgnoreCase(""))
// && clienteAtualizacao.getCpf() != null
{
boolean igual = true;
Integer i = 0;
// Integer tam = cpf.length();
//
// while (i < tam - 1) {
// if ((cpf.charAt(i)) == (cpf.charAt(i + 1))) {
// i = i + 1;
// } else {
// igual = false;
// }
// i = i + 1;
// }
Integer tam = cpf.length() - 1;
while ( i < tam ) {
if ( (cpf.charAt(i)) != (cpf.charAt(i + 1)) ){
igual = false;
break;
}
i++;
}
if (igual) {
throw new ActionServletException("atencao.cpf_invalido");
}
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.CPF, cpf));
Collection colecaoClienteComCpf = fachada.pesquisar(filtroCliente,
Cliente.class.getName());
Cliente clienteComCpf = null;
if (clienteAtualizacao.getCpf() != null) {
if (!clienteAtualizacao.getCpf().trim().equalsIgnoreCase(cpf)
&& !colecaoClienteComCpf.isEmpty()) {
clienteComCpf = (Cliente) colecaoClienteComCpf.iterator()
.next();
throw new ActionServletException(
"atencao.cpf.cliente.ja_cadastrado", null, ""
+ clienteComCpf.getId());
}
} else {
// Alterado por R�mulo Aur�lio
// Verificacao para qdo o cliente informado incialmente nao
// possua cpf e na hora da atualiza��o queira inserir um cpf ja
// existente na base
if (!colecaoClienteComCpf.isEmpty()) {
clienteComCpf = (Cliente) colecaoClienteComCpf.iterator()
.next();
throw new ActionServletException(
"atencao.cpf.cliente.ja_cadastrado", null, ""
+ clienteComCpf.getId());
}
}
// fim
}
if (rg != null && !rg.trim().equalsIgnoreCase("")) {
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.RG, rg));
Collection colecaoClienteComRg = fachada.pesquisar(filtroCliente,
Cliente.class.getName());
if (clienteAtualizacao.getRg() != null
&& !clienteAtualizacao.getRg().trim().equalsIgnoreCase(rg)
&& !colecaoClienteComRg.isEmpty()) {
Cliente clienteComRg = (Cliente) colecaoClienteComRg.iterator()
.next();
throw new ActionServletException(
"atencao.rg.cliente.ja_cadastrado", null, ""
+ clienteComRg.getId());
}
}
// O usu�rio � pessoa jur�dica
if (cnpj != null && !cnpj.trim().equalsIgnoreCase("")) {
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.CNPJ, cnpj));
Collection colecaoClienteComCnpj = fachada.pesquisar(filtroCliente,
Cliente.class.getName());
if (clienteAtualizacao.getCnpj() != null
&& !clienteAtualizacao.getCnpj().trim().equalsIgnoreCase(
cnpj) && !colecaoClienteComCnpj.isEmpty()) {
Cliente clienteComCnpj = (Cliente) colecaoClienteComCnpj
.iterator().next();
throw new ActionServletException(
"atencao.cnpj.cliente.ja_cadastrado", null, ""
+ clienteComCnpj.getId());
}
}
// Pega o codigo do cliente(que vem de pessoa jur�dica)
String codigoClienteResponsavel = (String) form
.get("codigoClienteResponsavel");
// Verificar se a data de emissao do rg � menor que a data atual do
// sistema
String dataEmissaoRg = (String) form.get("dataEmissao");
if (dataEmissaoRg != null && !dataEmissaoRg.trim().equals("")) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
try {
if (!verificarDataMenorQueDataCorrente(dateFormat
.parse(dataEmissaoRg))) {
throw new ActionServletException(
"atencao.data_menor_que_atual", null,
"emiss�o do RG");
}
} catch (ParseException ex) {
throw new ActionServletException("erro.sistema");
}
}
// Verificar se a data de nascimento � menor que a data atual do sistema
String dataNascimento = (String) form.get("dataNascimento");
if (dataNascimento != null && !dataNascimento.trim().equals("")) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
try {
if (!verificarDataMenorQueDataCorrente(dateFormat
.parse(dataNascimento))) {
throw new ActionServletException(
"atencao.data_menor_que_atual", null, "nascimento");
}
} catch (ParseException ex) {
throw new ActionServletException("erro.sistema");
}
}
// Verificar se a data de nascimento � maior que a data de emiss�o de rg
if (dataNascimento != null && !dataNascimento.trim().equals("")
&& dataEmissaoRg != null && !dataEmissaoRg.trim().equals("")) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
try {
if (dateFormat.parse(dataNascimento).after(
dateFormat.parse(dataEmissaoRg))) {
throw new ActionServletException(
"atencao.data_nascimento_maior_que_data_emissao");
}
} catch (ParseException ex) {
throw new ActionServletException("erro.sistema");
}
}
// Verifica o c�digo se ele estiver presente
if (codigoClienteResponsavel != null
&& !codigoClienteResponsavel.trim().equals("")) {
FiltroCliente filtro = new FiltroCliente();
filtro.adicionarParametro(new ParametroSimples(FiltroCliente.ID,
codigoClienteResponsavel));
filtro.adicionarParametro(new ParametroSimples(
FiltroCliente.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
filtro.adicionarCaminhoParaCarregamentoEntidade("clienteTipo");
// Pesquisa o c�digo para verificar a exist�ncia dele
Collection clienteEncontrado = fachada.pesquisar(filtro,
Cliente.class.getName());
// Se o c�digo n�o existir ent�o o usu�rio passou um c�digo que n�o
// foi pesquisado na p�gina
if (clienteEncontrado.isEmpty()) {
// Mostra o erro
throw new ActionServletException(
"atencao.cliente.responsavel.inexitente");
}
// O cliente foi encontrado
Cliente encontrado = (Cliente) ((List) clienteEncontrado).get(0);
if (encontrado.getClienteTipo().getIndicadorPessoaFisicaJuridica()
.equals(ClienteTipo.INDICADOR_PESSOA_FISICA)) {
// O usu�rio digitou uma pessoa f�sica
// limpa a sele��o do usu�rio do form
throw new ActionServletException(
"atencao.responsavel.pessoa_juridica");
}
// Verifica se o c�digo do Cliente Respons�vel Superior � o mesmo
// c�digo do cliente
// que est� sendo atualizado
if ((new Integer(codigoClienteResponsavel))
.equals(clienteAtualizacao.getId())) {
throw new ActionServletException(
"atencao.cliente_responsavel_superior_nao_pode_ser_proprio_cliente");
}
}
return retorno;
}
}