CREATE OR REPLACE PROCEDURE DUPLICA_ITEMCOLE(P_NRDUPLICA  IN NUMBER,
                                             P_CDOPERINCL IN OPERADOR.CDOPERADOR%TYPE,
                                             P_LOGCOUNT  OUT NUMBER) IS
    V_NOVOCODIGO  VARCHAR2(20);
    V_NRCOLEPRECO COLETAPR.NRCOLEPRECO%TYPE;
    V_CDEMPRESA   EMPRESA.CDEMPRESA%TYPE;
    V_CDINSCESTA  INSCRESTAD.CDINSCESTA%TYPE;
    V_DSMETUSULIC LOGITEMCOLE.DSMETUSULIC%TYPE := 'INSERT_TMPDUPLICACOTACAO';

    C_PRODFORN    PRODFORN%ROWTYPE;
    C_FORNECEDOR  FORNECEDOR%ROWTYPE;
BEGIN
    P_LOGCOUNT := 0;
    FOR C_DEL IN (SELECT ROWID, 
                         ITEMCOLE.CDFILIAL,
                         ITEMCOLE.NRCOLEPRECO,
                         ITEMCOLE.CDPRODUTO,
                         ITEMCOLE.CDMARCA,
                         ITEMCOLE.CDFORNECED,
                         ITEMCOLE.CDREGIAO,
                         ITEMCOLE.DTINIVALITM,
                         ITEMCOLE.DTFINVALITM,
                         ITEMCOLE.VRPRECUNIITM,
                         ITEMCOLE.NRCOLEORIGIC
                    FROM ITEMCOLE
                   WHERE EXISTS (SELECT 1
                                   FROM TMP_DUPLICACOTACAO TMP INNER JOIN COLETAPR ON TMP.CDFILIAL = COLETAPR.CDFILIAL
                                                                                  AND TMP.NRCOLEORIGIC = COLETAPR.NRCOLEPRECO
                                  WHERE TMP.NRDUPLICA = P_NRDUPLICA
                                    AND TMP.DSERROR IS NULL
                                    AND TMP.CDFILIAL     = ITEMCOLE.CDFILIAL
                                    AND TMP.NRCOLEORIGIC = ITEMCOLE.NRCOLEORIGIC
                                    AND TMP.CDFORNECED   = ITEMCOLE.CDFORNECED
                                    AND TMP.CDREGIAO     = ITEMCOLE.CDREGIAO
                                    AND TMP.CDPRODUTO    = ITEMCOLE.CDPRODUTO
                                    AND TMP.CDMARCA      = ITEMCOLE.CDMARCA
                                    AND TMP.DTINIVALNEW  = ITEMCOLE.DTINIVALITM
                                    AND TMP.DTFINVALNEW  = ITEMCOLE.DTFINVALITM))
    LOOP
        DELETE ITEMCOLE
         WHERE ROWID = C_DEL.ROWID;

        INSERT INTO LOGITEMCOLE(CDFILIALLIC,   --01
                                NRCOLEPRELIC,  --02
                                CDMARCALIC,    --03
                                CDREGIAOLIC,   --04
                                CDFORNECELIC,  --05
                                CDPRODUTOLIC,  --06
                                DTINIVALLIC,   --07
                                DTFINVALLIC,   --08
                                DTOPERACLIC,   --09
                                IDOPERALIC,    --10
                                DSMETUSULIC,   --11
                                IDITMLISPLIC,  --12
                                NRCOLEORILIC,  --13
                                IDMOTIVNDUPL,  --14
                                VRPRECANTLIC,  --15
                                VRPRECDEPLIC,  --16
                                DSMESSAGERROR, --17 
                                NRDUPLICA)     --18
                         VALUES(C_DEL.CDFILIAL,      --01
                                C_DEL.NRCOLEPRECO,   --02
                                C_DEL.CDMARCA,       --03
                                C_DEL.CDREGIAO,      --04
                                C_DEL.CDFORNECED,    --05
                                C_DEL.CDPRODUTO,     --06
                                C_DEL.DTINIVALITM,   --07
                                C_DEL.DTFINVALITM,   --08
                                SYSDATE,             --09
                                'N',                 --10
                                V_DSMETUSULIC,       --11
                                NULL,                --12
                                C_DEL.NRCOLEORIGIC,  --13
                                '8888888888',        --14
                                C_DEL.VRPRECUNIITM,  --15
                                C_DEL.VRPRECUNIITM,  --16
                                'DEL_ANTESDUPLICA',  --17
                                P_NRDUPLICA);        --18
        COMMIT;
    END LOOP;

    FOR C_TMP IN (SELECT CDFILIAL, NRCOLEORIGIC, CDOPERADOR, IDDISMONTLIS, DTINIVALNEW, DTFINVALNEW, IDSITUCOLETA
                    FROM TMP_DUPLICACOTACAO
                   WHERE NRDUPLICA = P_NRDUPLICA
                     AND DSERROR IS NULL
                   GROUP BY CDFILIAL, NRCOLEORIGIC, CDOPERADOR, IDDISMONTLIS, DTINIVALNEW, DTFINVALNEW, IDSITUCOLETA)
    LOOP
        NOVO_CODIGO('COLETA'||C_TMP.CDFILIAL, V_NOVOCODIGO);
        V_NRCOLEPRECO := SUBSTR(V_NOVOCODIGO, 11, 10);

        INSERT INTO COLETAPR(CDFILIAL,
                             NRCOLEPRECO,
                             NRSEMAINIC,
                             NRSEMAFINAL,
                             DTINIVALCOL,
                             DTFINVALCOL,
                             CDOPERADOR,
                             DTCOLEPREC,
                             NRCOLEORIGCO,
                             CDOPERINCL,
                             DTINCLCOLET,
                             IDDISMONTLIS,
                             IDSITUCOLETA,
                             NRDUPLICA)
                     VALUES (C_TMP.CDFILIAL,
                             V_NRCOLEPRECO,
                             TO_CHAR(C_TMP.DTINIVALNEW,'WW'),
                             TO_CHAR(C_TMP.DTFINVALNEW,'WW'),
                             C_TMP.DTINIVALNEW,
                             C_TMP.DTFINVALNEW,
                             C_TMP.CDOPERADOR,
                             SYSDATE,
                             C_TMP.NRCOLEORIGIC,
                             P_CDOPERINCL,
                             SYSDATE,
                             C_TMP.IDDISMONTLIS,
                             C_TMP.IDSITUCOLETA,
                             P_NRDUPLICA);
        COMMIT;
        
        FOR C_ITEM IN (SELECT CDFILIAL, 
                              V_NRCOLEPRECO, 
                              CDFORNECED, 
                              CDREGIAO, 
                              CDPRODUTO, 
                              CDMARCA, 
                              CDTIPCOB, 
                              CDSEGMARCCOL, 
                              DTINIVALNEW, 
                              DTFINVALNEW, 
                              VRPRECUNIITM, 
                              VRPRECECOITM, 
                              VRPERDESITM, 
                              IDTIPFREITM, 
                              NRPZOENTCOL, 
                              DSPZOPGTCONC, 
                              CDOPERINCL, 
                              IDPRECALT, 
                              SYSDATE,
                              NRCOLEORIGIC,
                              CDARVPROD
                         FROM TMP_DUPLICACOTACAO
                        WHERE NRDUPLICA = P_NRDUPLICA
                          AND CDFILIAL = C_TMP.CDFILIAL
                          AND CDOPERADOR = C_TMP.CDOPERADOR
                          AND IDDISMONTLIS = C_TMP.IDDISMONTLIS
                          AND NRCOLEORIGIC = C_TMP.NRCOLEORIGIC
                          AND DSERROR IS NULL)
        LOOP
            INSERT INTO ITEMCOLE (CDFILIAL,     --01
                                  NRCOLEPRECO,  --02
                                  CDFORNECED,   --03
                                  CDREGIAO,     --04
                                  CDPRODUTO,    --05
                                  CDMARCA,      --06
                                  CDTIPCOB,     --07
                                  CDSEGMARCCOL, --08
                                  DTINIVALITM,  --09
                                  DTFINVALITM,  --10
                                  VRPRECUNIITM, --11
                                  VRPRECECOITM, --12
                                  VRPERDESITM,  --13
                                  IDTIPFREITM,  --14
                                  NRPZOENTCOL,  --15
                                  DSPZOPGTCONC, --16
                                  NRCOLEORIGIC, --17
                                  CDOPERINCL,   --18
                                  IDPRECALT,    --19
                                  DTINCLITMCOL, --20 
                                  NRDUPLICA)    --21
                          VALUES (C_ITEM.CDFILIAL,      --01
                                  V_NRCOLEPRECO,        --02
                                  C_ITEM.CDFORNECED,    --03
                                  C_ITEM.CDREGIAO,      --04
                                  C_ITEM.CDPRODUTO,     --05
                                  C_ITEM.CDMARCA,       --06
                                  C_ITEM.CDTIPCOB,      --07
                                  C_ITEM.CDSEGMARCCOL,  --08
                                  C_ITEM.DTINIVALNEW,   --09
                                  C_ITEM.DTFINVALNEW,   --10
                                  C_ITEM.VRPRECUNIITM,  --11
                                  C_ITEM.VRPRECECOITM,  --12
                                  C_ITEM.VRPERDESITM,   --13
                                  C_ITEM.IDTIPFREITM,   --14
                                  C_ITEM.NRPZOENTCOL,   --15
                                  C_ITEM.DSPZOPGTCONC,  --16
                                  C_ITEM.NRCOLEORIGIC,  --17
                                  C_ITEM.CDOPERINCL,    --18
                                  C_ITEM.IDPRECALT,     --19
                                  SYSDATE,              --20
                                  P_NRDUPLICA);         --21
            COMMIT;
                  
            SELECT PRODFORN.*
              INTO C_PRODFORN
              FROM PRODFORN INNER JOIN PRODUTO ON PRODFORN.CDPRODUTO = PRODUTO.CDPRODUTO
             WHERE PRODFORN.CDFORNECED = C_ITEM.CDFORNECED
               AND PRODUTO.CDARVPROD   = PRODFORN_FIRSTPRODUTO(C_ITEM.CDARVPROD, C_ITEM.CDFORNECED)
               AND ROWNUM = 1;

            IF C_PRODFORN.IDTPFORPGPRF IS NULL THEN
                SELECT *               
                  INTO C_FORNECEDOR
                  FROM FORNECEDOR
                 WHERE CDFORNECED = C_ITEM.CDFORNECED;

                UPDATE ITEMCOLE
                   SET CDFORMPGTO   = C_FORNECEDOR.CDFORMPGTO,
                       IDTPFOPGTCOL = C_FORNECEDOR.IDTPFORPGTFO,
                       NRDIAPGFXCOL = C_FORNECEDOR.NRDIAPGFIXFO,
                       NRPARCPGTCOL = C_FORNECEDOR.NRPARCPGTOFO,
                       IDUTDIAPGCOL = C_FORNECEDOR.IDUTDIAPGTFO
                 WHERE CDFILIAL    = C_ITEM.CDFILIAL   
                   AND NRCOLEPRECO = V_NRCOLEPRECO
                   AND CDPRODUTO   = C_ITEM.CDPRODUTO
                   AND CDMARCA     = C_ITEM.CDMARCA    
                   AND CDFORNECED  = C_ITEM.CDFORNECED 
                   AND CDREGIAO    = C_ITEM.CDREGIAO;
                COMMIT;

                IF C_FORNECEDOR.IDTPFORPGTFO = 'V' THEN
                   INSERT INTO PZOPGTITMCOL(CDFILIAL, 
                                            NRCOLEPRECO,
                                            CDFORNECED,
                                            CDPRODUTO,
                                            CDMARCA,
                                            CDREGIAO,
                                            NRDIASPGTCOL,
                                            VRPERCPGTCOL)
                                     SELECT C_ITEM.CDFILIAL,
                                            V_NRCOLEPRECO,
                                            C_ITEM.CDFORNECED,
                                            C_ITEM.CDPRODUTO,
                                            C_ITEM.CDMARCA,
                                            C_ITEM.CDREGIAO,
                                            PRAZOPGTFORN.NRDIASPGTOFO,
                                            PRAZOPGTFORN.VRPERCPGTOFO
                                       FROM PRAZOPGTFORN
                                      WHERE PRAZOPGTFORN.CDFORNECED = C_ITEM.CDFORNECED;
                   COMMIT;
                END IF;
            ELSE
                UPDATE ITEMCOLE
                   SET CDFORMPGTO   = C_PRODFORN.CDFORMPGTO,
                       IDTPFOPGTCOL = C_PRODFORN.IDTPFORPGPRF,
                       NRDIAPGFXCOL = C_PRODFORN.NRDIAPGFIPRF,
                       NRPARCPGTCOL = C_PRODFORN.NRPARCPGTPRF,
                       IDUTDIAPGCOL = C_PRODFORN.IDUTDIAPGPRF
                 WHERE CDFILIAL    = C_ITEM.CDFILIAL
                   AND NRCOLEPRECO = V_NRCOLEPRECO
                   AND CDPRODUTO   = C_ITEM.CDPRODUTO
                   AND CDMARCA     = C_ITEM.CDMARCA
                   AND CDFORNECED  = C_ITEM.CDFORNECED
                   AND CDREGIAO    = C_ITEM.CDREGIAO;

                IF C_PRODFORN.IDTPFORPGPRF = 'V' THEN
                   INSERT INTO PZOPGTITMCOL(CDFILIAL,
                                            NRCOLEPRECO,
                                            CDFORNECED,
                                            CDPRODUTO,
                                            CDMARCA,
                                            CDREGIAO,
                                            NRDIASPGTCOL,
                                            VRPERCPGTCOL)
                                     SELECT C_ITEM.CDFILIAL,
                                            V_NRCOLEPRECO,
                                            C_ITEM.CDFORNECED,
                                            C_ITEM.CDPRODUTO,
                                            C_ITEM.CDMARCA,
                                            C_ITEM.CDREGIAO,
                                            PZOPGTPRFO.NRDIASPGPRFO,
                                            PZOPGTPRFO.VRPERCPGPRFO
                                       FROM PZOPGTPRFO INNER JOIN PRODUTO ON PZOPGTPRFO.CDPRODUTO = PRODUTO.CDPRODUTO
                                      WHERE PZOPGTPRFO.CDFORNECED = C_ITEM.CDFORNECED
                                        AND C_ITEM.CDARVPROD LIKE PRODUTO.CDARVPROD || '%';
                   COMMIT;
                END IF;
            END IF;

            SELECT SUBSTR(EMITENTE(C_TMP.CDFILIAL, C_ITEM.CDPRODUTO, C_ITEM.CDFORNECED), 3, 2)
              INTO V_CDEMPRESA
              FROM DUAL;

            SELECT MAX(EMPRESA.CDEMPRESA),
                   MIN(INSCRESTAD.CDINSCESTA)
              INTO V_CDEMPRESA, V_CDINSCESTA
              FROM EMPRESA INNER JOIN INSCRESTAD ON EMPRESA.CDEMPRESA = INSCRESTAD.CDEMPRESA
             WHERE EMPRESA.CDEMPRESA = V_CDEMPRESA;

            IMPOSTO_ITEMCOL(V_CDEMPRESA,        
                            V_CDINSCESTA,
                            C_ITEM.CDFORNECED, 
                            C_TMP.CDFILIAL,
                            V_NRCOLEPRECO,
                            C_ITEM.CDFORNECED,
                            C_ITEM.CDREGIAO,
                            C_ITEM.CDPRODUTO,
                            C_ITEM.CDMARCA,
                            SYSDATE);

            FOR C_DEL IN (SELECT ROWID, 
                                 ITEMCOLE.CDFILIAL,
                                 ITEMCOLE.NRCOLEPRECO,
                                 ITEMCOLE.CDPRODUTO,
                                 ITEMCOLE.CDMARCA,
                                 ITEMCOLE.CDFORNECED,
                                 ITEMCOLE.CDREGIAO,
                                 ITEMCOLE.DTINIVALITM,
                                 ITEMCOLE.DTFINVALITM,
                                 ITEMCOLE.VRPRECUNIITM
                            FROM ITEMCOLE
                           WHERE ITEMCOLE.NRCOLEPRECO != V_NRCOLEPRECO
                             AND ITEMCOLE.CDFILIAL     = C_ITEM.CDFILIAL    
                             AND ITEMCOLE.CDPRODUTO    = C_ITEM.CDPRODUTO   
                             AND ITEMCOLE.CDMARCA      = C_ITEM.CDMARCA     
                             AND ITEMCOLE.CDFORNECED   = C_ITEM.CDFORNECED  
                             AND ITEMCOLE.CDREGIAO     = C_ITEM.CDREGIAO    
                             AND ITEMCOLE.DTINIVALITM  = C_ITEM.DTINIVALNEW 
                             AND ITEMCOLE.DTFINVALITM  = C_ITEM.DTFINVALNEW
                             AND ITEMCOLE.NRCOLEORIGIC = C_TMP.NRCOLEORIGIC)
            LOOP
                DELETE ITEMCOLE
                 WHERE ROWID = C_DEL.ROWID;

                INSERT INTO LOGITEMCOLE(CDFILIALLIC,   --01
                                        NRCOLEPRELIC,  --02
                                        CDMARCALIC,    --03
                                        CDREGIAOLIC,   --04
                                        CDFORNECELIC,  --05
                                        CDPRODUTOLIC,  --06
                                        DTINIVALLIC,   --07
                                        DTFINVALLIC,   --08
                                        DTOPERACLIC,   --09
                                        IDOPERALIC,    --10
                                        DSMETUSULIC,   --11
                                        IDITMLISPLIC,  --12
                                        NRCOLEORILIC,  --13
                                        IDMOTIVNDUPL,  --14
                                        VRPRECANTLIC,  --15
                                        VRPRECDEPLIC,  --16
                                        DSMESSAGERROR, --17 
                                        NRDUPLICA)     --18
                         VALUES(C_DEL.CDFILIAL,      --01
                                C_DEL.NRCOLEPRECO,   --02
                                C_DEL.CDMARCA,       --03
                                C_DEL.CDREGIAO,      --04
                                C_DEL.CDFORNECED,    --05
                                C_DEL.CDPRODUTO,     --06
                                C_DEL.DTINIVALITM,   --07
                                C_DEL.DTFINVALITM,   --08
                                SYSDATE,             --09
                                'N',                 --10
                                V_DSMETUSULIC,       --11
                                C_TMP.IDDISMONTLIS,  --12
                                C_TMP.NRCOLEORIGIC,  --13
                                '9999999999',        --14
                                C_DEL.VRPRECUNIITM,  --15
                                C_DEL.VRPRECUNIITM,  --16
                                'DEL_ITEMDUPLICADO', --17
                                P_NRDUPLICA);        --18
                
                P_LOGCOUNT := P_LOGCOUNT + SQL%ROWCOUNT;
                COMMIT;
            END LOOP;         
        END LOOP;

        LOOP
            DELETE
              FROM COLETAPR
             WHERE CDFILIAL     = C_TMP.CDFILIAL
               AND DTINIVALCOL >= C_TMP.DTINIVALNEW
               AND DTFINVALCOL <= C_TMP.DTFINVALNEW
               AND NOT EXISTS (SELECT 1
                                 FROM ITEMCOLE
                                WHERE ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL
                                  AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO)
               AND ROWNUM < 10;
            
            EXIT WHEN SQL%ROWCOUNT = 0;
            COMMIT;
        END LOOP;
        COMMIT;
    END LOOP;

    INSERT INTO LOGITEMCOLE(CDFILIALLIC,   --01
                            NRCOLEPRELIC,  --02
                            CDMARCALIC,    --03
                            CDREGIAOLIC,   --04
                            CDFORNECELIC,  --05
                            CDPRODUTOLIC,  --06
                            DTINIVALLIC,   --07
                            DTFINVALLIC,   --08
                            DTOPERACLIC,   --09
                            IDOPERALIC,    --10
                            DSMETUSULIC,   --11
                            IDITMLISPLIC,  --12
                            NRCOLEORILIC,  --13
                            IDMOTIVNDUPL,  --14
                            VRPRECANTLIC,  --15
                            VRPRECDEPLIC,  --16
                            DSMESSAGERROR, --17
                            NRDUPLICA)     --18
                     SELECT CDFILIAL,      --01
                            V_NRCOLEPRECO, --02
                            CDMARCA,       --03
                            CDREGIAO,      --04
                            CDFORNECED,    --05
                            CDPRODUTO,     --06
                            DTINIVALNEW,   --07
                            DTFINVALNEW,   --08
                            SYSDATE,       --09
                            'N',           --10
                            V_DSMETUSULIC, --11
                            IDDISMONTLIS,  --12
                            NRCOLEORIGIC,  --13
                            '9999999999',  --14
                            VRPRECUNIITM,  --15
                            VRPRECUNIITM,  --16
                            DSERROR,       --17
                            P_NRDUPLICA    --18
                       FROM TMP_DUPLICACOTACAO
                      WHERE NRDUPLICA    = P_NRDUPLICA
                        AND DSERROR IS NOT NULL;
    P_LOGCOUNT := P_LOGCOUNT + SQL%ROWCOUNT;                        
    COMMIT;   
END DUPLICA_ITEMCOLE;    
/