Package ecar.dao

Source Code of ecar.dao.ItemEstrtIndResulDao

/*
* Criado em 21/12/2004
*
*/
package ecar.dao;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Transaction;

import comum.database.Dao;
import comum.util.Data;
import comum.util.Pagina;
import comum.util.Util;

import ecar.exception.ECARException;
import ecar.historico.Historico;
import ecar.pojo.AcompRealFisicoArf;
import ecar.pojo.AcompReferenciaItemAri;
import ecar.pojo.ConfiguracaoCfg;
import ecar.pojo.Cor;
import ecar.pojo.EstruturaEtt;
import ecar.pojo.EstruturaFuncaoEttf;
import ecar.pojo.ExercicioExe;
import ecar.pojo.HistoricoIettfH;
import ecar.pojo.HistoricoIettrH;
import ecar.pojo.HistoricoMaster;
import ecar.pojo.HistoricoMotivo;
import ecar.pojo.ItemEstrtIndResulCorIettrcor;
import ecar.pojo.ItemEstrtIndResulIettr;
import ecar.pojo.ItemEstrutFisicoIettf;
import ecar.pojo.ItemEstrutLocalIettl;
import ecar.pojo.ItemEstruturaIett;
import ecar.pojo.LocalGrupoLgp;
import ecar.pojo.LocalItemLit;
import ecar.pojo.PaiFilho;
import ecar.pojo.PeriodicidadePrdc;
import ecar.pojo.ServicoSer;
import ecar.pojo.SisAtributoSatb;
import ecar.pojo.SisGrupoAtributoSga;
import ecar.pojo.UsuarioUsu;
import ecar.pojo.historico.HistoricoItemEstrtIndResulIettr;
import ecar.taglib.util.Input;
import ecar.util.Dominios;

/**
* @author evandro
*
*/
public class ItemEstrtIndResulDao extends Dao {
  /**
   * Construtor. Chama o Session factory do Hibernate
   */
  private Historico<HistoricoItemEstrtIndResulIettr, ItemEstrtIndResulIettr> historico = null;
  private HistoricoItemEstrtIndResulIettr pojoHistorico;

        /**
         *
         * @param request
         */
        public ItemEstrtIndResulDao(HttpServletRequest request) {
    super();
    this.request = request;
    // this.usuario = ((ecar.login.SegurancaECAR)
    // request.getSession().getAttribute("seguranca")).getUsuario();
  }

