CREATE OR REPLACE PACKAGE TEKNISA_RFP AS
    /*
     * Package responsavel pelos procedimentos relacionados a importacao de Planilha RFP
     *
     */

    /*Constants*/
    K_APPLICATION_ERROR    CONSTANT NUMBER       := -20999;
    K_STATUS_PENDENTE      CONSTANT VARCHAR2(08) := 'PENDENTE';
    K_STATUS_INCONSISTENTE CONSTANT VARCHAR2(13) := 'INCONSISTENTE';
    K_STATUS_GERADO        CONSTANT VARCHAR2(06) := 'GERADO';

    K_MARCA1_INATIVA       CONSTANT VARCHAR2(30) := 'MARCA1_INATIVA';
    K_MARCA2_INATIVA       CONSTANT VARCHAR2(30) := 'MARCA2_INATIVA';
    K_MARCA3_INATIVA       CONSTANT VARCHAR2(30) := 'MARCA3_INATIVA';
    K_MARCA4_INATIVA       CONSTANT VARCHAR2(30) := 'MARCA4_INATIVA';
    K_MARCA5_INATIVA       CONSTANT VARCHAR2(30) := 'MARCA5_INATIVA';
    K_MARCA1_N_CADASTRADA  CONSTANT VARCHAR2(30) := 'MARCA1_NAO_CADASTRADA';
    K_MARCA2_N_CADASTRADA  CONSTANT VARCHAR2(30) := 'MARCA2_NAO_CADASTRADA';
    K_MARCA3_N_CADASTRADA  CONSTANT VARCHAR2(30) := 'MARCA3_NAO_CADASTRADA';
    K_MARCA4_N_CADASTRADA  CONSTANT VARCHAR2(30) := 'MARCA4_NAO_CADASTRADA';
    K_MARCA5_N_CADASTRADA  CONSTANT VARCHAR2(30) := 'MARCA5_NAO_CADASTRADA';

    K_PRECO1_N_INFORMADO   CONSTANT VARCHAR2(30) := 'PRECO1_NAO_INFORMADO';
    K_PRECO2_N_INFORMADO   CONSTANT VARCHAR2(30) := 'PRECO2_NAO_INFORMADO';
    K_PRECO3_N_INFORMADO   CONSTANT VARCHAR2(30) := 'PRECO3_NAO_INFORMADO';
    K_PRECO4_N_INFORMADO   CONSTANT VARCHAR2(30) := 'PRECO4_NAO_INFORMADO';
    K_PRECO5_N_INFORMADO   CONSTANT VARCHAR2(30) := 'PRECO5_NAO_INFORMADO';
    K_PRECO1_IGUAL_ZERO    CONSTANT VARCHAR2(30) := 'PRECO1_IGUAL_ZERO';
    K_PRECO2_IGUAL_ZERO    CONSTANT VARCHAR2(30) := 'PRECO2_IGUAL_ZERO';
    K_PRECO3_IGUAL_ZERO    CONSTANT VARCHAR2(30) := 'PRECO3_IGUAL_ZERO';
    K_PRECO4_IGUAL_ZERO    CONSTANT VARCHAR2(30) := 'PRECO4_IGUAL_ZERO';
    K_PRECO5_IGUAL_ZERO    CONSTANT VARCHAR2(30) := 'PRECO5_IGUAL_ZERO';
    
    K_CENTRAL_N_PARAM      CONSTANT VARCHAR2(30) := 'CENTRAL_NAO_PARAMETRIZADA';
    K_COMPRADOR_N_CADAST   CONSTANT VARCHAR2(30) := 'COMPRADOR_NAO_CADASTRADO';
    K_ITENS_INCONSISTENTES CONSTANT VARCHAR2(30) := 'TODOS_ITENS_INCONSISTENTES';

    K_IMP_INCONSISTENTE    CONSTANT VARCHAR2(30) := 'ARQUIVO_INCONSISTENTE';
    K_IMP_EFETUADA         CONSTANT VARCHAR2(30) := 'ARQUIVO_GERADO';
    K_COT_SUCESSO          CONSTANT VARCHAR2(30) := 'COTACAO_GERADA_SUCESSO';
    K_COT_ERROR            CONSTANT VARCHAR2(30) := 'ERRO_GERACAO_COTACAO';    

    K_PZOPGTPRFO           CONSTANT VARCHAR2(30) := 'PZOPGTPRFO';
    K_PRAZOPGTFORN         CONSTANT VARCHAR2(30) := 'PRAZOPGTFORN';

    /*
     * Rotina responsavel por realizar as validacoes na tabela RFPMAIN
     * 
     */
    PROCEDURE CHECK_RFPMAIN(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE);

    /*
     * Rotina responsavel por realizar as validacoes na tabela RFPFORNECEDOR
     * 
     */
    PROCEDURE CHECK_RFPFORNECEDOR(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE,
                                  P_RFPMAIN   IN RFPMAIN%ROWTYPE   DEFAULT NULL,  
                                  P_PARASUPRI IN PARASUPRI%ROWTYPE DEFAULT NULL);

    /*
     * Rotina responsavel por realizar as validacoes na tabela RFPREGIAO
     * 
     */
    PROCEDURE CHECK_RFPREGIAO(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE);

    /*
     * Rotina responsavel por realizar as validacoes de preco
     * 
     */
    FUNCTION CHECK_PRECO(P_PRECO   IN NUMBER,
                         P_VRPRECO IN NUMBER) RETURN VARCHAR2;
       
    /*
     * Rotina responsavel por realizar as validacoes na tabela RFPPRODMARCA
     * 
     */
    PROCEDURE CHECK_RFPPRODMARCA(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE);

    /*
     * Rotina responsavel por realizar as validacoes na tabela RFPMAIN
     * 
     */
    PROCEDURE CHECK_IMPORT(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE);
    
    /*
     * Rotina responsavel por realizar a criacao da cotacao
     * 
     */
    PROCEDURE IMPORTA_RFP(P_NRRFPMAIN    IN RFPMAIN.NRRFPMAIN%TYPE,
                          P_IDDISMONTLIS IN COLETAPR.IDDISMONTLIS%TYPE,
                          P_CDOPERINCL   IN OPERADOR.CDOPERADOR%TYPE,
                          P_MESSAGE     OUT VARCHAR2,
                          P_ERROR       OUT VARCHAR2);

END TEKNISA_RFP;
/

