CREATE OR ALTER VIEW VWPDV_PRODUTOS(
    ESTABELECIMENTO_ID,
    LOCALIZACAO_ID,
    FAMILIA_ID,
    MODELO_ID,
    PRODUTO_ID,
    PRODUTO_DESCRICAO,
    COR_DESCRICAO,
    UM,
    NCM,
    EAN,
    EAN_2,
    TAMANHO,
    FRACIONAR,
    CEST,
    CFOP_CODIGO,
    OPERACAO_CODIGO,
    TABELA_PRECO_ID,
    TABELA_PRECO_ID_PROMOCIONAL,
    VALOR_UNITARIO_PROMOCIONAL,
    QUANTIDADE_MINIMA,
    TRIBUTACAO_ORIGEM,
    TRIBUTACAO_ICMS,
    ICMS_ALIQUOTA,
    TRIBUTACAO_PIS,
    PIS_ALIQUOTA,
    TRIBUTACAO_COFINS,
    COFINS_ALIQUOTA,
    REDUCAO_BASE_PISCOF,
    TIPO_DESCONTO,
    TAM_DESCRICAO,
    VALOR_UNITARIO)
AS
SELECT
ESTABELECIMENTO_ID,
LOCALIZACAO_ID,
FAMILIA_ID,
MODELO_ID,
PRODUTO_ID,
CAST(PRODUTO_DESCRICAO||' '||TAM_DESCRICAO AS VARCHAR(200)) AS PRODUTO_DESCRICAO,
COR_DESCRICAO,
UM,
NCM,
EAN,
EAN_2,
TAMANHO,
FRACIONAR,
CEST,
CFOP_CODIGO,
OPERACAO_CODIGO,
TABELA_PRECO_ID,
TABELA_PRECO_ID_PROMOCIONAL,
CAST(FN_ARRAY(VALOR_QUANTIDADE_PROMOCIONAL,1,'|') AS NUMERIC(15,2)) VALOR_UNITARIO_PROMOCIONAL,
CAST(FN_ARRAY(VALOR_QUANTIDADE_PROMOCIONAL,2,'|') AS INTEGER) QUANTIDADE_MINIMA,
TRIBUTACAO_ORIGEM,
TRIBUTACAO_ICMS,
ICMS_ALIQUOTA,
TRIBUTACAO_PIS,
PIS_ALIQUOTA,
TRIBUTACAO_COFINS,
COFINS_ALIQUOTA,
REDUCAO_BASE_PISCOF,
TIPO_DESCONTO,
TAM_DESCRICAO,

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

