CREATE TABLE TBREGRA_EDI_CFOP (
    ID INTEGER NOT NULL,
    PRODUTO_EDI_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    CFOP_ORIGEM VARCHAR(5),
    CFOP_DESTINO VARCHAR(5),
    OPERACAO_CODIGO VARCHAR(3),
    DATAHORA TIMESTAMP DEFAULT 'NOW');
	

ALTER TABLE TBREGRA_EDI_CFOP
ADD CONSTRAINT PK_TBREGRA_EDI_CFOP
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREGRA_EDI_CFOP;

CREATE TRIGGER TTBREGRA_EDI_CFOP_B01I FOR TBREGRA_EDI_CFOP
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBREGRA_EDI_CFOP,1);
END;


CREATE OR ALTER trigger ttbregra_edi_cfop_b02i for tbregra_edi_cfop
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE PRODUTO_ID INTEGER;
BEGIN

    HISTORICO = '';

    SELECT T.PRODUTO_CODIGO FROM TBPRODUTO_EDI T WHERE T.ID = NEW.PRODUTO_EDI_ID INTO :PRODUTO_ID;

    IF ( NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REGRA:'||NEW.ID||' INCLUIDA NO VINC.EDI:'||NEW.PRODUTO_EDI_ID;
    END

    IF (HISTORICO <> '' AND :PRODUTO_ID > 0) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPRODUTO',:PRODUTO_ID, HISTORICO);
    END
END;


CREATE OR ALTER trigger ttbregra_edi_cfop_b01d for tbregra_edi_cfop
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE PRODUTO_ID INTEGER;
BEGIN

    HISTORICO = '';

    SELECT T.PRODUTO_CODIGO FROM TBPRODUTO_EDI T WHERE T.ID = OLD.PRODUTO_EDI_ID INTO :PRODUTO_ID;

    IF ( OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REGRA:'||OLD.ID||' EXCLUÍDA NO VINC.EDI:'||OLD.PRODUTO_EDI_ID;
    END

    IF (HISTORICO <> '' AND :PRODUTO_ID > 0) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPRODUTO',:PRODUTO_ID, HISTORICO);
    END
END;


CREATE OR ALTER trigger ttbregra_edi_cfop_b01u for tbregra_edi_cfop
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE PRODUTO_ID INTEGER;
BEGIN

    HISTORICO = '';

    SELECT T.PRODUTO_CODIGO FROM TBPRODUTO_EDI T WHERE T.ID = NEW.PRODUTO_EDI_ID INTO :PRODUTO_ID;

    IF ( NEW.ESTABELECIMENTO_ID IS DISTINCT FROM OLD.ESTABELECIMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||'ESTAB:'||COALESCE(OLD.ESTABELECIMENTO_ID, 0)||'->'||COALESCE(NEW.ESTABELECIMENTO_ID, 0);
    END

    IF ( NEW.CFOP_ORIGEM IS DISTINCT FROM OLD.CFOP_ORIGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||'CFOP ORIGEM:'||COALESCE(OLD.CFOP_ORIGEM, 0)||'->'||COALESCE(NEW.CFOP_ORIGEM, 0);
    END

    IF ( NEW.CFOP_DESTINO IS DISTINCT FROM OLD.CFOP_DESTINO) THEN
    BEGIN
        HISTORICO = HISTORICO||'CFOP DEST:'||COALESCE(OLD.CFOP_DESTINO, 0)||'->'||COALESCE(NEW.CFOP_DESTINO, 0);
    END

    IF ( NEW.OPERACAO_CODIGO IS DISTINCT FROM OLD.OPERACAO_CODIGO) THEN
    BEGIN
        HISTORICO = HISTORICO||'ESTAB:'||COALESCE(OLD.OPERACAO_CODIGO, 0)||'->'||COALESCE(NEW.OPERACAO_CODIGO, 0);
    END

    IF (HISTORICO <> '' AND :PRODUTO_ID > 0) THEN
    BEGIN
        HISTORICO = 'REGRA '||NEW.ID||' ALTERADA NO VINC.EDI: '||NEW.PRODUTO_EDI_ID||', '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPRODUTO',:PRODUTO_ID, HISTORICO);
    END
END;



