CREATE OR REPLACE PROCEDURE INSERT_TMPDUPLICACOTACAO (P_CDFILIALORIG  IN FILIAL.CDFILIAL%TYPE,
                                                      P_NRCOLEORIG    IN COLETAPR.NRCOLEPRECO%TYPE,
                                                      P_CDOPERADORIG  IN VARCHAR2,
                                                      P_CDREGIAORIG   IN VARCHAR2,
                                                      P_DTINIVALORI   IN COLETAPR.DTINIVALCOL%TYPE,
                                                      P_DTFINVALORI   IN COLETAPR.DTFINVALCOL%TYPE,
                                                      P_DTINIVALNEW   IN COLETAPR.DTINIVALCOL%TYPE,
                                                      P_DTFINVALNEW   IN COLETAPR.DTFINVALCOL%TYPE,
                                                      P_DTCOLEPREC    IN COLETAPR.DTCOLEPREC%TYPE,
                                                      P_VRREAJUSTE    IN NUMBER,
                                                      P_CDOPERINCL    IN OPERADOR.CDOPERADOR%TYPE,
                                                      P_DUPITSEMPRECO IN VARCHAR2 DEFAULT 'S',
                                                      P_TOTAL        OUT NUMBER,
                                                      P_TOTALERROR   OUT NUMBER,
                                                      P_NRDUPLICA    OUT NUMBER) IS
    
    V_NRDUPLICA  TMP_DUPLICACOTACAO.NRDUPLICA%TYPE := SEQ_DUPLICACOTACAO.NEXTVAL;
    C_PARASUPRI  PARASUPRI%ROWTYPE;
    V_TOTALERROR NUMBER;
