SET TERM ^ ;

CREATE OR ALTER procedure SPC_PDV_PRODUTOS_OPTIMIZE_EAN (
    ESTABELECIMENTO_ID_PARAM INTEGER,
    TABELA_PRECO_ID_PARAM INTEGER,
    EAN_PARAM varchar(13),
    DESCRICAO_PRODUTO varchar(1000) = '',
    MODELO_ID_PARAM integer = 0,
    DESCRICAO_COR varchar(1000) = '',
    DESCRICAO_TAMANHO varchar(1000) = '',
    COR_ID_PARAM integer = 0,
    TAM_ID_PARAM integer = 0,
    PROD_ID_PARAM integer = 0)
returns (
    ESTABELECIMENTO_ID integer,
    ESTAB_UF varchar(2),
    LOCALIZACAO_ID integer,
    FAMILIA_ID integer,
    FAMILIA_DESCRICAO varchar(200),
    MODELO_ID integer,
    MODELO_DESCRICAO varchar(200),
    PRODUTO_ID integer,
    PRODUTO_DESCRICAO varchar(500),
    DESC_PRODUTO varchar(500),
    COR_ID integer,
    COR_DESCRICAO varchar(200),
    UM varchar(50),
    NCM varchar(50),
    EAN varchar(50),
    EAN_2 varchar(50),
    TAMANHO integer,
    FRACIONAR varchar(20),
    CEST varchar(20),
    CFOP_CODIGO varchar(10),
    OPERACAO_CODIGO varchar(10),
    TABELA_PRECO_ID integer,
    TABELA_PRECO_ID_PROMOCIONAL integer,
    VALOR_UNITARIO_PROMOCIONAL numeric(18,2),
    QUANTIDADE_MINIMA integer,
    VALOR_UNITARIO_PROMO_PROD numeric(18,2),
    QUANTIDADE_MINIMA_PROD integer,
    TRIBUTACAO_ORIGEM char(1),
    TRIBUTACAO_ICMS integer,
    ICMS_ALIQUOTA numeric(18,4),
    TRIBUTACAO_PIS char(3),
    PIS_ALIQUOTA numeric(18,4),
    TRIBUTACAO_COFINS char(3),
    COFINS_ALIQUOTA numeric(18,4),
    REDUCAO_BASE_PISCOF char(1),
    TIPO_DESCONTO varchar(1),
    TAM_DESCRICAO varchar(50),
    VALOR_UNITARIO numeric(18,5),
    VALOR_UNITARIO_PRODUTO numeric(18,5),
    PERCENTUAL_BASECALCULO_ICMS numeric(18,5),
    DESC_LOCALIZACAO_ID varchar(50),
    LOCALIZACAO_DESCRICAO varchar(200),
    ERROR varchar(500))
