ALTER TABLE TBREQUISICAO_OC
ADD ESTABELECIMENTO_ID INTEGER;




ALTER TABLE TBOC
    ADD OC_NIVEL CHAR(1) DEFAULT '1';

ALTER TABLE TBOC
    ADD LICITACAO_ID INTEGER;

ALTER TABLE TBOC_ITEM
    ADD ORCAMENTO_ID INTEGER;


CREATE TABLE TBOC_AUTORIZACAO (
    OC           INTEGER NOT NULL,
    NIVEL        CHAR(1) DEFAULT '0' NOT NULL,
    AUTORIZACAO  CHAR(1) DEFAULT '0',
    USUARIO_ID   INTEGER,
    DATAHORA     TIMESTAMP
);

ALTER TABLE TBOC_AUTORIZACAO ADD PRIMARY KEY (OC, NIVEL);

CREATE OR ALTER TRIGGER TBOC_AUTORIZACAO_BI0 FOR TBOC_AUTORIZACAO
ACTIVE BEFORE INSERT POSITION 0
AS
begin
    If ( New.Autorizacao = '1' And New.Nivel = '1' ) Then
    Begin  
        New.DataHora = 'NOW';
        UPDATE TBOC SET AUTORIZACAO = '2' WHERE OC = NEW.OC;
    End
    Else
    If ( New.Autorizacao = '2' And New.Nivel = '1' ) Then
    Begin  
        New.DataHora = 'NOW';
        UPDATE TBOC SET AUTORIZACAO = '3' WHERE OC = NEW.OC;
    End
end;

CREATE OR ALTER TRIGGER TTBOC_AUTORIZACAO_B0U_01 FOR TBOC_AUTORIZACAO
ACTIVE BEFORE UPDATE POSITION 0
As
/***********************************
        Realiza os controles
        de autorização de OC
************************************/
Declare variable old_Nivel Integer;
Declare variable new_Nivel Integer;
Begin
    old_Nivel = Cast(Old.Nivel As Integer);
    If ( New.Autorizacao = '1' And old_Nivel > 1 ) Then
    Begin
        New.DataHora = 'NOW';

        new_Nivel =  old_Nivel - 1;

        INSERT INTO TBOC_AUTORIZACAO (OC    , NIVEL     )
                              VALUES (OLD.OC, :new_Nivel);
    End
    Else
    If ( New.Autorizacao = '1' And old_Nivel = 1 ) Then
    Begin  
        New.DataHora = 'NOW';
        UPDATE TBOC SET AUTORIZACAO = '2' WHERE OC = OLD.OC;
    End      Else
    If ( New.Autorizacao = '2' And old_Nivel = 1 ) Then
    Begin  
        New.DataHora = 'NOW';
        UPDATE TBOC SET AUTORIZACAO = '3' WHERE OC = OLD.OC;
    End
End;



RETIRAR O SQL DE INSERT PARA TBOC_AUTORIZACAO COM ESSA CONSULTA
SELECT
    X.OC,
    '1' NIVEL,
    '0' AUTORIZACAO
FROM
    (SELECT
        O.OC,
        (SELECT FIRST 1 A.OC FROM TBOC_AUTORIZACAO A WHERE A.OC = O.OC)AUTORIZACAO
    FROM
        TBOC O
    
    WHERE
        O.AUTORIZACAO = '1'
    AND O.STATUS = '1')X

WHERE
    X.AUTORIZACAO IS NULL



CREATE OR ALTER TRIGGER TTBOC_ITEM_B2I_02 FOR TBOC_ITEM
ACTIVE BEFORE INSERT POSITION 2
As
/*********************************************
         Atualiza a OC no Orçamento
*********************************************/
Begin
    If ( New.Orcamento_Id Is Not Null ) Then
    Begin
        UPDATE TBORCAMENTO_ITEM
        SET    OC = NEW.OC
        WHERE (ORCAMENTO_ID = NEW.ORCAMENTO_ID)
          AND (PRODUTO_ID = NEW.PRODUTO_CODIGO);
    End
End;

CREATE OR ALTER TRIGGER TTBOC_B0I_02 FOR TBOC
ACTIVE BEFORE INSERT POSITION 0
As
/*********************************************
         Caso o Nível da OC for maior
        do que 3 é registrada para ser
      autorizada pelo usuário de nível 2
*********************************************/
Declare Variable vNivel Char(1);
Begin
    If ( Cast(New.Oc_Nivel As Integer) > 2 ) Then
    Begin
        vNivel = '2';
    End
    Else
    Begin
        vNivel = New.Oc_Nivel;
    End

    INSERT INTO TBOC_AUTORIZACAO ( OC    ,  NIVEL )
                          VALUES ( NEW.OC, :vNIVEL);
End;