create or replace FUNCTION SLA_VENCE_HOJE
  (P_NRORG IN CONTATO.NRORG%TYPE,
   P_NRSEQCONTATO IN CONTATO.NRSEQCONTATO%TYPE)
RETURN VARCHAR2

IS
   V_RETORNO VARCHAR2(150);
   V_ULTDIAMESANT DATE;
   V_DTPRIMEIRA_RESPOSTA DATE;
   V_CDPRODUTO VARCHAR2(10);
   V_NRPARCNEGOCIO VARCHAR2(21);
   V_DTHRCONTATO DATE;
   V_DTHRCONCCONT DATE;
   V_BUCARSLACLIENTE VARCHAR2(01);
   V_BUCARSLAPADARAO VARCHAR2(01);
   V_NAOEXITESLA VARCHAR2(01);
   V_NRSEQSLA NUMBER;
   V_NRPRIORIDADE NUMBER;
   V_NRTEMPORESPREAL NUMBER;
   V_NRTEMPOSOLUREAL NUMBER;
   V_TEMPORESPOSTA NUMBER;
   V_TEMPOSOLUCAO  NUMBER;
   V_RESPOSTA VARCHAR2(20);
   V_SOLUCAO  VARCHAR2(20);
   V_NUMERO_RESPSOK NUMBER;
   V_NUMERO_RESPNOK NUMBER;

BEGIN

   V_RETORNO := 'NULL';
   V_NUMERO_RESPSOK := 1;
   V_NUMERO_RESPNOK := 1;

   /* Retorna os dados do Ticket necessários para verifica o SLA */
   BEGIN
      SELECT CDPRODUTO,NRPARCNEGOCIO,DTHRCONTATO, NRPRIORIDADE, DTHRCONCCONT
        INTO V_CDPRODUTO, V_NRPARCNEGOCIO, V_DTHRCONTATO, V_NRPRIORIDADE, V_DTHRCONCCONT
        FROM CONTATO
       WHERE NRORG         = P_NRORG
         AND NRSEQCONTATO  = P_NRSEQCONTATO
         AND IDTIPOCONTATO = 'CHAMADO';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         RETURN('TICKET_NAO_ENCONTRADO');
   END;

   /* Busca o SLA utilizado pelo Produto/Cliente do Ticket */
   V_BUCARSLACLIENTE := 'N';
   BEGIN
      SELECT NRSEQSLA
        INTO V_NRSEQSLA
        FROM CRM_SLAPRODPARCNEG
       WHERE NRPARCNEGOCIO    = V_NRPARCNEGOCIO
         AND CDPRODUTO        = V_CDPRODUTO
         AND NRORG            = P_NRORG
         AND IDATIVO          = 'S';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_BUCARSLACLIENTE := 'S';
   END;

   /* Busca o SLA utilizado pelo Cliente do Ticket */
   V_BUCARSLAPADARAO := 'N';
   IF V_BUCARSLACLIENTE = 'S' THEN
      BEGIN
         SELECT NRSEQSLA
           INTO V_NRSEQSLA
           FROM CRM_SLAPARCNEGOCIO
          WHERE NRORG         = P_NRORG
            AND NRPARCNEGOCIO = V_NRPARCNEGOCIO
            AND IDATIVO       = 'S';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_BUCARSLAPADARAO := 'S';
      END;
   END IF;

   IF V_BUCARSLAPADARAO = 'S' THEN
      BEGIN
         SELECT NRSEQSLA
           INTO V_NRSEQSLA
           FROM CRM_SLA
          WHERE NRORG       = P_NRORG
            AND IDSLAPADRAO = 'S'
            AND IDATIVO     = 'S';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_NAOEXITESLA := 'S';
      END;
   END IF;

   IF V_NAOEXITESLA = 'S' THEN
      RETURN('RESPSOK'||'-'||'RESOSOK');
   ELSE
      /* Busca a data e hora da primeira resposta do ticket */
      BEGIN
         SELECT MIN(DTHREVOLCONT)
           INTO V_DTPRIMEIRA_RESPOSTA
           FROM EVOLCONT
          WHERE NRSEQCONTATO  = P_NRSEQCONTATO
            AND IDEVOLPUBLICO = 'S'
            AND IDRESPNOTA    = 'R';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_DTPRIMEIRA_RESPOSTA := NULL;
      END;


      /* BUSCA O TEMPO DE RESPOSTA DO TICKET PASSANDO A SLA E A PRIORIDADE DO TICKET */
      BEGIN
         SELECT NRTEMPORESPREAL, NRTEMPOSOLUREAL
           INTO V_NRTEMPORESPREAL, V_NRTEMPOSOLUREAL
           FROM CRM_SLAPRIORIDADE
          WHERE NRORG        = P_NRORG
            AND NRSEQSLA     = V_NRSEQSLA
            AND NRPRIORIDADE = V_NRPRIORIDADE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            RETURN('RESPOK'||'-'||'RESOOK');
      END;

      IF TRUNC(V_DTHRCONTATO + (V_NRTEMPORESPREAL/24/60)) = TRUNC(SYSDATE) THEN
         V_RESPOSTA := 'RESP_SVENCE_HOJE';
      ELSE
         V_RESPOSTA := 'RESP_NVENCE_HOJE';
      END IF;

      IF TRUNC(V_DTHRCONTATO + (V_NRTEMPOSOLUREAL/24/60)) = TRUNC(SYSDATE) THEN
         V_SOLUCAO := 'SOLU_SVENCE_HOJE';
      ELSE
         V_SOLUCAO := 'SOLU_NVENCE_HOJE';
      END IF;


      V_RETORNO := V_RESPOSTA || '-' || V_SOLUCAO;

      RETURN(V_RETORNO);

   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('SLA_VENCE_HOJE','0.00.000'); END;
/