as
declare variable OPERACAO_VINCULO_CFOP_ID integer;
BEGIN

    :ESTABELECIMENTO_ID             = 0;
    :ESTAB_UF                       = '';
    :LOCALIZACAO_ID                 = 0;
    :FAMILIA_ID                     = 0;
    :FAMILIA_DESCRICAO              = '';
    :MODELO_ID                      = 0;
    :MODELO_DESCRICAO               = '';
    :PRODUTO_ID                     = 0;
    :PRODUTO_DESCRICAO              = '';
    :DESC_PRODUTO                   = '';
    :COR_ID                         = 0;
    :COR_DESCRICAO                  = '';
    :UM                             = '';
    :NCM                            = '';
    :EAN                            = '';
    :EAN_2                          = '';
    :TAMANHO                        = 0;
    :FRACIONAR                      = '';
    :CEST                           = '';
    :CFOP_CODIGO                    = '';
    :OPERACAO_CODIGO                = '';
    :TABELA_PRECO_ID                = 0;
    :TABELA_PRECO_ID_PROMOCIONAL    = 0;
    :VALOR_UNITARIO_PROMOCIONAL     = 0.00;
    :QUANTIDADE_MINIMA              = 0;
    :VALOR_UNITARIO_PROMO_PROD      = 0.00;
    :QUANTIDADE_MINIMA_PROD         = 0;
    :TRIBUTACAO_ORIGEM              = '';
    :TRIBUTACAO_ICMS                = 0;
    :ICMS_ALIQUOTA                  = 0.0000;
    :TRIBUTACAO_PIS                 = '';
    :PIS_ALIQUOTA                   = 0.0000;
    :TRIBUTACAO_COFINS              = '';
    :COFINS_ALIQUOTA                = 0.0000;
    :REDUCAO_BASE_PISCOF            = '';
    :TIPO_DESCONTO                  = '';
    :TAM_DESCRICAO                  = '';
    :VALOR_UNITARIO                 = 0.00000;
    :VALOR_UNITARIO_PRODUTO         = 0.00000;
    :PERCENTUAL_BASECALCULO_ICMS    = 0.00000;
    :DESC_LOCALIZACAO_ID            = '';
    :LOCALIZACAO_DESCRICAO          = '';
    :ERROR                          = '';
    
    /* BUSCAR DADOS DO MODELO COM BASE NO EAN */
    IF(:EAN_PARAM <> '') THEN
    BEGIN

        FOR SELECT FIRST 1
            E.MODELO_ID,
            E.COR_ID,
            E.TAMANHO,
            E.EAN,
            E.EAN_2
        FROM TBEAN E
        WHERE E.EAN = :EAN_PARAM OR E.EAN_2 = :EAN_PARAM
        INTO :MODELO_ID, :COR_ID, :TAMANHO, :EAN, :EAN_2
        DO BEGIN
            :MODELO_ID_PARAM    = :MODELO_ID;
            :COR_ID_PARAM       = :COR_ID;
            :TAM_ID_PARAM       = :TAMANHO;

        END

    END

    /* BUSCAR DADOS DO MODELO */
    IF(:MODELO_ID_PARAM > 0) THEN
    BEGIN
        SELECT M.DESCRICAO FROM TBMODELO M WHERE M.CODIGO = :MODELO_ID_PARAM INTO :MODELO_DESCRICAO;

        /* BUSCAR DADOS DO MODELO */
        IF(:COR_ID_PARAM > 0) THEN
        BEGIN

            SELECT C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = :COR_ID_PARAM INTO :COR_DESCRICAO;

            /* BUSCAR DADOS DO PRODUTO */
            IF(:MODELO_ID_PARAM > 0 AND :COR_ID_PARAM > 0 AND :TAM_ID_PARAM > 0) THEN
            BEGIN
        
                FOR SELECT FIRST 1
                    COALESCE(P.FAMILIA_INVENTARIO, 0) AS FAMILIA_ID,
                    COALESCE(P.CODIGO, 0) AS PRODUTO_ID,
                    COALESCE(P.UNIDADEMEDIDA_SIGLA, '') AS UM,
                    COALESCE(P.NCM_CODIGO, '') AS NCM,
                    UPPER(COALESCE(P.DESCRICAO, '')) AS PRODUTO_DESCRICAO,
                    COALESCE((SELECT U.PODE_FRACIONAR FROM TBUNIDADEMEDIDA U WHERE U.SIGLA = P.UNIDADEMEDIDA_SIGLA), 'N') AS FRACIONAR,
                    COALESCE(FN_TAMANHO_GRADE(P.GRADE_CODIGO, :TAM_ID_PARAM), '') AS TAM_DESCRICAO
                FROM TBPRODUTO P
                WHERE P.STATUS = '1'
                AND P.MODELO_CODIGO = :MODELO_ID_PARAM
                AND P.COR_CODIGO = :COR_ID_PARAM
                INTO :FAMILIA_ID, :PRODUTO_ID, :UM, :NCM, :PRODUTO_DESCRICAO, :FRACIONAR, :TAM_DESCRICAO
                DO BEGIN
        
                END

                IF(:FAMILIA_ID > 0 AND :PRODUTO_ID > 0 AND :UM <> '' AND :NCM <> '') THEN
                BEGIN

                    /* BUSCAR DADOS DA FAMILIA FICHA */
                    IF(:ESTABELECIMENTO_ID_PARAM > 0 AND :FAMILIA_ID > 0) THEN
                    BEGIN

                        FOR SELECT FIRST 1
                            B.ESTABELECIMENTO_CODIGO ESTABELECIMENTO_ID,
                            B.CFOP_CODIGO,
                            B.OPERACAO_PDV,
                            COALESCE(B.CST_ORIGEM, '0')   AS TRIBUTACAO_ORIGEM,
                            B.LOCALIZACAO_PDV,
                            EST.UF,
                            F.DESCRICAO,
                            F.CEST
                        FROM TBFAMILIA_FICHA B
                        INNER JOIN TBESTABELECIMENTO EST ON EST.CODIGO = B.ESTABELECIMENTO_CODIGO
                        INNER JOIN TBFAMILIA F ON F.CODIGO = B.FAMILIA_CODIGO
                        WHERE B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID_PARAM
                        AND B.FAMILIA_CODIGO = :FAMILIA_ID
                        INTO :ESTABELECIMENTO_ID, :CFOP_CODIGO, :OPERACAO_CODIGO, :TRIBUTACAO_ORIGEM, :LOCALIZACAO_ID,
                        :ESTAB_UF, :FAMILIA_DESCRICAO, :CEST
                        DO BEGIN
                                
                        END

                        IF(:CFOP_CODIGO <> '' AND :OPERACAO_CODIGO <> '' AND :LOCALIZACAO_ID > 0) THEN
                        BEGIN

                            /* BUSCAR DADOS DE TRIBUTACAO POR CFOP/OPERACAO/ESTAB */
                            FOR SELECT FIRST 1
                                OVC.ID, 
                                IIF(TRIM(COALESCE(OVC.TRIBUTACAO_ICMS, '')) = '', 90, OVC.TRIBUTACAO_ICMS) AS TRIBUTACAO_ICMS,
                                COALESCE(OVC.TRIBUTACAO_PIS,'')  AS TRIBUTACAO_PIS,
                                COALESCE(OVC.TRIBUTACAO_COFINS, '') AS TRIBUTACAO_COFINS,
                                OVC.ICMS AS ICMS_ALIQUOTA,
                                CAST(REPLACE(IIF(COALESCE(OVC.TRIBUTACAO_PIS,'') = '02', FN_PARAMETRO('TBESTABELECIMENTO.PIS_ALIQUOTA_DIFERENCIADA', :ESTABELECIMENTO_ID_PARAM), FN_PARAMETRO('TBESTABELECIMENTO.PIS_ALIQUOTA_BASICA', :ESTABELECIMENTO_ID_PARAM)), ',', '.') AS NUMERIC(15,2)) AS PIS_ALIQUOTA,
                                CAST(REPLACE(IIF(COALESCE(OVC.TRIBUTACAO_COFINS,'') = '02', FN_PARAMETRO('TBESTABELECIMENTO.COFINS_ALIQUOTA_DIFERENCIADA', :ESTABELECIMENTO_ID_PARAM), FN_PARAMETRO('TBESTABELECIMENTO.COFINS_ALIQUOTA_BASICA', :ESTABELECIMENTO_ID_PARAM)), ',', '.') AS NUMERIC(15,2)) AS COFINS_ALIQUOTA,
                                C.REDUCAO_BASE_PISCOF,
                                OP.TIPO_DESCONTO
                            FROM TBOPERACAO_VINCULO_CFOP OVC
                            INNER JOIN TBCFOP C ON C.CODIGO = OVC.CFOP_CODIGO
                            INNER JOIN TBOPERACAO OP ON OP.CODIGO = OVC.OPERACAO_CODIGO
                            WHERE OVC.OPERACAO_CODIGO     = :OPERACAO_CODIGO
                            AND OVC.CFOP_CODIGO           = :CFOP_CODIGO
                            AND OVC.ESTABELECIMENTO_CODIGO= :ESTABELECIMENTO_ID_PARAM
                            AND OVC.UF                    = :ESTAB_UF
                            INTO :OPERACAO_VINCULO_CFOP_ID, :TRIBUTACAO_ICMS, :TRIBUTACAO_PIS, :TRIBUTACAO_COFINS, :ICMS_ALIQUOTA, :PIS_ALIQUOTA, :COFINS_ALIQUOTA,
                            :REDUCAO_BASE_PISCOF, :TIPO_DESCONTO
                            DO BEGIN

                    
                            END

                            IF(:OPERACAO_VINCULO_CFOP_ID > 0) THEN
                            BEGIN

                                /* BUSCAR DADOS DE PRECO POR MODELO */
                                FOR SELECT
                                    MP.TABELA_ID   AS TABELA_PRECO_ID,
                                    COALESCE(TP.TABELA_PRECO_ID_PROMOCIONAL, 0) TABELA_PRECO_ID_PROMOCIONAL,
                                    IIF(:TAM_ID_PARAM = 1 AND MP.PR_NF_01 > 0, MP.PR_NF_01,
                                    IIF(:TAM_ID_PARAM = 2 AND MP.PR_NF_02 > 0, MP.PR_NF_02,
                                    IIF(:TAM_ID_PARAM = 3 AND MP.PR_NF_03 > 0, MP.PR_NF_03,
                                    IIF(:TAM_ID_PARAM = 4 AND MP.PR_NF_04 > 0, MP.PR_NF_04,
                                    IIF(:TAM_ID_PARAM = 5 AND MP.PR_NF_05 > 0, MP.PR_NF_05,
                                    IIF(:TAM_ID_PARAM = 6 AND MP.PR_NF_06 > 0, MP.PR_NF_06,
                                    IIF(:TAM_ID_PARAM = 7 AND MP.PR_NF_07 > 0, MP.PR_NF_07,
                                    IIF(:TAM_ID_PARAM = 8 AND MP.PR_NF_08 > 0, MP.PR_NF_08,
                                    IIF(:TAM_ID_PARAM = 9 AND MP.PR_NF_09 > 0, MP.PR_NF_09,
                                    IIF(:TAM_ID_PARAM =10 AND MP.PR_NF_10 > 0, MP.PR_NF_10,
                                    IIF(:TAM_ID_PARAM =11 AND MP.PR_NF_11 > 0, MP.PR_NF_11,
                                    IIF(:TAM_ID_PARAM =12 AND MP.PR_NF_12 > 0, MP.PR_NF_12,
                                    IIF(:TAM_ID_PARAM =13 AND MP.PR_NF_13 > 0, MP.PR_NF_13,
                                    IIF(:TAM_ID_PARAM =14 AND MP.PR_NF_14 > 0, MP.PR_NF_14,
                                    IIF(:TAM_ID_PARAM =15 AND MP.PR_NF_15 > 0, MP.PR_NF_15,
                                    IIF(:TAM_ID_PARAM =16 AND MP.PR_NF_16 > 0, MP.PR_NF_16,
                                    IIF(:TAM_ID_PARAM =17 AND MP.PR_NF_17 > 0, MP.PR_NF_17,
                                    IIF(:TAM_ID_PARAM =18 AND MP.PR_NF_18 > 0, MP.PR_NF_18,
                                    IIF(:TAM_ID_PARAM =19 AND MP.PR_NF_19 > 0, MP.PR_NF_19,
                                    IIF(:TAM_ID_PARAM =20 AND MP.PR_NF_20 > 0, MP.PR_NF_20,
                                    MP.PRECO_VENDA)))))))))))))))))))) AS VALOR_UNITARIO
                                FROM TBMODELO_PRECO MP
                                INNER JOIN TBTABELA_PRECO TP ON TP.ID = MP.TABELA_ID
                                WHERE MP.MODELO_CODIGO = :MODELO_ID
                                AND MP.TABELA_ID = :TABELA_PRECO_ID_PARAM
                                AND IIF(MP.ESTABELECIMENTO_CODIGO > 0, MP.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID, MP.ESTABELECIMENTO_CODIGO = TP.ESTABELECIMENTO_ID)
                                AND TP.HABILITA_PDV = 1 /* SOMENTE ITENS COM TABELA DE PRECO HABILITADAS PARA PDV */
                                AND TP.STATUS = '1'
                                AND CURRENT_DATE BETWEEN TP.DATA_INICIAL AND TP.DATA_FINAL /* SOMENTE TABELAS DE PRECOS VIGENTES NA DATA CORRENTE */
                                INTO :TABELA_PRECO_ID, :TABELA_PRECO_ID_PROMOCIONAL, :VALOR_UNITARIO
                                DO BEGIN

                                END


                                /* BUSCAR DADOS DE PRECO POR PRODUTO */
                                FOR SELECT
                                    MP.TABELA_ID   AS TABELA_PRECO_ID,
                                    COALESCE(TP.TABELA_PRECO_ID_PROMOCIONAL, 0) TABELA_PRECO_ID_PROMOCIONAL,
                                    IIF(:TAM_ID_PARAM = 1 AND MP.PR_NF_01 > 0, MP.PR_NF_01,
                                    IIF(:TAM_ID_PARAM = 2 AND MP.PR_NF_02 > 0, MP.PR_NF_02,
                                    IIF(:TAM_ID_PARAM = 3 AND MP.PR_NF_03 > 0, MP.PR_NF_03,
                                    IIF(:TAM_ID_PARAM = 4 AND MP.PR_NF_04 > 0, MP.PR_NF_04,
                                    IIF(:TAM_ID_PARAM = 5 AND MP.PR_NF_05 > 0, MP.PR_NF_05,
                                    IIF(:TAM_ID_PARAM = 6 AND MP.PR_NF_06 > 0, MP.PR_NF_06,
                                    IIF(:TAM_ID_PARAM = 7 AND MP.PR_NF_07 > 0, MP.PR_NF_07,
                                    IIF(:TAM_ID_PARAM = 8 AND MP.PR_NF_08 > 0, MP.PR_NF_08,
                                    IIF(:TAM_ID_PARAM = 9 AND MP.PR_NF_09 > 0, MP.PR_NF_09,
                                    IIF(:TAM_ID_PARAM =10 AND MP.PR_NF_10 > 0, MP.PR_NF_10,
                                    IIF(:TAM_ID_PARAM =11 AND MP.PR_NF_11 > 0, MP.PR_NF_11,
                                    IIF(:TAM_ID_PARAM =12 AND MP.PR_NF_12 > 0, MP.PR_NF_12,
                                    IIF(:TAM_ID_PARAM =13 AND MP.PR_NF_13 > 0, MP.PR_NF_13,
                                    IIF(:TAM_ID_PARAM =14 AND MP.PR_NF_14 > 0, MP.PR_NF_14,
                                    IIF(:TAM_ID_PARAM =15 AND MP.PR_NF_15 > 0, MP.PR_NF_15,
                                    IIF(:TAM_ID_PARAM =16 AND MP.PR_NF_16 > 0, MP.PR_NF_16,
                                    IIF(:TAM_ID_PARAM =17 AND MP.PR_NF_17 > 0, MP.PR_NF_17,
                                    IIF(:TAM_ID_PARAM =18 AND MP.PR_NF_18 > 0, MP.PR_NF_18,
                                    IIF(:TAM_ID_PARAM =19 AND MP.PR_NF_19 > 0, MP.PR_NF_19,
                                    IIF(:TAM_ID_PARAM =20 AND MP.PR_NF_20 > 0, MP.PR_NF_20,
                                    MP.PRECO_VENDA)))))))))))))))))))) AS VALOR_UNITARIO
                                FROM TBPRODUTO_PRECO MP
                                INNER JOIN TBTABELA_PRECO TP ON TP.ID = MP.TABELA_ID
                                WHERE MP.PRODUTO_CODIGO = :PRODUTO_ID
                                AND MP.TABELA_ID = :TABELA_PRECO_ID_PARAM
                                AND IIF(MP.ESTABELECIMENTO_CODIGO > 0, MP.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID, MP.ESTABELECIMENTO_CODIGO = TP.ESTABELECIMENTO_ID)
                                AND TP.HABILITA_PDV = 1 /* SOMENTE ITENS COM TABELA DE PRECO HABILITADAS PARA PDV */
                                AND TP.STATUS = '1'
                                AND CURRENT_DATE BETWEEN TP.DATA_INICIAL AND TP.DATA_FINAL /* SOMENTE TABELAS DE PRECOS VIGENTES NA DATA CORRENTE */
                                INTO :TABELA_PRECO_ID, :TABELA_PRECO_ID_PROMOCIONAL, :VALOR_UNITARIO_PRODUTO
                                DO BEGIN

                                END

                                IF(:VALOR_UNITARIO_PRODUTO > 0) THEN
                                BEGIN
                                    :VALOR_UNITARIO = :VALOR_UNITARIO_PRODUTO;
                                END

                                IF(:VALOR_UNITARIO > 0) THEN
                                BEGIN
                                    /* BUSCAR DESCRICAO DA LOCALIZACAO */
                                    SELECT FIRST 1 T.DESCRICAO FROM TBLOCALIZACAO T WHERE T.CODIGO = :LOCALIZACAO_ID INTO :LOCALIZACAO_DESCRICAO;
                                    :DESC_LOCALIZACAO_ID = FN_LPAD(:LOCALIZACAO_ID, 4, '0');

                                    /* DEFININDO DESC_PRODUTO */
                                    :DESC_PRODUTO = FN_LPAD(:PRODUTO_ID, 7, '0')||' - '||CAST(:PRODUTO_DESCRICAO||' '||:TAM_DESCRICAO AS VARCHAR(200));


                                    :PERCENTUAL_BASECALCULO_ICMS = COALESCE((SELECT FIRST 1 I.BASECALCULO FROM TBTRIBUTACAO_ICMS I WHERE I.CODIGO = :TRIBUTACAO_ICMS), 0);


                                    IF(:TABELA_PRECO_ID_PROMOCIONAL > 0) THEN
                                    BEGIN

                                        /* PROMOCIONAL DO MODELO */
                                        FOR SELECT
                                            IIF(:TAM_ID_PARAM = 1 AND MPP.PR_NF_01 > 0, MPP.PR_NF_01,
                                            IIF(:TAM_ID_PARAM = 2 AND MPP.PR_NF_02 > 0, MPP.PR_NF_02,
                                            IIF(:TAM_ID_PARAM = 3 AND MPP.PR_NF_03 > 0, MPP.PR_NF_03,
                                            IIF(:TAM_ID_PARAM = 4 AND MPP.PR_NF_04 > 0, MPP.PR_NF_04,
                                            IIF(:TAM_ID_PARAM = 5 AND MPP.PR_NF_05 > 0, MPP.PR_NF_05,
                                            IIF(:TAM_ID_PARAM = 6 AND MPP.PR_NF_06 > 0, MPP.PR_NF_06,
                                            IIF(:TAM_ID_PARAM = 7 AND MPP.PR_NF_07 > 0, MPP.PR_NF_07,
                                            IIF(:TAM_ID_PARAM = 8 AND MPP.PR_NF_08 > 0, MPP.PR_NF_08,
                                            IIF(:TAM_ID_PARAM = 9 AND MPP.PR_NF_09 > 0, MPP.PR_NF_09,
                                            IIF(:TAM_ID_PARAM =10 AND MPP.PR_NF_10 > 0, MPP.PR_NF_10,
                                            IIF(:TAM_ID_PARAM =11 AND MPP.PR_NF_11 > 0, MPP.PR_NF_11,
                                            IIF(:TAM_ID_PARAM =12 AND MPP.PR_NF_12 > 0, MPP.PR_NF_12,
                                            IIF(:TAM_ID_PARAM =13 AND MPP.PR_NF_13 > 0, MPP.PR_NF_13,
                                            IIF(:TAM_ID_PARAM =14 AND MPP.PR_NF_14 > 0, MPP.PR_NF_14,
                                            IIF(:TAM_ID_PARAM =15 AND MPP.PR_NF_15 > 0, MPP.PR_NF_15,
                                            IIF(:TAM_ID_PARAM =16 AND MPP.PR_NF_16 > 0, MPP.PR_NF_16,
                                            IIF(:TAM_ID_PARAM =17 AND MPP.PR_NF_17 > 0, MPP.PR_NF_17,
                                            IIF(:TAM_ID_PARAM =18 AND MPP.PR_NF_18 > 0, MPP.PR_NF_18,
                                            IIF(:TAM_ID_PARAM =19 AND MPP.PR_NF_19 > 0, MPP.PR_NF_19,
                                            IIF(:TAM_ID_PARAM =20 AND MPP.PR_NF_20 > 0, MPP.PR_NF_20,
                                            MPP.PRECO_VENDA)))))))))))))))))))) AS VALOR_UNITARIO_PROMOCIONAL,

                                            COALESCE(MPP.QUANTIDADE_MINIMA, 0) AS QUANTIDADE_MINIMA
                        
                                        FROM TBMODELO_PRECO MPP, TBTABELA_PRECO TPP
                                        WHERE MPP.TABELA_ID = TPP.ID
                                        AND MPP.MODELO_CODIGO = :MODELO_ID
                                        AND IIF(MPP.ESTABELECIMENTO_CODIGO > 0, MPP.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID, (MPP.ESTABELECIMENTO_CODIGO = TPP.ESTABELECIMENTO_ID) OR (MPP.ESTABELECIMENTO_CODIGO = 0))
                                        AND CURRENT_DATE BETWEEN TPP.DATA_INICIAL AND TPP.DATA_FINAL
                                        AND TPP.ID = :TABELA_PRECO_ID_PROMOCIONAL
                                        AND TPP.STATUS = '1'
                                        INTO :VALOR_UNITARIO_PROMOCIONAL, :QUANTIDADE_MINIMA
                                        DO BEGIN


                                        END

                                        /* PROMOCIONAL DO PRODUTO */

                                        FOR SELECT
                                            IIF(:TAM_ID_PARAM = 1 AND MPP.PR_NF_01 > 0, MPP.PR_NF_01,
                                            IIF(:TAM_ID_PARAM = 2 AND MPP.PR_NF_02 > 0, MPP.PR_NF_02,
                                            IIF(:TAM_ID_PARAM = 3 AND MPP.PR_NF_03 > 0, MPP.PR_NF_03,
                                            IIF(:TAM_ID_PARAM = 4 AND MPP.PR_NF_04 > 0, MPP.PR_NF_04,
                                            IIF(:TAM_ID_PARAM = 5 AND MPP.PR_NF_05 > 0, MPP.PR_NF_05,
                                            IIF(:TAM_ID_PARAM = 6 AND MPP.PR_NF_06 > 0, MPP.PR_NF_06,
                                            IIF(:TAM_ID_PARAM = 7 AND MPP.PR_NF_07 > 0, MPP.PR_NF_07,
                                            IIF(:TAM_ID_PARAM = 8 AND MPP.PR_NF_08 > 0, MPP.PR_NF_08,
                                            IIF(:TAM_ID_PARAM = 9 AND MPP.PR_NF_09 > 0, MPP.PR_NF_09,
                                            IIF(:TAM_ID_PARAM =10 AND MPP.PR_NF_10 > 0, MPP.PR_NF_10,
                                            IIF(:TAM_ID_PARAM =11 AND MPP.PR_NF_11 > 0, MPP.PR_NF_11,
                                            IIF(:TAM_ID_PARAM =12 AND MPP.PR_NF_12 > 0, MPP.PR_NF_12,
                                            IIF(:TAM_ID_PARAM =13 AND MPP.PR_NF_13 > 0, MPP.PR_NF_13,
                                            IIF(:TAM_ID_PARAM =14 AND MPP.PR_NF_14 > 0, MPP.PR_NF_14,
                                            IIF(:TAM_ID_PARAM =15 AND MPP.PR_NF_15 > 0, MPP.PR_NF_15,
                                            IIF(:TAM_ID_PARAM =16 AND MPP.PR_NF_16 > 0, MPP.PR_NF_16,
                                            IIF(:TAM_ID_PARAM =17 AND MPP.PR_NF_17 > 0, MPP.PR_NF_17,
                                            IIF(:TAM_ID_PARAM =18 AND MPP.PR_NF_18 > 0, MPP.PR_NF_18,
                                            IIF(:TAM_ID_PARAM =19 AND MPP.PR_NF_19 > 0, MPP.PR_NF_19,
                                            IIF(:TAM_ID_PARAM =20 AND MPP.PR_NF_20 > 0, MPP.PR_NF_20,
                                            MPP.PRECO_VENDA)))))))))))))))))))) AS VALOR_UNITARIO_PROMO_PROD,

                                            COALESCE(MPP.QUANTIDADE_MINIMA, 0) AS QUANTIDADE_MINIMA_PROD
                        
                                        FROM TBPRODUTO_PRECO MPP, TBTABELA_PRECO TPP
                                        WHERE MPP.TABELA_ID = TPP.ID
                                        AND MPP.PRODUTO_CODIGO = :PRODUTO_ID
                                        AND IIF(MPP.ESTABELECIMENTO_CODIGO > 0, MPP.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID, (MPP.ESTABELECIMENTO_CODIGO = TPP.ESTABELECIMENTO_ID) OR (MPP.ESTABELECIMENTO_CODIGO = 0))
                                        AND CURRENT_DATE BETWEEN TPP.DATA_INICIAL AND TPP.DATA_FINAL
                                        AND TPP.ID = :TABELA_PRECO_ID_PROMOCIONAL
                                        AND TPP.STATUS = '1'
                                        INTO :VALOR_UNITARIO_PROMO_PROD, :QUANTIDADE_MINIMA_PROD
                                        DO BEGIN


                                        END
                                            
                                            



                                    END





                                END ELSE
                                BEGIN
                                    :ERROR = 'SEM PRECO CONFIGURADO PARA O MODELO '||FN_LPAD(:MODELO_ID, 7, '0')||' - '||:MODELO_DESCRICAO||', TABELA DE PRECO '||:TABELA_PRECO_ID;

                                END


                            END ELSE
                            BEGIN
                                :ERROR = 'SEM CONFIGURACAO FISCAL NO ESTAB. '||:ESTABELECIMENTO_ID_PARAM||', FAMILIA '||:FAMILIA_ID||', CFOP '||:CFOP_CODIGO||', OPERACAO '||:OPERACAO_CODIGO||', UF '||:ESTAB_UF;
                            END


                        END ELSE
                        BEGIN
                            IF(:CFOP_CODIGO = '') THEN
                            BEGIN
                                :ERROR = 'SEM CFOP VINCULADO NO ESTAB. '||:ESTABELECIMENTO_ID_PARAM||' PARA A FAMILIA '||:FAMILIA_ID||' DO MODELO '||FN_LPAD(:MODELO_ID, 7, '0')||' - '||:MODELO_DESCRICAO;
                            END

                            IF(:OPERACAO_CODIGO = '') THEN
                            BEGIN
                                :ERROR = 'SEM OPERACAO VINCULADA NO ESTAB. '||:ESTABELECIMENTO_ID_PARAM||' PARA A FAMILIA '||:FAMILIA_ID||' DO MODELO '||FN_LPAD(:MODELO_ID, 7, '0')||' - '||:MODELO_DESCRICAO;
                            END

                            IF(:LOCALIZACAO_ID = '') THEN
                            BEGIN
                                :ERROR = 'SEM LOCALIZACAO VINCULADA NO ESTAB. '||:ESTABELECIMENTO_ID_PARAM||' PARA A FAMILIA '||:FAMILIA_ID||' DO MODELO '||FN_LPAD(:MODELO_ID, 7, '0')||' - '||:MODELO_DESCRICAO;
                            END

                        END


                    END
                    


                END ELSE
                BEGIN
                    
                    IF(:FAMILIA_ID = 0) THEN
                    BEGIN
                        :ERROR = 'SEM FAMILIA CADASTRADA PARA ESSE MODELO '||FN_LPAD(:MODELO_ID, 7, '0')||' - '||:MODELO_DESCRICAO;
                    END


                    IF(:PRODUTO_ID = 0) THEN
                    BEGIN
                        :ERROR = 'SEM PRODUTO CADASTRADO PARA ESSE MODELO '||FN_LPAD(:MODELO_ID, 7, '0')||' - '||:MODELO_DESCRICAO;
                    END

                END

            END

        END ELSE
        BEGIN
            :ERROR = 'SEM COR CADASTRADA PARA ESSE MODELO '||FN_LPAD(:MODELO_ID, 7, '0')||' - '||:MODELO_DESCRICAO||', EAN '||:EAN_PARAM;
        END

    END ELSE
    BEGIN
        :ERROR = 'SEM MODELO CADASTRADO PARA ESSE EAN '||:EAN_PARAM;
    END


    :ESTAB_UF                = TRIM(:ESTAB_UF);
    :FAMILIA_DESCRICAO       = TRIM(:FAMILIA_DESCRICAO);
    :MODELO_DESCRICAO        = TRIM(:MODELO_DESCRICAO);
    :PRODUTO_DESCRICAO       = TRIM(:PRODUTO_DESCRICAO);
    :DESC_PRODUTO            = TRIM(:DESC_PRODUTO);
    :COR_DESCRICAO           = TRIM(:COR_DESCRICAO);
    :UM                      = TRIM(:UM);
    :NCM                     = TRIM(:NCM);
    :EAN                     = TRIM(:EAN);
    :EAN_2                   = TRIM(:EAN_2);
    :FRACIONAR               = TRIM(:FRACIONAR);
    :CEST                    = TRIM(:CEST);
    :CFOP_CODIGO             = TRIM(:CFOP_CODIGO);
    :OPERACAO_CODIGO         = TRIM(:OPERACAO_CODIGO);
    :TRIBUTACAO_ORIGEM       = TRIM(:TRIBUTACAO_ORIGEM);
    :TRIBUTACAO_PIS          = TRIM(:TRIBUTACAO_PIS);
    :TRIBUTACAO_COFINS       = TRIM(:TRIBUTACAO_COFINS);
    :REDUCAO_BASE_PISCOF     = TRIM(:REDUCAO_BASE_PISCOF);
    :TIPO_DESCONTO           = TRIM(:TIPO_DESCONTO);
    :TAM_DESCRICAO           = TRIM(:TAM_DESCRICAO);
    :DESC_LOCALIZACAO_ID     = TRIM(:DESC_LOCALIZACAO_ID);
    :LOCALIZACAO_DESCRICAO   = TRIM(:LOCALIZACAO_DESCRICAO);
    :ERROR                   = TRIM(:ERROR);


    SUSPEND;
END
^

SET TERM ; ^

