SET TERM ^ ;

CREATE OR ALTER procedure SPC_MODELO_FLUXOPROD1_RELATORIO (
    MODELO_ID integer not null)
returns (
    COR_ID integer,
    DESCRICAO varchar(100),
    TONALIDADE char(1),
    STATUS char(1),
    DESC_COR varchar(200),
    DESC_TONALIDADE varchar(100),
    DESC_STATUS varchar(100))
as
BEGIN

    FOR
        SELECT
            X.COR_ID, 
            X.DESCRICAO, 
            X.TONALIDADE,
            X.STATUS,
            
            FN_LPAD(X.COR_ID, 5, '0')||' - '||X.DESCRICAO AS DESC_COR,
            IIF(X.TONALIDADE = 'C', 'CLARO', IIF(X.TONALIDADE = 'E', 'ESCURA', '')) AS DESC_TONALIDADE,
            IIF(X.STATUS = '1', 'ATIVO', 'INATIVO') AS DESC_STATUS
    
        FROM (
            SELECT
                0 AS COR_ID,
                '*** PADRÃO ***' AS DESCRICAO,
                ' ' AS TONALIDADE,
                '1' AS STATUS
                
            FROM RDB$DATABASE
        
            UNION
        
            SELECT
                T.COR_ID,
                A.DESCRICAO,
                A.TONALIDADE,
                A.STATUS
        
                
            FROM TBMODELO_COR T
            INNER JOIN TBCOR A ON A.CODIGO = T.COR_ID
            WHERE T.MODELO_ID = :MODELO_ID
        
            ORDER BY
                3,
                2
        ) X
    
    INTO
        :COR_ID,
        :DESCRICAO,
        :TONALIDADE,
        :STATUS,
        :DESC_COR,
        :DESC_TONALIDADE,
        :DESC_STATUS

    DO BEGIN

        SUSPEND;
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_MODELO_FLUXOPROD2_RELATORIO (
    MODELO_ID integer not null,
    COR_ID integer = 0,
    TIPO_TEMPO integer = 0)
returns (
    FLUXO_ID integer,
    DESCRICAO varchar(100),
    DESC_FLUXO varchar(200),
    TIPO char(1),
    DESC_TIPO varchar(100),
    ORDEM integer,
    PECA integer,
    CARGA char(1),
    IMPRIMIR char(1),
    T00 numeric(18,8),
    T01 numeric(18,8),
    T02 numeric(18,8),
    T03 numeric(18,8),
    T04 numeric(18,8),
    T05 numeric(18,8),
    T06 numeric(18,8),
    T07 numeric(18,8),
    T08 numeric(18,8),
    T09 numeric(18,8),
    T10 numeric(18,8),
    T11 numeric(18,8),
    T12 numeric(18,8),
    T13 numeric(18,8),
    T14 numeric(18,8),
    T15 numeric(18,8),
    T16 numeric(18,8),
    T17 numeric(18,8),
    T18 numeric(18,8),
    T19 numeric(18,8),
    T20 numeric(18,8),
    STATUS char(1),
    GRUPO_FLUXO_ID integer,
    ID integer)