FROM (
            SELECT 
                B.ESTABELECIMENTO_CODIGO ESTABELECIMENTO_ID,
                IIF(COALESCE(TP.LOCALIZACAO_PDV, 0) > 0, TP.LOCALIZACAO_PDV, B.LOCALIZACAO_PDV) AS LOCALIZACAO_ID,
                P.FAMILIA_INVENTARIO AS FAMILIA_ID,
                M.CODIGO AS MODELO_ID,
                P.CODIGO AS PRODUTO_ID,
                IIF(COALESCE(N.DESCRICAO_PDV,'') <> '' AND N.DESCRICAO_PDV <> '0', M.CODIGO||' '||COALESCE(N.DESCRICAO_PDV,''),
                   IIF(COALESCE(M.DESCRICAO_COMERCIAL,'') <> '' AND M.DESCRICAO_COMERCIAL <> '0',
                       M.CODIGO||' '||COALESCE(UPPER(M.DESCRICAO_COMERCIAL),'')||' '||COALESCE(UPPER(H.DESCRICAO),''),
                          COALESCE(UPPER(P.DESCRICAO),'')/*||' '||COALESCE(UPPER(H.DESCRICAO),'')*/)) PRODUTO_DESCRICAO,
                H.DESCRICAO AS COR_DESCRICAO,
                P.UNIDADEMEDIDA_SIGLA AS UM,
                P.NCM_CODIGO AS NCM,
                E.PREFIXO||E.CODIGO||COALESCE((SELECT DIGITO FROM DIGITOEAN(E.PREFIXO||E.CODIGO)),'') AS EAN,
                E.EAN_2 AS EAN_2,
                E.TAMANHO,

               (SELECT U.PODE_FRACIONAR FROM TbUnidadeMedida U WHERE U.SIGLA = P.UNIDADEMEDIDA_SIGLA) FRACIONAR,
               (SELECT CEST FROM TBFAMILIA F WHERE F.CODIGO = P.FAMILIA_INVENTARIO) CEST,
                B.CFOP_CODIGO,
                B.OPERACAO_PDV AS OPERACAO_CODIGO,
                MP.TABELA_ID   AS TABELA_PRECO_ID,
                TP.TABELA_PRECO_ID_PROMOCIONAL,
                IIF(E.TAMANHO = 1 AND MP.PR_NF_01 > 0, MP.PR_NF_01,
                IIF(E.TAMANHO = 2 AND MP.PR_NF_02 > 0, MP.PR_NF_02,
                IIF(E.TAMANHO = 3 AND MP.PR_NF_03 > 0, MP.PR_NF_03,
                IIF(E.TAMANHO = 4 AND MP.PR_NF_04 > 0, MP.PR_NF_04,
                IIF(E.TAMANHO = 5 AND MP.PR_NF_05 > 0, MP.PR_NF_05,
                IIF(E.TAMANHO = 6 AND MP.PR_NF_06 > 0, MP.PR_NF_06,
                IIF(E.TAMANHO = 7 AND MP.PR_NF_07 > 0, MP.PR_NF_07,
                IIF(E.TAMANHO = 8 AND MP.PR_NF_08 > 0, MP.PR_NF_08,
                IIF(E.TAMANHO = 9 AND MP.PR_NF_09 > 0, MP.PR_NF_09,
                IIF(E.TAMANHO =10 AND MP.PR_NF_10 > 0, MP.PR_NF_10,
                IIF(E.TAMANHO =11 AND MP.PR_NF_11 > 0, MP.PR_NF_11,
                IIF(E.TAMANHO =12 AND MP.PR_NF_12 > 0, MP.PR_NF_12,
                IIF(E.TAMANHO =13 AND MP.PR_NF_13 > 0, MP.PR_NF_13,
                IIF(E.TAMANHO =14 AND MP.PR_NF_14 > 0, MP.PR_NF_14,
                IIF(E.TAMANHO =15 AND MP.PR_NF_15 > 0, MP.PR_NF_15,
                IIF(E.TAMANHO =16 AND MP.PR_NF_16 > 0, MP.PR_NF_16,
                IIF(E.TAMANHO =17 AND MP.PR_NF_17 > 0, MP.PR_NF_17,
                IIF(E.TAMANHO =18 AND MP.PR_NF_18 > 0, MP.PR_NF_18,
                IIF(E.TAMANHO =19 AND MP.PR_NF_19 > 0, MP.PR_NF_19,
                IIF(E.TAMANHO =20 AND MP.PR_NF_20 > 0, MP.PR_NF_20,
                MP.PRECO_VENDA)))))))))))))))))))) AS VALOR_UNITARIO,

                IIF(TP.TABELA_PRECO_ID_PROMOCIONAL > 0,
                COALESCE((SELECT

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

                    FROM TBMODELO_PRECO MPP, TBTABELA_PRECO TPP
                    WHERE MPP.TABELA_ID = TPP.ID
                    AND MPP.MODELO_CODIGO = M.CODIGO
                    AND MPP.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO
                    AND TPP.HABILITA_PDV = '1'
                    AND CURRENT_DATE BETWEEN TPP.DATA_INICIAL AND TPP.DATA_FINAL
                    AND TPP.ID = TP.TABELA_PRECO_ID_PROMOCIONAL
                    AND TPP.STATUS = 1), '0|0'), '0|0') AS VALOR_QUANTIDADE_PROMOCIONAL,

                B.CST_ORIGEM   AS TRIBUTACAO_ORIGEM,
                B.CST          AS TRIBUTACAO_ICMS,
                B.TAXA_ICMS    AS ICMS_ALIQUOTA,
                COALESCE(B.CST_PISCOF,'')  AS TRIBUTACAO_PIS,
                B.TAXA_PIS     AS PIS_ALIQUOTA,
                COALESCE(B.CST_PISCOF,'')  AS TRIBUTACAO_COFINS,
                B.TAXA_COFINS  AS COFINS_ALIQUOTA,
                C.REDUCAO_BASE_PISCOF,
                OP.TIPO_DESCONTO,
                FN_TAMANHO_GRADE(P.GRADE_CODIGO, E.TAMANHO) AS TAM_DESCRICAO

            FROM TBMODELO        M,
                 TBCOR           H,
                 TBFAMILIA_FICHA B,
                 TBMODELO_PRECO MP,
                 TBTABELA_PRECO TP,
                 TBCFOP          C,
                 TBOPERACAO     OP,
                 TBEAN           E,
                 TBPRODUTO       P
                 LEFT JOIN TBPRODUTO_FICHA N ON N.PRODUTO_CODIGO = P.CODIGO 

            WHERE MP.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO
              AND B.FAMILIA_CODIGO          = P.FAMILIA_INVENTARIO
              AND E.MODELO_ID               = P.MODELO_CODIGO
              AND M.CODIGO                  = P.MODELO_CODIGO
              AND M.CODIGO                  = MP.MODELO_CODIGO
              AND E.COR_ID                  = P.COR_CODIGO
              AND H.CODIGO                  = P.COR_CODIGO
              AND C.CODIGO                  = B.CFOP_CODIGO
              AND OP.CODIGO                 = B.OPERACAO_PDV
              AND MP.TABELA_ID              = TP.ID
              AND P.STATUS                  = '1'  /* SOMENTE PRODUTOS ATIVOS */
              AND M.STATUS                  = '1'  /* SOMENTE MODELOS  ATIVOS */
              AND TP.HABILITA_PDV           = '1'  /* SOMENTE ITENS COM TABELA DE PREÇO HABILITADAS PARA PDV */
              AND CURRENT_DATE BETWEEN TP.DATA_INICIAL AND TP.DATA_FINAL /* SOMENTE TABELAS DE PREÇOS VIGENTES NA DATA CORRENTE */
) V
LEFT JOIN TBPRODUTO_PRECO PP ON PP.PRODUTO_CODIGO = V.PRODUTO_ID AND PP.ESTABELECIMENTO_CODIGO = V.ESTABELECIMENTO_ID AND PP.TABELA_ID = V.TABELA_PRECO_ID_PROMOCIONAL
AND COALESCE((SELECT FIRST 1 X.STATUS FROM TBTABELA_PRECO X WHERE X.ID = V.TABELA_PRECO_ID_PROMOCIONAL), 0) = 1;



