CREATE OR REPLACE FUNCTION BUSCA_PARAMETRO_CNC(P_NRESTABELEC IN NUMBER,
                                               P_NRADQUIRENTE IN NUMBER,
                                               P_NRPRODUTOADQ IN NUMBER,
                                               P_TIPOPARAM IN VARCHAR,
                                               P_GRAVAERRO IN VARCHAR,
                                               P_DTINICIAL IN DATE,
                                               P_DTFINAL IN DATE) RETURN VARCHAR
AS
   V_RESULTTMP VARCHAR2(100);
   V_IDTIPOCOME VARCHAR2(10);
   V_CDCONTCTBL VARCHAR2(50);
   V_CONTACTBLCONTCORR VARCHAR2(50);
   V_CDREDUCONT VARCHAR2(03);
   V_NRORG NUMBER;
BEGIN
   V_RESULTTMP := NULL;
   BEGIN
      SELECT DECODE(SYS_CONTEXT('nrorg_ctx', 'nrorg'), 0, 1) NRORG
        INTO V_NRORG
        FROM DUAL;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_NRORG := 1;
   END;
   IF P_TIPOPARAM = 'CONTCORR' THEN
      BEGIN
         SELECT CDREDUCONT
           INTO V_RESULTTMP
           FROM CONTCORESTAB
          WHERE NRADQUIRENTE = P_NRADQUIRENTE
            AND NRPRODUTOADQ = P_NRPRODUTOADQ
            AND NRESTABELEC = P_NRESTABELEC;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_RESULTTMP := NULL;
      END;
      IF V_RESULTTMP IS NULL THEN
         BEGIN
            SELECT CDREDUCONT
              INTO V_RESULTTMP
              FROM CONTCORESTAB
             WHERE NRADQUIRENTE = P_NRADQUIRENTE
               AND NRPRODUTOADQ IS NULL
               AND NRESTABELEC = P_NRESTABELEC;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_RESULTTMP := NULL;
         END;
         IF V_RESULTTMP IS NULL THEN
            BEGIN
               SELECT CDREDUCONT
                 INTO V_RESULTTMP
                 FROM CONTCORESTAB
                WHERE NRADQUIRENTE IS NULL
                  AND NRPRODUTOADQ IS NULL
                  AND NRESTABELEC = P_NRESTABELEC;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_RESULTTMP := NULL;
            END;
         END IF;
      END IF;
   ELSIF P_TIPOPARAM IN ('TIPODEB', 'TIPOCRED', 'TIPOCONTA', 'TIPOAJUSTE', 'TIPOOPER', 'IDENTRSAIDOP') THEN
      BEGIN
         SELECT DECODE(P_TIPOPARAM, 'TIPODEB', CDTPDEBIBANC,
                                    'TIPOCRED', CDTPCREDBANC,
                                    'TIPOCONTA', CDTPCTRECEB,
                                    'TIPOAJUSTE', CDAJUCTREC,
                                    'TIPOOPER', CDTIPOOPER,
                                    'IDENTRSAIDOP', IDENTRSAIDOP)
           INTO V_RESULTTMP
           FROM PARAMFINADQ
          WHERE NRADQUIRENTE = P_NRADQUIRENTE
            AND NRPRODUTOADQ = P_NRPRODUTOADQ
            AND NRESTABELEC = P_NRESTABELEC;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_RESULTTMP := NULL;
      END;
      IF V_RESULTTMP IS NULL THEN
         BEGIN
            SELECT DECODE(P_TIPOPARAM, 'TIPODEB', CDTPDEBIBANC,
                                       'TIPOCRED', CDTPCREDBANC,
                                       'TIPOCONTA', CDTPCTRECEB,
                                       'TIPOAJUSTE', CDAJUCTREC,
                                       'TIPOOPER', CDTIPOOPER,
                                       'IDENTRSAIDOP', IDENTRSAIDOP)
              INTO V_RESULTTMP
              FROM PARAMFINADQ
             WHERE NRADQUIRENTE = P_NRADQUIRENTE
               AND NRPRODUTOADQ = P_NRPRODUTOADQ
               AND NRESTABELEC IS NULL;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_RESULTTMP := NULL;
         END;
      END IF;
      IF P_TIPOPARAM = 'TIPOCRED' AND V_RESULTTMP IS NOT NULL THEN
         /* VERIFICA SE O TIPO DE CONTA DO TIPO DE CREDITO ESTA PARAMETRIZADO E NAO E DO TIPO FORNECEDOR */
         V_CDCONTCTBL := NULL;
         V_IDTIPOCOME := NULL;
         BEGIN
            SELECT C.CDCONTCTBL, C.IDTIPOCOME
              INTO V_CDCONTCTBL, V_IDTIPOCOME
              FROM TPCREDBANC T, CONTCTBL C
             WHERE T.CDCONTCTBL = C.CDCONTCTBL
               AND T.CDTPCREDBANC = V_RESULTTMP;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_CDCONTCTBL := NULL;
               V_IDTIPOCOME := NULL;
         END;
         IF V_CDCONTCTBL IS NULL THEN
            IF P_GRAVAERRO = 'S' THEN
               GRAVAERROCTBCNC(P_NRESTABELEC,
                               P_DTINICIAL,
                               P_DTFINAL,
                               'CONTA CONTABIL NAO INFORMADA PARA O TIPO DE CREDITO BANCARIO. TIPO DE CREDITO: '||V_RESULTTMP,
                               'O TIPO DE CREDITO BANCARIO DEVE TER CONTA CONTABIL PARAMETRIZADA.',
                               'S',
                               V_NRORG);
            END IF;
         ELSE
            IF V_IDTIPOCOME = 'F' THEN
               IF P_GRAVAERRO = 'S' THEN
                  GRAVAERROCTBCNC(P_NRESTABELEC,
                                  P_DTINICIAL,
                                  P_DTFINAL,
                                  'CONTA CONTABIL '||FORMATA_CDCONTCTBL(V_CDCONTCTBL)||
                                  ' DO TIPO DE CREDITO BANCARIO E DO TIPO COMERCIAL FORNECEDOR. TIPO DE CREDITO: '||V_RESULTTMP,
                                  'O TIPO DEVERA SER ALTERADO PARA UM TIPO DIFERENTE.',
                                  'S',
                                  V_NRORG);
               END IF;
            ELSE
               IF V_CDCONTCTBL = V_CONTACTBLCONTCORR THEN
                  IF P_GRAVAERRO = 'S' THEN
                     GRAVAERROCTBCNC(P_NRESTABELEC,
                                     P_DTINICIAL,
                                     P_DTFINAL,
                                     'CONTA CONTABIL '||FORMATA_CDCONTCTBL(V_CONTACTBLCONTCORR)||
                                     ' DA CONTA CORRENTE, COD. REDUZIDO: '||V_CDREDUCONT||', E A MESMA DO TIPO DE CREDITO BANCARIO: '||V_RESULTTMP,
                                     'AS CONTAS DEVEM SER DIFERENTES.',
                                     'S',
                                     V_NRORG);
                  END IF;
               END IF;
            END IF;
         END IF;
      END IF;
   ELSIF P_TIPOPARAM = 'TIPODEBGER' THEN
      BEGIN
         SELECT CDTPDBDEBGER
           INTO V_RESULTTMP
           FROM ADQUIRENTE
          WHERE NRADQUIRENTE = P_NRADQUIRENTE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_RESULTTMP := NULL;
      END;
   ELSIF P_TIPOPARAM = 'TIPOCREDGER' THEN
      BEGIN
         SELECT CDTPCREDBANCGER
           INTO V_RESULTTMP
           FROM ADQUIRENTE
          WHERE NRADQUIRENTE = P_NRADQUIRENTE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_RESULTTMP := NULL;
      END;
   END IF;
   RETURN V_RESULTTMP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('BUSCA_PARAMETRO_CNC','6.25.xxx'); END;
/