as
BEGIN

    FOR
        SELECT
            X.FLUXO_ID,
            X.DESCRICAO,
            FN_LPAD(X.FLUXO_ID, 6, '0')||' - '||X.DESCRICAO AS DESC_FLUXO,
            X.TIPO,
            X.DESC_TIPO,
            IIF(X.ORDEM2 > 0, X.ORDEM2, X.ORDEM1) AS ORDEM,
            X.PECA,
            COALESCE(X.CARGA, '0') AS CARGA,
            COALESCE(X.IMPRIMIR, '0') AS IMPRIMIR,
        
            X.T00,
            X.T01, X.T02, X.T03, X.T04, X.T05,
            X.T06, X.T07, X.T08, X.T09, X.T10,
            X.T11, X.T12, X.T13, X.T14, X.T15,
            X.T16, X.T17, X.T18, X.T19, X.T20,
        
            X.STATUS,
            X.GRUPO_FLUXO_ID,
            X.GRUPO_FLUXO_ID AS ID
        
        FROM (
            SELECT
                A.GRUPO_FLUXO_ID,
                A.FLUXO_ID,
                T.DESCRICAO,
                T.STATUS,
        
                IIF(T.TIPO = '0', 'S', 'O') AS TIPO,
                IIF(T.TIPO = '0', 'SETUP', 'OPERACIONAL') AS DESC_TIPO,
                IIF(T.STATUS = '1', 'ATIVO', 'INATIVO') AS DESC_STATUS,
        
                A.ORDEM1,
        
                A.PECA,
                A.CARGA,
                A.IMPRIMIR,
        
                COALESCE((SELECT FIRST 1 Y.ORDEM FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 0   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS ORDEM2,
        
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 0   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T00,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 1   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T01,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 2   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T02,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 3   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T03,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 4   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T04,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 5   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T05,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 6   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T06,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 7   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T07,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 8   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T08,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 9   AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T09,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 10  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T10,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 11  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T11,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 12  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T12,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 13  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T13,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 14  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T14,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 15  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T15,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 16  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T16,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 17  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T17,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 18  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T18,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 19  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T19,
                COALESCE((SELECT FIRST 1 IIF(((:TIPO_TEMPO = 0) OR (:TIPO_TEMPO = 2)), IIF(:TIPO_TEMPO = 0, Y.TEMPO, Y.TEMPO), Y.TM) FROM TBMODELO_FLUXO_PRODUCAO Y WHERE Y.MODELO_ID = :MODELO_ID   AND Y.COR_ID = :COR_ID  AND Y.TAMANHO = 20  AND Y.FLUXO_ID = A.FLUXO_ID AND Y.GRUPO_FLUXO_ID = A.GRUPO_FLUXO_ID), 0) AS T20
        
            FROM TBFLUXO_PRODUCAO T, (
                SELECT
                    A.GRUPO_FLUXO_ID, 
                    A.FLUXO_ID, 
                    MIN(A.ORDEM) AS ORDEM1, 
                    A.PECA, 
                    A.CARGA, 
                    A.IMPRIMIR
        
                FROM TBMODELO_FLUXO_PRODUCAO A
                WHERE A.MODELO_ID = :MODELO_ID 
                AND A.COR_ID = :COR_ID
        
                GROUP BY
                    A.GRUPO_FLUXO_ID,
                    A.FLUXO_ID,
                    A.PECA,
                    A.CARGA,
                    A.IMPRIMIR
        
            ) A
            WHERE A.FLUXO_ID = T.ID
            AND T.STATUS = '1'
        
        ) X
        
        ORDER BY 
            5,
            1,
            2

    INTO
        :FLUXO_ID,
        :DESCRICAO,
        :DESC_FLUXO,
        :TIPO,
        :DESC_TIPO,
        :ORDEM,
        :PECA,
        :CARGA,
        :IMPRIMIR,
        :T00,
        :T01,
        :T02,
        :T03,
        :T04,
        :T05,
        :T06,
        :T07,
        :T08,
        :T09,
        :T10,
        :T11,
        :T12,
        :T13,
        :T14,
        :T15,
        :T16,
        :T17,
        :T18,
        :T19,
        :T20,
        :STATUS,
        :GRUPO_FLUXO_ID,
        :ID

    DO BEGIN

        SUSPEND;
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_FORMAT_TEMPO (
    SEGUNDOS NUMERIC(15,8) = 0,
    TIPO varchar(50) = 'HH:MM:SS')
returns varchar(100)
AS
DECLARE VARIABLE HORA_FORMAT VARCHAR(100);
BEGIN

    HORA_FORMAT = '';

    IF (UPPER(TIPO) = 'HH:MM:SS') THEN
    BEGIN

        HORA_FORMAT = COALESCE((SELECT
                                    FN_LPAD(TRUNC(CAST(:SEGUNDOS AS NUMERIC(15,8)) / 60 / 60), 2, 0)||':'||
                                    FN_LPAD(TRUNC(MOD(CAST(:SEGUNDOS AS NUMERIC(15,8)), 3600) / 60), 2, 0)||':'||
                                    FN_LPAD(MOD(MOD(CAST(:SEGUNDOS AS NUMERIC(15,8)), 3600), 60), 2, 0)
                                FROM RDB$DATABASE), '00:00:00');

    END ELSE
    IF (UPPER(TIPO) = 'HH:MM') THEN
    BEGIN

        HORA_FORMAT = COALESCE((SELECT
                                    FN_LPAD(TRUNC(CAST(:SEGUNDOS AS NUMERIC(15,8)) / 60 / 60), 2, 0)||':'||
                                    FN_LPAD(TRUNC(MOD(CAST(:SEGUNDOS AS NUMERIC(15,8)), 3600) / 60), 2, 0)
                                FROM RDB$DATABASE), '00:00');

    END ELSE
    IF (UPPER(TIPO) = 'MM:SS') THEN
    BEGIN

        HORA_FORMAT = COALESCE((SELECT
                                    FN_LPAD(TRUNC(CAST(:SEGUNDOS AS NUMERIC(15,8)) / 60), 2, 0)||':'||
                                    FN_LPAD(MOD(MOD(CAST(:SEGUNDOS AS NUMERIC(15,8)), 3600), 60), 2, 0)
                                FROM RDB$DATABASE), '00:00');

    END ELSE
    IF (UPPER(TIPO) = 'HH') THEN
    BEGIN

        HORA_FORMAT = COALESCE((SELECT
                                    FN_LPAD(TRUNC(CAST(:SEGUNDOS AS NUMERIC(15,8)) / 60 / 60), 2, 0)
                                FROM RDB$DATABASE), '00');

    END ELSE
    IF (UPPER(TIPO) = 'MM') THEN
    BEGIN

        HORA_FORMAT = COALESCE((SELECT
                                    FN_LPAD(TRUNC(CAST(:SEGUNDOS AS NUMERIC(15,8)) / 60), 2, 0)
                                FROM RDB$DATABASE), '00');

    END

    RETURN HORA_FORMAT;
END
^

SET TERM ; ^