ALTER TABLE TBPDV_PRODUTOS
    ADD EAN_2 VARCHAR(50);
	
	
SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_produtos_biud998 for tbpdv_produtos
active before insert or update or delete position 998
AS
BEGIN

    IF(INSERTING) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_INTEGRACAO('TBPDV_PRODUTOS', NEW.ID, 2);
    END ELSE
    IF(DELETING) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_INTEGRACAO('TBPDV_PRODUTOS', OLD.ID, 2);
    END
    IF(UPDATING) THEN
    BEGIN
        IF      ( OLD.ESTABELECIMENTO_ID            IS DISTINCT FROM NEW.ESTABELECIMENTO_ID
             OR   OLD.LOCALIZACAO_ID                IS DISTINCT FROM NEW.LOCALIZACAO_ID
             OR   OLD.FAMILIA_ID                    IS DISTINCT FROM NEW.FAMILIA_ID
             OR   OLD.MODELO_ID                     IS DISTINCT FROM NEW.MODELO_ID
             OR   OLD.PRODUTO_ID                    IS DISTINCT FROM NEW.PRODUTO_ID
             OR   OLD.PRODUTO_DESCRICAO             IS DISTINCT FROM NEW.PRODUTO_DESCRICAO
             OR   OLD.UM                            IS DISTINCT FROM NEW.UM
             OR   OLD.NCM                           IS DISTINCT FROM NEW.NCM
             OR   OLD.EAN                           IS DISTINCT FROM NEW.EAN
             OR   OLD.EAN_2                         IS DISTINCT FROM NEW.EAN_2
             OR   OLD.TAMANHO                       IS DISTINCT FROM NEW.TAMANHO
             OR   OLD.TAM_DESCRICAO                 IS DISTINCT FROM NEW.TAM_DESCRICAO
             OR   OLD.FRACIONAR                     IS DISTINCT FROM NEW.FRACIONAR
             OR   OLD.CEST                          IS DISTINCT FROM NEW.CEST
             OR   OLD.CFOP_CODIGO                   IS DISTINCT FROM NEW.CFOP_CODIGO
             OR   OLD.OPERACAO_CODIGO               IS DISTINCT FROM NEW.OPERACAO_CODIGO
             OR   OLD.TABELA_PRECO_ID               IS DISTINCT FROM NEW.TABELA_PRECO_ID
             OR   OLD.VALOR_UNITARIO                IS DISTINCT FROM NEW.VALOR_UNITARIO
             OR   OLD.VALOR_UNITARIO_PROMOCIONAL    IS DISTINCT FROM NEW.VALOR_UNITARIO_PROMOCIONAL
             OR   OLD.QUANTIDADE_MINIMA             IS DISTINCT FROM NEW.QUANTIDADE_MINIMA
             OR   OLD.TRIBUTACAO_ORIGEM             IS DISTINCT FROM NEW.TRIBUTACAO_ORIGEM
             OR   OLD.TRIBUTACAO_ICMS               IS DISTINCT FROM NEW.TRIBUTACAO_ICMS
             OR   OLD.PERCENTUAL_BASECALCULO_ICMS   IS DISTINCT FROM NEW.PERCENTUAL_BASECALCULO_ICMS
             OR   OLD.ICMS_ALIQUOTA                 IS DISTINCT FROM NEW.ICMS_ALIQUOTA
             OR   OLD.TRIBUTACAO_PIS                IS DISTINCT FROM NEW.TRIBUTACAO_PIS
             OR   OLD.PIS_ALIQUOTA                  IS DISTINCT FROM NEW.PIS_ALIQUOTA
             OR   OLD.TRIBUTACAO_COFINS             IS DISTINCT FROM NEW.TRIBUTACAO_COFINS
             OR   OLD.COFINS_ALIQUOTA               IS DISTINCT FROM NEW.COFINS_ALIQUOTA
             OR   OLD.REDUCAO_BASE_PISCOF           IS DISTINCT FROM NEW.REDUCAO_BASE_PISCOF
             OR   OLD.TIPO_DESCONTO                 IS DISTINCT FROM NEW.TIPO_DESCONTO
             OR   OLD.COR_DESCRICAO                 IS DISTINCT FROM NEW.COR_DESCRICAO                               )
             THEN EXECUTE PROCEDURE SPI_INTEGRACAO('TBPDV_PRODUTOS', OLD.ID, 2);
    END

