SET TERM ^ ;

CREATE OR ALTER procedure SPC_MODELO_CONSUMO_AGRUPAMENTO (
    MODELO_ID integer not null)
returns (
    MODELO_CODIGO integer,
    MODELO_DESC varchar(100),
    COR_ID integer,
    PRODUTO_ID integer,
    PRODUTO_COR_ID integer,
    TAM integer,
    SETOR_ID integer,
    MODELO_ORIGEM integer,
    PRODUTO_ORIGEM integer,
    TAM_ORIGEM integer,
    MODELO_DESTINO integer,
    PRODUTO_DESTINO integer,
    TAM_DESTINO integer,
    MATRIZ_ID integer,
    VALOR_BASE numeric(15,8),
    NIVEL integer,
    FLAG char(1),
    CONSUMO_QUANTIDADE_T01 numeric(15,8),
    CONSUMO_QUANTIDADE_T02 numeric(15,8),
    CONSUMO_QUANTIDADE_T03 numeric(15,8),
    CONSUMO_QUANTIDADE_T04 numeric(15,8),
    CONSUMO_QUANTIDADE_T05 numeric(15,8),
    CONSUMO_QUANTIDADE_T06 numeric(15,8),
    CONSUMO_QUANTIDADE_T07 numeric(15,8),
    CONSUMO_QUANTIDADE_T08 numeric(15,8),
    CONSUMO_QUANTIDADE_T09 numeric(15,8),
    CONSUMO_QUANTIDADE_T10 numeric(15,8),
    CONSUMO_QUANTIDADE_T11 numeric(15,8),
    CONSUMO_QUANTIDADE_T12 numeric(15,8),
    CONSUMO_QUANTIDADE_T13 numeric(15,8),
    CONSUMO_QUANTIDADE_T14 numeric(15,8),
    CONSUMO_QUANTIDADE_T15 numeric(15,8),
    CONSUMO_QUANTIDADE_T16 numeric(15,8),
    CONSUMO_QUANTIDADE_T17 numeric(15,8),
    CONSUMO_QUANTIDADE_T18 numeric(15,8),
    CONSUMO_QUANTIDADE_T19 numeric(15,8),
    CONSUMO_QUANTIDADE_T20 numeric(15,8),
    CONSUMO_QUANTIDADE numeric(15,8),
    OBSERVACAO varchar(500),
    FATOR_CONVERSAO numeric(15,4),
    PERCENTUAL_CONSUMO integer,
    ALOCACAO char(1),
    FATOR_MATRIZ numeric(15,4),
    HABILITA_GERAR_CONSUMO char(1),
    ROTULO varchar(50),
    ID integer,
    QTD_REG integer,
    INC_GRUPO_PRODUTO char(1),
    GRUPO_PRODUTO_ID integer,
    AGRUPAMENTO_ID integer,
    TIPO integer,
    JSON blob sub_type 1 segment size 80,
    LIST_ID blob sub_type 1 segment size 80,
    LIST_COR_ID blob sub_type 1 segment size 80,
    LIST_PRODUTO_ID blob sub_type 1 segment size 80,
    LIST_PRODUTO_COR_ID blob sub_type 1 segment size 80,
    LIST_TAMANHO blob sub_type 1 segment size 80)
