CREATE OR REPLACE FUNCTION CONCLUSAO_CRONOGRAMA
   (P_CDFILIAL     IN PROJETO.CDFILIAL%TYPE,
    P_CDPROJETO    IN PROJETO.CDPROJETO%TYPE,
    P_CDVERSAO     IN CRONOPROJETO.CDVERCRONPRJ%TYPE,
    P_SOLICITACAO  IN SOLISERV.NRSOLISERV%TYPE,
    P_TAREFA       IN PLANATIVTARE.NRTAREFA%TYPE,
    P_ATIVIDADE    IN PLANATIVTARE.NRPLATIVTARE%TYPE,
    P_NRBASELINEPR IN CRONOPROJETO.NRBASELINEPR%TYPE) RETURN VARCHAR
AS
  V_CONCLUSAO     VARCHAR2(20);
  V_GRUPOPROCESSO VARCHAR2(4);
  V_IDTIPOPROJETO VARCHAR2(1);
BEGIN
   BEGIN
      SELECT IDTIPOPROJETO
        INTO V_IDTIPOPROJETO
        FROM PROJETO
       WHERE CDFILIAL = P_CDFILIAL
         AND CDPROJETO = P_CDPROJETO;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         NULL;
      V_IDTIPOPROJETO := NULL;
   END;

   IF V_IDTIPOPROJETO = '1' THEN
      V_GRUPOPROCESSO := 'MACO';
   ELSIF V_IDTIPOPROJETO = '2' THEN
      V_GRUPOPROCESSO := 'MAEV';
   ELSIF V_IDTIPOPROJETO = '3' THEN
      V_GRUPOPROCESSO := 'ESPE';
   ELSIF V_IDTIPOPROJETO = '4' THEN
      V_GRUPOPROCESSO := 'OPER';
   ELSIF V_IDTIPOPROJETO = '5' THEN
      V_GRUPOPROCESSO := 'HOMO';
   END IF;

   SELECT TO_CHAR(TRUNC((SUM(NVL(B.QTTEMPREAL,0)))))||':'||
          TO_CHAR(LPAD(TRUNC((((SUM(NVL(B.QTTEMPREAL,0))))-TRUNC((SUM(NVL(B.QTTEMPREAL,0)))))*60),2,0))||':'||
          TO_CHAR(LPAD(TRUNC(((((SUM(NVL(B.QTTEMPREAL,0)))*24*60)-TRUNC((SUM(NVL(B.QTTEMPREAL,0)))*24*60))*60)),2,'0')) AS QTTEMPREAL
     INTO V_CONCLUSAO
     FROM CRONOPROJETO CR,
      (SELECT ROUND(SUM(DTHFAPATIVTA - DTHIAPATIVTA)*24,2) AS QTTEMPREAL, AP.CDFILIAL, AP.NRTAREFA, AP.NRPLATIVTARE
         FROM BASELINEPROJ BS, SOLIBASELINE SB, SOLISERV SS, TAREFA TF, APROATIVTARE AP,
              PLANATIVTARE PL,
              (SELECT PG.CDGRUPROCESSO, PR.CDPROCESSO, PR.CDARVPROCESS, PR.NMPROCESSO
                 FROM PROCESGPROC PG, PROCESSO PAUX, PROCESSO PR, PARAMGPROC PAR
                WHERE PAR.IDPARAMGPROC = V_GRUPOPROCESSO
                  AND PR.CDARVPROCESS LIKE PAUX.CDARVPROCESS||'%'
                  AND PG.CDPROCESSO = PAUX.CDPROCESSO
                  AND PAR.CDGRUPROCESSO = PG.CDGRUPROCESSO) ATI
        WHERE BS.CDFILIAL     = P_CDFILIAL
          AND BS.CDPROJETO    = P_CDPROJETO
          AND SB.CDFILIAL     = BS.CDFILIAL
          AND SB.CDPROJETO    = BS.CDPROJETO
          AND SB.NRBASELINEPR = BS.NRBASELINEPR
          AND SB.NRSOLISERV   = NVL(P_SOLICITACAO, SB.NRSOLISERV)
          AND SB.CDFILIAL     = SS.CDFILIAL
          AND SB.NRSOLISERV   = SS.NRSOLISERV
          AND SB.CDFILIAL     = TF.CDFILIAL
          AND SB.NRSOLISERV   = TF.NRSOLISERV
          AND TF.CDFILIAL     = AP.CDFILIAL
          AND TF.NRTAREFA     = AP.NRTAREFA
          AND AP.NRTAREFA     = NVL(P_TAREFA,AP.NRTAREFA)
          AND AP.NRPLATIVTARE = NVL(P_ATIVIDADE, AP.NRPLATIVTARE)
          AND SB.IDSITUSOLBASELI = 'I'
          AND SB.NRBASELINEPR = P_NRBASELINEPR
          AND TF.CDFILIAL = PL.CDFILIAL
          AND TF.NRTAREFA = PL.NRTAREFA
          AND AP.CDFILIAL = PL.CDFILIAL
          AND AP.NRTAREFA = PL.NRTAREFA
          AND AP.NRPLATIVTARE = PL.NRPLATIVTARE
          AND PL.CDPROCESSO = ATI.CDPROCESSO
        GROUP BY AP.CDFILIAL, AP.NRTAREFA, AP.NRPLATIVTARE)B
   WHERE CR.CDFILIAL     = B.CDFILIAL    (+)
     AND CR.NRTAREFA     = B.NRTAREFA    (+)
     AND CR.NRPLATIVTARE = B.NRPLATIVTARE(+)
     AND CR.CDFILIAL     = P_CDFILIAL
     AND CR.CDPROJETO    = P_CDPROJETO
     AND CR.CDVERCRONPRJ = P_CDVERSAO;


   RETURN(V_CONCLUSAO);
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CONCLUSAO_CRONOGRAMA','5.07.014'); END;
/
