CREATE OR ALTER VIEW VWPDV_PRODUTOS(
    ESTABELECIMENTO_ID,
    LOCALIZACAO_ID,
    FAMILIA_ID,
    MODELO_ID,
    PRODUTO_ID,
    PRODUTO_DESCRICAO,
    COR_DESCRICAO,
    UM,
    NCM,
    EAN,
    TAMANHO,
    FRACIONAR,
    CEST,
    CFOP_CODIGO,
    OPERACAO_CODIGO,
    TABELA_PRECO_ID,
    VALOR_UNITARIO,
    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)
AS
SELECT
ESTABELECIMENTO_ID,
LOCALIZACAO_ID,
FAMILIA_ID,
MODELO_ID,
PRODUTO_ID,
PRODUTO_DESCRICAO||' '||TAM_DESCRICAO AS PRODUTO_DESCRICAO,
COR_DESCRICAO,
UM,
NCM,
EAN,
TAMANHO,
FRACIONAR,
CEST,
CFOP_CODIGO,
OPERACAO_CODIGO,
TABELA_PRECO_ID,
VALOR_UNITARIO,
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

FROM (
            SELECT 
                B.ESTABELECIMENTO_CODIGO ESTABELECIMENTO_ID,
                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', COALESCE(N.DESCRICAO_PDV,''),
                   IIF(COALESCE(M.DESCRICAO_COMERCIAL,'') <> '' AND M.DESCRICAO_COMERCIAL <> '0',
                       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.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,
                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), '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 */
);