private void validarDadosDebito(
      AtualizarComandoNegativacaoPorCriterioActionForm form, Fachada fachada) {
    Date dataAtual = new Date();
    Integer referenciaDataAtual = Util.getAnoMesComoInteger(dataAtual);

    // Período de Referência do Débito
    if (form.getReferenciaInicial() != null
        && !form.getReferenciaInicial().equals("")
        && form.getReferenciaFinal() != null
        && !form.getReferenciaFinal().equals("")) {
      Integer referenciaInicial =
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaInicial());
      Integer referenciaFinal = Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaFinal());
      if (!Util.validarMesAno(form.getReferenciaInicial())
          || !Util.validarMesAno(form.getReferenciaFinal())) {
        throw new ActionServletException(
            "atencao.adicionar_debito_ano_mes_referencia_invalido", null, "do débito");
      } else if (referenciaInicial > referenciaFinal) {
        throw new ActionServletException("atencao.referencia.final.menor.referencia.inicial");
      } else if (referenciaDataAtual < referenciaInicial) {
        throw new ActionServletException("atencao.referencia.posterior");
      } else if (referenciaDataAtual < referenciaFinal) {
        throw new ActionServletException("atencao.referencia.posterior");
      }
    }

    FiltroSistemaParametro filtroSistemaParametro = new FiltroSistemaParametro();
    Collection<SistemaParametro> collectionSistemaParametro =
        fachada.pesquisar(filtroSistemaParametro, SistemaParametro.class.getName());
    SistemaParametro sistemaParametro =
        (SistemaParametro) collectionSistemaParametro.iterator().next();

    // Período de referência do débito
    Integer referenciaMinima =
        Util.subtrairAnoAnoMesReferencia(sistemaParametro.getAnoMesArrecadacao(), 5);

    if (form.getReferenciaInicial() != null && !form.getReferenciaInicial().equals("")) {
      Integer referenciaDebInicialInformado =
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaInicial());
      if (referenciaDebInicialInformado < referenciaMinima) {
        throw new ActionServletException("atencao.periodo_referencia_debito_minimo");
      }
    }

    if (form.getReferenciaFinal() != null && !form.getReferenciaFinal().equals("")) {
      Integer referenciaDebFinalInformado =
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaFinal());
      if (referenciaDebFinalInformado < referenciaMinima) {
        throw new ActionServletException("atencao.periodo_referencia_debito_minimo");
      }
    }

    // Período de vencimento do débito
    Integer numeroDiasVencimentoCobranca =
        new Integer(sistemaParametro.getNumeroDiasVencimentoCobranca());
    Date dataMinima =
        Util.subtrairNumeroAnosDeUmaData(
            Util.subtrairNumeroDiasDeUmaData(new Date(), numeroDiasVencimentoCobranca), -5);

    if (form.getDataVencimentoInicial() != null && !form.getDataVencimentoInicial().equals("")) {
      if (Util.validarDiaMesAno(form.getDataVencimentoInicial())) {
        throw new ActionServletException("atencao.datavencimentodebinicial.invalida");
      }
      Date vencimentoDebInicialInformado =
          Util.converteStringParaDate(form.getDataVencimentoInicial());
      if (Util.compararData(vencimentoDebInicialInformado, dataAtual) == 1) {
        throw new ActionServletException(
            "atencao.data_inicial.posterior.hoje", null, Util.formatarData(new Date()));
      }
      if (Util.compararData(vencimentoDebInicialInformado, dataMinima) == -1) {
        throw new ActionServletException("atencao.periodo_vencimento_debito_minimo");
      }
    }

    if (form.getDataVencimentoFinal() != null && !form.getDataVencimentoFinal().equals("")) {
      Date vencimentoDebFinalInformado = Util.converteStringParaDate(form.getDataVencimentoFinal());
      if (Util.validarDiaMesAno(form.getDataVencimentoFinal())) {
        throw new ActionServletException("atencao.datavencimentodebfinal.invalida");
      } else if (Util.compararData(vencimentoDebFinalInformado, dataAtual) == 1) {
        throw new ActionServletException(
            "atencao.data_final.posterior.hoje", null, Util.formatarData(new Date()));
      } else if (Util.compararData(vencimentoDebFinalInformado, dataMinima) == -1) {
        throw new ActionServletException("atencao.periodo_vencimento_debito_minimo");
      }
    }

    if (form.getDataVencimentoInicial() != null
        && !form.getDataVencimentoInicial().equals("")
        && form.getDataVencimentoFinal() != null
        && !form.getDataVencimentoFinal().equals("")) {
      Date vencimentoDebInicial = Util.converteStringParaDate(form.getDataVencimentoInicial());
      Date vencimentoDebFinal = Util.converteStringParaDate(form.getDataVencimentoFinal());

      if (Util.compararData(vencimentoDebInicial, vencimentoDebFinal) == 1) {
        throw new ActionServletException( // Data Final do Período é
            // anterior à Data Inicial
            // do Período
            "atencao.data_final_periodo.anterior.data_inicial_periodo");
      }
    }

    // Valor do Débito
    if (form.getValorDebitoInicial() != null
        && !form.getValorDebitoInicial().equals("")
        && form.getValorDebitoFinal() != null
        && !form.getValorDebitoFinal().equals("")) {
      BigDecimal valorDebInicial =
          Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoInicial());
      BigDecimal valorDebFinal = Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoFinal());
      if (valorDebInicial.compareTo(valorDebFinal) == 1) {
        throw new ActionServletException("atencao.debito_inicial_maior_debito_final");
      }
    }

    // Número de Contas
    if (form.getNumeroContasInicial() != null
        && !form.getNumeroContasInicial().equals("")
        && form.getNumeroContasFinal() != null
        && !form.getNumeroContasFinal().equals("")) {
      Integer contaInicial = new Integer(form.getNumeroContasInicial());
      Integer contaFinal = new Integer(form.getNumeroContasFinal());
      if (contaInicial.compareTo(contaFinal) == 1) {
        throw new ActionServletException("atencao.numero_conta_inicial_maior_final");
      }
    }

    // Parcela em Atraso
    if ((form.getParcelaAtraso() != null && form.getParcelaAtraso().equals("1"))
        && (form.getDiasAtrasoParcelamento() == null
            || form.getDiasAtrasoParcelamento().equals(""))) {
      throw new ActionServletException("atencao.informar_dias_atraso_parcelamento");
    }

    // Recebeu Carta de Parcelamento em Atraso
    if ((form.getCartaParcelamentoAtraso() != null && form.getCartaParcelamentoAtraso().equals("1"))
        && (form.getDiasAtrasoRecebimentoCarta() == null
            || form.getDiasAtrasoRecebimentoCarta().equals(""))) {
      throw new ActionServletException("atencao.informar_dias_atraso_parcelamento");
    }
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno = actionMapping.findForward("telaSucesso");

    AtualizarComandoNegativacaoPorCriterioActionForm form =
        (AtualizarComandoNegativacaoPorCriterioActionForm) actionForm;

    HttpSession sessao = httpServletRequest.getSession(false);

    Fachada fachada = Fachada.getInstancia();

    InserirComandoNegativacaoPorCriterioHelper helper =
        new InserirComandoNegativacaoPorCriterioHelper();

    /*
     * Validação Aba 2
     */
    validarDadosDebito(form, fachada);

    /*
     * Validação Aba 3
     */
    validarDadosImovel(form, fachada);

    /*
     * Validação Aba 4
     */
    validarDadosLocalizacao(form, fachada);

    // [SB0004] - Incluir Comando Negativação por Critério
    // Dados Negativação Comando
    NegativacaoComando negativacaoComando = new NegativacaoComando();
    negativacaoComando.setId(Integer.parseInt(form.getIdNegativacaoComando()));
    negativacaoComando.setUltimaAlteracao(form.getUltimaAlteracaoNegComando());
    negativacaoComando.setIndicadorSimulacao(new Short(form.getSimular()));
    negativacaoComando.setIndicadorComandoCriterio(new Short("1"));
    negativacaoComando.setDataPrevista(Util.converteStringParaDate(form.getDataPrevista()));
    negativacaoComando.setDataHoraComando(new Date());
    Usuario usuario = new Usuario();
    usuario.setId(new Integer(form.getUsuario()));
    negativacaoComando.setUsuario(usuario);
    Negativador negativador = new Negativador();
    negativador.setId(new Integer(form.getNegativadorId()));
    negativacaoComando.setNegativador(negativador);
    if (form.getIdComandoSimulado() != null && !form.getIdComandoSimulado().equals("")) {
      NegativacaoComando negComandoSimulacao = new NegativacaoComando();
      negComandoSimulacao.setId(new Integer(form.getIdComandoSimulado()));
      negativacaoComando.setComandoSimulacao(negComandoSimulacao);
    }

    if (form.getIndicadorBaixaRenda() != null && !form.getIndicadorBaixaRenda().equals("")) {
      negativacaoComando.setIndicadorBaixaRenda(
          new Integer(form.getIndicadorBaixaRenda()).shortValue());
    } else {
      negativacaoComando.setIndicadorBaixaRenda(ConstantesSistema.INDICADOR_USO_DESATIVO);
    }

    if (form.getIndicadorContaNomeCliente() != null
        && !form.getIndicadorContaNomeCliente().equals("")) {
      negativacaoComando.setIndicadorContaNomeCliente(
          new Short(form.getIndicadorContaNomeCliente()));
    } else {
      negativacaoComando.setIndicadorContaNomeCliente(ConstantesSistema.INDICADOR_USO_DESATIVO);
    }

    helper.setNegativacaoComando(negativacaoComando);

    // Dados Negativacao Critério
    NegativacaoCriterio negativacaoCriterio = new NegativacaoCriterio();
    negativacaoCriterio.setId(Integer.parseInt(form.getIdNegativacaoCriterio()));
    negativacaoCriterio.setNegativacaoComando(negativacaoComando);
    negativacaoCriterio.setDescricaoTitulo(form.getTitulo());
    negativacaoCriterio.setDescricaoSolicitacao(form.getSolicitacao());
    if (form.getIdLocalidadeInicial() != null && !form.getIdLocalidadeInicial().equals("")) {
      Localidade localidade = new Localidade();
      localidade.setId(new Integer(form.getIdLocalidadeInicial()));
      negativacaoCriterio.setLocalidadeInicial(localidade);
    }
    if (form.getIdLocalidadeFinal() != null && !form.getIdLocalidadeFinal().equals("")) {
      Localidade localidade = new Localidade();
      localidade.setId(new Integer(form.getIdLocalidadeFinal()));
      negativacaoCriterio.setLocalidadeFinal(localidade);
    }
    if (form.getCodigoSetorComercialInicial() != null
        && !form.getCodigoSetorComercialInicial().equals("")) {
      negativacaoCriterio.setCodigoSetorComercialInicial(
          new Integer(form.getCodigoSetorComercialInicial()));
    }
    if (form.getCodigoSetorComercialFinal() != null
        && !form.getCodigoSetorComercialFinal().equals("")) {
      negativacaoCriterio.setCodigoSetorComercialFinal(
          new Integer(form.getCodigoSetorComercialFinal()));
    }
    if (form.getReferenciaInicial() != null && !form.getReferenciaInicial().equals("")) {
      negativacaoCriterio.setAnoMesReferenciaContaInicial(
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaInicial()));
    } else {
      Date dataReferenciaInicial = null;
      if (form.getReferenciaFinal() != null && !form.getReferenciaFinal().equals("")) {
        dataReferenciaInicial =
            Util.subtrairNumeroAnosDeUmaData(
                Util.converteStringParaDate("01/" + form.getReferenciaFinal()), -5);
      } else {
        dataReferenciaInicial = Util.subtrairNumeroAnosDeUmaData(new Date(), -5);
      }
      negativacaoCriterio.setAnoMesReferenciaContaInicial(
          Util.formataAnoMes(dataReferenciaInicial));
    }
    if (form.getReferenciaFinal() != null && !form.getReferenciaFinal().equals("")) {
      negativacaoCriterio.setAnoMesReferenciaContaFinal(
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaFinal()));
    } else {
      negativacaoCriterio.setAnoMesReferenciaContaFinal(Util.formataAnoMes(new Date()));
    }
    if (form.getDataVencimentoInicial() != null && !form.getDataVencimentoInicial().equals("")) {
      negativacaoCriterio.setDataVencimentoDebitoInicial(
          Util.converteStringParaDate(form.getDataVencimentoInicial()));
    } else {
      Date dataVencimentoDebitoInicial = null;
      if (form.getDataVencimentoFinal() != null && !form.getDataVencimentoFinal().equals("")) {
        dataVencimentoDebitoInicial =
            Util.subtrairNumeroAnosDeUmaData(
                Util.converteStringParaDate(form.getDataVencimentoFinal()), -5);
      } else {
        dataVencimentoDebitoInicial = Util.subtrairNumeroAnosDeUmaData(new Date(), -5);
      }
      negativacaoCriterio.setDataVencimentoDebitoInicial(dataVencimentoDebitoInicial);
    }
    if (form.getDataVencimentoFinal() != null && !form.getDataVencimentoFinal().equals("")) {
      negativacaoCriterio.setDataVencimentoDebitoFinal(
          Util.converteStringParaDate(form.getDataVencimentoFinal()));
    } else {
      negativacaoCriterio.setDataVencimentoDebitoFinal(new Date());
    }
    if (form.getQtdMaximaInclusao() != null && !form.getQtdMaximaInclusao().equals("")) {
      negativacaoCriterio.setQuantidadeMaximaInclusoes(new Integer(form.getQtdMaximaInclusao()));
    }
    if (form.getImovSitEspecialCobranca() != null
        && !form.getImovSitEspecialCobranca().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoImovelParalisacao(
          new Short(form.getImovSitEspecialCobranca()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoImovelParalisacao(
          ConstantesSistema.INDICADOR_USO_ATIVO);
    }
    if (form.getImovSitCobranca() != null && !form.getImovSitCobranca().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoImovelSituacaoCobranca(
          new Short(form.getImovSitCobranca()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoImovelSituacaoCobranca(
          ConstantesSistema.INDICADOR_USO_ATIVO);
    }
    if (form.getContasRevisao() != null && !form.getContasRevisao().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoContaRevisao(new Short(form.getContasRevisao()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoContaRevisao(
          ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getGuiasPagamento() != null && !form.getGuiasPagamento().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoGuiaPagamento(new Short(form.getGuiasPagamento()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoGuiaPagamento(
          ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getParcelaAtraso() != null && !form.getParcelaAtraso().equals("")) {
      negativacaoCriterio.setIndicadorParcelamentoAtraso(new Short(form.getParcelaAtraso()));
    } else {
      negativacaoCriterio.setIndicadorParcelamentoAtraso(ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getDiasAtrasoParcelamento() != null && !form.getDiasAtrasoParcelamento().equals("")) {
      negativacaoCriterio.setNumeroDiasParcelamentoAtraso(
          new Integer(form.getDiasAtrasoParcelamento()));
    }
    if (form.getCartaParcelamentoAtraso() != null
        && !form.getCartaParcelamentoAtraso().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoRecebimentoCartaParcelamento(
          new Short(form.getCartaParcelamentoAtraso()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoRecebimentoCartaParcelamento(
          ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getDiasAtrasoRecebimentoCarta() != null
        && !form.getDiasAtrasoRecebimentoCarta().equals("")) {
      negativacaoCriterio.setNumeroDiasAtrasoRecebimentoCartaParcelamento(
          new Short(form.getDiasAtrasoRecebimentoCarta()));
    }
    if (form.getIdCliente() != null && !form.getIdCliente().equals("")) {
      Cliente cliente = new Cliente();
      cliente.setId(new Integer(form.getIdCliente()));
      negativacaoCriterio.setCliente(cliente);
      if (form.getTipoRelacao() != null
          && !form.getTipoRelacao().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
        ClienteRelacaoTipo relacaoTipo = new ClienteRelacaoTipo();
        relacaoTipo.setId(new Integer(form.getTipoRelacao()));
        negativacaoCriterio.setClienteRelacaoTipo(relacaoTipo);
      }
    }
    negativacaoCriterio.setIndicadorUso(ConstantesSistema.INDICADOR_USO_ATIVO);
    if (form.getValorDebitoInicial() != null && !form.getValorDebitoInicial().equals("")) {
      negativacaoCriterio.setValorMinimoDebito(
          Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoInicial()));
    } else {
      negativacaoCriterio.setValorMinimoDebito(Util.formatarMoedaRealparaBigDecimal("0"));
    }
    if (form.getValorDebitoFinal() != null && !form.getValorDebitoFinal().equals("")) {
      negativacaoCriterio.setValorMaximoDebito(
          Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoFinal()));
    } else {
      negativacaoCriterio.setValorMaximoDebito(
          Util.formatarMoedaRealparaBigDecimal("99999999999,99"));
    }
    if (form.getNumeroContasInicial() != null && !form.getNumeroContasInicial().equals("")) {
      negativacaoCriterio.setQuantidadeMinimaContas(new Integer(form.getNumeroContasInicial()));
    } else {
      negativacaoCriterio.setQuantidadeMinimaContas(0);
    }
    if (form.getNumeroContasFinal() != null && !form.getNumeroContasFinal().equals("")) {
      negativacaoCriterio.setQuantidadeMaximaContas(new Integer(form.getNumeroContasFinal()));
    } else {
      negativacaoCriterio.setQuantidadeMaximaContas(999999999);
    }
    helper.setNegativacaoCriterio(negativacaoCriterio);

    // Situação Especial Cobranca
    if (negativacaoCriterio.getIndicadorNegativacaoImovelParalisacao()
            == ConstantesSistema.INDICADOR_USO_ATIVO.shortValue()
        && form.getCobrancaSituacaoTipo() != null
        && form.getCobrancaSituacaoTipo().length > 0) {

      helper.setIdsCobrancaSituacaoTipo(form.getCobrancaSituacaoTipo());
    }

    // Situação Cobranca
    if (negativacaoCriterio.getIndicadorNegativacaoImovelSituacaoCobranca()
            == ConstantesSistema.INDICADOR_USO_ATIVO.shortValue()
        && form.getCobrancaSituacao() != null
        && form.getCobrancaSituacao().length > 0) {

      helper.setIdsCobrancaSituacao(form.getCobrancaSituacao());
    }

    // Negativacao Criterio CPF Tipo
    helper.setColecaoNegativacaoCriterioCpfTipo(
        (Collection) sessao.getAttribute("colecaoNegativacaoCriterioCpfTipo"));

    // Situação da Ligação de Água
    if (form.getLigacaoAguaSituacao() != null && form.getLigacaoAguaSituacao().length > 0) {
      helper.setIdsLigacaoAguaSituacao(form.getLigacaoAguaSituacao());
    }
    // Situação da Ligação de Esgoto
    if (form.getLigacaoEsgotoSituacao() != null && form.getLigacaoEsgotoSituacao().length > 0) {
      helper.setIdsLigacaoEsgotoSituacao(form.getLigacaoEsgotoSituacao());
    }
    // SubCategoria
    if (form.getSubCategoria() != null && form.getSubCategoria().length > 0) {
      helper.setIdsSubcategoria(form.getSubCategoria());
    }
    // Perfil de Imóvel
    if (form.getPerfilImovel() != null && form.getPerfilImovel().length > 0) {
      helper.setIdsPerfilImovel(form.getPerfilImovel());
    }
    // Tipo de Cliente
    if (form.getTipoCliente() != null && form.getTipoCliente().length > 0) {
      helper.setIdsTipoCliente(form.getTipoCliente());
    }

    // GrupoCobranca
    if (form.getCobrancaGrupo() != null && form.getCobrancaGrupo().length > 0) {
      helper.setIdsCobrancaGrupo(form.getCobrancaGrupo());
    }
    // Gerência Regional
    if (form.getGerenciaRegional() != null && form.getGerenciaRegional().length > 0) {
      helper.setIdsGerenciaRegional(form.getGerenciaRegional());
    }
    // Unidade Negócio
    if (form.getUnidadeNegocio() != null && form.getUnidadeNegocio().length > 0) {
      helper.setIdsUnidadeNegocio(form.getUnidadeNegocio());
    }
    // Elo
    if (form.getEloPolo() != null && form.getEloPolo().length > 0) {
      helper.setIdsEloPolo(form.getEloPolo());
    }

    /*
     * if (form.getIndicadorBaixaRenda() != null &&
     * !form.getIndicadorBaixaRenda().equals("")) {
     * helper.setIndicadorBaixaRenda(form.getIndicadorBaixaRenda()); } else
     * {
     * helper.setIndicadorBaixaRenda(ConstantesSistema.INDICADOR_USO_DESATIVO
     * .toString()); }
     */

    // [SB0002]- Atualizar Comando de Negativação por Critério
    fachada.atualizarComandoNegativacao(helper);

    // Monta a página de sucesso
    montarPaginaSucesso(
        httpServletRequest,
        "Comando Negativação atualizado com sucesso.",
        "Manter outro Comando Negativação",
        "exibirFiltrarComandoNegativacaoPorCriterioAction.do?menu=sim");

    return retorno;
  }