/* Sistemas Integrados TECNISA

Nome: 0212_GERFUNO_BUSCA_PRODUTO_GRUPOOPER.SQL

Descricao:
Funcao para verificar se o nivel do produto esta habilitado para o grupo de operadores associado ao operador logado

Criacao:
15/05/2019 Pedro Moutinho
*/

CREATE OR REPLACE FUNCTION BUSCA_PRODUTO_GRUPOOPERADOR(
    P_CDPRODUTO  IN VARCHAR2,
    P_CDOPERADOR IN VARCHAR2)
  RETURN VARCHAR2
IS
   V_ACHOU    NUMBER(1);
   V_INDEX    NUMBER;
   V_CODPROD  NUMBER;
   V_S        VARCHAR2(20);
   V_N        VARCHAR2(20);
   V_TAMANHON NUMBER;
   V_TAMANHOS NUMBER;
BEGIN
  SELECT *
    INTO V_N,
         V_S
    FROM (SELECT MAX(CDARVPROD) AS CDPRODUTO,
                 IDPERMINCPRODEST
            FROM GROPERNVPROD GP,
                 OPERGRUPOP G, PRODUTO P
           WHERE INSTR(P_CDPRODUTO, GP.CDPRODUTO) = 1
             AND G.CDOPERADOR = P_CDOPERADOR
             AND G.CDGRUPOPER = GP.CDGRUPOPER
             AND P.CDPRODUTO = GP.CDPRODUTO
           GROUP BY GP.CDGRUPOPER,
                    IDPERMINCPRODEST
         ) PIVOT ( MAX(CDPRODUTO) FOR IDPERMINCPRODEST IN ('N', 'S'));

   V_TAMANHOS := NVL(LENGTH(V_S), 0);
   V_TAMANHON := NVL(LENGTH(V_N), 0);

   IF((V_TAMANHOS >= V_TAMANHON) AND (V_S IS NOT NULL)) THEN
      RETURN 'S';
   ELSE
      IF((V_TAMANHOS < V_TAMANHON) AND (V_N IS NOT NULL)) THEN
         RETURN 'N';
      ELSE
         SELECT COUNT(*)
           INTO V_ACHOU
           FROM GROPERNVPROD GP
          WHERE INSTR(P_CDPRODUTO, GP.CDPRODUTO) = 1;

         IF (V_ACHOU > 0) THEN
            SELECT COUNT(*)
              INTO V_ACHOU
              FROM GROPERNVPROD GP, OPERGRUPOP G, GRUPOPER B
             WHERE INSTR(GP.CDPRODUTO, P_CDPRODUTO) = 1
               AND GP.CDPRODUTO <> P_CDPRODUTO
               AND G.CDGRUPOPER = GP.CDGRUPOPER
               AND G.CDGRUPOPER = B.CDGRUPOPER
               AND G.CDOPERADOR = P_CDOPERADOR;

            IF ((V_ACHOU > 0)) THEN
               RETURN 'P';
            ELSE
               RETURN 'B';
            END IF;
         ELSE
            RETURN 'S';
         END IF;
      END IF;
   END IF;
END;
/