CREATE OR ALTER PROCEDURE SPU_COPIA_MODELO_FLUXO (
    ID1 INTEGER,
    ID2 INTEGER,
    DESCRICAO_1 VARCHAR(50),
    USUARIO_ID INTEGER)
RETURNS (
    FLUXO_ID INTEGER,
    COR_ID INTEGER,
    TAMANHO INTEGER,
    ORDEM INTEGER,
    TEMPO NUMERIC(15,4),
    TM NUMERIC(15,4),
    TH NUMERIC(15,4),
    PS NUMERIC(15,4),
    TT NUMERIC(15,4),
    QC NUMERIC(15,4),
    TF NUMERIC(15,4))
AS
DECLARE VARIABLE OLD_FLUXO    INTEGER;
DECLARE VARIABLE GRUPO_ID     INTEGER;
DECLARE VARIABLE NEW_GRUPO_ID INTEGER;
DECLARE VARIABLE PECA         INTEGER;
BEGIN

    IF (:ID1 > 0 AND :ID2 > 0) THEN
    BEGIN
        DELETE FROM TBMODELO_FLUXO WHERE MODELO_ID = :ID2;
        DELETE FROM TBMODELO_FLUXO_PRODUCAO WHERE MODELO_ID = :ID2;

          OLD_FLUXO = 0;
          NEW_GRUPO_ID = 0;

        FOR
            SELECT FLUXO_ID, COR_ID, TAMANHO, ORDEM, TEMPO, TM,TH,PS,TT,QC,TF, GRUPO_FLUXO_ID, PECA
            FROM TBMODELO_FLUXO_PRODUCAO WHERE MODELO_ID = :ID1 ORDER BY GRUPO_FLUXO_ID
        INTO
            :FLUXO_ID,
            :COR_ID,
            :TAMANHO,
            :ORDEM,
            :TEMPO,
            :TM,
            :TH,
            :PS,
            :TT,
            :QC,
            :TF,
            :GRUPO_ID,
            :PECA
        DO BEGIN

        IF (OLD_FLUXO <> GRUPO_ID) THEN
            NEW_GRUPO_ID = GEN_ID(GTBMODELO_FLUXO_PRODUCAO_GRUPO,1);

            INSERT INTO TBMODELO_FLUXO_PRODUCAO (GRUPO_FLUXO_ID, MODELO_ID, FLUXO_ID, COR_ID, TAMANHO, ORDEM, TEMPO, TM,TH,PS,TT,QC,TF, PECA) VALUES(
                :NEW_GRUPO_ID, :ID2, :FLUXO_ID, :COR_ID, :TAMANHO, :ORDEM, :TEMPO, :TM, :TH, :PS, :TT, :QC, :TF, :PECA
            );

        OLD_FLUXO = GRUPO_ID;

        END
 
        INSERT INTO TBMODELO_FLUXO (MODELO_ID, OPERADOR, FLUXO_ID, ORDEM)
        SELECT :ID2, OPERADOR, FLUXO_ID, ORDEM FROM TBMODELO_FLUXO WHERE MODELO_ID = :ID1;
    END

END;

CREATE OR ALTER TRIGGER TTBMODELO_COR_B9U FOR TBMODELO_COR
INACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

   HISTORICO = '';

   IF (OLD.PERCENTUAL_TALAO <> NEW.PERCENTUAL_TALAO) THEN
       BEGIN
       HISTORICO = HISTORICO||'COR: '||OLD.COR_ID||'-'||COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = OLD.COR_ID),'')||' -> %TALÃO '||OLD.PERCENTUAL_TALAO||'->'||NEW.PERCENTUAL_TALAO;
       END

   IF (HISTORICO <> '') THEN
       BEGIN
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBMODELO', OLD.MODELO_ID,
      (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       :HISTORICO);
       END
END;

CREATE OR ALTER TRIGGER TTBMODELO_COR_B0D FOR TBMODELO_COR
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

       DELETE FROM TBPRODUTO WHERE MODELO_CODIGO = OLD.MODELO_ID AND COR_CODIGO = OLD.COR_ID;

       HISTORICO = 'COR: '||OLD.COR_ID||'-'||COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = OLD.COR_ID),'')||' EXCLUÍDA.';

       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBMODELO', OLD.MODELO_ID,
      (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       :HISTORICO);
END;