CREATE OR REPLACE PROCEDURE APURACAO_SUPPLYTEK (P_CDCENTCMP      IN ITMAPURPREC.CDCENTITMAP%TYPE,
                                                P_NRSEQAPUR      IN ITMAPURPREC.NRSEQITMAP%TYPE,
                                                P_DTENTREGA      IN ITMAPURPREC.DTENTRAPUT%TYPE,
                                                P_NRCARTSUPPLY   IN VARCHAR2 DEFAULT NULL,
                                                P_CDFILIAL       IN ITMAPURPREC.CDFILIAP%TYPE,
                                                P_ROWSAFFECT     OUT VARCHAR2)
IS 
 V_CTIMPOSTO      INT;
 V_IDPRODWEB      AUTOFORNE.IDAFPRODWEB%TYPE;
 V_IDAFOPERLOG    AUTOFORNE.IDAFOPERLOG%TYPE;

 V_CDEMPRESA      EMPRESA.CDEMPRESA%TYPE;
 V_CONCKEY         VARCHAR2(200);
 V_IDTIPEMIT       VARCHAR2(1);
 V_EMITENTE        VARCHAR2(4);
 V_DSPZOPGTCONC    VARCHAR2(2000);

 V_CDFILIOPELOG   VARCHAR2(2000);
 V_CDFORNOPELOG   VARCHAR2(2000);
 V_IDUTILCONSSOLIOL VARCHAR2(1);
 V_IDSEPAFIMP     VARCHAR2(1);

 V_COUNT          INT;


 BEGIN
    SELECT

        NVL(MAX(IDSEPAFIMP), 'N'),
        NVL(MAX(IDUTILCONSSOLIOL), 'N')
     INTO
        V_IDSEPAFIMP,       /* Gera AF's Separadas de Acordo com o Imposto                         */
        V_IDUTILCONSSOLIOL  /* Utiliza consolidacao de solicitacao de compras para o OL            */
     FROM
        PARASUPRI
     WHERE
        CDFILIAL = P_CDCENTCMP;

    FOR C_GRAVA IN (SELECT ITEMCOLE.CDFILIAL,
                           FILIAL.CDFILIAL AS CDFILSOLI,
                           ITEMCOLE.CDPRODUTO,
                           ITEMCOLE.NRCOLEPRECO,
                           ITEMCOLE.CDFORNECED,
                           ITEMCOLE.CDREGIAO,
                           ITEMCOLE.CDMARCA,
                           PRODCART.QTPRODUTO,
                           PRODCART.QTPRODUTO AS QTPRODUTO_AUX,
                           ITEMCOLE.CDTIPCOB,
                           ITEMCOLE.CDFORMPGTO,
                           ITEMCOLE.IDUTDIAPGCOL,
                           ITEMCOLE.IDTPFOPGTCOL,
                           PARCMPSUP.IDTIPEMITGER,
                           ITEMCOLE.IDTIPFREITM,
                           ITEMCOLE.NRPARCPGTCOL,
                           ITEMCOLE.CDSEGMARCCOL,
                           PRODCART.VRPRECPROD,
                           ITEMCOLE.VRPERDESITM,
                           ITEMCOLE.NRDIAPGFXCOL,
                           ITEMCOLE.VRPRECECOITM,
                           ITEMCOLE.VRPRECOITMPI,
                           ITEMCOLE.IDITMLISPREC,
                           ITEMCOLE.NRSEQPRELIST,
                           ITEMCOLE.QTACMPITMCOL
                       FROM ITEMCOLE, PRODUTO, FORNECEDOR, COLETAPR, FILIAL, CARTSUPPLY, PRODCART, V_CATALOG, PARASUPRI, PARCMPSUP
                      WHERE COLETAPR.CDFILIAL         = V_CATALOG.CDFILCOT    
                        AND COLETAPR.NRCOLEPRECO      = V_CATALOG.NRCOLEPRECO
                        AND V_CATALOG.CDREGIAO        = FILIAL.CDREGIAO
                        AND CARTSUPPLY.NRCARTSUPPLY   = P_NRCARTSUPPLY
                        AND COLETAPR.CDFILIAL         = ITEMCOLE.CDFILIAL          
                        AND COLETAPR.NRCOLEPRECO      = ITEMCOLE.NRCOLEPRECO       
                        AND PRODUTO.CDPRODUTO         = ITEMCOLE.CDPRODUTO         
                        AND ITEMCOLE.VRPRECUNIITM     <> 0
                        AND ITEMCOLE.CDREGIAO         = FILIAL.CDREGIAO   
                        AND FORNECEDOR.CDFORNECED     = ITEMCOLE.CDFORNECED   
                        AND FORNECEDOR.IDSITUCADA     = 'A'                   
                        AND FORNECEDOR.IDTIPOFORN     <> 'A'                   
                        AND COLETAPR.NRCOMPRA IS NULL  
                        AND PARASUPRI.CDFILIAL        = COLETAPR.CDFILIAL
                        AND ((PARASUPRI.IDUTISTATCOT  = 'N') OR (NVL(COLETAPR.IDSITUCOLETA, 'C') = 'C'))
                        AND CARTSUPPLY.CDFORNECED     = ITEMCOLE.CDFORNECED
                        AND CARTSUPPLY.CDFILIAL       = FILIAL.CDFILIAL
                        AND PRODCART.NRCARTSUPPLY     = CARTSUPPLY.NRCARTSUPPLY
                        AND PRODCART.CDPRODUTO        = ITEMCOLE.CDPRODUTO
                        AND PRODCART.CDMARCA          = ITEMCOLE.CDMARCA
                        AND V_CATALOG.NRSEQ           = PRODCART.NRSEQCATALOG
                        AND PARCMPSUP.CDFILIAL        = FILIAL.CDFILIAL)
    LOOP
       
       V_EMITENTE     := EMITENTE(C_GRAVA.CDFILIAL, C_GRAVA.CDPRODUTO, C_GRAVA.CDFORNECED);
       V_DSPZOPGTCONC := CONCAT_PZO_PAGTO (C_GRAVA.CDFILIAL, C_GRAVA.NRCOLEPRECO, C_GRAVA.CDFORNECED, C_GRAVA.CDPRODUTO, C_GRAVA.CDMARCA, C_GRAVA.CDREGIAO);
       V_CTIMPOSTO := NULL;
       V_CONCKEY   := NULL;
       
       IF V_IDSEPAFIMP = 'S' THEN
          SELECT COUNT(*)
            INTO V_CTIMPOSTO
            FROM IMPCOLET
           WHERE CDFILIAL    = C_GRAVA.CDFILIAL    
             AND NRCOLEPRECO = C_GRAVA.NRCOLEPRECO 
             AND CDMARCA     = C_GRAVA.CDMARCA     
             AND CDREGIAO    = C_GRAVA.CDREGIAO    
             AND CDFORNECED  = C_GRAVA.CDFORNECED  
             AND CDPRODUTO   = C_GRAVA.CDPRODUTO;
          IF V_CTIMPOSTO = 0 THEN
             V_CONCKEY := '';
          ELSE
             IF V_CTIMPOSTO = 1 THEN
                SELECT DISTINCT CDIMPOSTO
                  INTO V_CONCKEY
                  FROM IMPCOLET
                 WHERE CDFILIAL    = C_GRAVA.CDFILIAL    
                   AND NRCOLEPRECO = C_GRAVA.NRCOLEPRECO 
                   AND CDMARCA     = C_GRAVA.CDMARCA     
                   AND CDREGIAO    = C_GRAVA.CDREGIAO    
                   AND CDFORNECED  = C_GRAVA.CDFORNECED  
                   AND CDPRODUTO   = C_GRAVA.CDPRODUTO;
             ELSE
                IF V_CTIMPOSTO > 1 THEN
                   V_CONCKEY := '*';
                END IF;
             END IF;
          END IF;
       END IF;

       V_CDEMPRESA := SUBSTR(V_EMITENTE, 3, 2);
       V_CONCKEY   := V_CONCKEY||C_GRAVA.CDFILIAL|| C_GRAVA.CDFORNECED   ||SUBSTR(V_EMITENTE, 3, 2)||
                            C_GRAVA.IDTPFOPGTCOL || C_GRAVA.CDTIPCOB     || C_GRAVA.IDTIPFREITM    ||
                            C_GRAVA.CDFORMPGTO   || C_GRAVA.NRPARCPGTCOL || C_GRAVA.NRDIAPGFXCOL   || 
                            C_GRAVA.IDUTDIAPGCOL ||SUBSTR(V_EMITENTE, 1, 1);
       V_IDAFOPERLOG  := 'X';
       V_CDFILIOPELOG := NULL;
       V_CDFORNOPELOG := NULL;

       IF V_IDUTILCONSSOLIOL = 'N' THEN
          SELECT DECODE(MAX('2'), NULL, 'X', MAX('2')) INTO V_IDAFOPERLOG
            FROM PARAMPRODSUP
           WHERE CDFILIAL     = C_GRAVA.CDFILSOLI 
             AND CDPRODUTO    = C_GRAVA.CDPRODUTO    
             AND CDFILIOPELOG IS NOT NULL;
          SELECT MAX(P.CDFILIOPELOG), MAX(F.CDFORNOPELOG) INTO V_CDFILIOPELOG , V_CDFORNOPELOG
            FROM PARAMPRODSUP P, FILIAL F
           WHERE P.CDFILIAL     = C_GRAVA.CDFILSOLI 
             AND P.CDPRODUTO    = C_GRAVA.CDPRODUTO    
             AND P.CDFILIOPELOG = F.CDFILIAL;
          
          IF V_CDFORNOPELOG <> C_GRAVA.CDFORNECED THEN
             V_IDAFOPERLOG  := 'X';
             V_CDFILIOPELOG := NULL;
          END IF;
       END IF;

       V_IDPRODWEB := 'N';
       SELECT DECODE(MAX(PARAMPRODSUP.IDPRODWEB), NULL, 'N', MAX(PARAMPRODSUP.IDPRODWEB)) INTO V_IDPRODWEB
         FROM PARAMPRODSUP
        WHERE CDFILIAL   = C_GRAVA.CDFILSOLI 
          AND CDPRODUTO  = C_GRAVA.CDPRODUTO    
          AND CDFORNECED = C_GRAVA.CDFORNECED;
       IF V_CDFILIOPELOG IS NULL THEN
          V_CDFILIOPELOG := 'OL_NULL';
       END IF;

       INSERT INTO ITMAPURPREC  (CDCENTITMAP,  NRSEQITMAP,   CDFILIAP,      DTENTRAPUT,   CDPRODITMAP,  NRCOLEITMAP,
                                 CDFORNITMAP,  CDREGITMAP,   CDMARCITMAP,   QTSOLACOMP,   QTACOMP,      CDTIPCOBAP,
                                 CDEMPRESAAP,  CDFORMPGTOAP, IDULTDIAPGTAF, CONCKEYAP,    IDTPFORPGTAP, IDTIPOEMITAP,
                                 IDTIPOFRETAP, NRPARCPGTOAP, CDSEGMARCCOL,  VRPRECUNIAP,  VRPERDESIAP,  NRDIAPGFIAP,
                                 DSPZOPGTCOAP, VRPRECECOAP,  VRPRECONPIAP,  IDITMLISPRAP, NRLISTAITMAP, QTDISPPRODMARC, IDITMSELAPUR)
       VALUES(P_CDCENTCMP, P_NRSEQAPUR, 
              C_GRAVA.CDFILSOLI, P_DTENTREGA, 
              C_GRAVA.CDPRODUTO, C_GRAVA.NRCOLEPRECO,
              C_GRAVA.CDFORNECED, C_GRAVA.CDREGIAO, 
              C_GRAVA.CDMARCA, C_GRAVA.QTPRODUTO, C_GRAVA.QTPRODUTO_AUX, 
              C_GRAVA.CDTIPCOB,
              V_CDEMPRESA, 
              C_GRAVA.CDFORMPGTO, 
              C_GRAVA.IDUTDIAPGCOL, 
              V_CONCKEY||V_CDFILIOPELOG||V_IDPRODWEB||V_IDAFOPERLOG, 
              C_GRAVA.IDTPFOPGTCOL, 
              C_GRAVA.IDTIPEMITGER,
              C_GRAVA.IDTIPFREITM,
              C_GRAVA.NRPARCPGTCOL, 
              C_GRAVA.CDSEGMARCCOL, 
              C_GRAVA.VRPRECPROD, 
              C_GRAVA.VRPERDESITM, 
              C_GRAVA.NRDIAPGFXCOL,
              V_DSPZOPGTCONC, 
              C_GRAVA.VRPRECECOITM, 
              C_GRAVA.VRPRECOITMPI,
              C_GRAVA.IDITMLISPREC, 
              C_GRAVA.NRSEQPRELIST, 
              C_GRAVA.QTACMPITMCOL,
              'S');
        
        IF SQL%ROWCOUNT > 0 THEN
           P_ROWSAFFECT := 'S';
        END IF;

        V_COUNT := 0;
        SELECT COUNT(*)
          INTO V_COUNT
          FROM ITMAPURPREC
         WHERE ITMAPURPREC.CDCENTITMAP = P_CDCENTCMP  
           AND ITMAPURPREC.NRSEQITMAP  = P_NRSEQAPUR;
        IF V_COUNT > 0 THEN
           P_ROWSAFFECT := 'S';
        ELSE
           P_ROWSAFFECT := 'N';
        END IF;
        IF (P_ROWSAFFECT <> 'S') THEN
           DELETE FROM ITMAPURPREC
           WHERE (CDCENTITMAP  = P_CDCENTCMP) 
             AND (NRSEQITMAP   = P_NRSEQAPUR);
        END IF;
    END LOOP;
 END;
/