CREATE OR ALTER PROCEDURE SPU_PRODUTO_CONSUMO3_NEW (
    PRD1 INTEGER,
    PRD2 INTEGER,
    MOD1 INTEGER,
    MOD2 INTEGER,
    USUARIO INTEGER,
    IP VARCHAR(30),
    VERSAO VARCHAR(20))
RETURNS (
    MODELO_ID INTEGER,
    PRODUTO_ID1 INTEGER,
    PRODUTO_ID2 INTEGER)
AS
BEGIN
    FOR
        SELECT
            A.CODIGO,
    
            COALESCE((SELECT FIRST 1
                    B.CONSUMO_PRODUTO_CODIGO
                FROM TBMODELO_CONSUMO B
                WHERE B.MODELO_CODIGO = A.CODIGO
                AND B.CONSUMO_PRODUTO_CODIGO = :PRD1), 0),
    
            COALESCE((SELECT FIRST 1
                    B.CONSUMO_PRODUTO_CODIGO
                FROM TBMODELO_CONSUMO B
                WHERE B.MODELO_CODIGO = A.CODIGO
                AND B.CONSUMO_PRODUTO_CODIGO = :PRD2), 0)
    
        FROM TBMODELO A
        WHERE A.CODIGO BETWEEN :MOD1 AND :MOD2
        AND A.STATUS = 1
    
        GROUP BY 1
        HAVING
            COALESCE((SELECT FIRST 1 B.CONSUMO_PRODUTO_CODIGO FROM TBMODELO_CONSUMO B
                WHERE B.MODELO_CODIGO = A.CODIGO AND B.CONSUMO_PRODUTO_CODIGO = :PRD1), 0) > 0
    
    INTO
        :MODELO_ID,
        :PRODUTO_ID1,
        :PRODUTO_ID2

    DO
        IF (:MODELO_ID > 0) THEN
        BEGIN
            UPDATE TBMODELO_CONSUMO
                SET CONSUMO_PRODUTO_CODIGO = :PRD2
                WHERE MODELO_CODIGO = :MODELO_ID
                AND CONSUMO_PRODUTO_CODIGO = :PRD1;
            
            INSERT INTO TBHISTORICO (TABELA, TABELA_ID,USUARIO_CODIGO, IP, VERSAO, HISTORICO)
                VALUES ('TBMODELO', :MODELO_ID, :USUARIO, :IP, :VERSAO, '(FICHA 2) PROD.CONS.ALTERADO: '||:PRD1||'->'||:PRD2);
        END

        SUSPEND;
END;

CREATE OR ALTER PROCEDURE SPU_PRODUTO_CONSUMO4_NEW (
    PRD1 INTEGER,
    PRD2 INTEGER,
    MOD1 INTEGER,
    MOD2 INTEGER,
    USUARIO INTEGER,
    IP VARCHAR(30),
    VERSAO VARCHAR(20))
RETURNS (
    MODELO_ID INTEGER,
    PRODUTO_ID1 INTEGER,
    PRODUTO_ID2 INTEGER)
AS
BEGIN
    FOR
        SELECT
            A.CODIGO,
            COALESCE((SELECT FIRST 1
                    B.PRODUTO_ID
                FROM TBMODELO_CONSUMO_COR B
                WHERE B.MODELO_ID = A.CODIGO
                AND B.PRODUTO_ID = :PRD1), 0) AS PRODUTO_ID1,
        
            COALESCE((SELECT FIRST 1
                    B.PRODUTO_ID
                FROM TBMODELO_CONSUMO_COR B
                WHERE B.MODELO_ID = A.CODIGO
                AND B.PRODUTO_ID = :PRD2), 0) AS PRODUTO_ID2
        
        FROM TBMODELO A
        WHERE A.CODIGO BETWEEN :MOD1 AND :MOD2
        AND A.STATUS = 1
        
        GROUP BY 1
        HAVING
            COALESCE((SELECT FIRST 1 B.PRODUTO_ID FROM TBMODELO_CONSUMO_COR B WHERE B.MODELO_ID = A.CODIGO AND B.PRODUTO_ID = :PRD1), 0) > 0
    
    INTO
        :MODELO_ID,
        :PRODUTO_ID1,
        :PRODUTO_ID2

    DO
        IF (:MODELO_ID > 0) THEN
        BEGIN
            UPDATE TBMODELO_CONSUMO_COR
                SET PRODUTO_ID = :PRD2
                WHERE MODELO_ID = :MODELO_ID
                AND PRODUTO_ID = :PRD1;
            
            INSERT INTO TBHISTORICO (TABELA, TABELA_ID,USUARIO_CODIGO, IP, VERSAO, HISTORICO)
                VALUES ('TBMODELO', :MODELO_ID, :USUARIO, :IP, :VERSAO, '(FICHA 3) PROD.CONS.ALTERADO: '||:PRD1||'->'||:PRD2);
        END
        
        SUSPEND;
END;