-- TBIMP_ETIQUETA_ITENS

CREATE TABLE TBIMP_ETIQUETA_ITENS (
    ID INTEGER NOT NULL,
    IMP_ETIQUETA_ID INTEGER,
    SEQUENCIA INTEGER,
    DATAHORA_IMPRESSAO TIMESTAMP,
    ALTERACAO INTEGER,
    QUANTIDADE_IMPRESSAO INTEGER,
    QUANTIDADE INTEGER,
    QUANTIDADE_ORIGINAL INTEGER,
    CAMPOS BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET UTF8);

ALTER TABLE TBIMP_ETIQUETA_ITENS
ADD CONSTRAINT PK_TBIMP_ETIQUETA_ITENS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBIMP_ETIQUETA_ITENS;

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_ITENS_B01I FOR TBIMP_ETIQUETA_ITENS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(GTBIMP_ETIQUETA_ITENS, 1);
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_ITENS_B01U FOR TBIMP_ETIQUETA_ITENS
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
    IF ((OLD.DATAHORA_IMPRESSAO <> NEW.DATAHORA_IMPRESSAO) OR (OLD.DATAHORA_IMPRESSAO IS NULL AND NEW.DATAHORA_IMPRESSAO IS NOT NULL)) THEN
    BEGIN
        NEW.QUANTIDADE_IMPRESSAO = NEW.QUANTIDADE_IMPRESSAO + 1;
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_ITENS_B02U FOR TBIMP_ETIQUETA_ITENS
ACTIVE BEFORE UPDATE POSITION 1
AS
BEGIN
    IF (OLD.CAMPOS <> NEW.CAMPOS) THEN
    BEGIN
        NEW.ALTERACAO = COALESCE(OLD.ALTERACAO, 0) + 1;
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_ITENS_B01D FOR TBIMP_ETIQUETA_ITENS
INACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
    IF (OLD.DATAHORA_IMPRESSAO IS NOT NULL) THEN
    BEGIN
        exception "..." 'ATENCAO, REGISTROS IMPRESSOS NAO PODEM SER EXCLUIDOS! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .';
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_ITENS_B02I FOR TBIMP_ETIQUETA_ITENS
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'DADO '||FN_LPAD(NEW.ID, 6, '0')||' INCLUIDO';
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBIMP_ETIQUETA', NEW.IMP_ETIQUETA_ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_ITENS_B03U FOR TBIMP_ETIQUETA_ITENS
ACTIVE BEFORE UPDATE POSITION 2
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

    IF (OLD.SEQUENCIA <> NEW.SEQUENCIA) THEN
    BEGIN
        HISTORICO = HISTORICO||' SEQUENCIA:'||OLD.SEQUENCIA||'->'||NEW.SEQUENCIA;
    END
    
    IF (OLD.DATAHORA_IMPRESSAO <> NEW.DATAHORA_IMPRESSAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA IMP:'||OLD.DATAHORA_IMPRESSAO||'->'||NEW.DATAHORA_IMPRESSAO;
    END
    
    IF (OLD.QUANTIDADE_IMPRESSAO <> NEW.QUANTIDADE_IMPRESSAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' QTD IMP:'||OLD.QUANTIDADE_IMPRESSAO||'->'||NEW.QUANTIDADE_IMPRESSAO;
    END
        
    IF (OLD.QUANTIDADE <> NEW.QUANTIDADE) THEN
    BEGIN
        HISTORICO = HISTORICO||' QTD:'||OLD.QUANTIDADE||'->'||NEW.QUANTIDADE;
    END
        
    IF (OLD.QUANTIDADE_ORIGINAL <> NEW.QUANTIDADE_ORIGINAL) THEN
    BEGIN
        HISTORICO = HISTORICO||' QTD ORIGINAL:'||OLD.QUANTIDADE_ORIGINAL||'->'||NEW.QUANTIDADE_ORIGINAL;
    END

    IF (OLD.ALTERACAO <> NEW.ALTERACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' INFORMACOES DOS CAMPOS ALTERADAS';
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        IF (OLD.QUANTIDADE_IMPRESSAO <> NEW.QUANTIDADE_IMPRESSAO) THEN
        BEGIN
            HISTORICO = 'DADO '||FN_LPAD(OLD.ID, 6, '0')||' IMPRESSO';
        END
        ELSE
        BEGIN
            HISTORICO = 'DADO '||FN_LPAD(OLD.ID, 6, '0')||' ALTERADO:'||HISTORICO;
        END
        EXECUTE PROCEDURE SPI_HISTORICO('TBIMP_ETIQUETA', OLD.IMP_ETIQUETA_ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_ITENS_B02D FOR TBIMP_ETIQUETA_ITENS
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'DADO '||FN_LPAD(OLD.ID, 6, '0')||' EXCLUIDO';
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBIMP_ETIQUETA', OLD.IMP_ETIQUETA_ID, HISTORICO);
    END
END
^

SET TERM ; ^

-- TBIMP_ETIQUETA

ALTER TABLE TBIMP_ETIQUETA
    ADD LINGUAGEM VARCHAR(10);

COMMENT ON COLUMN TBIMP_ETIQUETA.LINGUAGEM IS
'Linguagem da Etiqueta (ZPL, EPL)';

DROP TRIGGER TTBIMP_ETIQUETA_B0I;

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_B01I FOR TBIMP_ETIQUETA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBIMP_ETIQUETA, 1);
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_B02I FOR TBIMP_ETIQUETA
ACTIVE BEFORE INSERT POSITION 1
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('TBIMP_ETIQUETA', NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_B01U FOR TBIMP_ETIQUETA
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

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

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

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

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

    IF (OLD.DATAHORA_IMPRESSAO <> NEW.DATAHORA_IMPRESSAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA IMP:'||OLD.DATAHORA_IMPRESSAO||'->'||NEW.DATAHORA_IMPRESSAO;
    END

    IF (OLD.CONTEUDO_ETIQUETA <> NEW.CONTEUDO_ETIQUETA) THEN
    BEGIN
        HISTORICO = HISTORICO||' SCRIPT ALTERADO';
    END

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

     IF ((OLD.CONTEUDO_ARQUIVO <> NEW.CONTEUDO_ARQUIVO) OR (OLD.CONTEUDO_ARQUIVO IS NULL AND NEW.CONTEUDO_ARQUIVO IS NOT NULL)) THEN
    BEGIN
        HISTORICO = HISTORICO||' ARQUIVO IMPORTADO';
    END
        
    IF ((OLD.ARQUIVO <> NEW.ARQUIVO) OR (OLD.ARQUIVO IS NULL AND NEW.ARQUIVO IS NOT NULL)) THEN
    BEGIN
        HISTORICO = HISTORICO||' ARQUIVO:'||OLD.ARQUIVO||'->'||NEW.ARQUIVO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBIMP_ETIQUETA', OLD.ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_B01D FOR TBIMP_ETIQUETA
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE ITENS INTEGER;
BEGIN

    ITENS = COALESCE((SELECT FIRST 1 A.ID FROM TBIMP_ETIQUETA_ITENS A WHERE A.IMP_ETIQUETA_ID = OLD.ID), 0);

    IF (ITENS > 0) THEN
    BEGIN
        exception "..." 'REGISTRO NAO PODE SER EXCLUIDO. A ITENS VINCULADOS A ESTE REGISTRO.';
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBIMP_ETIQUETA_B02D FOR TBIMP_ETIQUETA
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('TBIMP_ETIQUETA', OLD.ID, HISTORICO);
    END
END
^

SET TERM ; ^