/******************************************************************************/
/* AGENT2B                                                                    */
/*                                                                            */
/* Compras e Suprimentos                                                      */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Nome:                                                                      */
/*                                                                            */
/* Descri��o:                                                                 */
/*    Inclui um fornecedor na planilha de cota��o                             */
/*                                                                            */
/* Cria��o:                                                                   */
/*   03/04/2004 - Jo�o Fernando dos Reis Corr�a                               */
/*                                                                            */
/******************************************************************************/

CREATE OR REPLACE PROCEDURE INC_FORN_COTA
(
   P_CDFILIAL    IN COLETAPR.CDFILIAL%TYPE,
   P_NRCOLEPRECO IN COLETAPR.NRCOLEPRECO%TYPE,
   P_CDFORNECED  IN ITEMCOLE.CDFORNECED%TYPE,
   P_CDOPERSIS   IN OPERADOR.CDOPERADOR%TYPE,
   P_TREGIAO     IN VARCHAR2,
   P_CDFORNCARG  IN ITEMCOLE.CDFORNECED%TYPE,
   P_CDREGCARG   IN ITEMCOLE.CDREGIAO%TYPE,
   P_IDERRO      OUT VARCHAR2
)
/*
P_IDERRO: POS   ERRO
          1     REFOREG
          2     QFOPRODFORN
          3     PRODFORNCOMP
*/
IS
   V_CDEMPRESA  VArCHAR2(4);
   V_CDINSCMUNI EMPRESA.CDINSCMUNI%TYPE;
   V_CDINSCESTA EMPRESA.CDINSCESTA%TYPE;

   V_PGTO_CDPRODUTO    PRODUTO.CDARVPROD%TYPE;
   V_PGTO_CDFORMPGTO   PRODFORN.CDFORMPGTO%TYPE;
   V_PGTO_IDTPFORPGPRF PRODFORN.IDTPFORPGPRF%TYPE;
   V_PGTO_NRPARCPGTPRF PRODFORN.NRPARCPGTPRF%TYPE;
   V_PGTO_NRDIAPGFIPRF PRODFORN.NRDIAPGFIPRF%TYPE;
   V_PGTO_IDUTDIAPGPRF PRODFORN.IDUTDIAPGPRF%TYPE;

   V_PGTO_IDTPFORPGTFO FORNECEDOR.IDTPFORPGTFO%TYPE;
   V_PGTO_NRPARCPGTOFO FORNECEDOR.NRPARCPGTOFO%TYPE;
   V_PGTO_NRDIAPGFIXFO FORNECEDOR.NRDIAPGFIXFO%TYPE;
   V_PGTO_IDUTDIAPGTFO FORNECEDOR.IDUTDIAPGTFO%TYPE;
   V_PGTO_IDTPDESCFORN FORNECEDOR.IDTPDESCFORN%TYPE;
   V_PGTO_VRPEDESCFORN FORNECEDOR.VRPEDESCFORN%TYPE;
   V_PGTO_IDTPFRETFORN FORNECEDOR.IDTPFRETFORN%TYPE;

   V_COUNT         FLOAT;
   V_ROWS_AFFECTED FLOAT;
