Package ecar.dao

Source Code of ecar.dao.ServicoDao

package ecar.dao;

import comum.database.Dao;

import comum.util.Data;

import ecar.exception.ECARException;

import ecar.pojo.AcompReferenciaItemAri;
import ecar.pojo.HistoricoPtcH;
import ecar.pojo.ItemEstruturaIett;
import ecar.pojo.ParametroPar;
import ecar.pojo.PontoCriticoPtc;
import ecar.pojo.ServicoParametroSerPar;
import ecar.pojo.ServicoSer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

/**
*
* @author 70744416353
*/
public class ServicoDao
    extends Dao
{
    /**
     *
     * @param request
     */
    public ServicoDao( HttpServletRequest request )
    {
        super(  );
        super.request = request;
    }

    /**
     * (1)Apura��o de Conclus�o de Datas Cr�ticas (Pontos Cr�ticos)
     *
     * Calcular o percentual de Datas Cr�ticas que foram solucionadas
     * (conclu�das) - basear o c�lculo nos dados que estiverem no
     * cadastro/hist�rico de datas cr�ticas do item. O c�lculo dever� ser
     * realizado em fun��o do n�mero de datas cr�ticas conclu�das at� a data
     * base passada como par�metro.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     * @param itemEstrutura
     *            item para o qual se deseja fazer as apura��es
     * @param dataBase
     *            dia de referencia para realiza��o das apura��es
     * @return
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoConclusaoPontosCriticos( ItemEstruturaIett itemEstrutura, Date dataBase )
                                           throws ECARException
    {
        double numDataCadastrada = 0;
        double numDataConcluida = 0;
        PontoCriticoDao pontoCriticoDao = new PontoCriticoDao( null );

        if ( ( itemEstrutura == null ) || ( dataBase == null ) )
        {
            throw new ECARException(  );
        }

        List<PontoCriticoPtc> pontosCriticos =
            pontoCriticoDao.listarItensIncluidosAntesDaDataBase( itemEstrutura,
                                                                 Data.addDias( 1, dataBase ) );

        if ( ( pontosCriticos != null ) && ( pontosCriticos.size(  ) > 0 ) )
        {
            numDataCadastrada = getTotalPontosCriticos( pontosCriticos, dataBase );
        }

        if ( numDataCadastrada == 0 )
        {
            return numDataCadastrada;
        }

        for ( Iterator itPontosCriticos = pontosCriticos.iterator(  ); itPontosCriticos.hasNext(  ); )
        {
            PontoCriticoPtc pontoCritico = (PontoCriticoPtc) itPontosCriticos.next(  );

            // se a �ltima atualiza��o no dia ou antes da dataBase
            if ( (
                         ( pontoCritico.getDataUltManutencaoPtc(  ) != null ) &&
                         ( Data.compareAnoMesDia( pontoCritico.getDataUltManutencaoPtc(  ),
                                                      dataBase ) <= 0 )
                      ) ||
                     ( pontoCritico.getDataUltManutencaoPtc(  ) == null ) )
            {
                // Verificar se o pontoCritico est� conclu�do na data Base
                if ( ( pontoCritico.getDataSolucaoPtc(  ) != null ) &&
                         ( Data.compareAnoMesDia( pontoCritico.getDataSolucaoPtc(  ),
                                                      dataBase ) <= 0 ) &&
                         ( ! estaExcluido( pontoCritico ) ) )
                {
                    numDataConcluida++;
                }
            } else
            {
                HistoricoPtcH historico = recuperaEstadoDasDatasNaDataBase( pontoCritico, dataBase );

                // Verificar se no historico o Ponto Critico est� concluido na
                // data Base
                if ( ( historico != null ) &&
                         ( historico.getDataSolucaoPtc(  ) != null ) &&
                         ( Data.compareAnoMesDia( historico.getDataSolucaoPtc(  ),
                                                      dataBase ) <= 0 ) &&
                         ( ! estaExcluido( historico ) ) )
                {
                    numDataConcluida++;
                }
            }
        } // fim for

        return ( 100 * numDataConcluida ) / numDataCadastrada;
    }

    /**
     * (1)Apura��o de Conclus�o de Datas Cr�ticas (Pontos Cr�ticos)
     *
     * Calcular o percentual de Datas Cr�ticas que foram solucionadas
     * (conclu�das) - basear o c�lculo nos dados que estiverem no
     * cadastro/hist�rico de datas cr�ticas do item. O c�lculo dever� ser
     * realizado em fun��o do n�mero de datas cr�ticas conclu�das at� a data
     * base passada como par�metro.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     * @param codIett
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es no formato
     *            dd/mm/aaaa
     *
     * @return percentual de Pontos Cr�ticos conclu�dos no dia da dataBase
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoConclusaoPontosCriticos( String codIett, String dataBase )
                                           throws ECARException
    {
        ItemEstruturaIett itemEstrutura =
            (ItemEstruturaIett) this.buscar( ItemEstruturaIett.class,
                                             Long.valueOf( codIett ) );
        Date data = Data.parseDate( dataBase );

        if ( ( itemEstrutura == null ) || ( data == null ) )
        {
            throw new ECARException(  );
        }

        return this.apuracaoConclusaoPontosCriticos( itemEstrutura, data );
    }

    /**
     * (2)Apura��o de Atraso de Conclus�o de Datas Cr�ticas (Pontos Cr�ticos)
     *
     * Calcular o percentual de Datas Cr�ticas que foram conclu�das
     * (solucionadas) depois da data fim - basear o c�lculo nos dados que
     * estiverem no cadastro do item. O c�lculo dever� ser realizado em fun��o
     * do n�mero de datas cr�ticas conclu�das depois da data fim, ou datas
     * cr�ticas n�o conclu�das e cuja data de conclus�o prevista j� ultrapassa a
     * data base passada como par�metro.
     *
     * Basear os c�lculos no estado do item no dia da data base.
     *
     * @param itemEstrutura
     *            item para o qual se deseja fazer as apura��es
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es
     *
     * @return percentual de Pontos Cr�ticos com atraso de conclus�o no dia da
     *         dataBase
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoAtrasoConclusaoPontosCriticos( ItemEstruturaIett itemEstrutura, Date dataBase )
                                                 throws ECARException
    {
        PontoCriticoDao pontoCriticoDao = new PontoCriticoDao( null );
        double numDataCadastrada = 0;
        double numDataAtrasoConclusao = 0;

        if ( itemEstrutura == null )
        {
            throw new ECARException(  );
        }

        List<PontoCriticoPtc> pontosCriticos =
            pontoCriticoDao.listarItensIncluidosAntesDaDataBase( itemEstrutura,
                                                                 Data.addDias( 1, dataBase ) );

        if ( ( pontosCriticos != null ) && ( pontosCriticos.size(  ) > 0 ) )
        {
            numDataCadastrada = getTotalPontosCriticos( pontosCriticos, dataBase );
        }

        if ( numDataCadastrada == 0 )
        {
            return numDataCadastrada;
        }

        for ( Iterator itPontosCriticos = pontosCriticos.iterator(  ); itPontosCriticos.hasNext(  ); )
        {
            PontoCriticoPtc pontoCritico = (PontoCriticoPtc) itPontosCriticos.next(  );

            // Ultima modifica��o antes da database
            if ( (
                         ( pontoCritico.getDataUltManutencaoPtc(  ) != null ) &&
                         ( Data.compareAnoMesDia( pontoCritico.getDataUltManutencaoPtc(  ),
                                                      dataBase ) <= 0 )
                      ) ||
                     ( pontoCritico.getDataUltManutencaoPtc(  ) == null ) )
            { // N�o houve modifica��o

                if ( (
                             ( pontoCritico.getDataLimitePtc(  ) != null ) && ( ! estaExcluido( pontoCritico ) )// Verifica se a Data Limite � menor do que a data da solu��o
                              &&
                             (
                                     ( pontoCritico.getDataSolucaoPtc(  ) != null ) &&
                                     (
                                             Data.compareAnoMesDia(
                                                                        pontoCritico.getDataLimitePtc(  ),
                                                                            pontoCritico.getDataSolucaoPtc(  ) ) < 0
                                          )
                                  )
                          )// Verifica se j� passou da data base e n�o foi  solucionado
                          ||
                         (
                                 ( pontoCritico.getDataSolucaoPtc(  ) == null ) &&
                                 ( Data.compareAnoMesDia(
                                                              pontoCritico.getDataLimitePtc(  ),
                                                                  dataBase ) < 0 )
                              ) )
                {
                    numDataAtrasoConclusao++;
                }
            } else
            {
                // buscar no historico
                HistoricoPtcH historico = this.recuperaEstadoDasDatasNaDataBase( pontoCritico, dataBase );

                if ( ( historico != null ) &&
                         ( historico.getDataLimitePtc(  ) != null ) &&
                         ( ! estaExcluido( historico ) ) &&
                         // Verifica se no dia da Data Base havia solu��o

                                 (
                                         ( historico.getDataSolucaoPtc(  ) != null )// Verifica no hist�rico se a Data Limite � menor do que a data da solu��o
                                          &&
                                         (
                                                 Data.compareAnoMesDia(
                                                                            historico.getDataLimitePtc(  ),
                                                                                historico.getDataSolucaoPtc(  ) ) < 0
                                              )
                                      )// Verifica se j� passou da data base e n�o foi solucionado
                                  ||
                                 (
                                         ( historico.getDataSolucaoPtc(  ) == null ) &&
                                         ( Data.compareAnoMesDia(
                                                                      historico.getDataLimitePtc(  ),
                                                                          dataBase ) < 0 )
                                      )
                              ) )
                {
                    numDataAtrasoConclusao++;
                }
            } // fim else - historico
        } // fim for

        return ( 100 * numDataAtrasoConclusao ) / numDataCadastrada;
    }

    /**
     * (2)Apura��o de Atraso de Conclus�o de Datas Cr�ticas (Pontos Cr�ticos)
     *
     * Calcular o percentual de Datas Cr�ticas que foram conclu�das
     * (solucionadas) depois da data fim - basear o c�lculo nos dados que
     * estiverem no cadastro do item. O c�lculo dever� ser realizado em fun��o
     * do n�mero de datas cr�ticas conclu�das depois da data fim, ou datas
     * cr�ticas n�o conclu�das e cuja data de conclus�o prevista j� ultrapassa a
     * data base passada como par�metro.
     *
     * Basear os c�lculos no estado do item no dia da data base.
     *
     * @param codIett
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es no formato
     *            dd/mm/aaaa
     *
     * @return percentual de Pontos Cr�ticos com atraso de conclus�o no dia da
     *         dataBase
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoAtrasoConclusaoPontosCriticos( String codIett, String dataBase )
                                                 throws ECARException
    {
        ItemEstruturaIett itemEstrutura =
            (ItemEstruturaIett) this.buscar( ItemEstruturaIett.class,
                                             Long.valueOf( codIett ) );
        Date data = Data.parseDate( dataBase );

        if ( ( itemEstrutura == null ) || ( data == null ) )
        {
            throw new ECARException(  );
        }

        return apuracaoAtrasoConclusaoPontosCriticos( itemEstrutura, data );
    }

    /**
     * (3)Apura��o de Total de Datas Cr�ticas (Pontos Cr�ticos)
     *
     * Calcular a quantidade total de Datas Cr�ticas cadastradas para um item -
     * basear o c�lculo nos dados que estiverem no cadastro do item.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     *
     * @param itemEstrutura
     *            item para o qual se deseja fazer as apura��es
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es
     *
     * @return quantidade de Pontos Cr�ticos no cadastro no dia da dataBase
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoTotalPontosCriticos( ItemEstruturaIett itemEstrutura, Date dataBase )
                                       throws ECARException
    {
        if ( ( itemEstrutura == null ) || ( dataBase == null ) )
        {
            throw new ECARException(  );
        }

        double contTotal = 0;
        List<PontoCriticoPtc> list =
            ( new PontoCriticoDao( null ) ).listarItensIncluidosAntesDaDataBase( itemEstrutura,
                                                                                 Data.addDias( 1, dataBase ) );

        contTotal = getTotalPontosCriticos( list, dataBase );

        return contTotal;
    }

    /**
     * (3)Apura��o de Total de Datas Cr�ticas (Pontos Cr�ticos)
     *
     * Calcular a quantidade total de Datas Cr�ticas cadastradas para um item -
     * basear o c�lculo nos dados que estiverem no cadastro do item.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     *
     * @param codIett
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es no formato
     *            dd/mm/aaaa
     *
     * @return quantidade de Pontos Cr�ticos no cadastro no dia da dataBase
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoTotalPontosCriticos( String codIett, String dataBase )
                                       throws ECARException
    {
        ItemEstruturaIett itemEstrutura =
            (ItemEstruturaIett) this.buscar( ItemEstruturaIett.class,
                                             Long.valueOf( codIett ) );
        Date data = Data.parseDate( dataBase );

        if ( ( itemEstrutura == null ) || ( data == null ) )
        {
            throw new ECARException(  );
        }

        return this.apuracaoTotalPontosCriticos( itemEstrutura, data );
    }

    /**
     *
     * (4)Apura��o de Reprograma��o de Datas Cr�ticas (Pontos Cr�ticos) -
     * C�lculo de Extens�o de Prazo
     *
     * Calcular a taxa de replanejamento das datas cr�ticas - basear o c�lculo
     * nos dados que estiverem no cadastro do item e no hist�rico de datas
     * cr�ticas. O c�lculo dever� ser realizado em fun��o do n�mero de extens�es
     * realizadas no prazo das datas cr�ticas do item e o n�mero total de datas
     * cr�ticas.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     * @param itemEstrutura
     *            item para o qual se deseja fazer as apura��es
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es
     *
     * @return percentual de Pontos Cr�ticos que reprogramaram exten��o de prazo
     *         at� o dia da Data Base
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoReprogramacaoExtensaoPontosCriticos( ItemEstruturaIett itemEstrutura, Date dataBase )
        throws ECARException
    {
        if ( itemEstrutura == null )
        {
            throw new ECARException(  );
        }

        double numDataCadastrada = 0;
        int numDatasExtendidas = 0;
        PontoCriticoDao pontoCriticoDao = new PontoCriticoDao( null );
        List<HistoricoPtcH> listHistPtc = null;
        HistoricoPtcH historicoAnterior = null;
        List<PontoCriticoPtc> pontosCriticos =
            pontoCriticoDao.listarItensIncluidosAntesDaDataBase( itemEstrutura,
                                                                 Data.addDias( 1, dataBase ) );

        if ( ( pontosCriticos != null ) && ( pontosCriticos.size(  ) > 0 ) )
        {
            numDataCadastrada = getTotalPontosCriticos( pontosCriticos, dataBase );
        }

        if ( numDataCadastrada == 0 )
        {
            return numDataCadastrada;
        }

        for ( PontoCriticoPtc pontoCritico : pontosCriticos )
        {
            listHistPtc =
                pontoCriticoDao.listarHistorico( pontoCritico,
                                                 Data.addDias( 1, dataBase ) );
            historicoAnterior = null;

            Set<Date> datasLimites = null;

            // N�o apresentou modifica��o no hist�rico
            if ( listHistPtc.size(  ) == 0 )
            {
                continue;
            }

            datasLimites = new HashSet<Date>( listHistPtc.size(  ) );

            for ( HistoricoPtcH historico : listHistPtc )
            {
                // Se a �ltima manuten��o for antes da dataBase � para considerar a situa��o atual do item
                if ( ( pontoCritico.getDataUltManutencaoPtc(  ) != null ) &&
                         ( Data.compareAnoMesDia( pontoCritico.getDataUltManutencaoPtc(  ),
                                                      dataBase ) <= 0 ) )
                {
                    if ( estaExcluido( pontoCritico ) )
                    {
                        break;
                    }
                    // Verifica se os valores s�o Nulos
                    else if ( (
                                      ( pontoCritico.getDataLimitePtc(  ) != null ) && ( historico != null ) &&
                                      ( historico.getDataLimitePtc(  ) != null )
                                   )// Verifica se a data Limite atual � maior do que a apresentada no historico
                                   &&
                                  (
                                          Data.compareAnoMesDia(
                                                                     pontoCritico.getDataLimitePtc(  ),
                                                                         historico.getDataLimitePtc(  ) ) > 0
                                       ) )
                    {
                        numDatasExtendidas++;

                        break; // p�ra o loop de hist�rico
                    } else if ( estaExcluido( pontoCritico ) )
                    {
                        break;
                    }
                }

                if ( ( historico != null ) && ( historicoAnterior != null ) )
                {
                    if ( ( historico.getDataLimitePtc(  ) != null ) &&
                             ( historicoAnterior.getDataLimitePtc(  ) != null ) &&
                             ( ! estaExcluido( historico ) ) &&
                             (
                                     Data.compareAnoMesDia(
                                                                historico.getDataLimitePtc(  ),
                                                                    historicoAnterior.getDataLimitePtc(  ) ) > 0
                                  ) )
                    {
                        numDatasExtendidas++;

                        break;
                    }
                }

                if ( ( historico != null ) && ( historico.getDataLimitePtc(  ) != null ) &&
                         ( ! estaExcluido( historico ) ) )
                {
                    boolean temNoHistorico = false;

                    if ( ( historico.getDataUltManutencaoPtc(  ) == null ) && (
                                                                                      historico.getDataLimitePtc(  ) != null
                                                                                   ) )
                    {
                        datasLimites.add( historico.getDataLimitePtc(  ) );
                    } else
                    {
                        for ( Date date : datasLimites )
                        {
                            // Se alguma data anterior for menor do que a data do
                            // historico
                            if ( date.compareTo( historico.getDataLimitePtc(  ) ) < 0 )
                            {
                                numDatasExtendidas++;
                                temNoHistorico = true;

                                break; // loop datasLimites
                            }
                        }

                        if ( temNoHistorico )
                        {
                            break; // para loop de historico
                        }

                        datasLimites.add( historico.getDataLimitePtc(  ) );
                    }
                }

                if ( historico.getDataUltManutencaoPtc(  ) != null )
                {
                    historicoAnterior = historico; // Para comparar com o valor anterior
                }
            } // fim for do loop de historico
        }

        return ( 100 * numDatasExtendidas ) / numDataCadastrada;
    }

    /**
     *
     * (4)Apura��o de Reprograma��o de Datas Cr�ticas (Pontos Cr�ticos) -
     * C�lculo de Extens�o de Prazo
     *
     * Calcular a taxa de replanejamento das datas cr�ticas - basear o c�lculo
     * nos dados que estiverem no cadastro do item e no hist�rico de datas
     * cr�ticas. O c�lculo dever� ser realizado em fun��o do n�mero de extens�es
     * realizadas no prazo das datas cr�ticas do item e o n�mero total de datas
     * cr�ticas.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     * @param codIett
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es no formato
     *            dd/mm/aaaa
     *
     * @return percentual de Pontos Cr�ticos que reprogramaram exten��o de prazo
     *         at� o dia da Data Base
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoReprogramacaoExtensaoPontosCriticos( String codIett, String dataBase )
        throws ECARException
    {
        ItemEstruturaIett itemEstrutura =
            (ItemEstruturaIett) this.buscar( ItemEstruturaIett.class,
                                             Long.valueOf( codIett ) );
        Date data = Data.parseDate( dataBase );

        if ( ( itemEstrutura == null ) || ( data == null ) )
        {
            throw new ECARException(  );
        }

        return this.apuracaoReprogramacaoExtensaoPontosCriticos( itemEstrutura, data );
    }

    /**
     * (5)Apura��o de Reprograma��o de Datas Cr�ticas (Pontos Cr�ticos) -
     * C�lculo Redu��o de Prazo Calcular a taxa de replanejamento das datas
     * cr�ticas - basear o c�lculo nos dados que estiverem no cadastro do item e
     * no hist�rico de datas cr�ticas. O c�lculo dever� ser realizado em fun��o
     * do n�mero de redu��es realizadas no prazo das datas cr�ticas do item e o
     * n�mero total de datas cr�ticas.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     * @param itemEstrutura
     *            item para o qual se deseja fazer as apura��es
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es
     *
     * @return percentual de Pontos Cr�ticos que reprogramaram redu��o de prazo
     *         at� o dia da Data Base
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoReprogramacaoReducaoPontosCriticos( ItemEstruturaIett itemEstrutura, Date dataBase )
                                                      throws ECARException
    {
        if ( itemEstrutura == null )
        {
            throw new ECARException(  );
        }

        double numDataCadastrada = 0;
        int numDatasReduzidas = 0;
        PontoCriticoDao pontoCriticoDao = new PontoCriticoDao( null );
        List<HistoricoPtcH> listHistPtc = null;
        List<HistoricoPtcH> setHistPtc = null;
        HistoricoPtcH historicoAnterior = null;
        HistoricoPtcH primeiroRegistro = null; // O primeiro registro no hist�rico � a proje��o inicial

        List<PontoCriticoPtc> pontosCriticos =
            pontoCriticoDao.listarItensIncluidosAntesDaDataBase( itemEstrutura,
                                                                 Data.addDias( 1, dataBase ) ); // listar(itemEstrutura);

        if ( ( pontosCriticos != null ) && ( pontosCriticos.size(  ) > 0 ) )
        {
            numDataCadastrada = getTotalPontosCriticos( pontosCriticos, dataBase );
        }

        if ( numDataCadastrada == 0 )
        {
            return numDataCadastrada;
        }

        for ( PontoCriticoPtc pontoCritico : pontosCriticos )
        {
            listHistPtc =
                pontoCriticoDao.listarHistorico( pontoCritico,
                                                 Data.addDias( 1, dataBase ) );
            historicoAnterior = null;

            Set<Date> datasLimites = null;

            // N�o apresentou modifica��o no hist�rico
            if ( ( listHistPtc == null ) || ( listHistPtc.size(  ) == 0 ) )
            {
                continue;
            }

            datasLimites = new HashSet<Date>( listHistPtc.size(  ) );

            for ( HistoricoPtcH historico : listHistPtc )
            {
                // Se a �ltima manuten��o for antes da dataBase � para considerar a situa��o atual do item
                if ( ( pontoCritico.getDataUltManutencaoPtc(  ) != null ) &&
                         ( Data.compareAnoMesDia( pontoCritico.getDataUltManutencaoPtc(  ),
                                                      dataBase ) <= 0 ) )
                {
                    if ( estaExcluido( pontoCritico ) )
                    {
                        break;
                    }
                    // Verifica se os valores s�o Nulos
                    else if ( (
                                      ( pontoCritico.getDataLimitePtc(  ) != null ) && ( historico != null ) &&
                                      ( historico.getDataLimitePtc(  ) != null )
                                   )// Verifica se a Data Limite atual � menor do que a apresentada no historico
                                   &&
                                  (
                                          Data.compareAnoMesDia(
                                                                     pontoCritico.getDataLimitePtc(  ),
                                                                         historico.getDataLimitePtc(  ) ) < 0
                                       ) )
                    {
                        numDatasReduzidas++;

                        break; // p�ra o loop de hist�rico
                    }
                }

                //Compara com valores no hist�rico
                if ( ( historico != null ) && ( historicoAnterior != null ) )
                {
                    if ( ( historico.getDataLimitePtc(  ) != null ) &&
                             ( historicoAnterior.getDataLimitePtc(  ) != null ) &&
                             ( ! estaExcluido( historico ) )//Verifica Data Limite do historico atual � menor do que do registro anterior 
                              &&
                             (
                                     Data.compareAnoMesDia(
                                                                historico.getDataLimitePtc(  ),
                                                                    historicoAnterior.getDataLimitePtc(  ) ) < 0
                                  ) )
                    {
                        numDatasReduzidas++;

                        break; // p�ra o loop de hist�rico
                    }
                }

                if ( ( historico != null ) && ( historico.getDataLimitePtc(  ) != null ) &&
                         ( ! estaExcluido( historico ) ) )
                {
                    boolean temNoHistorico = false;

                    if ( ( historico.getDataUltManutencaoPtc(  ) == null ) && (
                                                                                      historico.getDataLimitePtc(  ) != null
                                                                                   ) )
                    {
                        datasLimites.add( historico.getDataLimitePtc(  ) );
                    } else
                    {
                        for ( Date date : datasLimites )
                        {
                            // Se alguma data anterior for maior do que a data do historico atual
                            if ( date.compareTo( historico.getDataLimitePtc(  ) ) > 0 )
                            {
                                numDatasReduzidas++;
                                temNoHistorico = true;

                                break; // loop datasLimites
                            }
                        }

                        if ( temNoHistorico )
                        {
                            break; // para loop de historico
                        }

                        datasLimites.add( historico.getDataLimitePtc(  ) );
                    }
                }

                if ( historico.getDataUltManutencaoPtc(  ) != null )
                {
                    historicoAnterior = historico; // Para comparar com o valor anterior
                }
            } // fim for do loop de historico
        } // fim for PontoCritico

        return ( 100 * numDatasReduzidas ) / numDataCadastrada;
    }

    /**
     *
     * (4)Apura��o de Reprograma��o de Datas Cr�ticas (Pontos Cr�ticos) -
     * C�lculo de Extens�o de Prazo
     *
     * Calcular a taxa de replanejamento das datas cr�ticas - basear o c�lculo
     * nos dados que estiverem no cadastro do item e no hist�rico de datas
     * cr�ticas. O c�lculo dever� ser realizado em fun��o do n�mero de extens�es
     * realizadas no prazo das datas cr�ticas do item e o n�mero total de datas
     * cr�ticas.
     *
     * Basear os c�lculos no estado do item no dia da data base
     *
     * @param codIett
     * @param dataBase
     *            dia de refer�ncia para realiza��o das apura��es
     *
     * @return percentual de Pontos Cr�ticos que reprogramaram redu��o de prazo
     *         at� o dia da Data Base
     *
     * @throws ECARException
     * @author 05110500460
     */
    public double apuracaoReprogramacaoReducaoPontosCriticos( String codIett, String dataBase )
                                                      throws ECARException
    {
        ItemEstruturaIett itemEstrutura =
            (ItemEstruturaIett) this.buscar( ItemEstruturaIett.class,
                                             Long.valueOf( codIett ) );

        Date data = Data.parseDate( dataBase );

        if ( ( itemEstrutura == null ) || ( data == null ) )
        {
            throw new ECARException(  );
        }

        return this.apuracaoReprogramacaoReducaoPontosCriticos( itemEstrutura, data );
    }

    /**
     * Recupera os valores dos atributos: - Data Limite - Data Solu��o No dia
     * passado como parametro
     *
     * @param pontoCritico
     * @param dataBase
     * @return PontoCritico com os valores dos campos DataLimite e DataSolu��o
     *         referentes ao dia da DataBase
     *
     * @author 05110500460
     */
    private HistoricoPtcH recuperaEstadoDasDatasNaDataBase( PontoCriticoPtc pontoCritico, Date dataBase )
                                                    throws ECARException
    {
        PontoCriticoDao ptcDao = new PontoCriticoDao( null );

        // se a ultima manuten��o foi posterior a data base
        if ( ( pontoCritico.getDataUltManutencaoPtc(  ) != null ) &&
                 ( Data.compareAnoMesDia( pontoCritico.getDataUltManutencaoPtc(  ),
                                              dataBase ) > 0 ) )
        {
            // Set<HistoricoPtcH> setHistorico =
            // pontoCritico.getHistoricoPtcHs();
            List<HistoricoPtcH> listHistorico =
                new PontoCriticoDao( null ).listarHistorico( pontoCritico,
                                                             Data.addDias( 1, dataBase ) );

            if ( listHistorico != null )
            {
                for ( HistoricoPtcH historico : listHistorico )
                {
                    // Parametros a recuperar o estado
                    if ( ( historico != null ) &&
                             ( historico.getDataUltManutencaoPtc(  ) != null ) &&
                             ( Data.compareAnoMesDia( historico.getDataUltManutencaoPtc(  ),
                                                          dataBase ) < 0 ) )
                    {
                        return historico;

                        // Verificar no historico a data da inclus�o
                    } else if ( ( historico != null ) &&
                                    ( historico.getDataUltManutencaoPtc(  ) == null ) &&
                                    ( historico.getDataInclusaoPtc(  ) != null ) )
                    {
                        if ( Data.compareAnoMesDia( historico.getDataInclusaoPtc(  ),
                                                        dataBase ) < 0 )
                        {
                            return historico;
                        }
                    }
                } // fim for
            } // fim if
        } // fim else

        return null;
    } // fim recuperaEstadoDasDatasNaDataBase

    /**
     * Retorna um array de objetos com os par�metros setados para o servi�o
     *
     * @param servicoSer
     * @param ari
     * @return Object[]
     */
    public Object[] getParametrosServico( ServicoSer servicoSer, AcompReferenciaItemAri ari )
    {
        Object[] parametros = null;

        if ( servicoSer != null )
        {
            Set setParametros = servicoSer.getServicoParametros(  );

            List listParametros = new ArrayList( setParametros );

            Collections.sort( listParametros,
                              new Comparator(  )
                {
                    public int compare( Object o1, Object o2 )
                    {
                        ServicoParametroSerPar a1 = (ServicoParametroSerPar) o1;
                        ServicoParametroSerPar a2 = (ServicoParametroSerPar) o2;

                        return a1.getSequencia(  ).compareTo( a2.getSequencia(  ) );
                    }
                } );

            Iterator itParametros = listParametros.iterator(  );

            int countParametros = 0;

            parametros = new Object[listParametros.size(  )];

            while ( itParametros.hasNext(  ) )
            {
                ServicoParametroSerPar servicoParametroSerPar = (ServicoParametroSerPar) itParametros.next(  );

                if ( servicoParametroSerPar.getParametroPar(  ).getCodParametroPar(  )
                                               .equals( ParametroPar.IDENTIFICADOR_ITEM_ESTRUTURA ) )
                {
                    parametros[countParametros] = ari.getItemEstruturaIett(  ).getCodIett(  ).toString(  );
                    countParametros++;
                } else if ( servicoParametroSerPar.getParametroPar(  ).getCodParametroPar(  )
                                                      .equals( ParametroPar.DATA_ATUAL ) )
                {
                    Date dataAtual = Data.getDataAtual(  );
                    String dataAtualStr = Data.parseDate( dataAtual );
                    parametros[countParametros] = dataAtualStr;
                    countParametros++;
                } else if ( servicoParametroSerPar.getParametroPar(  ).getCodParametroPar(  )
                                                      .equals( ParametroPar.DATA_LIMITE_REALIZADO_FISICO ) )
                {
                    String dataLimiteRealizadoFisicoStr = Data.parseDate( ari.getDataLimiteAcompFisicoAri(  ) );
                    parametros[countParametros] = dataLimiteRealizadoFisicoStr;
                    countParametros++;
                } else if ( servicoParametroSerPar.getParametroPar(  ).getCodParametroPar(  )
                                                      .equals( ParametroPar.DATA_INICIO_ACOMPANHAMENTO ) )
                {
                    String dataInicioAcompanhamentoStr = Data.parseDate( ari.getDataInicioAri(  ) );
                    parametros[countParametros] = dataInicioAcompanhamentoStr;
                    countParametros++;
                }
            }
        }

        return parametros;
    }

    private boolean estaExcluido( PontoCriticoPtc pontoCritico )
    {
        if ( ( pontoCritico.getIndExcluidoPtc(  ) != null ) && pontoCritico.getIndExcluidoPtc(  ).equals( "S" ) )
        {
            return true;
        }

        return false;
    }

    private boolean estaExcluido( HistoricoPtcH historico )
    {
        if ( ( historico.getIndExcluidoPtc(  ) != null ) && historico.getIndExcluidoPtc(  ).equals( "S" ) )
        {
            return true;
        }

        return false;
    }

    private double getTotalPontosCriticos( List<PontoCriticoPtc> list, Date dataBase )
                                   throws ECARException
    {
        double contTotal = 0;

        for ( PontoCriticoPtc pontoCriticoPtc : list )
        {
            if ( ( pontoCriticoPtc.getDataUltManutencaoPtc(  ) == null ) && ( ! estaExcluido( pontoCriticoPtc ) ) )
            {
                contTotal++;
            } else if ( ( pontoCriticoPtc.getDataUltManutencaoPtc(  ) != null ) &&
                            ( Data.compareAnoMesDia( pontoCriticoPtc.getDataUltManutencaoPtc(  ),
                                                         dataBase ) <= 0 ) &&
                            ( ! estaExcluido( pontoCriticoPtc ) ) )
            {
                contTotal++;
            } else
            {
                HistoricoPtcH historico = recuperaEstadoDasDatasNaDataBase( pontoCriticoPtc, dataBase );

                if ( ( historico != null ) &&
                         ( historico.getDataUltManutencaoPtc(  ) == null ) &&
                         ( ! estaExcluido( historico ) ) )
                {
                    contTotal++;
                } else if ( ( historico != null ) &&
                                ( historico.getDataUltManutencaoPtc(  ) != null ) &&
                                ( Data.compareAnoMesDia(
                                                             historico.getDataUltManutencaoPtc(  ),
                                                                 dataBase ) <= 0 ) &&
                                ( ! estaExcluido( historico ) ) )
                {
                    contTotal++;
                }
            }
        } // fim for

        return contTotal;
    }
}
TOP

Related Classes of ecar.dao.ServicoDao

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.