package gcom.gui.cobranca.spcserasa;
import gcom.cadastro.CpfTipo;
import gcom.cadastro.FiltroCpfTipo;
import gcom.cadastro.sistemaparametro.FiltroSistemaParametro;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cobranca.NegativacaoCriterio;
import gcom.cobranca.NegativacaoCriterioCpfTipo;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.FiltroUsuario;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
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;
/**
* Esta classe tem por finalidade exibir para o usu�rio a tela que receber� os par�metros para realiza��o
* da inser��o de um Comando de Negativa��o (Aba n� 01 - Dados Gerais)
*
* @author Ana Maria
* @date 06/11/2007
*/
public class ExibirAtualizarComandoNegativacaoDadosGeraisAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("atualizarComandoNegativacaoDadosGerais");
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
AtualizarComandoNegativacaoPorCriterioActionForm form = (AtualizarComandoNegativacaoPorCriterioActionForm) actionForm;
if(form.getSimular().equals(ConstantesSistema.NAO_CONFIRMADA)){
httpServletRequest.setAttribute("habilitarExecutarSimulacao", "habilitarExecutarSimulacao");
}
if(httpServletRequest.getParameter("idComandoNegativacaoSimulado") != null){
Integer idComandoNegativacao = new Integer(httpServletRequest.getParameter("idComandoNegativacaoSimulado"));
NegativacaoCriterio negativacaoCriterio =
fachada.pesquisarComandoNegativacaoSimulado(idComandoNegativacao);
//[FS0027] Verificar sele��o de comando simulado
if (((Short)negativacaoCriterio.getNegativacaoComando().getIndicadorSimulacao()).equals(ConstantesSistema.NAO)){
throw new ActionServletException("atencao.comando_nao_simulacao");
}
if(negativacaoCriterio.getNegativacaoComando().getDataHoraRealizacao() == null){
throw new ActionServletException("atencao.simulacao_nao_realizada");
}
form.setIdComandoSimulado(idComandoNegativacao.toString());
form.setDescricaoComandoSimulado(negativacaoCriterio.getDescricaoTitulo());
}
//[SB0003]- Determinar Data Prevista para Execu��o do Comando
if(httpServletRequest.getParameter("determinarData") != null){
atualizaColecoesNaSessao(sessao, httpServletRequest);
if(form.getSimular().equals(ConstantesSistema.NAO_CONFIRMADA)){
Date dataRealizacaoComando = fachada.pesquisarUltimaDataRealizacaoComando(new Integer(form.getNegativadorId()),
new Integer(form.getSimular()));
if(dataRealizacaoComando == null){
dataRealizacaoComando = new Date();
}
//Pesquisar Sistema Parametro
FiltroSistemaParametro filtroSistemaParametro = new FiltroSistemaParametro();
Collection<SistemaParametro> collectionSistemaParametro = fachada
.pesquisar(filtroSistemaParametro,
SistemaParametro.class.getName());
SistemaParametro sistemaParametro = (SistemaParametro) collectionSistemaParametro
.iterator().next();
Short periodoRealizacao = sistemaParametro.getCodigoPeriodicidadeNegativacao();
if(periodoRealizacao.equals(SistemaParametro.CODIGO_PERIODICIDADE_NEGATIVACAO_SEMANAL)){
dataRealizacaoComando = Util.adicionarNumeroDiasDeUmaData(dataRealizacaoComando, 7);
}else if(periodoRealizacao.equals(SistemaParametro.CODIGO_PERIODICIDADE_NEGATIVACAO_QUINZENAL)){
dataRealizacaoComando = Util.adicionarNumeroDiasDeUmaData(dataRealizacaoComando, 15);
}else{
dataRealizacaoComando = Util.adicionarNumeroDiasDeUmaData(dataRealizacaoComando, 30);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(dataRealizacaoComando);
Integer diaSemana = calendar.get(Calendar.DAY_OF_WEEK);
Integer qtdSomarData = 7 - diaSemana;
if(qtdSomarData != 0){
dataRealizacaoComando = Util.adicionarNumeroDiasDeUmaData(dataRealizacaoComando, qtdSomarData);
}
form.setDataPrevista(Util.formatarData(dataRealizacaoComando));
}else{
form.setDataPrevista(Util.formatarData(new Date()));
}
}
//Pesquisar Tipo CPF
if(sessao.getAttribute("colecaoCPFTipo") == null){
FiltroCpfTipo filtroCpfTipo = new FiltroCpfTipo();
Collection cpfTipos = fachada.pesquisar(filtroCpfTipo,CpfTipo.class.getName());
sessao.setAttribute("colecaoCPFTipo", cpfTipos);
}
//Pesquisa Usuario
if(httpServletRequest.getParameter("pesquisarUsuario") != null){
atualizaColecoesNaSessao(sessao, httpServletRequest);
String usuario = form.getUsuario();
if(usuario != null && !usuario.equals("")){
FiltroUsuario filtroUsuario = new FiltroUsuario();
filtroUsuario.adicionarParametro(new ParametroSimples(FiltroUsuario.ID, usuario));
Collection colecaoUsuario = fachada.pesquisar(
filtroUsuario,Usuario.class.getName());
if (colecaoUsuario != null && !colecaoUsuario.isEmpty()) {
httpServletRequest.setAttribute("corUsuario", "valor");
form.setUsuario(""
+ ((Usuario) ((List) colecaoUsuario).get(0)).getId());
form.setNomeUsuario(""
+ ((Usuario) ((List) colecaoUsuario).get(0)).getNomeUsuario());
} else {
httpServletRequest.setAttribute("corUsuario","exception");
form.setUsuario(null);
form.setNomeUsuario(ConstantesSistema.USUARIO_INEXISTENTE);
}
}
}
//Adicionar Titularidade CPF/CNPJ da Negativa��o
if(httpServletRequest.getParameter("adicionarTitularidade") != null){
atualizaColecoesNaSessao(sessao, httpServletRequest);
if(form.getTitularidadeNegativacao()== null ||
form.getTitularidadeNegativacao().equals(""+ConstantesSistema.NUMERO_NAO_INFORMADO)){
throw new ActionServletException("atencao.campo.informado", null, "Titularidade do CPF/CNPJ da Negativa��o");
}
Collection<NegativacaoCriterioCpfTipo> colecaoNegativacaoCriterioCpfTipo = null;
if(sessao.getAttribute("colecaoNegativacaoCriterioCpfTipo") == null){
colecaoNegativacaoCriterioCpfTipo = new ArrayList<NegativacaoCriterioCpfTipo>();
}else{
colecaoNegativacaoCriterioCpfTipo = (Collection)sessao.getAttribute("colecaoNegativacaoCriterioCpfTipo");
}
NegativacaoCriterioCpfTipo negativacaoCriterioCpfTipo = new NegativacaoCriterioCpfTipo();
Integer idTitularidade = new Integer(form.getTitularidadeNegativacao());
//negativacaoCriterioCpfTipo.setId(idTitularidade);
FiltroCpfTipo filtroCpfTipo = new FiltroCpfTipo();
filtroCpfTipo.adicionarParametro(new ParametroSimples(FiltroCpfTipo.ID, idTitularidade));
Collection titularidades = fachada.pesquisar(filtroCpfTipo,
CpfTipo.class.getName());
if (titularidades != null && !titularidades.isEmpty()) {
CpfTipo cpfTipo = (CpfTipo) Util.retonarObjetoDeColecao(titularidades);
negativacaoCriterioCpfTipo.setCpfTipo(cpfTipo);
negativacaoCriterioCpfTipo.setIndicadorCoincidente(new Short("2"));
}
//[FS0013] Verificar Titularidade do CPF/CNPJ da Negativa��o j� existe na lista
if(colecaoNegativacaoCriterioCpfTipo.contains(negativacaoCriterioCpfTipo)){
throw new ActionServletException("atencao.titularidade_negativacao_ja_existe_lista");
}
form.setTitularidadeNegativacao(""+ConstantesSistema.NUMERO_NAO_INFORMADO);
colecaoNegativacaoCriterioCpfTipo.add(negativacaoCriterioCpfTipo);
sessao.setAttribute("colecaoNegativacaoCriterioCpfTipo", colecaoNegativacaoCriterioCpfTipo);
}
//Remover Titularidade CPF/CNPJ da Negativa��o
if(httpServletRequest.getParameter("idTitularidadeRemover") != null){
atualizaColecoesNaSessao(sessao, httpServletRequest);
Integer idTitularidadeRemover = new Integer(httpServletRequest.getParameter("idTitularidadeRemover"));
Collection colecaoNegativacaoCriterioCpfTipo = (Collection)sessao.getAttribute("colecaoNegativacaoCriterioCpfTipo");
if(colecaoNegativacaoCriterioCpfTipo != null && !colecaoNegativacaoCriterioCpfTipo.isEmpty()){
NegativacaoCriterioCpfTipo negativacaoCriterioCpfTipo = new NegativacaoCriterioCpfTipo();
FiltroCpfTipo filtroCpfTipo = new FiltroCpfTipo();
filtroCpfTipo.adicionarParametro(new ParametroSimples(FiltroCpfTipo.ID, idTitularidadeRemover));
Collection titularidades = fachada.pesquisar(filtroCpfTipo,CpfTipo.class.getName());
CpfTipo cpfTipo = (CpfTipo) Util.retonarObjetoDeColecao(titularidades);
negativacaoCriterioCpfTipo.setCpfTipo(cpfTipo);
colecaoNegativacaoCriterioCpfTipo.remove(negativacaoCriterioCpfTipo);
sessao.setAttribute("colecaoNegativacaoCriterioCpfTipo", colecaoNegativacaoCriterioCpfTipo);
}
}
return retorno;
}
private void atualizaColecoesNaSessao(HttpSession sessao,
HttpServletRequest httpServletRequest){
//colecaoNegativacaoCriterioCpfTipo
if (sessao.getAttribute("colecaoNegativacaoCriterioCpfTipo") != null
&& !sessao.getAttribute("colecaoNegativacaoCriterioCpfTipo").equals("")) {
Collection colecaoNegativacaoCriterioCpfTipo = (Collection) sessao
.getAttribute("colecaoNegativacaoCriterioCpfTipo");
// cria as vari�veis para recuperar os par�metros do request e jogar
// no objeto NegativacaoCriterioCpfTipo
String ordem = null;
String coincidente = null;
Iterator iteratorNegativacaoCriterioCpfTipo = colecaoNegativacaoCriterioCpfTipo.iterator();
while (iteratorNegativacaoCriterioCpfTipo.hasNext()) {
NegativacaoCriterioCpfTipo negativacaoCriterioCpfTipo =
(NegativacaoCriterioCpfTipo) iteratorNegativacaoCriterioCpfTipo.next();
Integer idTitularidade = negativacaoCriterioCpfTipo.getCpfTipo().getId();
ordem = (String) httpServletRequest.getParameter("ordem" + idTitularidade);
coincidente = (String) httpServletRequest.getParameter("coincidente" + idTitularidade);
if (ordem != null && !ordem.equals("")) {
negativacaoCriterioCpfTipo.setNumeroOrdemSelecao(new Short(ordem));
}
if(coincidente != null && !coincidente.equals("")){
negativacaoCriterioCpfTipo.setIndicadorCoincidente(new Short("1"));
}else{
negativacaoCriterioCpfTipo.setIndicadorCoincidente(new Short("2"));
}
}
}
}
}