  /**
   * Cria um objeto itemEstrtIndResul a partir de par�metros passados no
   * objeto request
   *
   * @param request
   * @param itemEstrtIndResul
   * @throws ECARException
   */
  public void setItemEstrtIndResul(HttpServletRequest request, ItemEstrtIndResulIettr itemEstrtIndResul) throws ECARException {

    SisGrupoAtributoSga grupoMetas = new ConfiguracaoDao(request).getConfiguracao().getSisGrupoAtributoSgaByCodSgaGrAtrMetasFisicas();

    itemEstrtIndResul.setItemEstruturaIett((ItemEstruturaIett) this.buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett"))));
    itemEstrtIndResul.setNomeIettir(Pagina.getParamStr(request, "nomeIettir"));
    //INI -- Ministerio da Saude
    itemEstrtIndResul.setConceituacao(Pagina.getParamStr(request, "conceitIettir"));
    itemEstrtIndResul.setInterpretacao(Pagina.getParamStr(request, "interpIettir"));
    itemEstrtIndResul.setFonteIettr(Pagina.getParamStr(request, "fonteIettr"));
    itemEstrtIndResul.setMetodoCalculo(Pagina.getParamStr(request, "mCalcIettir"));
    //FIM -- Ministerio da Saude
    itemEstrtIndResul.setDescricaoIettir(Pagina.getParamStr(request, "descricaoIettir"));
    itemEstrtIndResul.setIndProjecaoIettr(Pagina.getParamStr(request, "indProjecaoIettr"));
    itemEstrtIndResul.setIndAcumulavelIettr(Pagina.getParamStr(request, "indAcumulavelIettr"));
    itemEstrtIndResul.setIndPublicoIettr(Pagina.getParamStr(request, "indPublicoIettr"));

    itemEstrtIndResul.setFormulaIettr(Pagina.getParamStr(request, "formulaIettr"));

    // Mantis 12390
    itemEstrtIndResul.setIndAtivoIettr(Dominios.SIM);

    if (!"".equals(Pagina.getParamStr(request, "dataApuracaoIettr"))) {
      itemEstrtIndResul.setDataApuracaoIettr(Data.parseDate(Pagina.getParamStr(request, "dataApuracaoIettr")));
    } else {
      itemEstrtIndResul.setDataApuracaoIettr(null);
    }

    if (!"".equals(Pagina.getParamStr(request, "periodicidadePrdc"))) {
      itemEstrtIndResul.setPeriodicidadePrdc((PeriodicidadePrdc) this.buscar(PeriodicidadePrdc.class, Long.valueOf(Pagina.getParamStr(request,
          "periodicidadePrdc"))));
    } else {
      itemEstrtIndResul.setPeriodicidadePrdc(null);
    }

    if (!"".equals(Pagina.getParamStr(request, "indiceMaisRecenteIettr"))) {
      DecimalFormat dff = (DecimalFormat) DecimalFormat.getInstance();
      Double indiceMaisRecente = new Double("0");
      String indiceMaisRecenteString = Pagina.getParamStr(request, "indiceMaisRecenteIettr");

      try {
        indiceMaisRecente = dff.parse(indiceMaisRecenteString).doubleValue();
      } catch (Exception e) {
        // N�o precisa lan�ar exce��o aqui.
      }

      itemEstrtIndResul.setIndiceMaisRecenteIettr(indiceMaisRecente);
    } else {
      itemEstrtIndResul.setIndiceMaisRecenteIettr(null);
    }

    String indPrevPorLocal = Pagina.getParamStr(request, "indPrevPorLocal");
    String indRealPorLocal = Pagina.getParamStr(request, "indRealPorLocal");   
   
    if ((itemEstrtIndResul.getItemEstruturaIett().getItemEstrutLocalIettls() == null)||(itemEstrtIndResul.getItemEstruturaIett().getItemEstrutLocalIettls().size() == 0)){
      indPrevPorLocal = "N";
      indRealPorLocal = "N";
    }else{
   
    // alteracao nova tela MANTIS #0011576

    if ("".equals(indPrevPorLocal.trim())){
      if (!"".equals(Pagina.getParamStr(request, "previstoPorLocal"))){
        if ("S".equals(Pagina.getParamStr(request, "previstoPorLocal")))
        indPrevPorLocal = "S";       
      else
        indPrevPorLocal = "N";
        } else
          indPrevPorLocal = "N";
    }

    // alteracao nova tela MANTIS #0011576
    if ("".equals(indRealPorLocal.trim()))
      indRealPorLocal = "N";
    }
   
    itemEstrtIndResul.setIndRealPorLocal(indRealPorLocal);   
    itemEstrtIndResul.setIndPrevPorLocal(indPrevPorLocal);

    itemEstrtIndResul.setIndTipoQtde(Pagina.getParamStr(request, "indTipoQtde"));

    if (!"".equals(Pagina.getParamStr(request, "indValorFinalIettr"))) {
      itemEstrtIndResul.setIndValorFinalIettr(Pagina.getParamStr(request, "indValorFinalIettr"));
    } else {
      itemEstrtIndResul.setIndValorFinalIettr(null);
    }

    if (grupoMetas != null) {
      String nomeCampo = "a" + grupoMetas.getCodSga().toString();
      if (!"".equals(Pagina.getParamStr(request, nomeCampo))) {
        itemEstrtIndResul.setSisAtributoSatb((SisAtributoSatb) new SisAtributoDao(null).buscar(SisAtributoSatb.class, Long.valueOf(Pagina.getParamStr(
            request, nomeCampo))));
      }
      else
      {
        itemEstrtIndResul.setSisAtributoSatb(null);
      }
    }
    /*
     * Se a configura��o do sistema est� setada para trabalhar com um grupo
     * de unidades, o valor selecionado na tela deve ser gravada na vari�vel
     * CodUnidMedidaIettr. Sen�o, o valor digitado ser� guardado na variavel
     * unidMedidaIettr.
     */
    SisGrupoAtributoSga grupoUnidades = new ConfiguracaoDao(request).getConfiguracao().getSisGrupoAtributoSgaByUnidMedida();

    if (grupoUnidades != null) {
      String nomeCampo = "a" + grupoUnidades.getCodSga().toString();
      if (!"".equals(Pagina.getParamStr(request, nomeCampo))) {
        if (grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXT))
            || grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXTAREA))
            || grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.MULTITEXTO))
            || grupoUnidades.getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.VALIDACAO))) {

          itemEstrtIndResul.setCodUnidMedidaIettr((SisAtributoSatb) new SisAtributoDao(null).buscar(SisAtributoSatb.class, Long.valueOf(Pagina
              .getParamStr(request, "codigoSisAtbUnidadeMedida"))));
        } else {
          // Caso de Combo, Check, Radio, etc..
          itemEstrtIndResul.setCodUnidMedidaIettr((SisAtributoSatb) new SisAtributoDao(null).buscar(SisAtributoSatb.class, Long.valueOf(Pagina
              .getParamStr(request, nomeCampo))));
        }
      }
      itemEstrtIndResul.setUnidMedidaIettr("");
    } else {
      itemEstrtIndResul.setUnidMedidaIettr(Pagina.getParamStr(request, "unidMedidaIettr"));
      itemEstrtIndResul.setCodUnidMedidaIettr(null);
    }

    // Gr�fico de Grupo
    if (!"".equals(Pagina.getParamStr(request, "labelGraficoGrupoIettir"))) {
      itemEstrtIndResul.setLabelGraficoGrupoIettir(Pagina.getParamStr(request, "labelGraficoGrupoIettir").toUpperCase());
    } else {
      itemEstrtIndResul.setLabelGraficoGrupoIettir(null);
    }

    // Utiliza Sinaliza��o
    if (!"".equals(Pagina.getParamStr(request, "ind_sinalizacao"))) {
      itemEstrtIndResul.setIndSinalizacaoIettr(Pagina.getParamStr(request, "ind_sinalizacao"));
    } else {
      itemEstrtIndResul.setIndSinalizacaoIettr(null);
    }

    // No caso de inser��o de uma nova meta/indicador
    // Recupera do request os ItemEstrtIndResulCorIettrcores e seta o
    // "itemEstrtIndResul"com esses valores.
    if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() == null) {
      this.setItemEstrtIndResulCorIettrcor(request, itemEstrtIndResul);
    }

    // Tipo de atualiza��o autom�tica ou manual
    itemEstrtIndResul.setIndTipoAtualizacaoPrevisto(Pagina.getParamStr(request, "indTipoAtualizacaoPrevisto"));
    itemEstrtIndResul.setIndTipoAtualizacaoRealizado(Pagina.getParamStr(request, "indTipoAtualizacaoRealizado"));

    // Valor Previsto
    if (!"".equals(Pagina.getParamStr(request, "previstoServicoSer"))) {
      itemEstrtIndResul.setPrevistoServicoSer((ServicoSer) ((ServicoSer) this.buscar(ServicoSer.class, Long.valueOf(Pagina.getParamStr(request,
          "previstoServicoSer")))));
    } else {
      itemEstrtIndResul.setPrevistoServicoSer(null);
    }

    // Valor Realizado
    if (!"".equals(Pagina.getParamStr(request, "realizadoServicoSer"))) {
      itemEstrtIndResul.setRealizadoServicoSer((ServicoSer) ((ServicoSer) this.buscar(ServicoSer.class, Long.valueOf(Pagina.getParamStr(request,
          "realizadoServicoSer")))));
    } else {
      itemEstrtIndResul.setRealizadoServicoSer(null);
    }
   
    if (("S".equals(indPrevPorLocal))||("S".equals(indRealPorLocal))){
      //Se n�o tiver valor, significa que a combo est� desabilitada
      //E se um dos indices for S e a combo desabilitado, deve manter o valor
      if(!"".equals(Pagina.getParamStr(request, "abrangenciaLocal")))
          itemEstrtIndResul.setNivelAbrangencia(Long.valueOf(Pagina.getParamStr(request, "abrangenciaLocal")));
      else{
        if(!"".equals(Pagina.getParamStr(request, "nivelAbrangencia")))
          itemEstrtIndResul.setNivelAbrangencia(Long.valueOf(Pagina.getParamStr(request, "nivelAbrangencia")));
      }
         
    }
    else
    {
      itemEstrtIndResul.setNivelAbrangencia(null);
    }
       

  }

        /**
         *
         * @param request
         * @param itemEstrtIndResul
         * @throws ECARException
         */
        public void setItemEstrtIndResulCorIettrcor(HttpServletRequest request, ItemEstrtIndResulIettr itemEstrtIndResul) throws ECARException {

    ItemEstrtIndResulCorIettrcor iettrCor = null;
    int quantidadeCores = 0;
    if (Pagina.getParamStr(request, "quantidadeCores") != null && !Pagina.getParamStr(request, "quantidadeCores").equals("")) {
      quantidadeCores = Integer.valueOf(Pagina.getParamStr(request, "quantidadeCores"));
    }

    for (int count = 1; count <= quantidadeCores; count++) {

      if (Pagina.getParamStr(request, "cor_" + count) != null && !Pagina.getParamStr(request, "cor_" + count).equals("")) {

        iettrCor = new ItemEstrtIndResulCorIettrcor();

        iettrCor.setCor((Cor) new CorDao(request).buscar(Cor.class, Long.valueOf(Pagina.getParamStr(request, "cor_" + count))));

        iettrCor.setItemEstrtIndResulIettr(itemEstrtIndResul);

        if (!Pagina.getParamStr(request, "valor_" + count).equals("") && !Pagina.getParamStr(request, "valor_" + count).equals("Maior Valor")) {
          iettrCor.setValorPrimEmailIettrcor(new BigDecimal(Double.valueOf(Util.formataNumero(Pagina.getParamStr(request, "valor_" + count)))
              .doubleValue()));
        } else if (Pagina.getParamStr(request, "valor_" + count).equals("Maior Valor")) {
          iettrCor.setValorPrimEmailIettrcor(null);
          iettrCor.setIndMaiorValorIettrcor("S");
        } else {
          iettrCor.setValorPrimEmailIettrcor(null);
          iettrCor.setIndMaiorValorIettrcor("N");
        }

        if (count == 1) {
          iettrCor.setIndMenorValorIettrcor("S");
        } else {
          iettrCor.setIndMenorValorIettrcor("N");
        }

        iettrCor.setFrequenciaEnvioEmailIettrcor(Integer.valueOf(Pagina.getParamInt(request, "freq_" + count)));
        iettrCor.setIndAtivoEnvioEmailIettrcor("S".equals(Pagina.getParamStr(request, "ativo[" + count + "]").trim()) ? "S" : "N");

        iettrCor.setSequenciaIettrcor(Integer.valueOf(count));

        if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() == null)
          itemEstrtIndResul.setItemEstrtIndResulCorIettrcores(new HashSet());
        itemEstrtIndResul.getItemEstrtIndResulCorIettrcores().add(iettrCor);

      }
    }

    // System.out.println();

  }

  /**
   * Recebe um array contendo c�digos de IndResultado e exclui todos os
   * registros
   *
   * @param codigosParaExcluir
         * @param usuario
         * @throws ECARException
   */
  public void excluir(String[] codigosParaExcluir, UsuarioUsu usuario) throws ECARException {
    pojoHistorico = new HistoricoItemEstrtIndResulIettr();
    Transaction tx = null;
    List<ItemEstrtIndResulIettr> indicadoresParaExcluir = new ArrayList<ItemEstrtIndResulIettr>();

    try {

      tx = session.beginTransaction();

      for (int i = 0; i < codigosParaExcluir.length; i++) {

        ItemEstrtIndResulIettr itemEstrtIndResul = (ItemEstrtIndResulIettr) buscar(ItemEstrtIndResulIettr.class, Long.valueOf(codigosParaExcluir[i]));

        if (verificarExistenciaEmAcompRealFisicoArf(itemEstrtIndResul))
          throw new ECARException("itemEstrutura.indResultado.exclusao.exiteEmArf", null, new String[] { itemEstrtIndResul.getNomeIettir() });

        ConfiguracaoDao dao = new ConfiguracaoDao(request);
        ConfiguracaoCfg config = dao.getConfiguracao();

        if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() == null)
          itemEstrtIndResul.setItemEstrtIndResulCorIettrcores(new HashSet<ItemEstrtIndResulCorIettrcor>());

        pojoHistorico.carregar(itemEstrtIndResul);

        HistoricoMaster historicoMaster = new HistoricoMaster();

        if ("S".equals(config.getIndGerarHistoricoCfg())) {

          historicoMaster.setDataHoraHistorico(new Date());
          historicoMaster.setUsuManutencao(usuario);
          historicoMaster.setCodReferenciaGeral(itemEstrtIndResul.getItemEstruturaIett().getCodIett());
          historicoMaster.setHistoricoMotivo((HistoricoMotivo) super.buscar(HistoricoMotivo.class, Long.valueOf(24)));
          session.save(historicoMaster);

          HistoricoIettrH iettrh = new HistoricoIettrH();
          ItemEstrtIndResulIettr iettrhAntesAlteracao = (ItemEstrtIndResulIettr) super.buscar(ItemEstrtIndResulIettr.class, itemEstrtIndResul
              .getCodIettir());
          iettrh.setItemEstruturaIett(iettrhAntesAlteracao.getItemEstruturaIett());
          iettrh.setUnidMedidaIettr(iettrhAntesAlteracao.getUnidMedidaIettr());
          iettrh.setDescricaoIettir(iettrhAntesAlteracao.getDescricaoIettir());
          iettrh.setNomeIettir(iettrhAntesAlteracao.getNomeIettir());
          iettrh.setIndProjecaoIettr(iettrhAntesAlteracao.getIndProjecaoIettr());
          iettrh.setIndAcumulavelIettr(iettrhAntesAlteracao.getIndAcumulavelIettr());
          iettrh.setIndTipoQtde(iettrhAntesAlteracao.getIndTipoQtde());
          iettrh.setIndValorFinalIettr(iettrhAntesAlteracao.getIndValorFinalIettr());
          iettrh.setIndRealPorLocal(iettrhAntesAlteracao.getIndRealPorLocal());
          iettrh.setIndPublicoIettr(iettrhAntesAlteracao.getIndPublicoIettr());

          // alteracao nova tela
          iettrh.setIndPrevPorLocal(iettrhAntesAlteracao.getIndPrevPorLocal());
          // alteracao nova tela

          iettrh.setSisAtributoSatb(iettrhAntesAlteracao.getSisAtributoSatb());
          iettrh.setFonteIettr(iettrhAntesAlteracao.getFonteIettr());
          iettrh.setIndiceMaisRecenteIettr(iettrhAntesAlteracao.getIndiceMaisRecenteIettr());
          iettrh.setDataApuracaoIettr(iettrhAntesAlteracao.getDataApuracaoIettr());
          iettrh.setFormulaIettr(iettrhAntesAlteracao.getFormulaIettr());
          iettrh.setPeriodicidadePrdc(iettrhAntesAlteracao.getPeriodicidadePrdc());
          iettrh.setUsuarioUsuManutencao(usuario);
          iettrh.setDataUltManutencao(itemEstrtIndResul.getDataUltManutencao());
          iettrh.setHistoricoMaster(historicoMaster);

          session.save(iettrh);
        }

        indicadoresParaExcluir.add(itemEstrtIndResul);

        // excluir todas as quantidades previstas
        List listaAux = new ArrayList();
        listaAux.addAll(itemEstrtIndResul.getItemEstrutFisicoIettfs());

        Iterator itAux = listaAux.iterator();
        while (itAux.hasNext()) {
          ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itAux.next();
          itemEstrutFisico.setDataUltManutencao(Data.getDataAtual());
          itemEstrutFisico.setUsuarioUsuManutencao(usuario);

          if ("S".equals(config.getIndGerarHistoricoCfg())) {

            HistoricoIettfH iettfh = new HistoricoIettfH();
            iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
            iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
            iettfh.setItemEstrtIndResulIettr(itemEstrutFisico.getItemEstrtIndResulIettr());
           
            //FIXME
            /* Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio*/
            //iettfh.setExercicioExe(itemEstrutFisico.getExercicioExe());
            iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
            iettfh.setUsuManutencao(usuario);
            iettfh.setIndAtivoIettf(Dominios.NAO);
            iettfh.setHistoricoMaster(historicoMaster);
            session.save(iettfh);
          }

          session.delete(itemEstrutFisico);
        }

      }

      for (ItemEstrtIndResulIettr obj : indicadoresParaExcluir) {
        obj.setUsuarioUsuManutencao(usuario);
        obj.setDataUltManutencao(new Date());
        obj.setIndAtivoIettr(Dominios.NAO);
        session.update(obj);
      }
      gerarHistorico(Historico.EXCLUIR);
      tx.commit();

    } catch (HibernateException e) {
      e.printStackTrace();
      if (tx != null)
        try {
          tx.rollback();
        } catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException(e.getMessage());
    }

  }

  /**
   * Soma o valor de todos as quantidades de um Indicador de Resultado onde
   * IndAtivo = 'S'
   *
   * @param itemEstrtIndResul
   * @return
   * @throws ECARException
   */
  /*
   * Comentado: Utilizar m�todo abaixo: getSomaQuantidadePrevista public
   * double getSomaQuantidades(ItemEstrtIndResulIettr itemEstrtIndResul)
   * throws ECARException { double total = 0;
   *
   * if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) { Iterator it
   * = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator(); while
   * (it.hasNext()) { ItemEstrutFisicoIettf itemEstrutFisico =
   * (ItemEstrutFisicoIettf) it.next();
   * if("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) total +=
   * itemEstrutFisico.getQtdPrevistaIettf().doubleValue(); } } return total; }
   */
  /**
   * Se Indicador de Resultado � Acumul�vel soma o valor de todos as
   * quantidades onde IndAtivo = 'S', o retorno � em string; Sen�o retorna
   * "N�o se aplica"
   *
   * @param itemEstrtIndResul
   * @return
   * @throws ECARException
   */
  public String getSomaQuantidadePrevista(ItemEstrtIndResulIettr itemEstrtIndResul) throws ECARException {
    try {
      String retorno = "0";
      double total = 0;

      String tipoQtde = "V";
      if("Q".equals(itemEstrtIndResul.getIndTipoQtde())){
        tipoQtde = "Q";
      }
     
      if ("S".equals(itemEstrtIndResul.getIndAcumulavelIettr())) {
        if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
          Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
          while (it.hasNext()) {
            ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
            if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf()))
              total += itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
          }
          if(tipoQtde=="V")
            retorno = Util.formataMoeda(total);
          else
            retorno = Util.formataNumeroDecimal(total);
        }
      } else {

        /*
         * Anota��o ref. Mantis 5016: - Maior: obter o maior valor de
         * ItemEstrutFisicoIettf - �ltimo: obter valor do �ltimo
         * exerc�cio informado de ItemEstrutFisicoIettf - N�o se aplica:
         * soma total ItemEstrutFisicoIettf
         */

        if ("M".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // Maior
          if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
            Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
            double maior = 0;
            while (it.hasNext()) {
              ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
              if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) {
                if (itemEstrutFisico.getQtdPrevistaIettf().doubleValue() > maior) {
                  maior = itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
                }
                total = maior;
              }
            }
            retorno = Util.formataMoeda(total);
          }
        } else if ("U".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // Ultimo
          double ultimo = 0;
          List<ItemEstrutFisicoIettf> previstos = null;
         
          previstos = new ArrayList<ItemEstrutFisicoIettf>(itemEstrtIndResul.getItemEstrutFisicoIettfs());
         
          if (previstos.size() > 0) {
            Collections.reverse(previstos);//percorre na ordem inversa at� encontrar o primeiro ativo.
            Iterator<ItemEstrutFisicoIettf> it = previstos.iterator();
                       
            while (it.hasNext()) {
              ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
              if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) {
                ultimo = itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
                break; //encerra o la�o ap�s encontar o primeiro(ultimo) registro de previsto ativo
              }
            } 
          }
         
          retorno = Util.formataMoeda(ultimo);
         
          // Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio
          /*
          ExercicioExe ultimoExe = getMaiorExercicioIndicador(itemEstrtIndResul);
          ExercicioDao exercicioDAO = new ExercicioDao(request);

          if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
            Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
            while (it.hasNext()) {
              ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
              if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) {
               
                List meses = exercicioDAO.getMesesDentroDoExercicio(ultimoExe);
                Iterator itMeses = meses.iterator();
                while(itMeses.hasNext()){
                  String chave = itMeses.next().toString();
                  String mes = chave.split("-")[0];
                  if(mes.length() == 1)
                    mes = "0" + mes;                 
                 
                  String ano = chave.split("-")[1];
                  if (Integer.valueOf(mes) == itemEstrutFisico.getMesIettf() && (Integer.valueOf(ano) == itemEstrutFisico.getAnoIettf() )){
                    ultimo = itemEstrutFisico.getQtdPrevistaIettf().doubleValue(); 
                  }
                }
               
               
                if (itemEstrutFisico.getExercicioExe().getCodExe().equals(ultimoExe.getCodExe())) {
                  ultimo = itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
                  break;
                }               
              }
            }
          }
          */         
        } else if ("N".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // N�o
          // se
          // aplica
          /*
           * if (itemEstrtIndResul.getItemEstrutFisicoIettfs() !=
           * null) { Iterator it =
           * itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
           * while (it.hasNext()) { ItemEstrutFisicoIettf
           * itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
           * if("S"
           * .equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf()))
           * total +=
           * itemEstrutFisico.getQtdPrevistaIettf().doubleValue(); }
           * retorno = Util.formataNumeroSemDecimal(total); }
           */
          retorno = "";
        }
      }

      return retorno;
    } catch (Exception e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }

  /**
   * M�todo que retorna a Quantidade Prevista de um Indicador de Resultado em
   * um Exerc�cio.
   *
   * @param indResul
   * @param exercicio
   * @return
   * @throws NumberFormatException
   */
  public double getQtdPrevistoExercicio(ItemEstrtIndResulIettr indResul, ExercicioExe exercicio) {
    double quant = 0;

    try {
      // Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio
      ItemEstrutFisicoDao itemEstrutFisicoDao = new ItemEstrutFisicoDao(request);
      quant = itemEstrutFisicoDao.getQtdPrevistaExercicio(exercicio, indResul, null);
     
      //ItemEstrutFisicoIettf qtdPrevista = new ItemEstrutFisicoDao(request).buscar(indResul.getCodIettir(), exercicio.getCodExe());
      /*
      if (qtdPrevista != null) {
        if ("S".equalsIgnoreCase(qtdPrevista.getIndAtivoIettf())) {
          quant = qtdPrevista.getQtdPrevistaIettf().doubleValue();
        }
      }
      */
    } catch (Exception e) {
      /* n�o realiza nada e devolve quant = 0 */
    }

    return quant;
  }
   
  /*
   * M�todo que retorna a Quantidade Prevista de um Exerc�cio.
   */
 
  public double getQtdPrevistoExercicio(AcompReferenciaItemAri ari, String tipoSelecao, ItemEstruturaIett item, ExercicioExe exercicio, String grupoIndicador) {
    double quant = 0;

    try {
      List indResultados = new AcompRealFisicoDao(request).getIndResulByAcompRefItemBySituacao(ari, tipoSelecao, false);
      if (indResultados != null && indResultados.size() > 0) {
        Iterator itIndResult = indResultados.iterator();
        while(itIndResult.hasNext()) {
          AcompRealFisicoArf arf = (AcompRealFisicoArf) itIndResult.next();
          if(grupoIndicador.equals("") || arf.getItemEstrtIndResulIettr().getSisAtributoSatb().getDescricaoSatb().equals(grupoIndicador)) {
            ItemEstrutFisicoIettf qtdPrevista = null;
            try {
              // Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio
              //qtdPrevista = new ItemEstrutFisicoDao(request).buscar(arf.getItemEstrtIndResulIettr().getCodIettir(), exercicio.getCodExe());
              quant = new ItemEstrutFisicoDao(request).getQtdPrevistaExercicio(exercicio, arf.getItemEstrtIndResulIettr(), null);
            } catch(Exception e) {
              // n�o realiza nada e procura proxima qtde prevista
            }
       
            if (qtdPrevista != null) {
              if ("S".equalsIgnoreCase(qtdPrevista.getIndAtivoIettf())) {
                quant += qtdPrevista.getQtdPrevistaIettf().doubleValue();
              }
            }
          }
        }
      }
    } catch (Exception e) {
      // n�o realiza nada e devolve quant = 0
    }

    return quant;
  }
 
 
 
  /**
   * Devolve o maior exerc�cio em que foi cadastrada uma quantidade prevista
   * para um indicador de resultado
   *
   * @param indResul
   * @return
   * @throws ECARException
   */
  public ExercicioExe getMaiorExercicioIndicador(ItemEstrtIndResulIettr indResul) throws ECARException {
    try {
      Query q = this.getSession().createQuery(
          "select ieFisico from ItemEstrutFisicoIettf ieFisico" + " where ieFisico.itemEstrtIndResulIettr.codIettir = ? "
              + " order by ieFisico.anoIettf desc,ieFisico.mesIettf desc");
      q.setLong(0, indResul.getCodIettir().longValue());
      q.setMaxResults(1);
     
      ItemEstrutFisicoIettf mesAno = (ItemEstrutFisicoIettf) q.uniqueResult();
     
      ExercicioDao exeDao = new ExercicioDao(null);
      ExercicioExe exe = exeDao.getExercicio(mesAno.getMesIettf().toString(), mesAno.getAnoIettf().toString());
      return exe;
    } catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
   
  }

  //Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio
  /* M�todo n�o est� sendo usado em nenhum lugar
   *
   * @author n/c
   * @param indicativoResultado
   * @return List
   * @throws ECARException
   */
