CREATE OR REPLACE FUNCTION SIT_SERVICOPROPCOM
(
   P_NRSERVICOPROPCOM IN NUMBER,
   P_PLANEJAMENTO IN VARCHAR2 DEFAULT 'N'
) RETURN VARCHAR2
AS
   V_SITUACAO VARCHAR2(30);
   V_NRVERSAOPROPCOM NUMBER;
   V_IDSERVICOPROPCOM VARCHAR2(30);
   V_IDVERSAOPROPCOM VARCHAR2(30);
   V_QTDE NUMBER;
   V_QT_SERV_CALC NUMBER;
   V_NRDETSERVPROPCOMPLAN NUMBER;
   V_NRHISTNOTIFPROPCOM NUMBER;
   V_CDRESPONSAVELPLAN VARCHAR2(12);
   V_IDMOTIVO VARCHAR2(30);
BEGIN
   SELECT MAX(IDSERVICOPROPCOM), MAX(NRVERSAOPROPCOM), MAX(NRDETSERVPROPCOMPLAN)
     INTO V_IDSERVICOPROPCOM, V_NRVERSAOPROPCOM, V_NRDETSERVPROPCOMPLAN
     FROM SERVICOPROPCOM
    WHERE NRSERVICOPROPCOM = P_NRSERVICOPROPCOM;

   SELECT MAX(IDVERSAOPROPCOM)
     INTO V_IDVERSAOPROPCOM
     FROM VERSAOPROPCOM
    WHERE NRVERSAOPROPCOM = V_NRVERSAOPROPCOM;

   IF V_IDVERSAOPROPCOM = 'CONCLUIDA' THEN
      V_SITUACAO := 'CONCLUIDO';
   ELSIF V_IDVERSAOPROPCOM = 'APROVADA' THEN
      IF V_IDSERVICOPROPCOM = 'EFETIVADO' THEN
         V_SITUACAO := 'EFETIVADO';
      ELSE
         V_SITUACAO := 'APROVADO';
      END IF;
   ELSE
      V_SITUACAO := V_IDSERVICOPROPCOM;
      -- Se for chamado em modo de planejamento
      IF P_PLANEJAMENTO = 'S' THEN
         -- Se nao foi feita solicitacao ao planejamento
         IF V_IDSERVICOPROPCOM IN ('PENDENTE', 'CALCULADO') THEN
            V_SITUACAO := 'NAOSOLICITADO';
         END IF;

         IF V_IDSERVICOPROPCOM = 'AGUARDANDOPLANEJAMENTO' THEN
            SELECT MAX(CDRESPONSAVELPLAN)
              INTO V_CDRESPONSAVELPLAN
              FROM DETALHESERVPROPCOM
             WHERE NRDETALHESERVPROPCOM = V_NRDETSERVPROPCOMPLAN;

            -- Se responsavel informado fica em andamento
            IF V_CDRESPONSAVELPLAN IS NOT NULL THEN
               V_SITUACAO := 'EMANDAMENTO';

               -- Verifica se o GN mandou uma resposta
               SELECT MAX(NRHISTNOTIFPROPCOM)
                 INTO V_NRHISTNOTIFPROPCOM
                 FROM HISTNOTIFPROPCOM
                WHERE NRSERVICOPROPCOM = P_NRSERVICOPROPCOM;

               SELECT MAX(IDMOTIVO)
                 INTO V_IDMOTIVO
                 FROM HISTNOTIFPROPCOM
                WHERE NRHISTNOTIFPROPCOM = V_NRHISTNOTIFPROPCOM;

               -- Se duvida respondida pelo GN, mostra como retorno GN
               IF V_IDMOTIVO = 'DUVIDARESPONDIDA' THEN
                  V_SITUACAO := 'EMANDAMENTO_RETORNOGN';
               END IF;
            END IF;
         END IF;
      END IF;
   END IF;

   RETURN V_SITUACAO;
END;
/