CREATE OR ALTER VIEW VWPRODUTOS_PRE_PEDIDO(
    ESTABELECIMENTO_ID,
    LOCALIZACAO_ID,
    FAMILIA_ID,
    MODELO_ID,
    MODELO_DESCRICAO,
    PRODUTO_ID,
    PRODUTO_DESCRICAO,
    COR_ID,
    COR_DESCRICAO,
    UM,
    NCM,
    EAN,
    EAN_2,
    TAMANHO,
    FRACIONAR,
    CEST,
    CFOP_CODIGO,
    OPERACAO_CODIGO,
    TABELA_PRECO_ID,
    VALOR_UNITARIO_PROMOCIONAL,
    QUANTIDADE_MINIMA,
    VALOR_UNITARIO_PROMO_PROD,
    QUANTIDADE_MINIMA_PROD,
    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,
MODELO_DESCRICAO,
PRODUTO_ID,
CAST(PRODUTO_DESCRICAO||' '||TAM_DESCRICAO AS VARCHAR(200)) AS PRODUTO_DESCRICAO,
COR_ID,
COR_DESCRICAO,
UM,
NCM,
EAN,
EAN_2,
TAMANHO,
FRACIONAR,
CEST,
CFOP_CODIGO,
OPERACAO_CODIGO,
TABELA_PRECO_ID,
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,

CAST(FN_ARRAY(V.VALOR_QUANTIDADE_PROMO_PROD,1,'|') AS NUMERIC(15,2)) VALOR_UNITARIO_PROMO_PROD,
CAST(FN_ARRAY(V.VALOR_QUANTIDADE_PROMO_PROD,2,'|') AS INTEGER) QUANTIDADE_MINIMA_PROD,

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,
                M.DESCRICAO AS MODELO_DESCRICAO,
                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.CODIGO AS COR_ID,
                H.DESCRICAO AS COR_DESCRICAO,
                P.UNIDADEMEDIDA_SIGLA AS UM,
                P.NCM_CODIGO AS NCM,
                COALESCE(E.EAN, '') 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,
                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 (TPP.ESTABELECIMENTO_ID = B.ESTABELECIMENTO_CODIGO or TPP.ESTABELECIMENTO_ID = 0)
                    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,

                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 TBPRODUTO_PRECO MPP, TBTABELA_PRECO TPP
                        WHERE MPP.TABELA_ID = TPP.ID
                        AND MPP.PRODUTO_CODIGO = P.CODIGO
                        AND IIF(MPP.ESTABELECIMENTO_CODIGO > 0, MPP.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO, MPP.ESTABELECIMENTO_CODIGO = TP.ESTABELECIMENTO_ID)
                        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_PROMO_PROD,

                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,
                COALESCE(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 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 IIF(MP.ESTABELECIMENTO_CODIGO > 0, MP.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO, MP.ESTABELECIMENTO_CODIGO = TP.ESTABELECIMENTO_ID)
              AND P.STATUS                  = '1'  /* SOMENTE PRODUTOS ATIVOS */
              AND M.STATUS                  = '1'  /* SOMENTE MODELOS  ATIVOS */
              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
;

