CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_CONSULTA_02 (
    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
                2 TIPO,
                S.TAMANHO,
                B.PRECO_VENDA AS PRECO_VENDA,
                CASE S.TAMANHO
                    WHEN 01 THEN B.PR_NF_01
                    WHEN 02 THEN B.PR_NF_02
                    WHEN 03 THEN B.PR_NF_03
                    WHEN 04 THEN B.PR_NF_04
                    WHEN 05 THEN B.PR_NF_05
                    WHEN 06 THEN B.PR_NF_06
                    WHEN 07 THEN B.PR_NF_07
                    WHEN 08 THEN B.PR_NF_08
                    WHEN 09 THEN B.PR_NF_09
                    WHEN 10 THEN B.PR_NF_10
                    WHEN 11 THEN B.PR_NF_11
                    WHEN 12 THEN B.PR_NF_12
                    WHEN 13 THEN B.PR_NF_13
                    WHEN 14 THEN B.PR_NF_14
                    WHEN 15 THEN B.PR_NF_15
                    WHEN 16 THEN B.PR_NF_16
                    WHEN 17 THEN B.PR_NF_17
                    WHEN 18 THEN B.PR_NF_18
                    WHEN 19 THEN B.PR_NF_19
                    WHEN 20 THEN B.PR_NF_20
                ELSE 0 END PR_TM,
                :TABELA_VALIDA AS VALIDO,
                1 AS SUBTIPO
            
            FROM
                TBGRADE_SEQ S
                LEFT JOIN TBCLIENTE_MODELO_PRECO  B ON (B.CLIENTE_CODIGO = :CLIENTE_ID AND B.MODELO_CODIGO  = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)

            WHERE S.TAMANHO > 0

           UNION
                                    
               SELECT
                    2 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_MODELO_PRECO  C ON (C.CLIENTE_CODIGO = :CLIENTE_ID AND C.MODELO_CODIGO  = :MODELO_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
                             
                    2 TIPO,
                    S.TAMANHO,
                    B.PRECO_VENDA AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_NF_01
                        WHEN 02 THEN B.PR_NF_02
                        WHEN 03 THEN B.PR_NF_03
                        WHEN 04 THEN B.PR_NF_04
                        WHEN 05 THEN B.PR_NF_05
                        WHEN 06 THEN B.PR_NF_06
                        WHEN 07 THEN B.PR_NF_07
                        WHEN 08 THEN B.PR_NF_08
                        WHEN 09 THEN B.PR_NF_09
                        WHEN 10 THEN B.PR_NF_10
                        WHEN 11 THEN B.PR_NF_11
                        WHEN 12 THEN B.PR_NF_12
                        WHEN 13 THEN B.PR_NF_13
                        WHEN 14 THEN B.PR_NF_14
                        WHEN 15 THEN B.PR_NF_15
                        WHEN 16 THEN B.PR_NF_16
                        WHEN 17 THEN B.PR_NF_17
                        WHEN 18 THEN B.PR_NF_18
                        WHEN 19 THEN B.PR_NF_19
                        WHEN 20 THEN B.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_MODELO_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.MODELO_CODIGO     = :MODELO_ID
                         AND B.TABELA_ID         = C.ID
                         AND B.TABELA_ID        = :PRECO_NF_CF_ID) B

            UNION

              SELECT
                2 TIPO,
                S.TAMANHO,
                FN_NUMBER_CAST((B.PRECO_VENDA*:PERCENTUAL_BASE),:DECIMAIS_BASE) AS PRECO_VENDA,
                CASE S.TAMANHO
                    WHEN 01 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 02 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 03 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 04 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 05 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 06 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 07 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 08 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 09 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 10 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 11 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 12 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 13 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 14 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 15 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 16 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 17 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 18 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 19 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                    WHEN 20 THEN FN_NUMBER_CAST((B.PR_NF_01*:PERCENTUAL_BASE),:DECIMAIS_BASE)
                ELSE 0 END 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_MODELO_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.MODELO_CODIGO     = :MODELO_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)))) B
               WHERE TAMANHO > 0
       )Z

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