CREATE OR ALTER PROCEDURE SPC_TAMANHO_PRECO_ETAPA_02 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER)
RETURNS (
    TAMANHO INTEGER,
    TAMANHO_DESCRICAO VARCHAR(10),
    TAMANHO_PRECO NUMERIC(15,4))
AS
begin

    FOR
        SELECT
            TAMANHO,
            TAMANHO_DESCRICAO,
            TAMANHO_PRECO
        
        FROM
            (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO
                FROM SPC_TAMANHO_PRECO_ETAPA_01(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID)) X,
            (SELECT MIN(TIPO) TIPO
                FROM SPC_TAMANHO_PRECO_ETAPA_01(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID)) Z
        
        WHERE
            X.TIPO = Z.TIPO
            
        ORDER BY 1

    INTO
        :TAMANHO,
        :TAMANHO_DESCRICAO,
        :TAMANHO_PRECO
    DO        
        suspend;

end;

CREATE OR ALTER PROCEDURE SPC_PEDIDO_PRECO_ETAPA_TIPO_02 (
    CLIENTE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    PRODUTO_ID INTEGER,
    MODELO_ID INTEGER,
    GRADE_ID INTEGER,
    TIPO INTEGER,
    PRECO_NF_CF_ID INTEGER = 0,
    DATA_PEDIDO DATE = 'NOW')
RETURNS (
    TAMANHO INTEGER,
    TAMANHO_DESCRICAO VARCHAR(10),
    TAMANHO_PRECO NUMERIC(15,4),
    VALIDO INTEGER)
AS
BEGIN
    IF(:TIPO > 0)THEN
    BEGIN
        IF(:TIPO = 1) THEN
        /*PREÇO POR MODELO DO CLIENTE*/
        BEGIN
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID)
                    WHERE TIPO IN (1,2)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END       

        END
        IF(:TIPO = 4) THEN
        BEGIN
      /*  PREÇO GERAL NF  */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, 1 AS VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (3,4)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO        
            SUSPEND;
        END
        IF(:TIPO = 5) THEN
        BEGIN
        /* PREÇO GERAL CF  */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, 1 AS VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (5,6)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO        
            SUSPEND;
        END
        IF(:TIPO = 6 OR :TIPO = 7) THEN
        BEGIN
        /* PREÇO LIVRE OU IMPORTADO */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM (SELECT A.TIPO,
                    A.TAMANHO,
                    A.TAMANHO_PRECO,
                    A.TAMANHO_DESCRICAO, A.VALIDO
                    FROM(
                          SELECT
                            5 TIPO,
                            S.TAMANHO,
                            0 AS TAMANHO_PRECO,
                            1 VALIDO,
                            CASE S.TAMANHO
                                WHEN 01 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 02 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 03 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 04 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 05 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 06 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 07 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 08 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 09 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 10 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 11 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 12 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 13 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 14 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 15 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 16 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 17 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 18 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 19 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                                WHEN 20 THEN (SELECT FIRST 1 TAM_DESCRICAO FROM SP_TAMANHO_GRADE(:GRADE_ID,TAMANHO))
                            ELSE 0 END TAMANHO_DESCRICAO
                            
                            FROM TBGRADE_SEQ S
                            WHERE S.TAMANHO > 0) A
                   WHERE CHAR_LENGTH(A.TAMANHO_DESCRICAO) > 0)
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO        
            SUSPEND;
        END
        
        IF(:TIPO = 8) THEN
        BEGIN
      /*  PREÇO GERAL NF SEM ESTABELECIMENTO */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (7,8)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END

        END
        IF(:TIPO = 9) THEN
        BEGIN
        /* PREÇO GERAL CF SEM ESTABELECIMENTO */
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(0,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,:DATA_PEDIDO)
                    WHERE TIPO IN (9,10)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END
        END

        IF(:TIPO = 10) THEN
        /*PREÇO POR MODELO DO CLIENTE SEM GRUPO DE CLIENTES*/
        BEGIN
           FOR
            SELECT
                TAMANHO,
                TAMANHO_DESCRICAO,
                TAMANHO_PRECO,
                VALIDO
            
            FROM
                (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, VALIDO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,CURRENT_DATE,1)) X,
                (SELECT MIN(TIPO) TIPO
                    FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID,:PRECO_NF_CF_ID,CURRENT_DATE,1)
                    WHERE TIPO IN (1,2)) Z
            
            WHERE
                X.TIPO = Z.TIPO
                
            ORDER BY 1
    
            INTO
                :TAMANHO,
                :TAMANHO_DESCRICAO,
                :TAMANHO_PRECO,
                :VALIDO
            DO
            
            BEGIN
             IF(:VALIDO = 0)THEN
             BEGIN
                EXCEPTION "..." 'TABELA DE PREÇOS '||(SELECT FIRST 1 UPPER(FN_LPAD(A.ID,4,0)||' - '||A.DESCRICAO) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||' INVÁLIDA! <BR>'||(SELECT FIRST 1 UPPER('PERÍODO DE VALIDADE: <BR>'||FN_DATE_TO_STRING(A.DATA_INICIAL)||' À '||FN_DATE_TO_STRING(A.DATA_FINAL)) FROM TBTABELA_PRECO A WHERE A.ID = :PRECO_NF_CF_ID)||'. <BR> DATA DO PEDIDO: <BR>'||FN_DATE_TO_STRING(:DATA_PEDIDO);
             END
             SUSPEND;
            END       

        END

    END
    ELSE
    BEGIN
    FOR
        SELECT
            TAMANHO,
            TAMANHO_DESCRICAO,
            TAMANHO_PRECO,
            VALIDO
        
        FROM
            (SELECT TIPO, TAMANHO, TAMANHO_DESCRICAO, TAMANHO_PRECO, 1 AS VALIDO
                FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID)) X,
            (SELECT MIN(TIPO) TIPO
                FROM SPC_PEDIDO_PRECO_ETAPA_01_2(:CLIENTE_ID,:ESTABELECIMENTO_ID,:PRODUTO_ID,:MODELO_ID,:GRADE_ID)) Z
        
        WHERE
            X.TIPO = Z.TIPO
            
        ORDER BY 1

        INTO
            :TAMANHO,
            :TAMANHO_DESCRICAO,
            :TAMANHO_PRECO,
            :VALIDO
        DO        
        SUSPEND;
    END
END;
