CREATE TABLE TBCATALOGO_PRODUTO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(100),
	ESTABELECIMENTO_ID INTEGER,
    DATA_INICIAL DATE DEFAULT 'NOW',
    DATA_FIM DATE,
    TABELA_PRECO_ID INTEGER,
    CONTATO_VENDEDOR VARCHAR(50),
    LINK VARCHAR(500));

ALTER TABLE TBCATALOGO_PRODUTO
ADD CONSTRAINT PK_TBCATALOGO_PRODUTO
PRIMARY KEY (ID);

COMMENT ON COLUMN TBCATALOGO_PRODUTO.CONTATO_VENDEDOR IS
'Número de telefone para qual será enviada os pedidos do catálogo';

COMMENT ON COLUMN TBCATALOGO_PRODUTO.LINK IS
'Link de acesso ao catálogo de produtos';

CREATE TABLE TBCATALOGO_PRODUTO_ITENS (
    ID INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID INTEGER,
    MODELO_ID INTEGER);

ALTER TABLE TBCATALOGO_PRODUTO_ITENS
ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_ITENS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBCATALOGO_PRODUTO_ITENS;

CREATE SEQUENCE GTBCATALOGO_PRODUTO;

/*****************************************************************/
/*****************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b01i for tbcatalogo_produto
active before insert position 0
AS
BEGIN
    IF (COALESCE(NEW.ID, 0) = 0) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO, 1);
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_itens_b01i for tbcatalogo_produto_itens
active before insert position 0
AS
BEGIN
    IF (COALESCE(NEW.ID, 0) = 0) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO_ITENS, 1);
END
^

SET TERM ; ^

/*****************************************************************/
/*****************************************************************/
/*****************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b02i for tbcatalogo_produto
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('TBCATALOGO_PRODUTO', NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b01u for tbcatalogo_produto
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE NEW_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE OLD_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE NEW_ESTABELECIMENTO VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_TABELA_PRECO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 4, '0')||' - '||A.DESCRICAO FROM TBTABELA_PRECO A WHERE A.ID = OLD.TABELA_PRECO_ID), '');
    NEW_TABELA_PRECO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 4, '0')||' - '||A.DESCRICAO FROM TBTABELA_PRECO A WHERE A.ID = NEW.TABELA_PRECO_ID), '');
	OLD_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.RAZAOSOCIAL FROM TBESTABELECIMENTO B WHERE B.CODIGO = OLD.ESTABELECIMENTO_ID), '');
	NEW_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.RAZAOSOCIAL FROM TBESTABELECIMENTO B WHERE B.CODIGO = NEW.ESTABELECIMENTO_ID), '');

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
    END
	
	IF (OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID) THEN
	BEGIN
		HISTORICO = HISTORICO||' ESTAB:'||OLD_ESTABELECIMENTO||'->'||NEW_ESTABELECIMENTO;
	END

    IF (OLD.DATA_INICIAL <> NEW.DATA_INICIAL) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.INICIAL:'||FORMATDATE(OLD.DATA_INICIAL)||'->'||FORMATDATE(NEW.DATA_INICIAL);
    END

    IF (OLD.DATA_FIM <> NEW.DATA_FIM) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.FINAL:'||FORMATDATE(OLD.DATA_FIM)||'->'||FORMATDATE(NEW.DATA_FIM);
    END

    IF (OLD.TABELA_PRECO_ID <> NEW.TABELA_PRECO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' TABELA PRECO:'||OLD_TABELA_PRECO||'->'||NEW_TABELA_PRECO;
    END

    IF (OLD.CONTATO_VENDEDOR <> NEW.CONTATO_VENDEDOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' CONTATO:'||FN_MASK_V2(OLD.CONTATO_VENDEDOR, 'FONE')||'->'||FN_MASK_V2(NEW.CONTATO_VENDEDOR, 'FONE');
    END

    IF (OLD.LINK <> NEW.LINK) THEN
    BEGIN
        HISTORICO = HISTORICO||' CAMPO LINK ALTERADO!';
    END

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

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b02u for tbcatalogo_produto
active before update position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

    IF (OLD.LINK <> NEW.LINK) THEN
    BEGIN
        HISTORICO = HISTORICO||FN_ELIPSE(OLD.LINK, 210)||'->'||FN_ELIPSE(NEW.LINK, 210);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'CAMPO LINK ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b01d for tbcatalogo_produto
active before delete position 0
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('TBCATALOGO_PRODUTO', OLD.ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b02d for tbcatalogo_produto
active before delete position 1
AS
BEGIN
    DELETE FROM TBCATALOGO_PRODUTO_ITENS A WHERE A.CATALOGO_PRODUTO_ID = OLD.ID;        /* Remove registros filhos da TBCATALOGO_PRODUTO_ITENS */
END
^

SET TERM ; ^

/*****************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_itens_b02i for tbcatalogo_produto_itens
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);

DECLARE VARIABLE NEW_MODELO VARCHAR(500);
BEGIN

    HISTORICO = '';

    NEW_MODELO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO FROM TBMODELO A WHERE A.CODIGO = NEW.MODELO_ID), '');

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

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', NEW.CATALOGO_PRODUTO_ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_itens_b01u for tbcatalogo_produto_itens
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_MODELO VARCHAR(500);
DECLARE VARIABLE NEW_MODELO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_MODELO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO FROM TBMODELO A WHERE A.CODIGO = OLD.MODELO_ID), '');
    NEW_MODELO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO FROM TBMODELO A WHERE A.CODIGO = NEW.MODELO_ID), '');

    IF (OLD.MODELO_ID <> NEW.MODELO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' MODELO:'||OLD_MODELO||'->'||NEW_MODELO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'MODELO '||NEW_MODELO||' ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.CATALOGO_PRODUTO_ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_itens_b01d for tbcatalogo_produto_itens
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);

DECLARE VARIABLE OLD_MODELO VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_MODELO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO FROM TBMODELO A WHERE A.CODIGO = OLD.MODELO_ID), '');

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

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.CATALOGO_PRODUTO_ID, HISTORICO);
    END
END
^

SET TERM ; ^

/*****************************************************************/
/*****************************************************************/
/*****************************************************************/

CREATE INDEX ITBCATALOGO_PRODUTO_03
ON TBCATALOGO_PRODUTO (LINK);

CREATE INDEX ITBCATALOGO_PRODUTO_02
ON TBCATALOGO_PRODUTO (TABELA_PRECO_ID);

CREATE INDEX ITBCATALOGO_PRODUTO_01
ON TBCATALOGO_PRODUTO (ESTABELECIMENTO_ID);

/*****************************************************************/

CREATE INDEX ITBCATALOGO_PRODUTO_ITENS_02
ON TBCATALOGO_PRODUTO_ITENS (MODELO_ID);

CREATE INDEX ITBCATALOGO_PRODUTO_ITENS_01
ON TBCATALOGO_PRODUTO_ITENS (CATALOGO_PRODUTO_ID);