as
BEGIN
    FOR
        SELECT
            T.MODELO_CODIGO,
            T.MODELO_DESC,
            T.COR_ID,
            T.PRODUTO_ID,
            T.PRODUTO_COR_ID,
            T.TAM,
            T.SETOR_ID,
            T.MODELO_ORIGEM,
            T.PRODUTO_ORIGEM,
            T.TAM_ORIGEM,
            T.MODELO_DESTINO,
            T.PRODUTO_DESTINO,
            T.TAM_DESTINO,
            T.MATRIZ_ID,
            T.VALOR_BASE,
            T.NIVEL,
            T.FLAG,
            T.CONSUMO_QUANTIDADE_T01,
            T.CONSUMO_QUANTIDADE_T02,
            T.CONSUMO_QUANTIDADE_T03,
            T.CONSUMO_QUANTIDADE_T04,
            T.CONSUMO_QUANTIDADE_T05,
            T.CONSUMO_QUANTIDADE_T06,
            T.CONSUMO_QUANTIDADE_T07,
            T.CONSUMO_QUANTIDADE_T08,
            T.CONSUMO_QUANTIDADE_T09,
            T.CONSUMO_QUANTIDADE_T10,
            T.CONSUMO_QUANTIDADE_T11,
            T.CONSUMO_QUANTIDADE_T12,
            T.CONSUMO_QUANTIDADE_T13,
            T.CONSUMO_QUANTIDADE_T14,
            T.CONSUMO_QUANTIDADE_T15,
            T.CONSUMO_QUANTIDADE_T16,
            T.CONSUMO_QUANTIDADE_T17,
            T.CONSUMO_QUANTIDADE_T18,
            T.CONSUMO_QUANTIDADE_T19,
            T.CONSUMO_QUANTIDADE_T20,
            T.CONSUMO_QUANTIDADE,
            T.OBSERVACAO,
            T.FATOR_CONVERSAO,
            T.PERCENTUAL_CONSUMO,
            T.ALOCACAO,
            T.FATOR_MATRIZ,
            T.HABILITA_GERAR_CONSUMO,
            FN_IS_EMPTY(T.ROTULO) AS ROTULO,
            T.ID,
            1 AS QTD_REG,
            T.INC_GRUPO_PRODUTO,
            T.GRUPO_PRODUTO_ID,
            T.AGRUPAMENTO_ID,
            T.TIPO,
            T.JSON,
        
            '' AS LIST_ID,
            '' AS LIST_COR_ID,
            '' AS LIST_PRODUTO_ID,
            '' AS LIST_PRODUTO_COR_ID,
            '' AS LIST_TAM
        
        FROM SPC_MODELO_CONSUMO(:MODELO_ID) T
        WHERE T.TIPO IN (1,2)
        
        UNION
        
        SELECT
            T.MODELO_CODIGO,
            T.MODELO_DESC,
        
            CAST(FN_ARRAY2(T.LIST_COR_ID, 1, '|') AS INTEGER) AS COR_ID,
            CAST(FN_ARRAY2(T.LIST_PRODUTO_ID, 1, '|') AS INTEGER) AS PRODUTO_ID,
            CAST(FN_ARRAY2(T.LIST_PRODUTO_COR_ID, 1, '|') AS INTEGER) AS PRODUTO_COR_ID,
            CAST(FN_ARRAY2(T.LIST_TAM, 1, '|') AS INTEGER) AS TAM,
            CAST(FN_ARRAY2(T.LIST_SETOR_ID, 1, '|') AS INTEGER) AS SETOR_ID,
            CAST(FN_ARRAY2(T.LIST_MODELO_ORIGEM, 1, '|') AS INTEGER) AS MODELO_ORIGEM,
            CAST(FN_ARRAY2(T.LIST_PRODUTO_ORIGEM, 1, '|') AS INTEGER) AS PRODUTO_ORIGEM,
            CAST(FN_ARRAY2(T.LIST_TAM_ORIGEM, 1, '|') AS INTEGER) AS TAM_ORIGEM,
            CAST(FN_ARRAY2(T.LIST_MODELO_DESTINO, 1, '|') AS INTEGER) AS MODELO_DESTINO,
            CAST(FN_ARRAY2(T.LIST_PRODUTO_DESTINO, 1, '|') AS INTEGER) AS PRODUTO_DESTINO,
            CAST(FN_ARRAY2(T.LIST_TAM_DESTINO, 1, '|') AS INTEGER) AS TAM_DESTINO,
            CAST(FN_ARRAY2(T.LIST_MATRIZ_ID, 1, '|') AS INTEGER) AS MATRIZ_ID,
            CAST(FN_ARRAY2(T.LIST_VALOR_BASE, 1, '|') AS NUMERIC(15,8)) AS VALOR_BASE,
            FN_ARRAY2(T.LIST_NIVEL, 1, '|') AS NIVEL,
            FN_ARRAY2(T.LIST_FLAG, 1, '|') AS FLAG,
        
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T01, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T01,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T02, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T02,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T03, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T03,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T04, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T04,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T05, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T05,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T06, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T06,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T07, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T07,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T08, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T08,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T09, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T09,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T10, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T10,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T11, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T11,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T12, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T12,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T13, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T13,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T14, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T14,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T15, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T15,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T16, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T16,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T17, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T17,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T18, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T18,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T19, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T19,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE_T20, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE_T20,
            CAST(FN_CALC_PRECISION_V2(T.SUM_CONSUMO_QUANTIDADE, T.QTD_REG, '/') AS NUMERIC(15,8)) AS CONSUMO_QUANTIDADE,

            FN_ARRAY2(T.LIST_OBSERVACAO, 1, '|') AS OBSERVACAO,
            CAST(FN_ARRAY2(T.LIST_FATOR_CONVERSAO, 1, '|') AS NUMERIC(15,4)) AS FATOR_CONVERSAO,
            CAST(FN_ARRAY2(T.LIST_PERCENTUAL_CONSUMO, 1, '|') AS INTEGER) AS PERCENTUAL_CONSUMO,
            FN_ARRAY2(T.LIST_ALOCACAO, 1, '|') AS ALOCACAO,
            CAST(FN_ARRAY2(T.LIST_FATOR_MATRIZ, 1, '|') AS NUMERIC(15,4)) AS FATOR_MATRIZ,
            FN_ARRAY2(T.LIST_HABILITA_GERAR_CONSUMO, 1, '|') AS HABILITA_GERAR_CONSUMO,
            FN_IS_EMPTY(FN_ARRAY2(T.LIST_ROTULO, 1, '|')) AS ROTULO,
            CAST(FN_ARRAY2(T.LIST_ID, 1, '|') AS INTEGER) AS ID,
            T.QTD_REG,
            FN_ARRAY2(T.LIST_INC_GRUPO_PRODUTO, 1, '|') AS INC_GRUPO_PRODUTO,
        
            T.GRUPO_PRODUTO_ID,
            T.AGRUPAMENTO_ID,
            T.TIPO,
            T.JSON,
        
            T.LIST_ID,
            T.LIST_COR_ID,
            T.LIST_PRODUTO_ID,
            T.LIST_PRODUTO_COR_ID,
            T.LIST_TAM
        
        FROM (
            SELECT
                T.MODELO_CODIGO,
                T.MODELO_DESC,
                LIST(T.COR_ID, '|') AS LIST_COR_ID,
                LIST(T.PRODUTO_ID, '|') AS LIST_PRODUTO_ID,
                LIST(T.PRODUTO_COR_ID, '|') AS LIST_PRODUTO_COR_ID,
                LIST(T.TAM, '|') AS LIST_TAM,
                LIST(T.SETOR_ID, '|') AS LIST_SETOR_ID,
                LIST(T.MODELO_ORIGEM, '|') AS LIST_MODELO_ORIGEM,
                LIST(T.PRODUTO_ORIGEM, '|') AS LIST_PRODUTO_ORIGEM,
                LIST(T.TAM_ORIGEM, '|') AS LIST_TAM_ORIGEM,
                LIST(T.MODELO_DESTINO, '|') AS LIST_MODELO_DESTINO,
                LIST(T.PRODUTO_DESTINO, '|') AS LIST_PRODUTO_DESTINO,
                LIST(T.TAM_DESTINO, '|') AS LIST_TAM_DESTINO,
                LIST(T.MATRIZ_ID, '|') AS LIST_MATRIZ_ID,
                LIST(T.VALOR_BASE, '|') AS LIST_VALOR_BASE,
                LIST(T.NIVEL, '|') AS LIST_NIVEL,
                LIST(T.FLAG, '|') AS LIST_FLAG,
                SUM(T.CONSUMO_QUANTIDADE_T01) AS SUM_CONSUMO_QUANTIDADE_T01,
                SUM(T.CONSUMO_QUANTIDADE_T02) AS SUM_CONSUMO_QUANTIDADE_T02,
                SUM(T.CONSUMO_QUANTIDADE_T03) AS SUM_CONSUMO_QUANTIDADE_T03,
                SUM(T.CONSUMO_QUANTIDADE_T04) AS SUM_CONSUMO_QUANTIDADE_T04,
                SUM(T.CONSUMO_QUANTIDADE_T05) AS SUM_CONSUMO_QUANTIDADE_T05,
                SUM(T.CONSUMO_QUANTIDADE_T06) AS SUM_CONSUMO_QUANTIDADE_T06,
                SUM(T.CONSUMO_QUANTIDADE_T07) AS SUM_CONSUMO_QUANTIDADE_T07,
                SUM(T.CONSUMO_QUANTIDADE_T08) AS SUM_CONSUMO_QUANTIDADE_T08,
                SUM(T.CONSUMO_QUANTIDADE_T09) AS SUM_CONSUMO_QUANTIDADE_T09,
                SUM(T.CONSUMO_QUANTIDADE_T10) AS SUM_CONSUMO_QUANTIDADE_T10,
                SUM(T.CONSUMO_QUANTIDADE_T11) AS SUM_CONSUMO_QUANTIDADE_T11,
                SUM(T.CONSUMO_QUANTIDADE_T12) AS SUM_CONSUMO_QUANTIDADE_T12,
                SUM(T.CONSUMO_QUANTIDADE_T13) AS SUM_CONSUMO_QUANTIDADE_T13,
                SUM(T.CONSUMO_QUANTIDADE_T14) AS SUM_CONSUMO_QUANTIDADE_T14,
                SUM(T.CONSUMO_QUANTIDADE_T15) AS SUM_CONSUMO_QUANTIDADE_T15,
                SUM(T.CONSUMO_QUANTIDADE_T16) AS SUM_CONSUMO_QUANTIDADE_T16,
                SUM(T.CONSUMO_QUANTIDADE_T17) AS SUM_CONSUMO_QUANTIDADE_T17,
                SUM(T.CONSUMO_QUANTIDADE_T18) AS SUM_CONSUMO_QUANTIDADE_T18,
                SUM(T.CONSUMO_QUANTIDADE_T19) AS SUM_CONSUMO_QUANTIDADE_T19,
                SUM(T.CONSUMO_QUANTIDADE_T20) AS SUM_CONSUMO_QUANTIDADE_T20,
                SUM(T.CONSUMO_QUANTIDADE) AS SUM_CONSUMO_QUANTIDADE,
                LIST(T.OBSERVACAO, '|') AS LIST_OBSERVACAO,
                LIST(T.FATOR_CONVERSAO, '|') AS LIST_FATOR_CONVERSAO,
                LIST(T.PERCENTUAL_CONSUMO, '|') AS LIST_PERCENTUAL_CONSUMO,
                LIST(T.ALOCACAO, '|') AS LIST_ALOCACAO,
                LIST(T.FATOR_MATRIZ, '|') AS LIST_FATOR_MATRIZ,
                LIST(T.HABILITA_GERAR_CONSUMO, '|') AS LIST_HABILITA_GERAR_CONSUMO,
                LIST(T.ROTULO, '|') AS LIST_ROTULO,
                LIST(T.ID, '|') AS LIST_ID,
                COUNT(DISTINCT T.COR_ID) AS QTD_REG,
                LIST(T.INC_GRUPO_PRODUTO, '|') AS LIST_INC_GRUPO_PRODUTO,
                T.GRUPO_PRODUTO_ID,
                T.AGRUPAMENTO_ID,
                T.TIPO,
                LIST(T.JSON, '|') AS JSON
        
            FROM SPC_MODELO_CONSUMO(:MODELO_ID) T
            WHERE T.TIPO IN (3,4)
        
            GROUP BY 
                T.MODELO_CODIGO,
                T.MODELO_DESC,
                T.GRUPO_PRODUTO_ID,
                T.AGRUPAMENTO_ID,
                T.TIPO
        ) T
    INTO
        :MODELO_CODIGO,
        :MODELO_DESC,
        :COR_ID,
        :PRODUTO_ID,
        :PRODUTO_COR_ID,
        :TAM,
        :SETOR_ID,
        :MODELO_ORIGEM,
        :PRODUTO_ORIGEM,
        :TAM_ORIGEM,
        :MODELO_DESTINO,
        :PRODUTO_DESTINO,
        :TAM_DESTINO,
        :MATRIZ_ID,
        :VALOR_BASE,
        :NIVEL,
        :FLAG,
        :CONSUMO_QUANTIDADE_T01,
        :CONSUMO_QUANTIDADE_T02,
        :CONSUMO_QUANTIDADE_T03,
        :CONSUMO_QUANTIDADE_T04,
        :CONSUMO_QUANTIDADE_T05,
        :CONSUMO_QUANTIDADE_T06,
        :CONSUMO_QUANTIDADE_T07,
        :CONSUMO_QUANTIDADE_T08,
        :CONSUMO_QUANTIDADE_T09,
        :CONSUMO_QUANTIDADE_T10,
        :CONSUMO_QUANTIDADE_T11,
        :CONSUMO_QUANTIDADE_T12,
        :CONSUMO_QUANTIDADE_T13,
        :CONSUMO_QUANTIDADE_T14,
        :CONSUMO_QUANTIDADE_T15,
        :CONSUMO_QUANTIDADE_T16,
        :CONSUMO_QUANTIDADE_T17,
        :CONSUMO_QUANTIDADE_T18,
        :CONSUMO_QUANTIDADE_T19,
        :CONSUMO_QUANTIDADE_T20,
        :CONSUMO_QUANTIDADE,
        :OBSERVACAO,
        :FATOR_CONVERSAO,
        :PERCENTUAL_CONSUMO,
        :ALOCACAO,
        :FATOR_MATRIZ,
        :HABILITA_GERAR_CONSUMO,
        :ROTULO,
        :ID,
        :QTD_REG,
        :INC_GRUPO_PRODUTO,
        :GRUPO_PRODUTO_ID,
        :AGRUPAMENTO_ID,
        :TIPO,
        :JSON,
        :LIST_ID,
        :LIST_COR_ID,
        :LIST_PRODUTO_ID,
        :LIST_PRODUTO_COR_ID,
        :LIST_TAMANHO
    DO
    BEGIN

        SUSPEND;
    END
END
^

SET TERM ; ^