END^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPUI_PDV_PRODUTOS (
    PARAM_MODELO_ID integer = 0,
    PARAM_TABELA_PRECO_ID integer = 0)
as
declare variable ESTABELECIMENTO_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable FAMILIA_ID integer;
declare variable MODELO_ID integer;
declare variable PRODUTO_ID integer;
declare variable PRODUTO_DESCRICAO varchar(172);
declare variable COR_DESCRICAO varchar(20);
declare variable UM varchar(3);
declare variable NCM varchar(10);
declare variable EAN varchar(32);
declare variable EAN_2 varchar(32);
declare variable TAMANHO integer;
declare variable FRACIONAR char(1);
declare variable CEST varchar(10);
declare variable CFOP_CODIGO varchar(5);
declare variable OPERACAO_CODIGO varchar(3);
declare variable TABELA_PRECO_ID integer;
declare variable TABELA_PRECO_ID_PROMOCIONAL integer;
declare variable VALOR_UNITARIO numeric(18,5);
declare variable VALOR_UNITARIO_PROMOCIONAL numeric(18,2);
declare variable QUANTIDADE_MINIMA integer;
declare variable TRIBUTACAO_ORIGEM char(1);
declare variable TRIBUTACAO_ICMS char(3);
declare variable PERCENTUAL_BASECALCULO_ICMS numeric(10,5);
declare variable ICMS_ALIQUOTA numeric(18,4);
declare variable TRIBUTACAO_PIS char(3);
declare variable PIS_ALIQUOTA numeric(18,4);
declare variable TRIBUTACAO_COFINS char(3);
declare variable COFINS_ALIQUOTA numeric(18,4);
declare variable REDUCAO_BASE_PISCOF char(1);
declare variable TIPO_DESCONTO varchar(1);
declare variable TAM_DESCRICAO varchar(50);
BEGIN
        /* ALIMENTAR TABELA DE PRODUTOS DO PDV */
        FOR

            SELECT
                T.ESTABELECIMENTO_ID,
                T.LOCALIZACAO_ID,
                T.FAMILIA_ID,
                T.MODELO_ID,
                T.PRODUTO_ID,
                T.PRODUTO_DESCRICAO,
                T.COR_DESCRICAO,
                T.UM,
                T.NCM,
                T.EAN,
                T.EAN_2,
                T.TAMANHO,
                T.FRACIONAR,
                T.CEST,
                T.CFOP_CODIGO,
                T.OPERACAO_CODIGO,
                T.TABELA_PRECO_ID,
                T.TABELA_PRECO_ID_PROMOCIONAL,
                T.VALOR_UNITARIO_PROMOCIONAL,
                T.QUANTIDADE_MINIMA,
                T.TRIBUTACAO_ORIGEM,
                T.TRIBUTACAO_ICMS,
                T.ICMS_ALIQUOTA,
                T.TRIBUTACAO_PIS,
                T.PIS_ALIQUOTA,
                T.TRIBUTACAO_COFINS,
                T.COFINS_ALIQUOTA,
                T.REDUCAO_BASE_PISCOF,
                T.TIPO_DESCONTO,
                T.TAM_DESCRICAO,
                T.VALOR_UNITARIO,
                IIF(T.TRIBUTACAO_ICMS IS NOT NULL AND T.TRIBUTACAO_ICMS <> '', (SELECT FIRST 1 I.BASECALCULO FROM TBTRIBUTACAO_ICMS I WHERE I.CODIGO = CAST(T.TRIBUTACAO_ICMS AS INTEGER)), 0) AS PERCENTUAL_BASECALCULO_ICMS
    
            FROM VWPDV_PRODUTOS T
            WHERE IIF(:PARAM_MODELO_ID > 0, T.MODELO_ID = :PARAM_MODELO_ID, TRUE)
            AND IIF(:PARAM_TABELA_PRECO_ID > 0, T.TABELA_PRECO_ID = :PARAM_TABELA_PRECO_ID, TRUE)
            INTO :ESTABELECIMENTO_ID, :LOCALIZACAO_ID, :FAMILIA_ID, :MODELO_ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :COR_DESCRICAO, :UM, :NCM,
            :EAN, :EAN_2, :TAMANHO, :FRACIONAR, :CEST, :CFOP_CODIGO, :OPERACAO_CODIGO, :TABELA_PRECO_ID, :TABELA_PRECO_ID_PROMOCIONAL, :VALOR_UNITARIO_PROMOCIONAL, :QUANTIDADE_MINIMA,
            :TRIBUTACAO_ORIGEM, :TRIBUTACAO_ICMS, :ICMS_ALIQUOTA, :TRIBUTACAO_PIS, :PIS_ALIQUOTA, :TRIBUTACAO_COFINS, :COFINS_ALIQUOTA,
            :REDUCAO_BASE_PISCOF, :TIPO_DESCONTO, :TAM_DESCRICAO, :VALOR_UNITARIO, :PERCENTUAL_BASECALCULO_ICMS

        DO BEGIN

            UPDATE OR INSERT INTO TBPDV_PRODUTOS (ESTABELECIMENTO_ID, LOCALIZACAO_ID, FAMILIA_ID, MODELO_ID, PRODUTO_ID,
                PRODUTO_DESCRICAO, COR_DESCRICAO, UM, NCM, EAN, EAN_2, TAMANHO, TAM_DESCRICAO, FRACIONAR, CEST,
                CFOP_CODIGO, OPERACAO_CODIGO, TABELA_PRECO_ID, VALOR_UNITARIO,
                VALOR_UNITARIO_PROMOCIONAL, QUANTIDADE_MINIMA, TRIBUTACAO_ORIGEM, TRIBUTACAO_ICMS,
                PERCENTUAL_BASECALCULO_ICMS, ICMS_ALIQUOTA, TRIBUTACAO_PIS, PIS_ALIQUOTA,
                TRIBUTACAO_COFINS, COFINS_ALIQUOTA, REDUCAO_BASE_PISCOF, TIPO_DESCONTO)
            VALUES (:ESTABELECIMENTO_ID, :LOCALIZACAO_ID, :FAMILIA_ID, :MODELO_ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :COR_DESCRICAO, :UM, :NCM,
                    :EAN, :EAN_2, :TAMANHO, :TAM_DESCRICAO, :FRACIONAR, :CEST, :CFOP_CODIGO, :OPERACAO_CODIGO, :TABELA_PRECO_ID,
                    :VALOR_UNITARIO, :VALOR_UNITARIO_PROMOCIONAL, :QUANTIDADE_MINIMA, :TRIBUTACAO_ORIGEM, :TRIBUTACAO_ICMS,
                    :PERCENTUAL_BASECALCULO_ICMS, :ICMS_ALIQUOTA, :TRIBUTACAO_PIS, :PIS_ALIQUOTA, :TRIBUTACAO_COFINS,
                    :COFINS_ALIQUOTA, :REDUCAO_BASE_PISCOF, :TIPO_DESCONTO)
            MATCHING (ESTABELECIMENTO_ID, TABELA_PRECO_ID, PRODUTO_ID, TAMANHO);


        END

        :ESTABELECIMENTO_ID     = 0;
        :TABELA_PRECO_ID        = 0;
        :PRODUTO_ID             = 0;
        :TAMANHO                = 0;

        /* DELETAR PRODUTOS QUE FORAM ALTERADOS NA VIEW */
        FOR

            SELECT
                T.ESTABELECIMENTO_ID,
                T.TABELA_PRECO_ID,
                T.PRODUTO_ID,
                T.TAMANHO

            FROM TBPDV_PRODUTOS T
            LEFT JOIN VWPDV_PRODUTOS VW ON VW.ESTABELECIMENTO_ID = T.ESTABELECIMENTO_ID
            AND VW.TABELA_PRECO_ID = T.TABELA_PRECO_ID AND VW.PRODUTO_ID = T.PRODUTO_ID
            AND VW.TAMANHO = T.TAMANHO
            WHERE   VW.ESTABELECIMENTO_ID IS NULL
            AND     IIF(:PARAM_MODELO_ID > 0, T.MODELO_ID = :PARAM_MODELO_ID, TRUE)
            AND     IIF(:PARAM_TABELA_PRECO_ID > 0, T.TABELA_PRECO_ID = :PARAM_TABELA_PRECO_ID, TRUE)
            INTO :ESTABELECIMENTO_ID, :TABELA_PRECO_ID, :PRODUTO_ID, :TAMANHO

        DO BEGIN

            IF(:ESTABELECIMENTO_ID > 0) THEN
            BEGIN
                DELETE FROM TBPDV_PRODUTOS T WHERE T.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                AND T.TABELA_PRECO_ID = :TABELA_PRECO_ID
                AND T.PRODUTO_ID = :PRODUTO_ID
                AND T.TAMANHO = :TAMANHO;

            END


        END
END
^

SET TERM ; ^

ALTER TABLE TBPDV_CFE_ITEM
    ADD EAN_2 VARCHAR(50);
	

	
	