BEGIN
    SELECT *
      INTO C_PARASUPRI
      FROM PARASUPRI
     WHERE CDFILIAL = P_CDFILIALORIG;

    INSERT INTO TMP_DUPLICACOTACAO (NRITEMDUPLICA, --01 
                                    NRDUPLICA,     --02 
                                    CDFILIAL,      --03 
                                    NRCOLEORIGIC,  --04 
                                    CDOPERADOR,    --05
                                    CDFORNECED,    --06 
                                    CDREGIAO,      --07
                                    CDPRODUTO,     --08 
                                    CDMARCA,       --09
                                    CDTIPCOB,      --10 
                                    CDSEGMARCCOL,  --11
                                    DTINIVALORIG,  --12 
                                    DTFINVALORIG,  --13
                                    VRPRECUNIITM,  --14 
                                    VRPRECECOITM,  --15
                                    VRPERDESITM,   --16 
                                    IDTIPFREITM,   --17
                                    NRPZOENTCOL,   --18 
                                    DSPZOPGTCONC,  --19
                                    CDOPERINCL,    --20
                                    IDPRECALT,     --21
                                    DTINCLITMCOL,  --22 
                                    IDSITUCOLETA,  --23 
                                    IDSITUCADA,    --24 
                                    IDULTIDTVALQ,  --25 
                                    IDMARSEMQUA,   --26 
                                    IDFORNAUTO,    --27
                                    CDQUALIF,      --28
                                    DTVALQUALIF,   --29
                                    CDARVPROD,     --30
                                    IDDISMONTLIS,  --31
                                    DTINIVALNEW,   --32
                                    DTFINVALNEW)   --33
                             SELECT SEQ_ITEMDUPLICACOT.NEXTVAL,       --01
                                    V_NRDUPLICA,                      --02
                                    ITEMCOLE.CDFILIAL,                --03
                                    ITEMCOLE.NRCOLEPRECO,             --04
                                    COLETAPR.CDOPERADOR,              --05
                                    ITEMCOLE.CDFORNECED,              --06
                                    ITEMCOLE.CDREGIAO,                --07
                                    ITEMCOLE.CDPRODUTO,               --08
                                    ITEMCOLE.CDMARCA,                 --09
                                    ITEMCOLE.CDTIPCOB,                --10
                                    ITEMCOLE.CDSEGMARCCOL,            --11
                                    ITEMCOLE.DTINIVALITM,             --12
                                    ITEMCOLE.DTFINVALITM,             --13
                                    ITEMCOLE.VRPRECUNIITM,            --14
                                    ITEMCOLE.VRPRECECOITM,            --15
                                    ITEMCOLE.VRPERDESITM,             --16
                                    ITEMCOLE.IDTIPFREITM,             --17
                                    ITEMCOLE.NRPZOENTCOL,             --18
                                    ITEMCOLE.DSPZOPGTCONC,            --19
                                    P_CDOPERINCL,                     --20
                                    ITEMCOLE.IDPRECALT,               --21
                                    P_DTCOLEPREC,                     --22
                                    'A',                              --23 Cotacao em andamento
                                    FORNECEDOR.IDSITUCADA,            --24
                                    C_PARASUPRI.IDULTIDTVALQ,         --25
                                    NVL(C_PARASUPRI.IDMARSEMQUA, 'N'),--26
                                    FORNECEDOR.IDFORNAUTO,            --27
                                    FORNECEDOR.CDQUALIF,              --28          
                                    FORNECEDOR.DTVALQUALIF,           --29
                                    PRODUTO.CDARVPROD,                --30
                                    COLETAPR.IDDISMONTLIS,            --31
                                    P_DTINIVALNEW,                    --32  
                                    P_DTFINVALNEW                     --33
                               FROM ITEMCOLE INNER JOIN COLETAPR ON ITEMCOLE.CDFILIAL = COLETAPR.CDFILIAL AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO
                                             INNER JOIN FORNECEDOR ON ITEMCOLE.CDFORNECED = FORNECEDOR.CDFORNECED
                                             INNER JOIN PRODUTO ON ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO
                              WHERE ITEMCOLE.CDFILIAL = P_CDFILIALORIG
                                AND (P_DUPITSEMPRECO = 'S' OR (P_DUPITSEMPRECO = 'N' AND ITEMCOLE.VRPRECUNIITM > 0))
                                AND (ITEMCOLE.NRCOLEPRECO = P_NRCOLEORIG OR (P_NRCOLEORIG IS NULL AND DTINIVALCOL >= P_DTINIVALORI AND DTFINVALCOL <= P_DTFINVALORI))
                                AND (INSTR(P_CDOPERADORIG, COLETAPR.CDOPERADOR) > 0 OR (P_CDOPERADORIG IS NULL AND COLETAPR.CDOPERADOR IN (SELECT C.CDOPERADOR
                                                                                                                                             FROM COMPROPER CO INNER JOIN COMPRADOR C ON CO.CDCOMPRADOR = C.CDOPERADOR
                                                                                                                                                               INNER JOIN OPERADOR O ON C.CDOPERADOR = O.CDOPERADOR
                                                                                                                                            WHERE CO.IDCOTCMPOPER = 'S'
                                                                                                                                              AND CO.CDOPERADOR = P_CDOPERINCL
                                                                                                                                            UNION 
                                                                                                                                           SELECT C.CDOPERADOR
                                                                                                                                             FROM COMPRADOR C INNER JOIN OPERADOR O ON C.CDOPERADOR = O.CDOPERADOR
                                                                                                                                            WHERE C.CDOPERADOR = P_CDOPERINCL)));
    P_TOTAL := SQL%ROWCOUNT;
    COMMIT;

    V_TOTALERROR := 0;
    
    IF NVL(C_PARASUPRI.IDUTISTATCOT, 'N') = 'S' AND NVL(C_PARASUPRI.IDCOTCONCLUI, 'N') = 'S' THEN
        --Cotacao concluida
        UPDATE TMP_DUPLICACOTACAO
           SET IDSITUCOLETA = 'C',
               DSERROR = 'COTACAO_CONCLUIDA'            
         WHERE NRDUPLICA = V_NRDUPLICA
           AND EXISTS (SELECT 1
                         FROM ITEMCOLE IT INNER JOIN COLETAPR CP ON IT.CDFILIAL = CP.CDFILIAL AND IT.NRCOLEPRECO = CP.NRCOLEPRECO
                        WHERE IT.CDFILIAL   = TMP_DUPLICACOTACAO.CDFILIAL
                          AND CP.CDOPERADOR = TMP_DUPLICACOTACAO.CDOPERADOR
                          AND IT.CDREGIAO   = TMP_DUPLICACOTACAO.CDREGIAO
                          AND IT.CDFORNECED = TMP_DUPLICACOTACAO.CDFORNECED
                          AND IT.CDPRODUTO  = TMP_DUPLICACOTACAO.CDPRODUTO
                          AND IT.CDMARCA    = TMP_DUPLICACOTACAO.CDMARCA
                          AND NVL(CP.IDSITUCOLETA, 'C') = 'C'
                          AND IT.DTINIVALITM >= P_DTINIVALNEW 
                          AND IT.DTFINVALITM <= P_DTFINVALNEW);
        
        V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
        COMMIT;        
    END IF;

    --Fornecedor inativo
    UPDATE TMP_DUPLICACOTACAO
       SET IDSITUCADA = 'I',
           DSERROR = 'FORNECEDOR_INATIVO'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND EXISTS (SELECT 1
                     FROM FORNECEDOR F
                    WHERE F.CDFORNECED = TMP_DUPLICACOTACAO.CDFORNECED
                      AND F.IDSITUCADA = 'I');
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;

    --Fornecedor nao atende a regiao
    UPDATE TMP_DUPLICACOTACAO
       SET DSERROR = 'FORN_N_ATENDE_REGIAO'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND EXISTS (SELECT 1
                     FROM REFOREG
                    WHERE REFOREG.CDREGIAO   = TMP_DUPLICACOTACAO.CDREGIAO
                      AND REFOREG.CDFORNECED = TMP_DUPLICACOTACAO.CDFORNECED);
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;

    --Marca Inativa
    UPDATE TMP_DUPLICACOTACAO
       SET DSERROR = 'MARCA_INATIVA'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND EXISTS (SELECT 1
                     FROM MARCA
                    WHERE MARCA.CDMARCA = TMP_DUPLICACOTACAO.CDMARCA
                      AND MARCA.IDMARCAATIVA = 'I');
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;

    --Marca Inativa
    UPDATE TMP_DUPLICACOTACAO
       SET DSERROR = 'MARCA_NCAD_PRODUTO'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND NOT EXISTS (SELECT 1
                         FROM MARCPRODCOMP
                        WHERE MARCPRODCOMP.CDMARCA = TMP_DUPLICACOTACAO.CDMARCA
                          AND MARCPRODCOMP.CDPRMARCOMPL = TMP_DUPLICACOTACAO.CDPRODUTO);
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;

    --Qualificacao de produto por fornecedor
    UPDATE TMP_DUPLICACOTACAO
       SET DSERROR = 'QUALIF_FORN_PRODUTO'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND EXISTS (SELECT 1
                     FROM QFOPRODFORN
                    WHERE QFOPRODFORN.CDPRODUTO  = TMP_DUPLICACOTACAO.CDPRODUTO
                      AND QFOPRODFORN.CDFORNECED = TMP_DUPLICACOTACAO.CDFORNECED
                      AND ((QFOPRODFORN.IDFORNAPROV = 'N' AND QFOPRODFORN.IDFORNAUTOR = 'N') OR ((QFOPRODFORN.IDFORNAPROV = 'S') AND ((C_PARASUPRI.IDULTIDTVALQ = 'M' AND P_DTFINVALNEW > LAST_DAY(QFOPRODFORN.DTVALPRFORN)) OR
                                                                                                                                      (C_PARASUPRI.IDULTIDTVALQ = 'D' AND P_DTFINVALNEW > QFOPRODFORN.DTVALPRFORN)))));
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;
    
    --Qualificacao de marca por produto
    UPDATE TMP_DUPLICACOTACAO
       SET DSERROR = 'QUALIF_MARCA_PRODUTO'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND EXISTS (SELECT 1
                     FROM QFOMARPROD
                    WHERE QFOMARPROD.CDPRODUTO = TMP_DUPLICACOTACAO.CDPRODUTO
                      AND QFOMARPROD.CDMARCA   = TMP_DUPLICACOTACAO.CDMARCA
                      AND ((QFOMARPROD.IDAPRMARPRO = 'N' AND QFOMARPROD.IDAUTMARPRO = 'N') OR ((QFOMARPROD.IDAPRMARPRO = 'S') AND ((C_PARASUPRI.IDULTIDTVALQ = 'M' AND P_DTFINVALNEW > LAST_DAY(QFOMARPROD.DTVALAPROVA)) OR
                                                                                                                                   (C_PARASUPRI.IDULTIDTVALQ = 'D' AND P_DTFINVALNEW > QFOMARPROD.DTVALAPROVA)))));
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;                                                                                                                                   

    IF NVL(C_PARASUPRI.IDMARSEMQUA, 'N') = 'S' THEN
      	UPDATE TMP_DUPLICACOTACAO
           SET DSERROR = 'QUALIF_MARCA_PRODUTO'
       	 WHERE NRDUPLICA = V_NRDUPLICA
           AND DSERROR IS NULL
           AND NOT EXISTS (SELECT 1
           	                 FROM QFOMARPROD
             	            WHERE QFOMARPROD.CDPRODUTO = TMP_DUPLICACOTACAO.CDPRODUTO 
                              AND QFOMARPROD.CDMARCA   = TMP_DUPLICACOTACAO.CDMARCA);
      
      	V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
      	COMMIT;
    END IF;

    --Qualificacao de fornecedor
    UPDATE TMP_DUPLICACOTACAO
       SET DSERROR = 'QUALIF_FORNECEDOR'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND IDFORNAUTO = 'N'
       AND EXISTS (SELECT 1
                     FROM QUALIFICACAO
                    WHERE QUALIFICACAO.CDQUALIF = TMP_DUPLICACOTACAO.CDQUALIF
                      AND ((QUALIFICACAO.IDPERCOTCMP = '2') OR ((C_PARASUPRI.IDULTIDTVALQ = 'D' AND P_DTFINVALNEW > TMP_DUPLICACOTACAO.DTVALQUALIF) OR
                                                                (C_PARASUPRI.IDULTIDTVALQ = 'M' AND P_DTFINVALNEW > LAST_DAY(TMP_DUPLICACOTACAO.DTVALQUALIF)))));
    
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;

    --Produto nao cadastrado para o fornecedor
    UPDATE TMP_DUPLICACOTACAO
       SET DSERROR = 'PRODUTO_N_CADAST_FORN'
     WHERE NRDUPLICA = V_NRDUPLICA
       AND DSERROR IS NULL
       AND NOT EXISTS (SELECT 1
                         FROM PRODFORN INNER JOIN PRODUTO PF ON PRODFORN.CDPRODUTO = PF.CDPRODUTO
                        WHERE PRODFORN.CDFORNECED = TMP_DUPLICACOTACAO.CDFORNECED
                          AND TMP_DUPLICACOTACAO.CDARVPROD LIKE PF.CDARVPROD||'%');
    
    V_TOTALERROR := V_TOTALERROR + SQL%ROWCOUNT;
    COMMIT;

    P_TOTALERROR := V_TOTALERROR;
    P_NRDUPLICA  := V_NRDUPLICA;
END INSERT_TMPDUPLICACOTACAO;
/