/* 
  public List getExerciosCadastroPermitidos(ItemEstrtIndResulIettr indicativoResultado) throws ECARException {
    List exercicios = new ExercicioDao(request).listar(ExercicioExe.class, new String[] { "descricaoExe", Dao.ORDEM_ASC });
    Set quantidades = indicativoResultado.getItemEstrutFisicoIettfs();
    Iterator it = quantidades.iterator();
    while (it.hasNext()) {
      ItemEstrutFisicoIettf ieFisico = (ItemEstrutFisicoIettf) it.next();
      ExercicioExe exercicioCadastrado = ieFisico.getExercicioExe();
      exercicios.remove(exercicioCadastrado);
    }
    return exercicios;
  }
*/
  /**
   * retorna lista vari�vel de quantidade prevista preenchidas de acordo com
   * o ano e mes.
   *
   * @param request
   * @return List
   * @throws ECARException
   */
  public List<ItemEstrutFisicoIettf> getListaQuantidadePrevista(HttpServletRequest request, ItemEstrtIndResulIettr indicador) throws ECARException {
    //Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio
       
    ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(request);   
   
    List<GregorianCalendar> listaMesesReferencia = itemEstruturaDao.GetMesesReferencia(indicador.getItemEstruturaIett());   

    Iterator<GregorianCalendar> itMesesReferencia = listaMesesReferencia.iterator();   
   
    List<ItemEstrutFisicoIettf> listaQtd = new ArrayList<ItemEstrutFisicoIettf>();
    int ano = 0;
    int mes = 0;
    String anoMes = null;
    while (itMesesReferencia.hasNext()) {
      GregorianCalendar mesReferencia = (GregorianCalendar) itMesesReferencia.next();     
      mes = mesReferencia.get(Calendar.MONTH) + 1;           
      ano = mesReferencia.get(Calendar.YEAR);
      anoMes = String.format("%04d", ano) + String.format("%02d", mes);

      if (!"".equals(Pagina.getParamStr(request, "qtdPrevistaIettf" + anoMes))) {
        ItemEstrutFisicoIettf itemEstrutFisico = new ItemEstrutFisicoIettf();
        //itemEstrutFisicoDao.setItemEstrutFisico(request, itemEstrutFisico);
        //itemEstrutFisico.setItemEstrtIndResulIettr(indicador);
        itemEstrutFisico.setAnoIettf(ano);
        itemEstrutFisico.setMesIettf(mes);
        String qtdePrevista = Pagina.getParamStr(request, "qtdPrevistaIettf" + anoMes);
        if (qtdePrevista != null) {
          try{
            itemEstrutFisico.setQtdPrevistaIettf(Util.parseDecimalPT_BR(qtdePrevista));
          }catch(NumberFormatException e){
            String hideqtde = Pagina.getParamStr(request, "hideqtdPrevistaIettf" + anoMes);
            try{
            itemEstrutFisico.setQtdPrevistaIettf(Util.parseDecimalPT_BR(hideqtde));
            }catch(NumberFormatException excep){
              //Se o valor � inv�lido remove da lista
              continue;
            }
          }

        } else {
          String hideqtde = Pagina.getParamStr(request, "hideqtdPrevistaIettf" + anoMes);
          itemEstrutFisico.setQtdPrevistaIettf(Util.parseDecimalPT_BR(hideqtde));
        }

        //itemEstrutFisico.setExercicioExe(exercicio);
        itemEstrutFisico.setIndAtivoIettf("S");
        itemEstrutFisico.setDataInclusaoIettf(Data.getDataAtual());

        listaQtd.add(itemEstrutFisico);
      }
    }

    return listaQtd;
  }

  /**
   *
   * @author n/c
   * @param itemEstrtIndResul
   * @param listaQtd
         * @param usuario
         * @throws ECARException
   */
    @SuppressWarnings("static-access")
  public void salvar(ItemEstrtIndResulIettr itemEstrtIndResul, List listaQtd, UsuarioUsu usuario) throws ECARException {
    pojoHistorico = new HistoricoItemEstrtIndResulIettr();
    inicializarLogBean();
    Transaction tx = null;
    try {
      ArrayList objetosInseridos = new ArrayList();
      tx = session.beginTransaction();

      // salva o pai

      session.save(itemEstrtIndResul);
      pojoHistorico.carregar(itemEstrtIndResul);

      pojoHistorico.setItemEstrutFisicoIettfs(new HashSet<ItemEstrutFisicoIettf>());
      objetosInseridos.add(itemEstrtIndResul);
      Iterator itQtd = listaQtd.iterator();
      while (itQtd.hasNext()) {
        ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itQtd.next();       
        /* Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio
         * Mudou a pk. n�o usa mais chave composta
         * */
        //itemEstrutFisico.getComp_id().setCodIettir(itemEstrtIndResul.getCodIettir());   
       
        itemEstrutFisico.setItemEstrtIndResulIettr(itemEstrtIndResul);
        itemEstrutFisico.setDataUltManutencao(new Date());
        itemEstrutFisico.setUsuarioUsuManutencao(usuario);
        pojoHistorico.getItemEstrutFisicoIettfs().add(itemEstrutFisico);
        session.save(itemEstrutFisico);

        objetosInseridos.add(itemEstrutFisico);
      }

      List listaIettrCor = new ArrayList();
      if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null)
        listaIettrCor.addAll(itemEstrtIndResul.getItemEstrtIndResulCorIettrcores());

      pojoHistorico.setItemEstrtIndResulCorIettrcores(new HashSet<ItemEstrtIndResulCorIettrcor>());
      Iterator itListaIettrCor = listaIettrCor.iterator();
      while (itListaIettrCor.hasNext()) {
        PaiFilho object = (PaiFilho) itListaIettrCor.next();
        object.atribuirPKPai();
        pojoHistorico.getItemEstrtIndResulCorIettrcores().add(object);
        // salva os filhos
        session.save(object);
        objetosInseridos.add(object);
      }

      gerarHistorico(Historico.INCLUIR);

      tx.commit();

      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setOperacao("INC");
        Iterator it2 = objetosInseridos.iterator();

        while (it2.hasNext()) {
          logBean.setObj(it2.next());
          loggerAuditoria.info(logBean.toString());
        }
      }
    } catch (HibernateException e) {
      if (tx != null)
        try {
          tx.rollback();
        } catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  /**
   *
   * @param itemEstrtIndResul
   * @param listaQtd
   * @throws ECARException
   */
    @SuppressWarnings("static-access")
  public void alterar(ItemEstrtIndResulIettr itemEstrtIndResul, List<ItemEstrutFisicoIettf> listaQtd) throws ECARException {
    pojoHistorico = new HistoricoItemEstrtIndResulIettr();
    Boolean qtdPrevistaBloqueado = false;
    ItemEstruturaIett itemEstrutura = itemEstrtIndResul.getItemEstruturaIett();
    if (itemEstrutura.getIndBloqPlanejamentoIett() != null && itemEstrutura.getIndBloqPlanejamentoIett().equals("S")) {
      EstruturaFuncaoDao estruturaFuncaoDao = new EstruturaFuncaoDao(request);
      EstruturaFuncaoEttf estruturaFuncaoQtdePrevista = new EstruturaFuncaoEttf();
      estruturaFuncaoQtdePrevista = (EstruturaFuncaoEttf) estruturaFuncaoDao.getQuantidadesPrevistas(itemEstrutura.getEstruturaEtt());
      if (estruturaFuncaoQtdePrevista.getIndPodeBloquearEttf() != null && estruturaFuncaoQtdePrevista.getIndPodeBloquearEttf().equals("S")) {
        qtdPrevistaBloqueado = true;
      }
    }

    inicializarLogBean();
    Transaction tx = null;

    try {

      ArrayList objetosInseridos = new ArrayList();
      ArrayList objetosExcluidos = new ArrayList();
      tx = session.beginTransaction();

      // Atualizando a lista de ItemEstrtIndResulCorIettrcor

      /* apaga os filhos para serem gravados novamente */
      if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null) {
        Iterator itAtb = itemEstrtIndResul.getItemEstrtIndResulCorIettrcores().iterator();
        while (itAtb.hasNext()) {
          ItemEstrtIndResulCorIettrcor iettrCor = (ItemEstrtIndResulCorIettrcor) itAtb.next();
          session.delete(iettrCor);
          // objetos.add(iettrCor);
        }
      } else
        itemEstrtIndResul.setItemEstrtIndResulCorIettrcores(new HashSet<ItemEstrtIndResulCorIettrcor>());
      itemEstrtIndResul.setItemEstrtIndResulCorIettrcores(null);
      this.setItemEstrtIndResulCorIettrcor(request, itemEstrtIndResul);

      List filhos = new ArrayList();
      if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null)
        filhos.addAll(itemEstrtIndResul.getItemEstrtIndResulCorIettrcores());

      Iterator iterator = filhos.iterator();

      // salva os filhos
      while (iterator.hasNext()) {
        PaiFilho object = (PaiFilho) iterator.next();
        object.atribuirPKPai();
        session.save(object);
      }

      // *************

      // ConfiguracaoDao dao = new ConfiguracaoDao(request);
      // ConfiguracaoCfg config = dao.getConfiguracao();
      //
      // HistoricoMaster historicoMaster = new HistoricoMaster();
      //
      // if ("S".equals(config.getIndGerarHistoricoCfg())) {
      //
      // historicoMaster.setDataHoraHistorico(new Date());
      // historicoMaster.setUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
      // historicoMaster.setCodReferenciaGeral(itemEstrtIndResul.getItemEstruturaIett().getCodIett());
      // historicoMaster.setHistoricoMotivo((HistoricoMotivo)
      // super.buscar(HistoricoMotivo.class, Long.valueOf(23)));
      // session.save(historicoMaster);
      //
      // HistoricoIettrH iettrh = new HistoricoIettrH();
      // ItemEstrtIndResulIettr iettrhAntesAlteracao =
      // (ItemEstrtIndResulIettr)
      // super.buscar(ItemEstrtIndResulIettr.class, itemEstrtIndResul
      // .getCodIettir());
      // iettrh.setItemEstruturaIett(iettrhAntesAlteracao.getItemEstruturaIett());
      // iettrh.setUnidMedidaIettr(iettrhAntesAlteracao.getUnidMedidaIettr());
      // iettrh.setCodUnidMedidaIettr(iettrhAntesAlteracao.getCodUnidMedidaIettr());
      // iettrh.setDescricaoIettir(iettrhAntesAlteracao.getDescricaoIettir());
      // iettrh.setNomeIettir(iettrhAntesAlteracao.getNomeIettir());
      // iettrh.setIndProjecaoIettr(iettrhAntesAlteracao.getIndProjecaoIettr());
      // iettrh.setIndAcumulavelIettr(iettrhAntesAlteracao.getIndAcumulavelIettr());
      // iettrh.setIndPublicoIettr(iettrhAntesAlteracao.getIndPublicoIettr());
      // iettrh.setIndTipoQtde(iettrhAntesAlteracao.getIndTipoQtde());
      // iettrh.setIndValorFinalIettr(iettrhAntesAlteracao.getIndValorFinalIettr());
      // iettrh.setIndRealPorLocal(iettrhAntesAlteracao.getIndRealPorLocal());
      //
      // // alteracao nova tela
      // iettrh.setIndPrevPorLocal(iettrhAntesAlteracao.getIndPrevPorLocal());
      // // alteracao nova tela
      //
      // iettrh.setSisAtributoSatb(iettrhAntesAlteracao.getSisAtributoSatb());
      // iettrh.setFonteIettr(iettrhAntesAlteracao.getFonteIettr());
      // iettrh.setIndiceMaisRecenteIettr(iettrhAntesAlteracao.getIndiceMaisRecenteIettr());
      // iettrh.setDataApuracaoIettr(iettrhAntesAlteracao.getDataApuracaoIettr());
      // iettrh.setFormulaIettr(iettrhAntesAlteracao.getFormulaIettr());
      // iettrh.setPeriodicidadePrdc(iettrhAntesAlteracao.getPeriodicidadePrdc());
      // iettrh.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
      // iettrh.setDataUltManutencao(itemEstrtIndResul.getDataUltManutencao());
      // iettrh.setHistoricoMaster(historicoMaster);
      //
      // session.save(iettrh);
      //
      // }

      if (!qtdPrevistaBloqueado && itemEstrtIndResul.getIndPrevPorLocal().equals("N")) { //atualiza os valores previstos somente quando n�o for por local.
        // excluir todas as quantidades previstas dentro do per�odo do item de estrutura.
        ItemEstrutFisicoDao itemEstrutFisicoDao = new ItemEstrutFisicoDao(request);
        List listaAux = itemEstrutFisicoDao.getListaPrevistosIettr(itemEstrtIndResul);
        //listaAux.addAll(itemEstrtIndResul.getItemEstrutFisicoIettfs());

        Iterator itAux = listaAux.iterator();

        while (itAux.hasNext()) {
          ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itAux.next();
          itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
          itemEstrutFisico.setDataUltManutencao(new Date());

          // if ("S".equals(config.getIndGerarHistoricoCfg())) {
          //
          // HistoricoIettfH iettfh = new HistoricoIettfH();
          //
          // iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
          // iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
          // iettfh.setItemEstrtIndResulIettr(itemEstrutFisico.getItemEstrtIndResulIettr());
          // iettfh.setExercicioExe(itemEstrutFisico.getExercicioExe());
          // iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
          // iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
          // iettfh.setIndAtivoIettf(Dominios.NAO);
          // iettfh.setHistoricoMaster(historicoMaster);
          // session.save(iettfh);
          // }

          objetosExcluidos.add(itemEstrutFisico);

          session.delete(itemEstrutFisico);
        }
      } else {
        itemEstrtIndResul.setItemEstrutFisicoIettfs(new HashSet<ItemEstrutFisicoIettf>());
      }

      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setOperacao("EXC");
        Iterator it = objetosExcluidos.iterator();

        while (it.hasNext()) {
          logBean.setObj(it.next());
          loggerAuditoria.info(logBean.toString());
        }
      }

      // salva o pai

      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setObj(itemEstrtIndResul);
        logBean.setOperacao("ALT");
        loggerAuditoria.info(logBean.toString());
      }

      if (!qtdPrevistaBloqueado && itemEstrtIndResul.getIndPrevPorLocal().equals("N")) {
        Iterator itQtd = listaQtd.iterator();
        while (itQtd.hasNext()) {
          ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itQtd.next();
          //Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio         
          //itemEstrutFisico.getComp_id().setCodIettir(itemEstrtIndResul.getCodIettir());
          itemEstrutFisico.setItemEstrtIndResulIettr(itemEstrtIndResul);
          itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
          itemEstrutFisico.setDataUltManutencao(new Date());
          // itemEstrutFisico.setIndExclusaoPosHistorico(Boolean.FALSE);
          session.save(itemEstrutFisico);

          // HistoricoIettfH iettfh = new HistoricoIettfH();
          // iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
          // iettfh.setItemEstrtIndResulIettr((ItemEstrtIndResulIettr)
          // this.buscar(ItemEstrtIndResulIettr.class,
          // itemEstrutFisico.getComp_id()
          // .getCodIettir()));
          // iettfh.setExercicioExe((ExercicioExe)
          // this.buscar(ExercicioExe.class,
          // itemEstrutFisico.getComp_id().getCodExe()));
          // iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
          // iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
          // iettfh.setIndAtivoIettf(itemEstrutFisico.getIndAtivoIettf());
          // iettfh.setHistoricoMaster(historicoMaster);
          // iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
          // session.save(iettfh);

          objetosInseridos.add(itemEstrutFisico);
        }
      }

      pojoHistorico.carregar(itemEstrtIndResul);
      //gerarHistorico(Historico.ALTERAR);
      tx.commit();

      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setOperacao("INC");
        Iterator it2 = objetosInseridos.iterator();

        while (it2.hasNext()) {
          logBean.setObj(it2.next());
          loggerAuditoria.info(logBean.toString());
        }
      }
    } catch (HibernateException e) {
      if (tx != null)
        try {
          tx.rollback();
        } catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
  }

  /**
   * Sobrecarga do m�todo "alterar"
   *
   * @param itemEstrtIndResul
   * @param listaQtd
   * @param iettrCor
   * @throws ECARException
   */
  public void alterar(ItemEstrtIndResulIettr itemEstrtIndResul, List listaQtd, List iettrCor) throws ECARException {
    Boolean qtdPrevistaBloqueado = false;
    ItemEstruturaIett itemEstrutura = itemEstrtIndResul.getItemEstruturaIett();
    if (itemEstrutura.getIndBloqPlanejamentoIett() != null && itemEstrutura.getIndBloqPlanejamentoIett().equals("S")) {
      EstruturaFuncaoDao estruturaFuncaoDao = new EstruturaFuncaoDao(request);
      EstruturaFuncaoEttf estruturaFuncaoQtdePrevista = new EstruturaFuncaoEttf();
      estruturaFuncaoQtdePrevista = (EstruturaFuncaoEttf) estruturaFuncaoDao.getQuantidadesPrevistas(itemEstrutura.getEstruturaEtt());
      if (estruturaFuncaoQtdePrevista.getIndPodeBloquearEttf().equals("S")) {
        qtdPrevistaBloqueado = true;
      }
    }

    inicializarLogBean();
    Transaction tx = null;

    try {

      ArrayList objetosInseridos = new ArrayList();
      ArrayList objetosExcluidos = new ArrayList();
      tx = session.beginTransaction();

      // Atualizando a lista de ItemEstrtIndResulCorIettrcor
      List listIettrcor = new ArrayList();
      if (itemEstrtIndResul.getItemEstrtIndResulCorIettrcores() != null)
        listIettrcor.addAll(itemEstrtIndResul.getItemEstrtIndResulCorIettrcores());

      Iterator itIettrcor = listIettrcor.iterator();
      while (itIettrcor.hasNext()) {
        ItemEstrtIndResulCorIettrcor iettrcor = (ItemEstrtIndResulCorIettrcor) itIettrcor.next();
        session.update(iettrcor);
      }

      // ConfiguracaoDao dao = new ConfiguracaoDao(request);
      // ConfiguracaoCfg config = dao.getConfiguracao();
      //
      // HistoricoMaster historicoMaster = new HistoricoMaster();
      //
      // if ("S".equals(config.getIndGerarHistoricoCfg())) {
      //
      // historicoMaster.setDataHoraHistorico(new Date());
      // historicoMaster.setUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
      // historicoMaster.setCodReferenciaGeral(itemEstrtIndResul.getItemEstruturaIett().getCodIett());
      // historicoMaster.setHistoricoMotivo((HistoricoMotivo)
      // super.buscar(HistoricoMotivo.class, Long.valueOf(23)));
      // session.save(historicoMaster);
      //
      // HistoricoIettrH iettrh = new HistoricoIettrH();
      // ItemEstrtIndResulIettr iettrhAntesAlteracao =
      // (ItemEstrtIndResulIettr)
      // super.buscar(ItemEstrtIndResulIettr.class, itemEstrtIndResul
      // .getCodIettir());
      // iettrh.setItemEstruturaIett(iettrhAntesAlteracao.getItemEstruturaIett());
      // iettrh.setUnidMedidaIettr(iettrhAntesAlteracao.getUnidMedidaIettr());
      // iettrh.setCodUnidMedidaIettr(iettrhAntesAlteracao.getCodUnidMedidaIettr());
      // iettrh.setDescricaoIettir(iettrhAntesAlteracao.getDescricaoIettir());
      // iettrh.setNomeIettir(iettrhAntesAlteracao.getNomeIettir());
      // iettrh.setIndProjecaoIettr(iettrhAntesAlteracao.getIndProjecaoIettr());
      // iettrh.setIndAcumulavelIettr(iettrhAntesAlteracao.getIndAcumulavelIettr());
      // iettrh.setIndPublicoIettr(iettrhAntesAlteracao.getIndPublicoIettr());
      // iettrh.setIndTipoQtde(iettrhAntesAlteracao.getIndTipoQtde());
      // iettrh.setIndValorFinalIettr(iettrhAntesAlteracao.getIndValorFinalIettr());
      // iettrh.setIndRealPorLocal(iettrhAntesAlteracao.getIndRealPorLocal());
      //
      // // alteracao nova tela
      // iettrh.setIndPrevPorLocal(iettrhAntesAlteracao.getIndPrevPorLocal());
      // // alteracao nova tela
      //
      // iettrh.setSisAtributoSatb(iettrhAntesAlteracao.getSisAtributoSatb());
      // iettrh.setFonteIettr(iettrhAntesAlteracao.getFonteIettr());
      // iettrh.setIndiceMaisRecenteIettr(iettrhAntesAlteracao.getIndiceMaisRecenteIettr());
      // iettrh.setDataApuracaoIettr(iettrhAntesAlteracao.getDataApuracaoIettr());
      // iettrh.setFormulaIettr(iettrhAntesAlteracao.getFormulaIettr());
      // iettrh.setPeriodicidadePrdc(iettrhAntesAlteracao.getPeriodicidadePrdc());
      // iettrh.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
      // iettrh.setDataUltManutencao(itemEstrtIndResul.getDataUltManutencao());
      // iettrh.setHistoricoMaster(historicoMaster);
      //
      // session.save(iettrh);
      // }

      if ((!qtdPrevistaBloqueado) && itemEstrtIndResul.getIndPrevPorLocal().equals("N")) {
        // excluir todas as quantidades previstas considerando o per�odo do item.
        ItemEstrutFisicoDao itemEstrutFisicoDao = new ItemEstrutFisicoDao(request);
        List listaAux = itemEstrutFisicoDao.getListaPrevistosIettr(itemEstrtIndResul);       
        //List listaAux = new ArrayList();
        //listaAux.addAll(itemEstrtIndResul.getItemEstrutFisicoIettfs());

        Iterator itAux = listaAux.iterator();

        while (itAux.hasNext()) {
          ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itAux.next();
          itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
          itemEstrutFisico.setDataUltManutencao(new Date());

          // if ("S".equals(config.getIndGerarHistoricoCfg())) {
          //
          // HistoricoIettfH iettfh = new HistoricoIettfH();
          //
          // iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
          // iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
          // iettfh.setItemEstrtIndResulIettr(itemEstrutFisico.getItemEstrtIndResulIettr());
          // iettfh.setExercicioExe(itemEstrutFisico.getExercicioExe());
          // iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
          // iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
          // iettfh.setIndAtivoIettf(Dominios.NAO);
          // iettfh.setHistoricoMaster(historicoMaster);
          // session.save(iettfh);
          // }

          objetosExcluidos.add(itemEstrutFisico);

          session.delete(itemEstrutFisico);
        }
      }

      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setOperacao("EXC");
        Iterator it = objetosExcluidos.iterator();

        while (it.hasNext()) {
          logBean.setObj(it.next());
          loggerAuditoria.info(logBean.toString());
        }
      }

      // salva o pai
      session.update(itemEstrtIndResul);

      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setObj(itemEstrtIndResul);
        logBean.setOperacao("ALT");
        loggerAuditoria.info(logBean.toString());
      }

      if ((!qtdPrevistaBloqueado) && itemEstrtIndResul.getIndPrevPorLocal().equals("N")) {
        Iterator itQtd = listaQtd.iterator();
        while (itQtd.hasNext()) {
          ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) itQtd.next();
          //Mantis 0010128 - Qtd prevista n�o � mais informado por exerc�cio
          //itemEstrutFisico.getComp_id().setCodIettir(itemEstrtIndResul.getCodIettir());
          itemEstrutFisico.setItemEstrtIndResulIettr(itemEstrtIndResul);
          itemEstrutFisico.setUsuarioUsuManutencao(itemEstrtIndResul.getUsuarioUsuManutencao());
          itemEstrutFisico.setDataUltManutencao(new Date());
          // itemEstrutFisico.setIndExclusaoPosHistorico(Boolean.FALSE);
          session.save(itemEstrutFisico);

          // HistoricoIettfH iettfh = new HistoricoIettfH();
          // iettfh.setDataInclusaoIettf(itemEstrutFisico.getDataInclusaoIettf());
          // iettfh.setItemEstrtIndResulIettr((ItemEstrtIndResulIettr)
          // this.buscar(ItemEstrtIndResulIettr.class,
          // itemEstrutFisico.getComp_id()
          // .getCodIettir()));
          // iettfh.setExercicioExe((ExercicioExe)
          // this.buscar(ExercicioExe.class,
          // itemEstrutFisico.getComp_id().getCodExe()));
          // iettfh.setQtdPrevistaIettf(itemEstrutFisico.getQtdPrevistaIettf());
          // iettfh.setUsuManutencao(itemEstrutFisico.getUsuarioUsuManutencao());
          // iettfh.setIndAtivoIettf(itemEstrutFisico.getIndAtivoIettf());
          // iettfh.setHistoricoMaster(historicoMaster);
          // iettfh.setDataUltManutencao(itemEstrutFisico.getDataUltManutencao());
          // session.save(iettfh);

          objetosInseridos.add(itemEstrutFisico);
        }
      }

      pojoHistorico.carregar(itemEstrtIndResul);
      //gerarHistorico(Historico.ALTERAR);
      tx.commit();

      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setOperacao("INC");
        Iterator it2 = objetosInseridos.iterator();

        while (it2.hasNext()) {
          logBean.setObj(it2.next());
          loggerAuditoria.info(logBean.toString());
        }
      }
    } catch (HibernateException e) {
      if (tx != null)
        try {
          tx.rollback();
        } catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
  }

  /**
   * Verifica se o indicador existe em algum objeto AcompRealFisicoArf
   *
         * @param indicador
   * @return boolean (true - existe/false - n�o existe)
   */
  public boolean verificarExistenciaEmAcompRealFisicoArf(ItemEstrtIndResulIettr indicador) {
    boolean existe = false;

    if (indicador.getAcompRealFisicoArfs() != null && !indicador.getAcompRealFisicoArfs().isEmpty()) {
      Iterator it = indicador.getAcompRealFisicoArfs().iterator();

      while (it.hasNext()) {
        AcompRealFisicoArf arf = (AcompRealFisicoArf) it.next();

        if (arf.getQtdRealizadaArf() != null && arf.getQtdRealizadaArf().doubleValue() > 0) {
          return true;
        }
      }
    }

    return existe;
  }

  public boolean verificarExistenciaEmPrevistos(ItemEstrtIndResulIettr indicador) {
    boolean existe = false;

    if (indicador.getItemEstrutFisicoIettfs() != null && !indicador.getItemEstrutFisicoIettfs().isEmpty()) {
      Iterator it = indicador.getItemEstrutFisicoIettfs().iterator();

      while (it.hasNext()) {
        ItemEstrutFisicoIettf itemFisico = (ItemEstrutFisicoIettf) it.next();
        //Est� sendo gravado 0 para previsto, nos casos em que for preenchido com 0
        if (itemFisico.getQtdPrevistaIettf() != null) {
          return true;
        }
      }
    }

    return existe;
  }
 
 
        /**
         *
         * @param itemEstrtIndResul
         * @return
         */
        public String getUnidadeUsada(ItemEstrtIndResulIettr itemEstrtIndResul) {
    if (itemEstrtIndResul != null) {
      if (itemEstrtIndResul.getCodUnidMedidaIettr() != null) {
        return itemEstrtIndResul.getCodUnidMedidaIettr().getDescricaoSatb();
      } else {
        return itemEstrtIndResul.getUnidMedidaIettr();
      }
    }
    return "";
  }

  /**
   * Retorna os nomes dos Gr�ficos de Grupo de um determinado ItemEstrutura e
   * os p�blicos definidos pelo sistema.
   *
         * @param iett
         * @return
         * @throws ECARException
   */
  public List retornaNomesGraficoGrupo(ItemEstruturaIett iett) throws ECARException {
    List retorno = new ArrayList();

    if (iett != null) {
      try {
        Query q = this.getSession().createQuery(
            "select distinct iettIndRes.labelGraficoGrupoIettir from ItemEstrtIndResulIettr iettIndRes "
                + "where (iettIndRes.itemEstruturaIett.codIett = :codIett or iettIndRes.indPublicoIettr like :indPublico) "
                + "and iettIndRes.labelGraficoGrupoIettir is not null " + "and iettIndRes.indAtivoIettr like :indAtivo");
        q.setLong("codIett", iett.getCodIett().longValue());
        q.setString("indPublico", "S");
        q.setString("indAtivo", "S");

        retorno = q.list();
      } catch (HibernateException e) {
        this.logger.error(e);
        throw new ECARException(e);
      }
    }

    return retorno;
  }

  /**
   * Retorna todos os indicadores do item que pertencem ao mesmo
   * "Grupo de Gr�fico do Indicador" e todos os indicadores que, apesar de n�o
   * serem do mesmo item foram definidos como p�blicos e pertencem ao mesmo
   * "Grupo de Gr�fico do Indicador".
   *
   *
   * @param itemEstrtIndResulIettr
   * @return
   * @throws ECARException
   */
  public List retornaIndicadoresGraficoGrupo(ItemEstrtIndResulIettr itemEstrtIndResulIettr) throws ECARException {
    List retorno = new ArrayList();

    if (itemEstrtIndResulIettr != null && itemEstrtIndResulIettr.getItemEstruturaIett() != null) {
      try {
        Query q = this.getSession().createQuery(
            "select distinct iettIndRes from ItemEstrtIndResulIettr iettIndRes "
                + "where (iettIndRes.itemEstruturaIett.codIett = :codIett or iettIndRes.indPublicoIettr like :indPublico) "
                + "and iettIndRes.labelGraficoGrupoIettir like :labelGrupo " + "and iettIndRes.indAtivoIettr like :indAtivo");
        q.setLong("codIett", itemEstrtIndResulIettr.getItemEstruturaIett().getCodIett().longValue());
        q.setString("indPublico", "S");
        q.setString("labelGrupo", itemEstrtIndResulIettr.getLabelGraficoGrupoIettir());
        q.setString("indAtivo", "S");

        retorno = q.list();
      } catch (HibernateException e) {
        this.logger.error(e);
        throw new ECARException(e);
      }
    }
    return retorno;
  }

  /**
   * Verifica no banco a exist�ncia de algum indicador com o nome e grupo
   * passado como par�metro e retorna o c�digo iett.
   *
   * @param nomeIettir
   * @param labelGraficoGrupoIettir
   * @return Retorna o c�digo iett do item encontrado.
   * @throws ECARException
   */
  public long verificarExistenciaNomeIndicadorGraficoGrupo(String nomeIettir, String labelGraficoGrupoIettir) throws ECARException {
    List indicadoresGrafico = new ArrayList();

    try {
      Query q = this.getSession().createQuery(
          "select distinct iettIndRes from ItemEstrtIndResulIettr iettIndRes " + "where (upper(iettIndRes.nomeIettir) = upper(:nomeIettir) and "
              + "    upper(iettIndRes.labelGraficoGrupoIettir) = upper(:labelGraficoGrupoIettir) and" + "    iettIndRes.indAtivoIettr = :indAtivo)");
      q.setString("nomeIettir", nomeIettir);
      q.setString("labelGraficoGrupoIettir", labelGraficoGrupoIettir);
      q.setString("indAtivo", "S");

      indicadoresGrafico = q.list();

      if (indicadoresGrafico.size() > 0) {
        ItemEstrtIndResulIettr indResul = (ItemEstrtIndResulIettr) indicadoresGrafico.get(0);
        return indResul.getCodIettir();
      }

      // Retorna -1 caso nenhum indicador seja encontrado.
      return -1;

    } catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }

  /*
   * Novos M�todos para hist�rico
   */

        /**
         *
         * @param itemEstrtIndResul
         * @return
         */
        public String getUnidadeUsada(HistoricoItemEstrtIndResulIettr itemEstrtIndResul) {
    if (itemEstrtIndResul != null) {
      if (itemEstrtIndResul.getCodUnidMedidaIettr() != null) {
        return itemEstrtIndResul.getCodUnidMedidaIettr().getDescricaoSatb();
      } else {
        return itemEstrtIndResul.getUnidMedidaIettr();
      }
    }
    return "";
  }

        /**
         *
         * @param itemEstrtIndResul
         * @return
         * @throws ECARException
         */
        public String getSomaQuantidadePrevista(HistoricoItemEstrtIndResulIettr itemEstrtIndResul) throws ECARException {
    try {
      String retorno = "0";
      double total = 0;

      if ("S".equals(itemEstrtIndResul.getIndAcumulavelIettr())) {
        if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
          Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
          while (it.hasNext()) {
            ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
            if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf()))
              total += itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
          }
          retorno = Util.formataMoeda(total);
        }
      } else {

        if ("M".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // Maior
          if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
            Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
            double maior = 0;
            while (it.hasNext()) {
              ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
              if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) {
                if (itemEstrutFisico.getQtdPrevistaIettf().doubleValue() > maior) {
                  maior = itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
                }
                total = maior;
              }
            }
            retorno = Util.formataMoeda(total);
          }
        } else if ("U".equals(itemEstrtIndResul.getIndValorFinalIettr())) { // Ultimo
          double ultimo = 0;
          if (itemEstrtIndResul.getItemEstrutFisicoIettfs() != null) {
            Iterator it = itemEstrtIndResul.getItemEstrutFisicoIettfs().iterator();
            while (it.hasNext()) {
              ItemEstrutFisicoIettf itemEstrutFisico = (ItemEstrutFisicoIettf) it.next();
              if ("S".equalsIgnoreCase(itemEstrutFisico.getIndAtivoIettf())) {
                ultimo = itemEstrutFisico.getQtdPrevistaIettf().doubleValue();
                break;
              }
            }
          }
          retorno = Util.formataMoeda(ultimo);
        } else if ("N".equals(itemEstrtIndResul.getIndValorFinalIettr())) {
          retorno = "";
        }
      }
      return retorno;
    } catch (Exception e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }

        /**
         *
         * @param inicio
         * @param fim
         * @return
         */
    @SuppressWarnings("empty-statement")
        public List<HistoricoItemEstrtIndResulIettr> listaHistorico(Date inicio, Date fim) {
    historico = new Historico<HistoricoItemEstrtIndResulIettr, ItemEstrtIndResulIettr>() {
    };
    try {
      return historico.listaObjetoHistorico(null, inicio, fim, null, null);
     
     
    } catch (Exception e) {
      e.printStackTrace();
    }
    ;
    return null;
  }

    /**
     *
     * @param chaveHistorico
     * @return
     */
    @SuppressWarnings("empty-statement")
  public HistoricoItemEstrtIndResulIettr getHistorico(Long chaveHistorico) {
    historico = new Historico<HistoricoItemEstrtIndResulIettr, ItemEstrtIndResulIettr>() {
    };
    try {
      return historico.getObjetoSerializado(chaveHistorico);
    } catch (Exception e) {
      e.printStackTrace();
    }
    ;
    return null;
  }

  private void gerarHistorico(Long tipoHistorico) throws ECARException {

    if (this.pojoHistorico != null) {
      historico = new Historico<HistoricoItemEstrtIndResulIettr, ItemEstrtIndResulIettr>() {
      };

      ItemEstruturaDao iettDao = new ItemEstruturaDao(null);
      ItemEstruturaIett itemEstruturaIett = (ItemEstruturaIett) iettDao
          .buscar(ItemEstruturaIett.class, pojoHistorico.getItemEstruturaIett().getCodIett());
      EstruturaDao estrDao = new EstruturaDao(null);
      EstruturaEtt ett = (EstruturaEtt) estrDao.buscar(EstruturaEtt.class, pojoHistorico.getItemEstruturaIett().getEstruturaEtt().getCodEtt());

      Hibernate.initialize(ett);
      Hibernate.initialize(itemEstruturaIett);
      itemEstruturaIett.setEstruturaEtt(ett);

      pojoHistorico.setItemEstruturaIett(itemEstruturaIett);

      this.historico.setHistorico(pojoHistorico, tipoHistorico, ((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario(),
          session);
    }
  }
  /*
   * Fim dos M�todos para hist�rico
   */

  public Set<LocalGrupoLgp> getGrupoLocaisItem(ItemEstruturaIett itemEstrt){
    Set<LocalGrupoLgp> grupos = new HashSet<LocalGrupoLgp>();
   
    Iterator it = itemEstrt.getItemEstrutLocalIettls().iterator();
    while (it.hasNext()){
      ItemEstrutLocalIettl local = (ItemEstrutLocalIettl) it.next();
            grupos.add(local.getLocalItemLit().getLocalGrupoLgp());
            getInferior(local.getLocalItemLit(), grupos);           
    }
   
   
    return grupos;
  }

  private void getInferior(LocalItemLit local,
      Set<LocalGrupoLgp> grupos) {
   
    if (local.getLocalItemHierarquiaLithsByCodLitPai() != null){
      Iterator it = local.getLocalItemHierarquiaLithsByCodLitPai().iterator();
      while (it.hasNext()){
        LocalItemLit loc = (LocalItemLit) it.next();
        grupos.add(loc.getLocalGrupoLgp());
              getInferior(loc, grupos);           
       
      }
     
    }
   
  }
 
  public boolean podeAlterarNivelAbrangencia(ItemEstrtIndResulIettr itemEstrtIndResul){

    boolean resultado = true;
    boolean comRegistrosEmPrevistos = verificarExistenciaEmPrevistos(itemEstrtIndResul);
    boolean comRegistrosEmRealFisico = verificarExistenciaEmAcompRealFisicoArf(itemEstrtIndResul);
    boolean indicadorPrevPorLocal = ("S".equals(itemEstrtIndResul.getIndPrevPorLocal()));
    boolean indicadorRealPorLocal = ("S".equals(itemEstrtIndResul.getIndRealPorLocal()));
   
    if ((indicadorPrevPorLocal)&&(indicadorRealPorLocal)){//Se os dois estiverem como por local, s� pode alterar a abrangencia se ambos estiverem vazios
      resultado = (!comRegistrosEmPrevistos)&&(!comRegistrosEmRealFisico);
    }
    else
    {
      if ((indicadorPrevPorLocal)||(indicadorRealPorLocal)){ //se somente 1 for por local, se esse estiver com registro n�o pode alterar
        if (((indicadorPrevPorLocal)&&(comRegistrosEmPrevistos))||((indicadorRealPorLocal)&&(comRegistrosEmRealFisico)))
        {
          resultado = false
        }
       
      }
      else //nenhum dois dois � por local, ent�o, n�o pode alterar abrang�ncia
        resultado = false;
    }
   
       return resultado;
  }
 

 
 
}// fim classe
TOP

Related Classes of ecar.dao.ItemEstrtIndResulDao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.