CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_ETAPA_01 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER,
    PRECO_NF_CF_ID INTEGER = 0,
    DATA_PEDIDO DATE = 'NOW')
RETURNS (
    TIPO INTEGER,
    TAMANHO INTEGER,
    TAMANHO_DESCRICAO VARCHAR(50),
    TAMANHO_PRECO NUMERIC(15,4),
    VALIDO INTEGER)
AS
DECLARE VARIABLE EMPRESA_VINCULO INTEGER;
begin

    EMPRESA_VINCULO = COALESCE((select first 1 c.empresa_vinculo from tbcliente c where c.codigo = :CLIENTE_ID),0);

    FOR
    SELECT
        TIPO,
        TAMANHO,
        TAMANHO_DESCRICAO,
        TAMANHO_PRECO,
        VALIDO
        FROM
            (
            SELECT
                TIPO,
                TAMANHO,
                 (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO)) TAMANHO_DESCRICAO,
                CAST(IIF(X.PR_TM>0,X.PR_TM,X.PRECO_VENDA) AS NUMERIC(15,4)) TAMANHO_PRECO,
        
                    CASE X.TAMANHO
                        WHEN 01 THEN M.T01
                        WHEN 02 THEN M.T02
                        WHEN 03 THEN M.T03
                        WHEN 04 THEN M.T04
                        WHEN 05 THEN M.T05
                        WHEN 06 THEN M.T06
                        WHEN 07 THEN M.T07
                        WHEN 08 THEN M.T08
                        WHEN 09 THEN M.T09
                        WHEN 10 THEN M.T10
                        WHEN 11 THEN M.T11
                        WHEN 12 THEN M.T12
                        WHEN 13 THEN M.T13
                        WHEN 14 THEN M.T14
                        WHEN 15 THEN M.T15
                        WHEN 16 THEN M.T16
                        WHEN 17 THEN M.T17
                        WHEN 18 THEN M.T18
                        WHEN 19 THEN M.T19
                        WHEN 20 THEN M.T20
                    ELSE 0 END MODELO_GRADE,
                    VALIDO
            
            FROM
                (SELECT
                    1 TIPO,
                    S.TAMANHO,
                    A.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,
                    1 AS VALIDO

                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,
                    A.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,
                    1 AS VALIDO

                FROM
                    TBGRADE_SEQ S,(SELECT FIRST 1 B.* FROM TBCLIENTE_PRODUTO_PRECO B
                     WHERE (B.CLIENTE_CODIGO in (select c.codigo from tbcliente c
                     where c.empresa_vinculo = :EMPRESA_VINCULO)
                     and B.PRODUTO_CODIGO = :PRODUTO_ID
                     AND B.TABELA_ID = :PRECO_NF_CF_ID)) A
                
                Where
                    S.TAMANHO > 0
                
                UNION
                
                SELECT
                             
                    2 TIPO,
                    S.TAMANHO,
                    B.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,
                    1 AS VALIDO
                
                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,
                    B.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,
                    1 AS VALIDO
                
                FROM TBGRADE_SEQ S,(SELECT FIRST 1 B.* FROM TBCLIENTE_MODELO_PRECO B
                     WHERE (B.CLIENTE_CODIGO in (select c.codigo from tbcliente c
                     where c.empresa_vinculo = :EMPRESA_VINCULO)
                     and B.MODELO_CODIGO  = :MODELO_ID
                     AND B.TABELA_ID = :PRECO_NF_CF_ID)) B
                
                Where
                    S.TAMANHO > 0

                UNION
                
                SELECT
                             
                    3 TIPO,
                    S.TAMANHO,
                    B.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,
                    1 AS VALIDO

                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO B ON ( B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)
                
                Where
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    4 TIPO,
                    S.TAMANHO,
                    B.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,
                    1 AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO B ON ( B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)
                
                Where
                    S.TAMANHO > 0

                    
                UNION
                
                SELECT
                             
                    5 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    1 AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO B ON ( B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)
                
                Where
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    6 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    1 AS VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO B ON ( B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID AND B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID)
                    LEFT JOIN TBESTABELECIMENTO E ON (B.ESTABELECIMENTO_CODIGO = E.CODIGO AND B.UF = E.UF)
                                           
                UNION
                
                SELECT
                             
                    7 TIPO,
                    S.TAMANHO,
                    B.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,
                    COALESCE((SELECT FIRST 1 1 FROM TBTABELA_PRECO C WHERE C.ID = B.TABELA_ID AND :DATA_PEDIDO BETWEEN C.DATA_INICIAL AND C.DATA_FINAL),0) VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO B ON B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                Where
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    8 TIPO,
                    S.TAMANHO,
                    B.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,
                    COALESCE((SELECT FIRST 1 1 FROM TBTABELA_PRECO C WHERE C.ID = B.TABELA_ID AND :DATA_PEDIDO BETWEEN C.DATA_INICIAL AND C.DATA_FINAL),0) VALIDO
                
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO B ON B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                Where
                    S.TAMANHO > 0

                    
                UNION
                
                SELECT
                             
                    9 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    COALESCE((SELECT FIRST 1 1 FROM TBTABELA_PRECO C WHERE C.ID = B.TABELA_ID AND :DATA_PEDIDO BETWEEN C.DATA_INICIAL AND C.DATA_FINAL),0) VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBPRODUTO_PRECO B ON B.PRODUTO_CODIGO = :PRODUTO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                Where
                    S.TAMANHO > 0
                                            
                UNION
                
                SELECT
                             
                    10 TIPO,
                    S.TAMANHO,
                    B.PRECO_CF AS PRECO_VENDA,
                    CASE S.TAMANHO
                        WHEN 01 THEN B.PR_CF_01
                        WHEN 02 THEN B.PR_CF_02
                        WHEN 03 THEN B.PR_CF_03
                        WHEN 04 THEN B.PR_CF_04
                        WHEN 05 THEN B.PR_CF_05
                        WHEN 06 THEN B.PR_CF_06
                        WHEN 07 THEN B.PR_CF_07
                        WHEN 08 THEN B.PR_CF_08
                        WHEN 09 THEN B.PR_CF_09
                        WHEN 10 THEN B.PR_CF_10
                        WHEN 11 THEN B.PR_CF_11
                        WHEN 12 THEN B.PR_CF_12
                        WHEN 13 THEN B.PR_CF_13
                        WHEN 14 THEN B.PR_CF_14
                        WHEN 15 THEN B.PR_CF_15
                        WHEN 16 THEN B.PR_CF_16
                        WHEN 17 THEN B.PR_CF_17
                        WHEN 18 THEN B.PR_CF_18
                        WHEN 19 THEN B.PR_CF_19
                        WHEN 20 THEN B.PR_CF_20
                    ELSE 0 END PR_TM,
                    COALESCE((SELECT FIRST 1 1 FROM TBTABELA_PRECO C WHERE C.ID = B.TABELA_ID AND :DATA_PEDIDO BETWEEN C.DATA_INICIAL AND C.DATA_FINAL),0) VALIDO
                
                FROM
                    TBGRADE_SEQ S
                    LEFT JOIN TBMODELO_PRECO B ON B.MODELO_CODIGO = :MODELO_ID AND B.TABELA_ID = :PRECO_NF_CF_ID
                
                Where
                    S.TAMANHO > 0
                ) X
                LEFT JOIN TBMODELO M ON M.CODIGO = :MODELO_ID)Z
        WHERE
            MODELO_GRADE = 1
        AND TAMANHO_PRECO IS NOT NULL

    INTO
        :TIPO,
        :TAMANHO,
        :TAMANHO_DESCRICAO,
        :TAMANHO_PRECO,
        :VALIDO
    DO
    suspend;
end;