BEGIN
   P_IDERRO := '000';
   V_ROWS_AFFECTED := 0;
   
   APAGA_ERRO_COTACAO(P_CDFILIAL, P_NRCOLEPRECO);
   
   FOR C_INCLUI IN
      (SELECT
         ITEMCOLE.CDREGIAO,
         ITEMCOLE.CDPRODUTO,
         ITEMCOLE.CDMARCA,
         NVL(CARGPRECO.VRPRECUNIITM, 0) AS VRPRECUNIITM,
         COLETAPR.DTINIVALCOL,
         COLETAPR.DTFINVALCOL,
         DECODE(FORNECEDOR.IDTPDESCFORN,
                'C', FORNECEDOR.VRPEDESCFORN,
                0) AS VRPREDESITM,
         FORNECEDOR.IDTPFRETFORN,
         PRODUTO.CDARVPROD,
         COLETAPR.DTCOLEPREC
      FROM
         (SELECT
             REGIAO.CDREGIAO,
             ITEMCOLE.CDPRODUTO,
             ITEMCOLE.CDMARCA
          FROM
             (SELECT DISTINCT
                 CDPRODUTO,
                 CDMARCA
              FROM
                 ITEMCOLE
              WHERE
                 CDFILIAL    = P_CDFILIAL AND
                 NRCOLEPRECO = P_NRCOLEPRECO AND
                 CDFORNECED  = NVL(P_CDFORNCARG, CDFORNECED) AND
                 CDREGIAO    = NVL(P_CDREGCARG, CDREGIAO)
             ) ITEMCOLE,
             (SELECT
                REGIAO.CDREGIAO
              FROM
                (SELECT
                    CDREGIAO
                 FROM
                    REGIAO
                 WHERE
                    P_TREGIAO = 'S'
                 UNION ALL
                 SELECT DISTINCT
                    CDREGIAO
                 FROM
                    ITEMCOLE
                 WHERE
                    CDFILIAL    = P_CDFILIAL AND
                    NRCOLEPRECO = P_NRCOLEPRECO AND
                    P_TREGIAO = 'N') REGIAO
             ) REGIAO
          ) ITEMCOLE,

         (SELECT
             CDREGIAO,
             CDPRODUTO,
             CDMARCA,
             VRPRECUNIITM
          FROM
             ITEMCOLE
          WHERE
             CDFILIAL = P_CDFILIAL AND
             NRCOLEPRECO = P_NRCOLEPRECO AND
             CDFORNECED = P_CDFORNCARG
         ) CARGPRECO,
         FORNECEDOR,
         COLETAPR,
         PRODUTO
      WHERE
         CARGPRECO.CDREGIAO  (+) = NVL(P_CDREGCARG, ITEMCOLE.CDREGIAO) AND
         CARGPRECO.CDPRODUTO (+) = ITEMCOLE.CDPRODUTO AND
         CARGPRECO.CDMARCA   (+) = ITEMCOLE.CDMARCA AND

         COLETAPR.CDFILIAL = P_CDFILIAL AND
         COLETAPR.NRCOLEPRECO = P_NRCOLEPRECO AND
         FORNECEDOR.CDFORNECED = P_CDFORNECED AND
         PRODUTO.CDPRODUTO = ITEMCOLE.CDPRODUTO
      )
   LOOP
      SELECT
        COUNT(*) INTO V_COUNT
      FROM
        REFOREG
      WHERE
        REFOREG.CDFORNECED = P_CDFORNECED AND
        REFOREG.CDREGIAO   = C_INCLUI.CDREGIAO;
      IF V_COUNT > 0 THEN
         P_IDERRO := '1'||SUBSTR(P_IDERRO, 2, 2);
         REGISTRA_ERRO_COTACAO(P_CDFILIAL, P_NRCOLEPRECO,
            P_CDFORNECED,
            C_INCLUI.CDREGIAO,
            C_INCLUI.CDPRODUTO,
            C_INCLUI.CDMARCA,
            'FORN_N_ATENDE_REGIAO'
         );
      ELSE
         SELECT
            COUNT(*) INTO V_COUNT
         FROM
            QFOPRODFORN,
            PARASUPRI
         WHERE
           PARASUPRI.CDFILIAL = P_CDFILIAL  AND
           (QFOPRODFORN.CDPRODUTO = C_INCLUI.CDPRODUTO) AND
           (QFOPRODFORN.CDFORNECED= P_CDFORNECED) AND
           ((QFOPRODFORN.IDFORNAPROV = 'N' AND QFOPRODFORN.IDFORNAUTOR = 'N') OR
            ((QFOPRODFORN.IDFORNAPROV = 'S') AND
               ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                 C_INCLUI.DTCOLEPREC > LAST_DAY(QFOPRODFORN.DTVALPRFORN)) OR
                (PARASUPRI.IDULTIDTVALQ = 'D' AND
                 C_INCLUI.DTCOLEPREC > QFOPRODFORN.DTVALPRFORN)) ) );
         IF V_COUNT > 0 THEN
            P_IDERRO := SUBSTR(P_IDERRO, 1, 1)||'1'||SUBSTR(P_IDERRO, 3, 1);
            REGISTRA_ERRO_COTACAO(P_CDFILIAL, P_NRCOLEPRECO,
              P_CDFORNECED,
              C_INCLUI.CDREGIAO,
              C_INCLUI.CDPRODUTO,
              C_INCLUI.CDMARCA,
              'FORN_N_QUAL_PROD'
           );
         ELSE
            SELECT
              COUNT(*) INTO V_COUNT
            FROM
              PRODFORNCOMP
            WHERE
              PRODFORNCOMP.CDFORNECED = P_CDFORNECED  AND
              PRODFORNCOMP.CDPRODCOMPL = C_INCLUI.CDPRODUTO;
            IF V_COUNT = 0 THEN
               P_IDERRO := SUBSTR(P_IDERRO, 1, 2)||'1';
               REGISTRA_ERRO_COTACAO(P_CDFILIAL, P_NRCOLEPRECO,
                  P_CDFORNECED,
                  C_INCLUI.CDREGIAO,
                  C_INCLUI.CDPRODUTO,
                  C_INCLUI.CDMARCA,
                  'FORN_N_CAD_PROD'
               );
            ELSE
               V_ROWS_AFFECTED := V_ROWS_AFFECTED + 1;

               INSERT INTO ITEMCOLE
                  (CDFILIAL,     NRCOLEPRECO,  CDFORNECED,   CDREGIAO,
                   CDPRODUTO,    CDMARCA,      VRPRECUNIITM, DTINIVALITM,
                   DTFINVALITM,  VRPERDESITM,  IDTIPFREITM,  IDITMCOTPREC,
                   CDOPERINCL,   DTINCLITMCOL)
               VALUES
                  (P_CDFILIAL,           P_NRCOLEPRECO,        P_CDFORNECED,          C_INCLUI.CDREGIAO,
                   C_INCLUI.CDPRODUTO,   C_INCLUI.CDMARCA,     C_INCLUI.VRPRECUNIITM, C_INCLUI.DTINIVALCOL,
                   C_INCLUI.DTFINVALCOL, C_INCLUI.VRPREDESITM, C_INCLUI.IDTPFRETFORN,  'S',
                   P_CDOPERSIS,          SYSDATE);
               IF C_INCLUI.VRPRECUNIITM > 0 THEN

         /*###############################  IMPOSTO ######################################*/
                 SELECT
                    EMITENTE(P_CDFILIAL, C_INCLUI.CDPRODUTO, P_CDFORNECED) AS CDEMPRESA
                 INTO
                    V_CDEMPRESA
                 FROM
                    PARAMGERAL;
                 V_CDEMPRESA := SUBSTR(V_CDEMPRESA, 3, 2);
                 SELECT
                    MAX(EMPRESA.CDEMPRESA),
                    MIN(INSCRMUNICIP.CDINSCMUNI) AS CDINSCMUNI,
                    MIN(INSCRESTAD.CDINSCESTA)   AS CDINSCESTA
                 INTO
                    V_CDEMPRESA, V_CDINSCMUNI, V_CDINSCESTA
                 FROM
                    EMPRESA,
                    INSCRMUNICIP,
                    INSCRESTAD
                 WHERE
                    EMPRESA.CDEMPRESA = V_CDEMPRESA           AND
                    EMPRESA.CDEMPRESA = INSCRMUNICIP.CDEMPRESA AND
                    EMPRESA.CDEMPRESA = INSCRESTAD.CDEMPRESA;

                 IMPOSTO_ITEMCOL(V_CDEMPRESA,      V_CDINSCESTA, P_CDFORNECED,      P_CDFILIAL,
                                 P_NRCOLEPRECO,    P_CDFORNECED, C_INCLUI.CDREGIAO, C_INCLUI.CDPRODUTO,
                                 C_INCLUI.CDMARCA, C_INCLUI.DTCOLEPREC);

               /*############################# FORMA DE PAGAMENTO ##############################*/
                 SELECT
                    MAX(PRODUTO.CDARVPROD),
                    MAX(PRODFORN.CDFORMPGTO),
                    MAX(PRODFORN.IDTPFORPGPRF),
                    MAX(PRODFORN.NRPARCPGTPRF),
                    MAX(PRODFORN.NRDIAPGFIPRF),
                    MAX(PRODFORN.IDUTDIAPGPRF)
                 INTO
                    V_PGTO_CDPRODUTO,
                    V_PGTO_CDFORMPGTO,
                    V_PGTO_IDTPFORPGPRF,
                    V_PGTO_NRPARCPGTPRF,
                    V_PGTO_NRDIAPGFIPRF,
                    V_PGTO_IDUTDIAPGPRF
                 FROM
                   PRODFORN, PRODUTO
                 WHERE
                   PRODFORN.CDPRODUTO  = PRODUTO.CDPRODUTO     AND
                   PRODFORN.CDFORNECED = P_CDFORNECED AND
                   PRODUTO.CDARVPROD   = (SELECT MAX(PRODUTO.CDARVPROD)
                                          FROM PRODFORN, PRODUTO
                                          WHERE
                                          PRODFORN.CDPRODUTO   = PRODUTO.CDPRODUTO AND
                                          PRODFORN.CDFORNECED  = P_CDFORNECED AND
                                          C_INCLUI.CDARVPROD LIKE PRODUTO.CDARVPROD || '%');

                 IF V_PGTO_IDTPFORPGPRF IS NULL THEN
                    SELECT
                       CDFORMPGTO,
                       IDTPFORPGTFO,
                       NRPARCPGTOFO,
                       NRDIAPGFIXFO,
                       IDUTDIAPGTFO,
                       IDTPDESCFORN,
                       VRPEDESCFORN,
                       IDTPFRETFORN
                    INTO
                       V_PGTO_CDFORMPGTO,
                       V_PGTO_IDTPFORPGTFO,
                       V_PGTO_NRPARCPGTOFO,
                       V_PGTO_NRDIAPGFIXFO,
                       V_PGTO_IDUTDIAPGTFO,
                       V_PGTO_IDTPDESCFORN,
                       V_PGTO_VRPEDESCFORN,
                       V_PGTO_IDTPFRETFORN
                    FROM
                       FORNECEDOR
                    WHERE
                       CDFORNECED = P_CDFORNECED;

                    UPDATE ITEMCOLE
                    SET
                       CDFORMPGTO   = V_PGTO_CDFORMPGTO,
                       IDTPFOPGTCOL = V_PGTO_IDTPFORPGTFO,
                       NRDIAPGFXCOL = V_PGTO_NRDIAPGFIXFO,
                       NRPARCPGTCOL = V_PGTO_NRPARCPGTOFO,
                       IDUTDIAPGCOL = V_PGTO_IDUTDIAPGTFO
                    WHERE
                       CDFILIAL    = P_CDFILIAL   AND
                       NRCOLEPRECO = P_NRCOLEPRECO AND
                       CDPRODUTO   = C_INCLUI.CDPRODUTO  AND
                       CDMARCA     = C_INCLUI.CDMARCA    AND
                       CDFORNECED  = P_CDFORNECED AND
                       CDREGIAO    = C_INCLUI.CDREGIAO;
                    IF V_PGTO_IDTPFORPGTFO = 'V' THEN
                       INSERT INTO PZOPGTITMCOL
                         (CDFILIAL, NRCOLEPRECO, CDFORNECED, CDPRODUTO,
                         CDMARCA, CDREGIAO, NRDIASPGTCOL, VRPERCPGTCOL)
                       SELECT
                          P_CDFILIAL,
                          P_NRCOLEPRECO,
                          P_CDFORNECED,
                          C_INCLUI.CDPRODUTO,
                          C_INCLUI.CDMARCA,
                          C_INCLUI.CDREGIAO,
                          PRAZOPGTFORN.NRDIASPGTOFO,
                          PRAZOPGTFORN.VRPERCPGTOFO
                       FROM
                          PRAZOPGTFORN
                       WHERE
                          PRAZOPGTFORN.CDFORNECED = P_CDFORNECED;
                    END IF;
                 ELSE
                    UPDATE ITEMCOLE
                    SET
                       CDFORMPGTO   = V_PGTO_CDFORMPGTO,
                       IDTPFOPGTCOL = V_PGTO_IDTPFORPGPRF,
                       NRDIAPGFXCOL = V_PGTO_NRDIAPGFIPRF,
                       NRPARCPGTCOL = V_PGTO_NRPARCPGTPRF,
                       IDUTDIAPGCOL = V_PGTO_IDUTDIAPGPRF
                    WHERE
                       CDFILIAL    = P_CDFILIAL   AND
                       NRCOLEPRECO = P_NRCOLEPRECO AND
                       CDPRODUTO   = C_INCLUI.CDPRODUTO  AND
                       CDMARCA     = C_INCLUI.CDMARCA    AND
                       CDFORNECED  = P_CDFORNECED AND
                       CDREGIAO    = C_INCLUI.CDREGIAO;
                    IF V_PGTO_IDTPFORPGPRF = 'V' THEN
                       INSERT INTO PZOPGTITMCOL
                         (CDFILIAL, NRCOLEPRECO, CDFORNECED, CDPRODUTO,
                         CDMARCA, CDREGIAO, NRDIASPGTCOL, VRPERCPGTCOL)

                       SELECT
                          P_CDFILIAL,
                          P_NRCOLEPRECO,
                          P_CDFORNECED,
                          C_INCLUI.CDPRODUTO,
                          C_INCLUI.CDMARCA,
                          C_INCLUI.CDREGIAO,
                          PZOPGTPRFO.NRDIASPGPRFO,
                          PZOPGTPRFO.VRPERCPGPRFO
                       FROM
                          PZOPGTPRFO, PRODUTO
                       WHERE
                          PZOPGTPRFO.CDPRODUTO  = PRODUTO.CDPRODUTO     AND
                          PZOPGTPRFO.CDFORNECED = P_CDFORNECED AND
                          C_INCLUI.CDARVPROD LIKE PRODUTO.CDARVPROD || '%';
                    END IF;
                 END IF;

         /*############ For�ando execu��o da trigger para c�lculo do pre�o econ�mico ###############*/
                 UPDATE ITEMCOLE
                 SET IDTPFOPGTCOL = IDTPFOPGTCOL
                 WHERE
                   CDFILIAL    = P_CDFILIAL    AND
                   NRCOLEPRECO = P_NRCOLEPRECO AND
                   CDPRODUTO   = C_INCLUI.CDPRODUTO   AND
                   CDMARCA     = C_INCLUI.CDMARCA     AND
                   CDFORNECED  = P_CDFORNECED  AND
                   CDREGIAO    = C_INCLUI.CDREGIAO;

                 COMMIT;
               END IF;
            END IF;
         END IF;
      END IF;
   END LOOP;
   IF V_ROWS_AFFECTED <> 0 THEN
      IF INSTR(P_IDERRO, '1') <> 0 THEN
         IF SUBSTR(P_IDERRO, 1, 1) = 1 THEN
            P_IDERRO := '2'||SUBSTR(P_IDERRO, 2, 2);
         END IF;
         IF SUBSTR(P_IDERRO, 2, 1) = 1 THEN
            P_IDERRO := SUBSTR(P_IDERRO, 1, 1)||'2'||SUBSTR(P_IDERRO, 3, 1);
         END IF;
         IF SUBSTR(P_IDERRO, 3, 1) = 1 THEN
            P_IDERRO := SUBSTR(P_IDERRO, 1, 2)||'2';
         END IF;
      ELSE
         P_IDERRO := '000';
      END IF;
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('INC_FORN_COTA','6.19.XXX'); END;
/