CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_CONSULTA_01 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER,
    PRECO_NF_CF_ID INTEGER = 0,
    PERCENTUAL_BASE INTEGER = 0,
    DECIMAIS_BASE INTEGER = 2,
    TABELA_VALIDA INTEGER = 0,
    EMPRESA_VINCULO INTEGER = 0,
    DATA_PEDIDO DATE = 'NOW')
RETURNS (
    TIPO INTEGER,
    TAMANHO INTEGER,
    PRECO_VENDA NUMERIC(15,4),
    PR_TM NUMERIC(15,4),
    VALIDO INTEGER,
    SUBTIPO INTEGER)
AS
BEGIN

    FOR
       SELECT
         TIPO,
         TAMANHO,
         PRECO_VENDA,
         PR_TM,
         VALIDO,
         SUBTIPO
         FROM (
         SELECT
            1 TIPO,
            S.TAMANHO,
            A.PRECO_VENDA AS PRECO_VENDA,
            CASE S.TAMANHO
                WHEN 01 THEN A.PR_NF_01
                WHEN 02 THEN A.PR_NF_02
                WHEN 03 THEN A.PR_NF_03
                WHEN 04 THEN A.PR_NF_04
                WHEN 05 THEN A.PR_NF_05
                WHEN 06 THEN A.PR_NF_06
                WHEN 07 THEN A.PR_NF_07
                WHEN 08 THEN A.PR_NF_08
                WHEN 09 THEN A.PR_NF_09
                WHEN 10 THEN A.PR_NF_10
                WHEN 11 THEN A.PR_NF_11
                WHEN 12 THEN A.PR_NF_12
                WHEN 13 THEN A.PR_NF_13
                WHEN 14 THEN A.PR_NF_14
                WHEN 15 THEN A.PR_NF_15
                WHEN 16 THEN A.PR_NF_16
                WHEN 17 THEN A.PR_NF_17
                WHEN 18 THEN A.PR_NF_18
                WHEN 19 THEN A.PR_NF_19
                WHEN 20 THEN A.PR_NF_20

            ELSE 0 END PR_TM,
            :TABELA_VALIDA AS VALIDO,
            1 AS SUBTIPO

        FROM
            TBGRADE_SEQ S
            LEFT JOIN TBCLIENTE_PRODUTO_PRECO A ON (A.CLIENTE_CODIGO = :CLIENTE_ID AND A.PRODUTO_CODIGO = :PRODUTO_ID AND A.TABELA_ID = :PRECO_NF_CF_ID)
        
        WHERE
            S.TAMANHO > 0
        
        UNION
        
        SELECT
            1 TIPO,
            S.TAMANHO,
            FN_NUMBER_CAST((C.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
            CASE S.TAMANHO
                WHEN 01 THEN FN_NUMBER_CAST((C.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 02 THEN FN_NUMBER_CAST((C.PR_NF_02*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 03 THEN FN_NUMBER_CAST((C.PR_NF_03*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 04 THEN FN_NUMBER_CAST((C.PR_NF_04*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 05 THEN FN_NUMBER_CAST((C.PR_NF_05*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 06 THEN FN_NUMBER_CAST((C.PR_NF_06*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 07 THEN FN_NUMBER_CAST((C.PR_NF_07*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 08 THEN FN_NUMBER_CAST((C.PR_NF_08*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 09 THEN FN_NUMBER_CAST((C.PR_NF_09*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 10 THEN FN_NUMBER_CAST((C.PR_NF_10*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 11 THEN FN_NUMBER_CAST((C.PR_NF_11*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 12 THEN FN_NUMBER_CAST((C.PR_NF_12*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 13 THEN FN_NUMBER_CAST((C.PR_NF_13*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 14 THEN FN_NUMBER_CAST((C.PR_NF_14*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 15 THEN FN_NUMBER_CAST((C.PR_NF_15*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 16 THEN FN_NUMBER_CAST((C.PR_NF_16*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 17 THEN FN_NUMBER_CAST((C.PR_NF_17*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 18 THEN FN_NUMBER_CAST((C.PR_NF_18*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 19 THEN FN_NUMBER_CAST((C.PR_NF_19*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                WHEN 20 THEN FN_NUMBER_CAST((C.PR_NF_20*:PERCENTUAL_BASE),:DECIMAIS_BASE)

            ELSE 0 END PR_TM,

            :TABELA_VALIDA AS VALIDO,
            2 AS SUBTIPO

        FROM
            TBGRADE_SEQ S
            LEFT JOIN TBCLIENTE_PRODUTO_PRECO C ON (C.CLIENTE_CODIGO = :CLIENTE_ID AND C.PRODUTO_CODIGO = :PRODUTO_ID AND C.TABELA_ID = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID))
        
        WHERE
            S.TAMANHO > 0
        
        UNION

        SELECT
            1 TIPO,
            S.TAMANHO,
            A.PRECO_VENDA AS PRECO_VENDA,
            CASE S.TAMANHO
                WHEN 01 THEN A.PR_NF_01
                WHEN 02 THEN A.PR_NF_02
                WHEN 03 THEN A.PR_NF_03
                WHEN 04 THEN A.PR_NF_04
                WHEN 05 THEN A.PR_NF_05
                WHEN 06 THEN A.PR_NF_06
                WHEN 07 THEN A.PR_NF_07
                WHEN 08 THEN A.PR_NF_08
                WHEN 09 THEN A.PR_NF_09
                WHEN 10 THEN A.PR_NF_10
                WHEN 11 THEN A.PR_NF_11
                WHEN 12 THEN A.PR_NF_12
                WHEN 13 THEN A.PR_NF_13
                WHEN 14 THEN A.PR_NF_14
                WHEN 15 THEN A.PR_NF_15
                WHEN 16 THEN A.PR_NF_16
                WHEN 17 THEN A.PR_NF_17
                WHEN 18 THEN A.PR_NF_18
                WHEN 19 THEN A.PR_NF_19
                WHEN 20 THEN A.PR_NF_20
            ELSE 0 END PR_TM,
            :TABELA_VALIDA AS VALIDO,
            3 AS SUBTIPO

        FROM
            TBGRADE_SEQ S,(SELECT FIRST 1 B.*,
             COALESCE(C.PERCENTUAL_BASE,0.00) AS PERCENTUAL_BASE,
             COALESCE(C.DECIMAIS_BASE,2) AS DECIMAIS_BASE
             FROM TBCLIENTE_PRODUTO_PRECO B, TBTABELA_PRECO C
             WHERE B.CLIENTE_CODIGO IN --(SELECT C.CODIGO FROM TBCLIENTE C WHERE C.EMPRESA_VINCULO = :EMPRESA_VINCULO)
             (SELECT C.CODIGO FROM TBCLIENTE C, TBEMPRESA_GRUPO_CONTAS W WHERE W.EMPRESA_ID = C.CODIGO AND W.EMPRESA_GRUPO_ID = :EMPRESA_VINCULO)
             AND B.PRODUTO_CODIGO    = :PRODUTO_ID
             AND B.TABELA_ID        = C.ID
             AND B.TABELA_ID        = :PRECO_NF_CF_ID) A
        
        WHERE
            S.TAMANHO > 0
        
        UNION

        SELECT
            1 TIPO,
            S.TAMANHO,
            FN_NUMBER_CAST((A.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
            FN_NUMBER_CAST(
                    iif(S.TAMANHO = 1, A.PR_NF_01,
                    iif(S.TAMANHO = 2, A.PR_NF_02,
                    iif(S.TAMANHO = 3, A.PR_NF_03,
                    iif(S.TAMANHO = 4, A.PR_NF_04,
                    iif(S.TAMANHO = 5, A.PR_NF_05,
                    iif(S.TAMANHO = 6, A.PR_NF_06,
                    iif(S.TAMANHO = 7, A.PR_NF_07,
                    iif(S.TAMANHO = 8, A.PR_NF_08,
                    iif(S.TAMANHO = 9, A.PR_NF_09,
                    iif(S.TAMANHO = 10, A.PR_NF_10,
                    iif(S.TAMANHO = 11, A.PR_NF_11,
                    iif(S.TAMANHO = 12, A.PR_NF_12,
                    iif(S.TAMANHO = 13, A.PR_NF_13,
                    iif(S.TAMANHO = 14, A.PR_NF_14,
                    iif(S.TAMANHO = 15, A.PR_NF_15,
                    iif(S.TAMANHO = 16, A.PR_NF_16,
                    iif(S.TAMANHO = 17, A.PR_NF_17,
                    iif(S.TAMANHO = 18, A.PR_NF_18,
                    iif(S.TAMANHO = 19, A.PR_NF_19,
                    iif(S.TAMANHO = 20, A.PR_NF_20, 0))))))))))))))))))))
                *:PERCENTUAL_BASE,:DECIMAIS_BASE) PR_TM,
            :TABELA_VALIDA AS VALIDO,
            4 AS SUBTIPO

        FROM
            TBGRADE_SEQ S,(
                SELECT FIRST 1 B.*,
                 COALESCE(C.PERCENTUAL_BASE,0.00) AS PERCENTUAL_BASE,
                 COALESCE(C.DECIMAIS_BASE,2) AS DECIMAIS_BASE
                 FROM TBCLIENTE_PRODUTO_PRECO B, TBTABELA_PRECO C
                 WHERE B.CLIENTE_CODIGO IN --(SELECT C.CODIGO FROM TBCLIENTE C WHERE C.EMPRESA_VINCULO = :EMPRESA_VINCULO)
                 (SELECT C.CODIGO FROM TBCLIENTE C, TBEMPRESA_GRUPO_CONTAS W WHERE W.EMPRESA_ID = C.CODIGO AND W.EMPRESA_GRUPO_ID = :EMPRESA_VINCULO)
                 AND B.PRODUTO_CODIGO    = :PRODUTO_ID
                 AND B.TABELA_ID        = C.ID
                 AND B.TABELA_ID        = (SELECT FIRST 1 C.TABELA_PRECO_ID_BASE FROM TBTABELA_PRECO C WHERE C.ID = :PRECO_NF_CF_ID)) A
            
        WHERE
            S.TAMANHO > 0
       )Z

    INTO
        :TIPO,
        :TAMANHO,
        :PRECO_VENDA,
        :PR_TM,
        :VALIDO,
        :SUBTIPO
    DO
    SUSPEND;
END;