CREATE or ALTER TRIGGER TBTABELA_PRECO_B02I FOR TBTABELA_PRECO
ACTIVE BEFORE INSERT POSITION 2
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

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

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


CREATE OR ALTER TRIGGER TBTABELA_PRECO_B01U FOR TBTABELA_PRECO
ACTIVE BEFORE UPDATE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
  
  HISTORICO = '';

    IF(NEW.DESCRICAO <> OLD.DESCRICAO) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' DESC.'||OLD.DESCRICAO||' -> '||NEW.DESCRICAO;
        END

    IF(NEW.STATUS <> OLD.STATUS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' STATUS: '||OLD.STATUS||' -> '||NEW.STATUS;
        END

    IF(NEW.ESTABELECIMENTO_ID <> OLD.ESTABELECIMENTO_ID) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' ESTAB.'||OLD.ESTABELECIMENTO_ID||' -> '||NEW.ESTABELECIMENTO_ID;
        END

    IF(NEW.DATA_INICIAL <> OLD.DATA_INICIAL) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Dt. Ini.'||FN_DATE(OLD.DATA_INICIAL, 'DD/MM/YYYY')||' -> '||FN_DATE(NEW.DATA_INICIAL, 'DD/MM/YYYY');
        END

    IF(NEW.DATA_FINAL <> OLD.DATA_FINAL) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Dt. Fin.'||FN_DATE(OLD.DATA_FINAL, 'DD/MM/YYYY')||' -> '||FN_DATE(NEW.DATA_FINAL, 'DD/MM/YYYY');
        END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = FN_ELIPSES(HISTORICO,500);
        EXECUTE PROCEDURE SPI_HISTORICO('TBTABELA_PRECO', NEW.ID, HISTORICO);
    END
END;

CREATE or ALTER TRIGGER TBTABELA_PRECO_B02U FOR TBTABELA_PRECO
ACTIVE BEFORE UPDATE POSITION 2
AS
DECLARE VARIABLE COUNT_REGISTERS_MODELO INTEGER;
DECLARE VARIABLE COUNT_REGISTERS_PRODUTO INTEGER;
BEGIN

  IF(NEW.ESTABELECIMENTO_ID <> OLD.ESTABELECIMENTO_ID) THEN
  BEGIN
    
    SELECT COUNT(T.ID) FROM TBMODELO_PRECO T WHERE T.TABELA_ID = NEW.ID INTO :COUNT_REGISTERS_MODELO;

    IF(:COUNT_REGISTERS_MODELO > 0) THEN
    BEGIN
        EXCEPTION "..." 'TABELA DE PRECO JA VINCULADA EM MODELOS. ATUALIZACAO DE ESTABELECIMENTO CANCELADA!';

    END ELSE
    BEGIN

        SELECT COUNT(T.ID) FROM TBPRODUTO_PRECO T WHERE T.TABELA_ID = NEW.ID INTO :COUNT_REGISTERS_PRODUTO;
    
        IF(:COUNT_REGISTERS_PRODUTO > 0) THEN
        BEGIN
            EXCEPTION "..." 'TABELA DE PRECO JA VINCULADA EM PRODUTOS. ATUALIZACAO DE ESTABELECIMENTO CANCELADA!';
    
        END

    END

  END
END;


CREATE or ALTER TRIGGER TBTABELA_PRECO_B01D FOR TBTABELA_PRECO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO EXCLUIDO.';
    END

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

CREATE or ALTER TRIGGER TBTABELA_PRECO_B02D FOR TBTABELA_PRECO
ACTIVE BEFORE DELETE POSITION 2
AS
DECLARE VARIABLE COUNT_REGISTERS_MODELO INTEGER;
DECLARE VARIABLE COUNT_REGISTERS_PRODUTO INTEGER;

BEGIN
    SELECT COUNT(T.ID) FROM TBMODELO_PRECO T WHERE T.TABELA_ID = OLD.ID INTO :COUNT_REGISTERS_MODELO;

    IF(:COUNT_REGISTERS_MODELO > 0) THEN
    BEGIN
        EXCEPTION "..." 'TABELA DE PRECO JA VINCULADA EM MODELOS. EXCLUSAO CANCELADA!';

    END ELSE
    BEGIN

        SELECT COUNT(T.ID) FROM TBPRODUTO_PRECO T WHERE T.TABELA_ID = OLD.ID INTO :COUNT_REGISTERS_PRODUTO;
    
        IF(:COUNT_REGISTERS_PRODUTO > 0) THEN
        BEGIN
            EXCEPTION "..." 'TABELA DE PRECO JA VINCULADA EM PRODUTOS. EXCLUSAO CANCELADA!';
    
        END

    END
END;


-- TBTABELA_PRECO_FAMILIA

CREATE TABLE TBTABELA_PRECO_FAMILIA (
    ID INTEGER NOT NULL,
    TABELA_PRECO_ID INTEGER NOT NULL,
    FAMILIA_ID INTEGER NOT NULL);
	
	
	ALTER TABLE TBTABELA_PRECO_FAMILIA
ADD CONSTRAINT PK_TBTABELA_PRECO_FAMILIA
PRIMARY KEY (ID);


CREATE SEQUENCE GTBTABELA_PRECO_FAMILIA;


CREATE OR ALTER TRIGGER TBTABELA_PRECO_FAMILIA_BI FOR TBTABELA_PRECO_FAMILIA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBTABELA_PRECO_FAMILIA,1);
END;



CREATE OR ALTER TRIGGER TBTABELA_PRECO_FAMILIA_B02I FOR TBTABELA_PRECO_FAMILIA
ACTIVE BEFORE INSERT POSITION 2
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'FAMILIA '||NEW.FAMILIA_ID||' INCLUIDA.';
    END

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

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

    HISTORICO = '';

    IF ( OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'FAMILIA '||OLD.FAMILIA_ID||' EXCLUIDA.';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBTABELA_PRECO',OLD.TABELA_PRECO_ID, HISTORICO);
    END
END;