CREATE OR ALTER trigger ttbconsumo_requisicao_pai_b02i for tbconsumo_requisicao_pai
active before insert position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

  HISTORICO = '';

  IF(NEW.ID > 0) THEN
  BEGIN
    HISTORICO = HISTORICO||'REG. INCLUIDO ';
  END

  IF(HISTORICO <> '') THEN
  BEGIN
    EXECUTE PROCEDURE SPI_HISTORICO('TBCONSUMO_REQUISICAO_PAI', NEW.ID, HISTORICO);
  END
END;

CREATE OR ALTER trigger ttbconsumo_requisicao_b0u_01 for tbconsumo_requisicao
active before update position 1
AS
begin
    IF((NEW.saldo = 0 AND OLD.saldo > 0) or (NEW.status = '0' AND OLD.status = '1') )THEN
    BEGIN
       NEW.datahora_baixa = current_timestamp;
    END

    IF (NEW.DOCUMENTO IS NULL) THEN
    BEGIN
        NEW.DOCUMENTO = OLD.ID;
    END

    /* Se não estiver sendo encerrado */
    IF (NEW.STATUS <> '2') THEN
    BEGIN
        IF ( NEW.SALDO > 0 ) THEN
        BEGIN
            NEW.STATUS = '1';   --pendente
        END
        ELSE
        BEGIN
            NEW.STATUS = '0';   --baixado
        END
    END

end;

CREATE OR ALTER trigger ttbconsumo_requisicao_b0u_02 for tbconsumo_requisicao
active before update position 1
AS
/**************************************************
   ATUALIZA OS CAMPOS DATAHORA UPDATE E DELETE E
   REGISTRA HISTORICO DE EXCLUSAO/RECUPERACAO
**************************************************/
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    /* UPDATE */
    IF ( NEW.STATUSEXCLUSAO = '0' AND OLD.STATUSEXCLUSAO = '0' ) THEN
    BEGIN
        NEW.DATAHORA_UPDATE = CURRENT_TIMESTAMP;
    END
    /* DELETE */
    ELSE IF ( NEW.STATUSEXCLUSAO = '1' AND OLD.STATUSEXCLUSAO = '0' ) THEN
    BEGIN
        NEW.DATAHORA_DELETE = CURRENT_TIMESTAMP;
        HISTORICO = 'REG. EXCLUIDO.';
    END
    /* RECUPERAR */
    ELSE IF ( NEW.STATUSEXCLUSAO = '0' AND OLD.STATUSEXCLUSAO = '1' ) THEN
    BEGIN
        NEW.DATAHORA_UPDATE = CURRENT_TIMESTAMP;
        HISTORICO = 'REG. RECUPERADO.';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        INSERT INTO TBHISTORICO (
            TABELA,
            TABELA_ID,
            USUARIO,
            IP,
            HISTORICO
        ) VALUES (
            'TBCONSUMO_REQUISICAO_PAI',
            NEW.CONSUMO_REQUISICAO_PAI_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 ttbconsumo_requisicao_b0u_03 for tbconsumo_requisicao
active before update position 2
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

   HISTORICO = '';

   IF (OLD.USUARIO_ID <> NEW.USUARIO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' USU.: '||OLD.USUARIO_ID||'->'||NEW.USUARIO_ID;
       END
   IF (OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' ESTAB.:'||OLD.ESTABELECIMENTO_ID||'->'||NEW.ESTABELECIMENTO_ID;
       END
   IF (OLD.DOCUMENTO <> NEW.DOCUMENTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' DOC.:'||OLD.DOCUMENTO||'->'||NEW.DOCUMENTO;
       END
   IF (OLD.CCUSTO <> NEW.CCUSTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CCUSTO:'||OLD.CCUSTO||'->'||NEW.CCUSTO;
       END
   IF (OLD.TURNO_ID <> NEW.TURNO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' TURNO:'||OLD.TURNO_ID||'->'||NEW.TURNO_ID;
       END
   IF (OLD.PRODUTO_ID <> NEW.PRODUTO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' PROD.:'||OLD.PRODUTO_ID||'->'||NEW.PRODUTO_ID;
       END
   IF (OLD.QUANTIDADE <> NEW.QUANTIDADE) THEN
       BEGIN
       HISTORICO = HISTORICO||' QTD.:'||OLD.QUANTIDADE||'->'||NEW.QUANTIDADE;
       END
   IF (OLD.TAMANHO <> NEW.TAMANHO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TAM.:'||OLD.TAMANHO||'->'||NEW.TAMANHO;
       END
   IF (OLD.OBSERVACAO <> NEW.OBSERVACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' OBS.:'||OLD.OBSERVACAO||'->'||NEW.OBSERVACAO;
       END
   IF (OLD.SALDO <> NEW.SALDO) THEN
       BEGIN
       HISTORICO = HISTORICO||' SALDO:'||OLD.SALDO||'->'||NEW.SALDO;
       END

   IF (OLD.STATUS <> NEW.STATUS) THEN
       BEGIN
       IF (NEW.STATUS = '0') THEN
           HISTORICO = HISTORICO||' STATUS BAIXADO';
       IF (NEW.STATUS = '1') THEN
           HISTORICO = HISTORICO||' STATUS PENDENTE';
       IF (NEW.STATUS = '2') THEN
           HISTORICO = HISTORICO||' STATUS ENCERRADO';
       END

   IF (HISTORICO <> '') THEN
       BEGIN
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBCONSUMO_REQUISICAO_PAI', OLD.CONSUMO_REQUISICAO_PAI_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;