CREATE OR REPLACE PACKAGE BODY TEKNISA_RFP AS

    PROCEDURE CHECK_RFPMAIN(P_NRRFPMAIN  IN RFPMAIN.NRRFPMAIN%TYPE) IS  
        V_CDFILCENTCMP PARASUPRI.CDFILIAL%TYPE;
        V_CDOPERADOR   OPERADOR.CDOPERADOR%TYPE;
        V_STATUS       RFPMAIN.STATUS%TYPE := K_STATUS_PENDENTE;
        V_MESSAGE      RFPMAIN.MESSAGE%TYPE;

        PROCEDURE DO_UPDATE(P_ROWID        IN ROWID,
                            P_STATUS       IN RFPMAIN.STATUS%TYPE      DEFAULT K_STATUS_PENDENTE,
                            P_CDFILCENTCMP IN FILIAL.CDFILIAL%TYPE     DEFAULT NULL,
                            P_CDCOMPRADOR  IN OPERADOR.CDOPERADOR%TYPE DEFAULT NULL,
                            P_MESSAGE      IN RFPMAIN.MESSAGE%TYPE     DEFAULT NULL) IS
        BEGIN
            UPDATE RFPMAIN
               SET STATUS       = P_STATUS,
                   CDFILCENTCMP = NVL(P_CDFILCENTCMP, CDFILCENTCMP),
                   CDCOMPRADOR  = NVL(P_CDCOMPRADOR, CDCOMPRADOR),
                   MESSAGE      = P_MESSAGE
             WHERE ROWID        = P_ROWID;
        END DO_UPDATE;                          
        
    BEGIN
        FOR C_MAIN IN (SELECT ROWID, LPAD(COMPRADOR, 12, '0') COMPRADOR, CDFILIAL
                         FROM RFPMAIN
                        WHERE NRRFPMAIN = P_NRRFPMAIN
                          AND STATUS    = K_STATUS_PENDENTE)
        LOOP
            V_MESSAGE := NULL;
            BEGIN
                SELECT PARASUPRI.CDFILIAL
                  INTO V_CDFILCENTCMP
                  FROM PARASUPRI 
                  JOIN FILIAL ON PARASUPRI.CDFILIAL = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                 WHERE FILIAL.CDFILIAL = C_MAIN.CDFILIAL;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    V_STATUS  := K_STATUS_INCONSISTENTE;
                    V_MESSAGE := K_CENTRAL_N_PARAM;
            END;

            BEGIN
                SELECT CDOPERADOR
                  INTO V_CDOPERADOR
                  FROM COMPRADOR
                 WHERE CDOPERADOR = C_MAIN.COMPRADOR;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    IF V_STATUS = K_STATUS_PENDENTE THEN
                        V_STATUS  := K_STATUS_INCONSISTENTE;
                        V_MESSAGE := K_COMPRADOR_N_CADAST;
                    END IF;
            END;            

            DO_UPDATE(P_ROWID        => C_MAIN.ROWID,
                      P_STATUS       => V_STATUS,
                      P_CDFILCENTCMP => V_CDFILCENTCMP,
                      P_CDCOMPRADOR  => V_CDOPERADOR,
                      P_MESSAGE      => V_MESSAGE);
        END LOOP;  
    END CHECK_RFPMAIN;
 
    PROCEDURE CHECK_RFPFORNECEDOR(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE,
                                  P_RFPMAIN   IN RFPMAIN%ROWTYPE   DEFAULT NULL,  
                                  P_PARASUPRI IN PARASUPRI%ROWTYPE DEFAULT NULL) IS
        C_FORNECEDORES FORNECEDOR%ROWTYPE;
        V_MESSAGE      RFPFORNECEDOR.MESSAGE%TYPE;
        V_COUNT        NUMBER;

        PROCEDURE DO_UPDATE(P_ROWID        IN ROWID,
                            P_MESSAGE      IN RFPFORNECEDOR.MESSAGE%TYPE,
                            P_FORNECEDORES IN FORNECEDOR%ROWTYPE) IS
        BEGIN
            UPDATE RFPFORNECEDOR
               SET CDFORNECED   = NVL(P_FORNECEDORES.CDFORNECED, CDFORNECED),
                   CDFORMPGTO   = NVL(P_FORNECEDORES.CDFORMPGTO, CDFORMPGTO),
                   IDTPFORPGTFO = NVL(P_FORNECEDORES.IDTPFORPGTFO, IDTPFORPGTFO),
                   NRPARCPGTOFO = NVL(P_FORNECEDORES.NRPARCPGTOFO, NRPARCPGTOFO),
                   NRDIAPGFIXFO = NVL(P_FORNECEDORES.NRDIAPGFIXFO, NRDIAPGFIXFO),
                   IDUTDIAPGTFO = NVL(P_FORNECEDORES.IDUTDIAPGTFO, IDUTDIAPGTFO),
                   IDTPFRETFORN = NVL(P_FORNECEDORES.IDTPFRETFORN, IDTPFRETFORN),
                   CDTIPCOB     = NVL(P_FORNECEDORES.CDTIPCOB, CDTIPCOB),
                   VRPEDESCFORN = NVL(P_FORNECEDORES.VRPEDESCFORN, VRPEDESCFORN),
                   MESSAGE      = P_MESSAGE
             WHERE ROWID        = P_ROWID;
        END DO_UPDATE;
    
    BEGIN
        FOR C_FORNRFP IN (SELECT ROWID, NRINSJURFRFP
                            FROM RFPFORNECEDOR
                           WHERE NRRFPMAIN = P_NRRFPMAIN)
        LOOP
            V_MESSAGE := NULL;
            
            SUP_VALIDATIONS.CHECK_FORNECEDOR(P_NRINSJURFORN => C_FORNRFP.NRINSJURFRFP,
                                             P_DTPEDIDO     => P_RFPMAIN.DTVALIDADEFINAL,
                                             P_PARASUPRI    => P_PARASUPRI,
                                             P_FORNECEDORES => C_FORNECEDORES,
                                             P_MESSAGE      => V_MESSAGE);
            
            DO_UPDATE(P_ROWID        => C_FORNRFP.ROWID,
                      P_MESSAGE      => V_MESSAGE,
                      P_FORNECEDORES => C_FORNECEDORES);
        END LOOP;
    END CHECK_RFPFORNECEDOR;
  
    PROCEDURE CHECK_RFPREGIAO(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE) IS
        C_REGIOES REGIAO%ROWTYPE;
        V_MESSAGE VARCHAR2(30);

        PROCEDURE DO_UPDATE(P_ROWID    IN ROWID,
            P_MESSAGE  IN RFPREGIAO.MESSAGE%TYPE  DEFAULT NULL,
            P_CDREGIAO IN RFPREGIAO.CDREGIAO%TYPE DEFAULT NULL) IS
        BEGIN
            UPDATE RFPREGIAO
               SET CDREGIAO = NVL(P_CDREGIAO, CDREGIAO),
                   MESSAGE  = P_MESSAGE
             WHERE ROWID    = P_ROWID;
        END DO_UPDATE;
    
    BEGIN
        FOR C_RFPREGIAO IN (SELECT ROWID, CODREGIAO
                              FROM RFPREGIAO
                             WHERE NRRFPMAIN = P_NRRFPMAIN)
        LOOP
            SUP_VALIDATIONS.CHECK_REGIAO(P_CDREGIAO => C_RFPREGIAO.CODREGIAO,
                                         P_MESSAGE  => V_MESSAGE, 
                                         P_REGIOES  => C_REGIOES);

            DO_UPDATE(P_ROWID    => C_RFPREGIAO.ROWID,
                      P_MESSAGE  => V_MESSAGE,
                      P_CDREGIAO => C_REGIOES.CDREGIAO);
        END LOOP;
    END CHECK_RFPREGIAO;

    FUNCTION CHECK_PRECO(P_PRECO   IN NUMBER,
                         P_VRPRECO IN NUMBER)
    RETURN VARCHAR2 IS        
        FUNCTION PRECO_NAO_INFORMADO(P_PRECO IN NUMBER) RETURN VARCHAR2 IS
        BEGIN
            RETURN CASE P_PRECO WHEN 1 THEN K_PRECO1_N_INFORMADO
                                WHEN 2 THEN K_PRECO2_N_INFORMADO
                                WHEN 3 THEN K_PRECO3_N_INFORMADO
                                WHEN 4 THEN K_PRECO4_N_INFORMADO
                                WHEN 5 THEN K_PRECO5_N_INFORMADO END;
        END PRECO_NAO_INFORMADO;

        FUNCTION PRECO_ZERO(P_PRECO IN NUMBER) RETURN VARCHAR2 IS
        BEGIN 
            RETURN CASE P_PRECO WHEN 1 THEN K_PRECO1_IGUAL_ZERO
                                WHEN 2 THEN K_PRECO2_IGUAL_ZERO
                                WHEN 3 THEN K_PRECO3_IGUAL_ZERO
                                WHEN 4 THEN K_PRECO4_IGUAL_ZERO
                                WHEN 5 THEN K_PRECO5_IGUAL_ZERO END;
        END PRECO_ZERO;
        
    BEGIN
        IF P_VRPRECO IS NULL THEN
            RETURN PRECO_NAO_INFORMADO(P_PRECO);
        END IF;
        IF P_VRPRECO = 0 THEN
            RETURN PRECO_ZERO(P_PRECO);
        END IF;
        
        RETURN NULL;
    END CHECK_PRECO;

    PROCEDURE CHECK_RFPPRODMARCA(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE) IS
        C_PRODUTOS  PRODUTO%ROWTYPE;
        C_MARCAS    MARCA%ROWTYPE;
        
        V_MESSAGE   VARCHAR2(30);
        V_MSG_PROD  VARCHAR2(30);
        V_MSG_MARCA VARCHAR2(30);
        
        V_CDMARCA1  RFPPRODMARCA.CDMARCA1%TYPE; 
        V_CDMARCA2  RFPPRODMARCA.CDMARCA2%TYPE;
        V_CDMARCA3  RFPPRODMARCA.CDMARCA3%TYPE;
        V_CDMARCA4  RFPPRODMARCA.CDMARCA4%TYPE;
        V_CDMARCA5  RFPPRODMARCA.CDMARCA5%TYPE;

        PROCEDURE DO_UPDATE(P_ROWID     IN ROWID,
                            P_MESSAGE   IN RFPPRODMARCA.MESSAGE%TYPE   DEFAULT NULL,
                            P_CDPRODUTO IN RFPPRODMARCA.CDPRODUTO%TYPE DEFAULT NULL,
                            P_CDMARCA1  IN RFPPRODMARCA.CDMARCA1%TYPE  DEFAULT NULL,
                            P_CDMARCA2  IN RFPPRODMARCA.CDMARCA2%TYPE  DEFAULT NULL,
                            P_CDMARCA3  IN RFPPRODMARCA.CDMARCA3%TYPE  DEFAULT NULL,
                            P_CDMARCA4  IN RFPPRODMARCA.CDMARCA4%TYPE  DEFAULT NULL,
                            P_CDMARCA5  IN RFPPRODMARCA.CDMARCA5%TYPE  DEFAULT NULL) IS
        BEGIN
            UPDATE RFPPRODMARCA
               SET MESSAGE   = NVL(P_MESSAGE, MESSAGE),
                   CDPRODUTO = NVL(P_CDPRODUTO, CDPRODUTO),
                   CDMARCA1  = NVL(P_CDMARCA1, CDMARCA1),
                   CDMARCA2  = NVL(P_CDMARCA2, CDMARCA2),
                   CDMARCA3  = NVL(P_CDMARCA3, CDMARCA3),
                   CDMARCA4  = NVL(P_CDMARCA4, CDMARCA4),
                   CDMARCA5  = NVL(P_CDMARCA5, CDMARCA5)
             WHERE ROWID     = P_ROWID;
        END DO_UPDATE;

        FUNCTION CHECK_MESSAGE_MARCA(P_MARCA   IN NUMBER,
                                     P_MESSAGE IN VARCHAR2) RETURN VARCHAR2 IS
        BEGIN
            IF P_MESSAGE = SUP_VALIDATIONS.K_MARCA_INATIVA THEN
                RETURN CASE P_MARCA WHEN 1 THEN K_MARCA1_INATIVA
                                    WHEN 2 THEN K_MARCA2_INATIVA
                                    WHEN 3 THEN K_MARCA3_INATIVA
                                    WHEN 4 THEN K_MARCA4_INATIVA
                                    WHEN 5 THEN K_MARCA5_INATIVA
                                    ELSE P_MESSAGE END;
            END IF;

            IF P_MESSAGE = SUP_VALIDATIONS.K_MARCA_NAO_CADASTRADA THEN
                RETURN CASE P_MARCA WHEN 1 THEN K_MARCA1_N_CADASTRADA
                                    WHEN 2 THEN K_MARCA2_N_CADASTRADA
                                    WHEN 3 THEN K_MARCA3_N_CADASTRADA
                                    WHEN 4 THEN K_MARCA4_N_CADASTRADA
                                    WHEN 5 THEN K_MARCA5_N_CADASTRADA 
                                    ELSE P_MESSAGE END;
            END IF;

            RETURN P_MESSAGE;
        END CHECK_MESSAGE_MARCA;
        
        BEGIN
            FOR C_PRODMARCA IN (SELECT ROWID,     
                                       CODPRODUTO,
                                       LPAD(CODMARCA1, 5, '0') CODMARCA1, VRPRECO1,
                                       LPAD(CODMARCA2, 5, '0') CODMARCA2, VRPRECO2,
                                       LPAD(CODMARCA3, 5, '0') CODMARCA3, VRPRECO3,
                                       LPAD(CODMARCA4, 5, '0') CODMARCA4, VRPRECO4,
                                       LPAD(CODMARCA5, 5, '0') CODMARCA5, VRPRECO5
                                  FROM RFPPRODMARCA
                                 WHERE NRRFPMAIN = P_NRRFPMAIN)
            LOOP
                /*Validacao de Produtos*/
                SUP_VALIDATIONS.CHECK_PRODUTO(P_CDARVPROD => C_PRODMARCA.CODPRODUTO,
                                              P_MESSAGE   => V_MESSAGE,
                                              P_PRODUTOS  => C_PRODUTOS);

                /*Validacao de Marcas*/
                IF V_MESSAGE IS NULL THEN
                    SUP_VALIDATIONS.CHECK_MARCA(P_CDMARCA => C_PRODMARCA.CODMARCA1,
                                                P_MESSAGE => V_MSG_MARCA, 
                                                P_MARCAS  => C_MARCAS);
                    V_MESSAGE := CHECK_MESSAGE_MARCA(P_MARCA   => 1,
                                                     P_MESSAGE => V_MSG_MARCA);
                    V_CDMARCA1 := C_MARCAS.CDMARCA;
                END IF;
                
                IF V_MESSAGE IS NULL THEN
                    SUP_VALIDATIONS.CHECK_MARCA(P_CDMARCA => C_PRODMARCA.CODMARCA2,
                                                P_MESSAGE => V_MSG_MARCA, 
                                                P_MARCAS  => C_MARCAS);
                    V_MESSAGE := CHECK_MESSAGE_MARCA(P_MARCA   => 2,
                                                     P_MESSAGE => V_MSG_MARCA);
                    V_CDMARCA2 := C_MARCAS.CDMARCA;
                END IF;    
                
                IF V_MESSAGE IS NULL THEN
                    SUP_VALIDATIONS.CHECK_MARCA(P_CDMARCA => C_PRODMARCA.CODMARCA3,
                                                P_MESSAGE => V_MSG_MARCA, 
                                                P_MARCAS  => C_MARCAS);
                    V_MESSAGE := CHECK_MESSAGE_MARCA(P_MARCA   => 3,
                                                     P_MESSAGE => V_MSG_MARCA);
                    V_CDMARCA3 := C_MARCAS.CDMARCA;
                END IF;    
                
                IF V_MESSAGE IS NULL THEN
                    SUP_VALIDATIONS.CHECK_MARCA(P_CDMARCA => C_PRODMARCA.CODMARCA4,
                                                P_MESSAGE => V_MSG_MARCA, 
                                                P_MARCAS  => C_MARCAS);
                    V_MESSAGE := CHECK_MESSAGE_MARCA(P_MARCA   => 4,
                                                     P_MESSAGE => V_MSG_MARCA);
                    V_CDMARCA4 := C_MARCAS.CDMARCA;
                END IF;    
                
                IF V_MESSAGE IS NULL THEN    
                    SUP_VALIDATIONS.CHECK_MARCA(P_CDMARCA => C_PRODMARCA.CODMARCA5,
                                                P_MESSAGE => V_MSG_MARCA, 
                                                P_MARCAS  => C_MARCAS);
                    V_MESSAGE := CHECK_MESSAGE_MARCA(P_MARCA   => 5,
                                                     P_MESSAGE => V_MSG_MARCA);
                    V_CDMARCA5 := C_MARCAS.CDMARCA;
                END IF;    
                    
                IF V_MESSAGE IS NULL THEN 
                    V_MESSAGE := CHECK_PRECO(P_PRECO   => 1,
                                            P_VRPRECO => C_PRODMARCA.VRPRECO1);
                END IF;
                
                IF V_MESSAGE IS NULL THEN 
                    V_MESSAGE := CHECK_PRECO(P_PRECO   => 2,
                                            P_VRPRECO => C_PRODMARCA.VRPRECO2);
                END IF;

                IF V_MESSAGE IS NULL THEN 
                    V_MESSAGE := CHECK_PRECO(P_PRECO   => 3,
                                            P_VRPRECO => C_PRODMARCA.VRPRECO3);
                END IF;

                IF V_MESSAGE IS NULL THEN 
                    V_MESSAGE := CHECK_PRECO(P_PRECO   => 4,
                                                P_VRPRECO => C_PRODMARCA.VRPRECO4);
                END IF;

                IF V_MESSAGE IS NULL THEN 
                    V_MESSAGE := CHECK_PRECO(P_PRECO   => 5,
                                            P_VRPRECO => C_PRODMARCA.VRPRECO5);
                END IF;
                
                DO_UPDATE(P_ROWID     => C_PRODMARCA.ROWID,
                          P_MESSAGE   => V_MESSAGE,
                          P_CDPRODUTO => C_PRODUTOS.CDPRODUTO,
                          P_CDMARCA1  => V_CDMARCA1,
                          P_CDMARCA2  => V_CDMARCA2,
                          P_CDMARCA3  => V_CDMARCA3,
                          P_CDMARCA4  => V_CDMARCA4,
                          P_CDMARCA5  => V_CDMARCA5);
        END LOOP;
    END CHECK_RFPPRODMARCA;

    PROCEDURE CHECK_IMPORT(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE) IS
        C_PARASUPRI    PARASUPRI%ROWTYPE;
        C_RFPMAIN      RFPMAIN%ROWTYPE;
        V_IDULTIDTVALQ PARASUPRI.IDULTIDTVALQ%TYPE;
        V_IDMARSEMQUA  PARASUPRI.IDMARSEMQUA%TYPE;
        V_CDMARCA      MARCA.CDMARCA%TYPE;
        V_MESSAGE      RFPITEMCOTA.MESSAGE%TYPE;
        V_EXISTS       NUMBER;

        PROCEDURE DO_INSERT_RFPITEMCOTA(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE) IS
        BEGIN
            DELETE RFPITEMCOTA
             WHERE NRRFPMAIN = P_NRRFPMAIN;
            
            INSERT INTO RFPITEMCOTA 
                (
                    NRRFPITEMCOTA, 
                    NRRFPMAIN,
                    CDFILCENTCMP,
                    CDCOMPRADOR,
                    DTVALIDADEFINAL, 
                    CDREGIAO, 
                    CDFORNECED, 
                    CDPRODUTO,
                    CDARVPROD, 
                    CDMARCA, 
                    VRPRECO,
                    STATUS,
                    CDFORMPGTO, 
                    IDTPFORPGTFO,    
                    NRPARCPGTOFO,      
                    NRDIAPGFIXFO,
                    IDUTDIAPGTFO,
                    IDTPFRETFORN,
                    CDTIPCOB,
                    VRPEDESCFORN
                )
            SELECT SEQ_RFPITEMCOTA_NRRFPITEMCOTA.NEXTVAL,
                   RF.NRRFPMAIN,
                   RF.CDFILCENTCMP,
                   RF.CDCOMPRADOR,
                   RF.DTVALIDADEFINAL,
                   RF.CDREGIAO, 
                   RF.CDFORNECED, 
                   PR.CDPRODUTO,  
                   PR.CDARVPROD,
                   RF.CDMARCA,
                   RF.VRPRECO,
                   'PENDENTE',
                   RF.CDFORMPGTO, 
                   RF.IDTPFORPGTFO, 
                   RF.NRPARCPGTOFO, 
                   RF.NRDIAPGFIXFO,
                   RF.IDUTDIAPGTFO, 
                   RF.IDTPFRETFORN, 
                   RF.CDTIPCOB, 
                   RF.VRPEDESCFORN
              FROM (SELECT NRRFPMAIN, CDFILCENTCMP, CDCOMPRADOR, DTVALIDADEFINAL, 
                           CDREGIAO, CDFORNECED, CDPRODUTO, CDMARCA, MIN(VRPRECO) VRPRECO, 
                           CDFORMPGTO, IDTPFORPGTFO, NRPARCPGTOFO, NRDIAPGFIXFO, 
                           IDUTDIAPGTFO, IDTPFRETFORN, CDTIPCOB, VRPEDESCFORN
                      FROM (SELECT MA.NRRFPMAIN, MA.CDFILCENTCMP, MA.CDCOMPRADOR, MA.DTVALIDADEFINAL, 
                                   RE.CDREGIAO, FO.CDFORNECED, PM.CDPRODUTO,  
                                   PM.CDMARCA1 CDMARCA,  PM.VRPRECO1 VRPRECO,
                                   FO.CDFORMPGTO, FO.IDTPFORPGTFO, FO.NRPARCPGTOFO, FO.NRDIAPGFIXFO,
                                   FO.IDUTDIAPGTFO, FO.IDTPFRETFORN, FO.CDTIPCOB, FO.VRPEDESCFORN
                              FROM RFPMAIN MA 
                              JOIN RFPPRODMARCA PM ON MA.NRRFPMAIN = PM.NRRFPMAIN
                              JOIN RFPFORNECEDOR FO ON MA.NRRFPMAIN = FO.NRRFPMAIN
                              JOIN RFPREGIAO RE ON MA.NRRFPMAIN = RE.NRRFPMAIN
                             WHERE MA.NRRFPMAIN = P_NRRFPMAIN
                               AND MA.STATUS    = K_STATUS_PENDENTE
                               AND PM.CDPRODUTO IS NOT NULL
                               AND PM.CDMARCA1 IS NOT NULL
                               AND NVL(PM.VRPRECO1, 0) > 1
                               AND FO.CDFORNECED IS NOT NULL
                               AND FO.MESSAGE IS NULL
                               AND RE.CDREGIAO IS NOT NULL
                               AND RE.MESSAGE IS NULL
                             UNION ALL 
                            SELECT MA.NRRFPMAIN, MA.CDFILCENTCMP, MA.CDCOMPRADOR, MA.DTVALIDADEFINAL, 
                                   RE.CDREGIAO, FO.CDFORNECED, PM.CDPRODUTO,
                                   PM.CDMARCA2 CDMARCA,  PM.VRPRECO2 VRPRECO,
                                   FO.CDFORMPGTO, FO.IDTPFORPGTFO, FO.NRPARCPGTOFO, FO.NRDIAPGFIXFO,
                                   FO.IDUTDIAPGTFO, FO.IDTPFRETFORN, FO.CDTIPCOB, FO.VRPEDESCFORN
                              FROM RFPMAIN MA 
                              JOIN RFPPRODMARCA PM ON MA.NRRFPMAIN = PM.NRRFPMAIN
                              JOIN RFPFORNECEDOR FO ON MA.NRRFPMAIN = FO.NRRFPMAIN
                              JOIN RFPREGIAO RE ON MA.NRRFPMAIN = RE.NRRFPMAIN
                             WHERE MA.NRRFPMAIN = P_NRRFPMAIN
                               AND MA.STATUS    = K_STATUS_PENDENTE
                               AND PM.CDPRODUTO IS NOT NULL
                               AND PM.CDMARCA2 IS NOT NULL
                               AND NVL(PM.VRPRECO2, 0) > 1
                               AND FO.CDFORNECED IS NOT NULL
                               AND FO.MESSAGE IS NULL
                               AND RE.CDREGIAO IS NOT NULL
                               AND RE.MESSAGE IS NULL
                             UNION ALL 
                            SELECT MA.NRRFPMAIN, MA.CDFILCENTCMP, MA.CDCOMPRADOR, MA.DTVALIDADEFINAL, 
                                   RE.CDREGIAO, FO.CDFORNECED, PM.CDPRODUTO,
                                   PM.CDMARCA3 CDMARCA,  PM.VRPRECO3 VRPRECO,
                                   FO.CDFORMPGTO, FO.IDTPFORPGTFO, FO.NRPARCPGTOFO, FO.NRDIAPGFIXFO,
                                   FO.IDUTDIAPGTFO, FO.IDTPFRETFORN, FO.CDTIPCOB, FO.VRPEDESCFORN
                              FROM RFPMAIN MA 
                              JOIN RFPPRODMARCA PM ON MA.NRRFPMAIN = PM.NRRFPMAIN
                              JOIN RFPFORNECEDOR FO ON MA.NRRFPMAIN = FO.NRRFPMAIN
                              JOIN RFPREGIAO RE ON MA.NRRFPMAIN = RE.NRRFPMAIN
                             WHERE MA.NRRFPMAIN = P_NRRFPMAIN
                               AND MA.STATUS    = K_STATUS_PENDENTE
                               AND PM.CDPRODUTO IS NOT NULL
                               AND PM.CDMARCA3 IS NOT NULL
                               AND NVL(PM.VRPRECO3, 0) > 1 
                               AND FO.CDFORNECED IS NOT NULL
                               AND FO.MESSAGE IS NULL
                               AND RE.CDREGIAO IS NOT NULL
                               AND RE.MESSAGE IS NULL
                             UNION ALL 
                            SELECT MA.NRRFPMAIN, MA.CDFILCENTCMP, MA.CDCOMPRADOR, MA.DTVALIDADEFINAL,
                                   RE.CDREGIAO, FO.CDFORNECED, PM.CDPRODUTO,
                                   PM.CDMARCA4 CDMARCA,  PM.VRPRECO4 VRPRECO,
                                   FO.CDFORMPGTO, FO.IDTPFORPGTFO, FO.NRPARCPGTOFO, FO.NRDIAPGFIXFO,
                                   FO.IDUTDIAPGTFO, FO.IDTPFRETFORN, FO.CDTIPCOB, FO.VRPEDESCFORN
                              FROM RFPMAIN MA 
                              JOIN RFPPRODMARCA PM ON MA.NRRFPMAIN = PM.NRRFPMAIN
                              JOIN RFPFORNECEDOR FO ON MA.NRRFPMAIN = FO.NRRFPMAIN
                              JOIN RFPREGIAO RE ON MA.NRRFPMAIN = RE.NRRFPMAIN
                             WHERE MA.NRRFPMAIN = P_NRRFPMAIN
                               AND MA.STATUS    = K_STATUS_PENDENTE
                               AND PM.CDPRODUTO IS NOT NULL
                               AND PM.CDMARCA4 IS NOT NULL
                               AND NVL(PM.VRPRECO4, 0) > 1
                               AND FO.CDFORNECED IS NOT NULL
                               AND FO.MESSAGE IS NULL
                               AND RE.CDREGIAO IS NOT NULL
                               AND RE.MESSAGE IS NULL
                             UNION ALL 
                            SELECT MA.NRRFPMAIN, MA.CDFILCENTCMP, MA.CDCOMPRADOR, MA.DTVALIDADEFINAL,
                                   RE.CDREGIAO, FO.CDFORNECED, PM.CDPRODUTO,
                                   PM.CDMARCA5 CDMARCA,  PM.VRPRECO5 VRPRECO,
                                   FO.CDFORMPGTO, FO.IDTPFORPGTFO, FO.NRPARCPGTOFO, FO.NRDIAPGFIXFO,
                                   FO.IDUTDIAPGTFO, FO.IDTPFRETFORN, FO.CDTIPCOB, FO.VRPEDESCFORN
                              FROM RFPMAIN MA 
                              JOIN RFPPRODMARCA PM ON MA.NRRFPMAIN = PM.NRRFPMAIN
                              JOIN RFPFORNECEDOR FO ON MA.NRRFPMAIN = FO.NRRFPMAIN
                              JOIN RFPREGIAO RE ON MA.NRRFPMAIN = RE.NRRFPMAIN
                             WHERE MA.NRRFPMAIN = P_NRRFPMAIN
                               AND MA.STATUS    = K_STATUS_PENDENTE
                               AND PM.CDPRODUTO IS NOT NULL
                               AND PM.CDMARCA5 IS NOT NULL
                               AND NVL(PM.VRPRECO5, 0) > 1
                               AND FO.CDFORNECED IS NOT NULL
                               AND FO.MESSAGE IS NULL
                               AND RE.CDREGIAO IS NOT NULL
                               AND RE.MESSAGE IS NULL) 
                     GROUP BY NRRFPMAIN, CDFILCENTCMP, CDCOMPRADOR, DTVALIDADEFINAL, CDREGIAO, CDFORNECED, 
                           CDPRODUTO, CDMARCA, CDFORMPGTO, IDTPFORPGTFO, NRPARCPGTOFO, NRDIAPGFIXFO, 
                           IDUTDIAPGTFO, IDTPFRETFORN, CDTIPCOB, VRPEDESCFORN) RF JOIN PRODUTO PR 
                                                                                    ON RF.CDPRODUTO = PR.CDPRODUTO;
        END DO_INSERT_RFPITEMCOTA;

        PROCEDURE DO_UPDATE_RFPITEMCOTA(P_ROWID     IN ROWID,
                                        P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE,
                                        P_MESSAGE   IN RFPITEMCOTA.MESSAGE%TYPE) IS
        BEGIN
            UPDATE RFPITEMCOTA
               SET MESSAGE = P_MESSAGE,
                   STATUS  = K_STATUS_INCONSISTENTE 
             WHERE ROWID = P_ROWID;
            
        END DO_UPDATE_RFPITEMCOTA;

        PROCEDURE DO_UPDATE_RFPMAIN(P_NRRFPMAIN IN RFPMAIN.NRRFPMAIN%TYPE) IS
            V_EXISTS NUMBER;
        BEGIN
            SELECT 1
              INTO V_EXISTS
              FROM RFPITEMCOTA
             WHERE NRRFPMAIN = P_NRRFPMAIN
               AND STATUS    = K_STATUS_PENDENTE
               AND ROWNUM    = 1;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                UPDATE RFPMAIN
                   SET STATUS  = K_STATUS_INCONSISTENTE,
                       MESSAGE = K_ITENS_INCONSISTENTES
                 WHERE NRRFPMAIN = P_NRRFPMAIN;
        END DO_UPDATE_RFPMAIN;
    BEGIN
        CHECK_RFPMAIN(P_NRRFPMAIN => P_NRRFPMAIN);

        BEGIN
            SELECT *
              INTO C_RFPMAIN
              FROM RFPMAIN
             WHERE NRRFPMAIN = P_NRRFPMAIN
               AND STATUS    = K_STATUS_PENDENTE; 
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                RETURN;
        END;

        BEGIN
            SELECT *
              INTO C_PARASUPRI
              FROM PARASUPRI
             WHERE CDFILIAL = C_RFPMAIN.CDFILCENTCMP;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                RETURN;
        END;

        CHECK_RFPFORNECEDOR(P_NRRFPMAIN => P_NRRFPMAIN,
                            P_RFPMAIN   => C_RFPMAIN,
                            P_PARASUPRI => C_PARASUPRI);

        CHECK_RFPREGIAO(P_NRRFPMAIN => P_NRRFPMAIN);
        CHECK_RFPPRODMARCA(P_NRRFPMAIN => P_NRRFPMAIN);

        --Insere na tabela Itens RFPITEMCOTA
        DO_INSERT_RFPITEMCOTA(P_NRRFPMAIN => P_NRRFPMAIN);

        FOR C_ITENS IN (SELECT ROWID, NRRFPMAIN, CDFILCENTCMP, CDCOMPRADOR, DTVALIDADEFINAL,
                               CDREGIAO, CDFORNECED, CDPRODUTO, CDMARCA, VRPRECO
                          FROM RFPITEMCOTA
                         WHERE NRRFPMAIN = P_NRRFPMAIN)
        LOOP
            V_MESSAGE := NULL;
            
            IF C_ITENS.CDFILCENTCMP IS NULL THEN
                V_MESSAGE := K_CENTRAL_N_PARAM;
            ELSIF C_ITENS.CDCOMPRADOR IS NULL THEN
                V_MESSAGE := K_COMPRADOR_N_CADAST;
            ELSE
                SELECT IDULTIDTVALQ, NVL(IDMARSEMQUA, 'N') IDMARSEMQUA, CDMARCA
                  INTO V_IDULTIDTVALQ, V_IDMARSEMQUA, V_CDMARCA
                  FROM PARASUPRI
                 WHERE CDFILIAL = C_ITENS.CDFILCENTCMP;

                /*Fornecedor atende regiao*/
                V_MESSAGE := SUP_VALIDATIONS.FORNECEDOR_ATENDE_REGIAO(P_CDFORNECED => C_ITENS.CDFORNECED,
                                                                      P_CDREGIAO   => C_ITENS.CDREGIAO);
                IF V_MESSAGE IS NOT NULL THEN
                    DO_UPDATE_RFPITEMCOTA(P_ROWID     => C_ITENS.ROWID,
                                          P_NRRFPMAIN => C_ITENS.NRRFPMAIN,
                                          P_MESSAGE   => V_MESSAGE);
                    CONTINUE;
                END IF;

                /*Qualificacao marca por produto*/
                V_MESSAGE := SUP_VALIDATIONS.QUALIFICACAO_MARCA_PRODUTO(P_CDPRODUTO => C_ITENS.CDPRODUTO,
                                                                        P_CDMARCA   => C_ITENS.CDMARCA,
                                                                        P_DTPEDIDO  => C_ITENS.DTVALIDADEFINAL,
                                                                        P_PARASUPRI => C_PARASUPRI);

                IF V_MESSAGE IS NOT NULL THEN
                    DO_UPDATE_RFPITEMCOTA(P_ROWID     => C_ITENS.ROWID,
                                          P_NRRFPMAIN => C_ITENS.NRRFPMAIN,
                                          P_MESSAGE   => V_MESSAGE);
                    CONTINUE;
                END IF;

                /*Qualificacao produto por fornecedor*/
                V_MESSAGE := SUP_VALIDATIONS.QUALIFICACAO_PROD_FORN(P_CDPRODUTO  => C_ITENS.CDPRODUTO,
                                                                    P_CDFORNECED => C_ITENS.CDFORNECED,
                                                                    P_DTPEDIDO   => C_ITENS.DTVALIDADEFINAL,
                                                                    P_PARASUPRI  => C_PARASUPRI);

                IF V_MESSAGE IS NOT NULL THEN
                    DO_UPDATE_RFPITEMCOTA(P_ROWID     => C_ITENS.ROWID,
                                          P_NRRFPMAIN => C_ITENS.NRRFPMAIN,
                                          P_MESSAGE   => V_MESSAGE);
                    CONTINUE;
                END IF;

                /*Produto nao cadastrado para o fornecedor*/
                V_MESSAGE := SUP_VALIDATIONS.CHECK_PRODUTO_FORNECEDOR(P_CDPRODUTO  => C_ITENS.CDPRODUTO,
                                                                      P_CDFORNECED => C_ITENS.CDFORNECED);

                IF V_MESSAGE IS NOT NULL THEN
                    DO_UPDATE_RFPITEMCOTA(P_ROWID     => C_ITENS.ROWID,
                                          P_NRRFPMAIN => C_ITENS.NRRFPMAIN,
                                          P_MESSAGE   => V_MESSAGE);
                    CONTINUE;
                END IF;
            END IF;            
        END LOOP;

        DO_UPDATE_RFPMAIN(P_NRRFPMAIN => P_NRRFPMAIN);
    END CHECK_IMPORT;

    PROCEDURE IMPORTA_RFP(P_NRRFPMAIN    IN RFPMAIN.NRRFPMAIN%TYPE,
                          P_IDDISMONTLIS IN COLETAPR.IDDISMONTLIS%TYPE,
                          P_CDOPERINCL   IN OPERADOR.CDOPERADOR%TYPE,
                          P_MESSAGE     OUT VARCHAR2,
                          P_ERROR       OUT VARCHAR2) IS

        CURSOR C_RFPITEMCOTA IS SELECT *
                                  FROM RFPITEMCOTA
                                 WHERE NRRFPMAIN = P_NRRFPMAIN
                                   AND STATUS    = K_STATUS_PENDENTE;
        
        C_ITENS       C_RFPITEMCOTA%ROWTYPE;
        C_RFPMAIN     RFPMAIN%ROWTYPE;
        C_PRODFORN    PRODFORN%ROWTYPE;
        C_FORNECEDOR  FORNECEDOR%ROWTYPE;
        V_NRCOLETA    COLETAPR.NRCOLEPRECO%TYPE;        
        V_FIRSTROW    BOOLEAN := TRUE;

        PROCEDURE DO_INSERT_COLETAPR(P_RFPMAIN      IN  RFPMAIN%ROWTYPE,
                                     P_IDDISMONTLIS IN  COLETAPR.IDDISMONTLIS%TYPE,
                                     P_CDOPERINCL   IN  OPERADOR.CDOPERADOR%TYPE,
                                     P_NRCOLEPRECO  OUT COLETAPR.NRCOLEPRECO%TYPE,
                                     P_ERROR_COLETA OUT VARCHAR2) IS
            V_NRCOLEPRECO     VARCHAR2(20);
            V_IDSITUCOLETA COLETAPR.IDSITUCOLETA%TYPE;
            C_PARASUPRI    PARASUPRI%ROWTYPE;
        BEGIN
            SELECT *
              INTO C_PARASUPRI
              FROM PARASUPRI
             WHERE PARASUPRI.CDFILIAL = C_RFPMAIN.CDFILCENTCMP;

            V_IDSITUCOLETA := CASE NVL(C_PARASUPRI.IDUTISTATCOT, 'N') WHEN 'S' THEN 'A' ELSE 'C' END;
            
            NOVO_CODIGO('COLETA'|| P_RFPMAIN.CDFILIAL, V_NRCOLEPRECO, 1);
            V_NRCOLEPRECO := SUBSTR(V_NRCOLEPRECO, 11, 10);

            BEGIN    
                INSERT INTO COLETAPR
                    (
                        CDFILIAL,     --01 
                        NRCOLEPRECO,  --02 
                        DTCOLEPREC,   --03
                        DTINIVALCOL,  --04 
                        DTFINVALCOL,  --05 
                        CDOPERADOR,   --06
                        IDTIPCOLREG,  --07 
                        NRSEMAINIC,   --08
                        NRSEMAFINAL,  --09
                        IDSITUCOLETA, --10
                        IDDISMONTLIS, --11
                        CDOPERINCL,   --12
                        DTINCLCOLET   --13 
                    )
                VALUES 
                    (
                        P_RFPMAIN.CDFILCENTCMP,                     --01
                        V_NRCOLEPRECO,                              --02
                        TO_DATE(SYSDATE),                           --03
                        P_RFPMAIN.DTVALIDADEINICIAL,                --04
                        P_RFPMAIN.DTVALIDADEFINAL,                  --05
                        P_RFPMAIN.CDCOMPRADOR,                      --06 
                        'W',                                        --07
                        TO_CHAR(P_RFPMAIN.DTVALIDADEINICIAL, 'WW'), --08
                        TO_CHAR(P_RFPMAIN.DTVALIDADEFINAL, 'WW'),   --09
                        V_IDSITUCOLETA,                             --10
                        P_IDDISMONTLIS,                             --11
                        P_CDOPERINCL,                               --12
                        TO_DATE(SYSDATE)                            --13
                    );
                
                P_NRCOLEPRECO := V_NRCOLEPRECO;
            EXCEPTION
                WHEN OTHERS THEN
                    P_NRCOLEPRECO := NULL;
                    P_ERROR_COLETA := SQLERRM;
            END;
        END DO_INSERT_COLETAPR;

        PROCEDURE DO_INSERT_ITEMCOLE(P_RFPMAIN     IN RFPMAIN%ROWTYPE,
                                     P_RFPITEMCOTA IN RFPITEMCOTA%ROWTYPE,
                                     P_NRCOLEPRECO IN COLETAPR.NRCOLEPRECO%TYPE,
                                     P_PRODFORN    IN PRODFORN%ROWTYPE DEFAULT NULL,
                                     P_ERROR_ITEM OUT VARCHAR2) IS  
        BEGIN
            INSERT INTO ITEMCOLE
                (
                    CDFILIAL,     --01
                    NRCOLEPRECO,  --02
                    CDFORNECED,   --03 
                    CDREGIAO,     --04
                    CDPRODUTO,    --05
                    CDMARCA,      --06
                    VRPRECUNIITM, --07 
                    DTINIVALITM,  --08
                    DTFINVALITM,  --09 
                    IDTIPFREITM,  --10
                    CDTIPCOB,     --11 
                    VRPERDESITM,  --12
                    CDFORMPGTO,   --13
                    IDTPFOPGTCOL, --14
                    NRPARCPGTCOL, --15
                    NRDIAPGFXCOL, --16
                    IDUTDIAPGCOL, --17
                    CDOPERINCL,   --18
                    DTINCLITMCOL  --19
                )
            VALUES
                (
                    P_RFPMAIN.CDFILCENTCMP,                                   --01
                    P_NRCOLEPRECO,                                            --02
                    P_RFPITEMCOTA.CDFORNECED,                                 --03 
                    P_RFPITEMCOTA.CDREGIAO,                                   --04
                    P_RFPITEMCOTA.CDPRODUTO,                                  --05
                    P_RFPITEMCOTA.CDMARCA,                                    --06
                    P_RFPITEMCOTA.VRPRECO,                                    --07
                    P_RFPMAIN.DTVALIDADEINICIAL,                              --08 
                    P_RFPMAIN.DTVALIDADEFINAL,                                --09
                    P_RFPITEMCOTA.IDTPFRETFORN,                               --10
                    P_RFPITEMCOTA.CDTIPCOB,                                   --11
                    P_RFPITEMCOTA.VRPEDESCFORN,                               --12
                    NVL(P_PRODFORN.CDFORMPGTO, P_RFPITEMCOTA.CDFORMPGTO),     --13
                    NVL(P_PRODFORN.IDTPFORPGPRF, P_RFPITEMCOTA.IDTPFORPGTFO), --14
                    NVL(P_PRODFORN.NRPARCPGTPRF, P_RFPITEMCOTA.NRPARCPGTOFO), --15
                    NVL(P_PRODFORN.NRDIAPGFIPRF, P_RFPITEMCOTA.NRDIAPGFIXFO), --16
                    NVL(P_PRODFORN.IDUTDIAPGPRF, P_RFPITEMCOTA.IDUTDIAPGTFO), --17
                    P_CDOPERINCL,                                             --18
                    TO_DATE(SYSDATE)                                          --19
                );
        EXCEPTION
            WHEN OTHERS THEN
                P_ERROR_ITEM := SQLERRM;
        END DO_INSERT_ITEMCOLE;

        PROCEDURE DO_UPDATE_STATUS(P_NRRFPMAIN     IN RFPMAIN.NRRFPMAIN%TYPE,
                                   P_NRRFPITEMCOTA IN RFPITEMCOTA.NRRFPITEMCOTA%TYPE DEFAULT NULL) IS
        BEGIN
            IF P_NRRFPITEMCOTA IS NULL THEN
                UPDATE RFPMAIN
                   SET STATUS = K_STATUS_GERADO
                 WHERE NRRFPMAIN = P_NRRFPMAIN;
            END IF;

            UPDATE RFPITEMCOTA
               SET STATUS = K_STATUS_GERADO
             WHERE NRRFPMAIN     = P_NRRFPMAIN
               AND NRRFPITEMCOTA = P_NRRFPITEMCOTA;
        END DO_UPDATE_STATUS;

        PROCEDURE DO_DELETE_PZOPGTITMCOL(P_NRCOLEPRECO IN  COLETAPR.NRCOLEPRECO%TYPE,
                                         P_CDFILIAL    IN  FILIAL.CDFILIAL%TYPE,   
                                         P_RFPITEMCOTA IN  RFPITEMCOTA%ROWTYPE,
                                         P_DEL_ERROR   OUT VARCHAR2) IS
        BEGIN
            DELETE PZOPGTITMCOL
             WHERE NRCOLEPRECO  = P_NRCOLEPRECO
               AND CDFORNECED   = P_RFPITEMCOTA.CDFORNECED
               AND CDFILIAL     = P_CDFILIAL
               AND CDREGIAO     = P_RFPITEMCOTA.CDREGIAO
               AND CDPRODUTO    = P_RFPITEMCOTA.CDPRODUTO
               AND CDMARCA      = P_RFPITEMCOTA.CDMARCA;
        EXCEPTION
            WHEN OTHERS THEN
                P_DEL_ERROR := SQLERRM;
        END DO_DELETE_PZOPGTITMCOL;

        PROCEDURE DO_INSERT_PZOPGTITMCOL(P_NMTABLE     IN  VARCHAR2,
                                         P_NRCOLEPRECO IN  COLETAPR.NRCOLEPRECO%TYPE,
                                         P_CDFILIAL    IN  FILIAL.CDFILIAL%TYPE,   
                                         P_RFPITEMCOTA IN  RFPITEMCOTA%ROWTYPE,
                                         P_PRODFORN    IN  PRODFORN%ROWTYPE,
                                         P_INS_ERROR   OUT VARCHAR2) IS
        BEGIN
            IF P_NMTABLE = K_PZOPGTPRFO THEN
                INSERT INTO PZOPGTITMCOL
                            (
                                CDFILIAL, 
                                NRCOLEPRECO, 
                                CDFORNECED, 
                                CDPRODUTO,
                                CDMARCA, 
                                CDREGIAO, 
                                NRDIASPGTCOL, 
                                VRPERCPGTCOL
                            )
                       SELECT P_CDFILIAL,
                              P_NRCOLEPRECO,
                              CDFORNECED,
                              P_RFPITEMCOTA.CDPRODUTO,
                              P_RFPITEMCOTA.CDMARCA,
                              P_RFPITEMCOTA.CDREGIAO,
                              NRDIASPGPRFO,
                              VRPERCPGPRFO
                         FROM PZOPGTPRFO
                        WHERE CDPRODUTO  = P_PRODFORN.CDPRODUTO
                          AND CDFORNECED = P_RFPITEMCOTA.CDFORNECED;
            ELSIF P_NMTABLE = K_PRAZOPGTFORN THEN
                INSERT INTO PZOPGTITMCOL
                            (
                                CDFILIAL, 
                                NRCOLEPRECO, 
                                CDFORNECED, 
                                CDPRODUTO,
                                CDMARCA, 
                                CDREGIAO, 
                                NRDIASPGTCOL, 
                                VRPERCPGTCOL
                            )
                       SELECT P_CDFILIAL,
                              P_NRCOLEPRECO,
                              CDFORNECED,
                              P_RFPITEMCOTA.CDPRODUTO,
                              P_RFPITEMCOTA.CDMARCA,
                              P_RFPITEMCOTA.CDREGIAO,
                              NRDIASPGTOFO,
                              VRPERCPGTOFO
                         FROM PRAZOPGTFORN
                        WHERE CDFORNECED = P_RFPITEMCOTA.CDFORNECED;
            END IF;
        EXCEPTION
            WHEN OTHERS THEN
                P_INS_ERROR := SQLERRM;
        END DO_INSERT_PZOPGTITMCOL;

    BEGIN
        SELECT *
          INTO C_RFPMAIN 
          FROM RFPMAIN
         WHERE NRRFPMAIN = P_NRRFPMAIN;

        IF C_RFPMAIN.STATUS = K_STATUS_INCONSISTENTE THEN
            P_MESSAGE := K_IMP_INCONSISTENTE;
        ELSIF C_RFPMAIN.STATUS = K_STATUS_GERADO THEN
            P_MESSAGE := K_IMP_EFETUADA;
        ELSE
            OPEN C_RFPITEMCOTA;
            LOOP
                FETCH C_RFPITEMCOTA INTO C_ITENS;
                EXIT WHEN C_RFPITEMCOTA%NOTFOUND;
                IF V_FIRSTROW THEN
                    DO_INSERT_COLETAPR(P_RFPMAIN      => C_RFPMAIN,
                                       P_IDDISMONTLIS => P_IDDISMONTLIS,
                                       P_CDOPERINCL   => P_CDOPERINCL,
                                       P_NRCOLEPRECO  => V_NRCOLETA,
                                       P_ERROR_COLETA => P_ERROR);
                    V_FIRSTROW := FALSE;                    
                END IF;
                
                IF P_ERROR IS NULL THEN
                    BEGIN
                        SELECT *
                         INTO C_PRODFORN
                         FROM PRODFORN
                        WHERE CDFORNECED = C_ITENS.CDFORNECED
                          AND CDPRODUTO  = (SELECT PR.CDPRODUTO --MAX(PR.CDARVPROD)
                                              FROM PRODFORN PF
                                              JOIN PRODUTO PR ON PR.CDPRODUTO = PF.CDPRODUTO 
                                             WHERE PF.CDFORNECED = PRODFORN.CDFORNECED 
                                               AND C_ITENS.CDARVPROD LIKE PR.CDARVPROD || '%');

                        DO_INSERT_ITEMCOLE(P_RFPMAIN     => C_RFPMAIN,
                                           P_RFPITEMCOTA => C_ITENS,
                                           P_NRCOLEPRECO => V_NRCOLETA,
                                           P_PRODFORN    => C_PRODFORN,
                                           P_ERROR_ITEM  => P_ERROR);
                        
                        IF P_ERROR IS NULL THEN
                            DO_DELETE_PZOPGTITMCOL(P_NRCOLEPRECO => V_NRCOLETA,
                                                   P_CDFILIAL    => C_RFPMAIN.CDFILIAL,
                                                   P_RFPITEMCOTA => C_ITENS,
                                                   P_DEL_ERROR   => P_ERROR);

                            DO_INSERT_PZOPGTITMCOL(P_NMTABLE     => K_PZOPGTPRFO,
                                                   P_NRCOLEPRECO => V_NRCOLETA,
                                                   P_CDFILIAL    => C_RFPMAIN.CDFILIAL,
                                                   P_RFPITEMCOTA => C_ITENS,
                                                   P_PRODFORN    => C_PRODFORN,
                                                   P_INS_ERROR   => P_ERROR);
                        END IF;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                            DO_INSERT_ITEMCOLE(P_RFPMAIN     => C_RFPMAIN,
                                               P_RFPITEMCOTA => C_ITENS,
                                               P_NRCOLEPRECO => V_NRCOLETA,
                                               P_ERROR_ITEM  => P_ERROR);

                            IF P_ERROR IS NULL THEN
                                DO_DELETE_PZOPGTITMCOL(P_NRCOLEPRECO => V_NRCOLETA,
                                                       P_CDFILIAL    => C_RFPMAIN.CDFILIAL,
                                                       P_RFPITEMCOTA => C_ITENS,
                                                       P_DEL_ERROR   => P_ERROR);
                                DO_INSERT_PZOPGTITMCOL(P_NMTABLE     => K_PRAZOPGTFORN,
                                                       P_NRCOLEPRECO => V_NRCOLETA,
                                                       P_CDFILIAL    => C_RFPMAIN.CDFILIAL,
                                                       P_RFPITEMCOTA => C_ITENS,
                                                       P_PRODFORN    => C_PRODFORN,
                                                       P_INS_ERROR   => P_ERROR);
                            END IF;
                    END;

                    IF P_ERROR IS NULL THEN
                        DO_UPDATE_STATUS(P_NRRFPMAIN     => C_RFPMAIN.NRRFPMAIN,
                                         P_NRRFPITEMCOTA => C_ITENS.NRRFPITEMCOTA);                                   
                    END IF;
                END IF;
            END LOOP;
            CLOSE C_RFPITEMCOTA;

            IF P_ERROR IS NULL THEN
                P_MESSAGE := K_COT_SUCESSO;
                DO_UPDATE_STATUS(P_NRRFPMAIN     => C_RFPMAIN.NRRFPMAIN);
            ELSE
                P_MESSAGE := K_COT_ERROR;    
            END IF;
        END IF;
    END IMPORTA_RFP;
END TEKNISA_RFP;  
/