ALTER TABLE TBCATALOGO_PRODUTO_VENDEDORES
    ADD REPRESENTANTE_ID INTEGER;

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_vend_b02i for tbcatalogo_produto_vendedores
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'VENDEDOR: '||NEW.NOME||' 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_vend_b01u for tbcatalogo_produto_vendedores
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_REPRESENTANTE VARCHAR(500);
DECLARE VARIABLE NEW_REPRESENTANTE VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_REPRESENTANTE = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A, TBREPRESENTANTE B WHERE A.CODIGO = B.CODIGO AND A.HABILITA_REPRESENTANTE = '1' AND A.CODIGO = OLD.REPRESENTANTE_ID), '');
    NEW_REPRESENTANTE = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A, TBREPRESENTANTE B WHERE A.CODIGO = B.CODIGO AND A.HABILITA_REPRESENTANTE = '1' AND A.CODIGO = NEW.REPRESENTANTE_ID), '');

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

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

    IF (OLD.REPRESENTANTE_ID <> NEW.REPRESENTANTE_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' REPRESENTANTE:'||OLD_REPRESENTANTE||'->'||NEW_REPRESENTANTE;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'VENDEDOR: '||NEW.NOME||' 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_vend_b01d for tbcatalogo_produto_vendedores
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

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

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

SET TERM ; ^

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

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GTBCATALOGO_PRODUTO_FORMPAG;

CREATE TABLE TBCATALOGO_PRODUTO_FORMPAG (
    ID                   INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID  INTEGER,
    PAGAMENTO_FORMA_ID   INTEGER
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBCATALOGO_PRODUTO_FORMPAG ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_FORMPAG PRIMARY KEY (ID);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX ITBCATALOGO_PRODUTO_FORMPAG_01 ON TBCATALOGO_PRODUTO_FORMPAG (CATALOGO_PRODUTO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_FORMPAG_02 ON TBCATALOGO_PRODUTO_FORMPAG (PAGAMENTO_FORMA_ID);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBCATALOGO_PRODUTO_FORMPA_B01D */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_FORMPA_B01D FOR TBCATALOGO_PRODUTO_FORMPAG
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_PAGAMENTO_FORMA VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.DESCRICAO FROM TBPAGAMENTO_FORMA A WHERE A.CODIGO = OLD.PAGAMENTO_FORMA_ID), '');

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'FORMA DE PAGAMENTO: '||OLD_PAGAMENTO_FORMA||' EXCLUIDA';
    END

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


/* Trigger: TTBCATALOGO_PRODUTO_FORMPA_B01I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_FORMPA_B01I FOR TBCATALOGO_PRODUTO_FORMPAG
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (COALESCE(NEW.ID, 0) = 0) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO_FORMPAG, 1);
END
^


/* Trigger: TTBCATALOGO_PRODUTO_FORMPA_B01U */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_FORMPA_B01U FOR TBCATALOGO_PRODUTO_FORMPAG
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_PAGAMENTO_FORMA VARCHAR(500);
DECLARE VARIABLE NEW_PAGAMENTO_FORMA VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.DESCRICAO FROM TBPAGAMENTO_FORMA A WHERE A.CODIGO = OLD.PAGAMENTO_FORMA_ID), '');
    NEW_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.DESCRICAO FROM TBPAGAMENTO_FORMA A WHERE A.CODIGO = NEW.PAGAMENTO_FORMA_ID), '');

    IF (OLD.PAGAMENTO_FORMA_ID <> NEW.PAGAMENTO_FORMA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' NOME:'||OLD_PAGAMENTO_FORMA||'->'||NEW_PAGAMENTO_FORMA;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'FORMA DE PAGAMENTO: '||NEW_PAGAMENTO_FORMA||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.CATALOGO_PRODUTO_ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^


/* Trigger: TTBCATALOGO_PRODUTO_FORMPA_B02I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_FORMPA_B02I FOR TBCATALOGO_PRODUTO_FORMPAG
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE NEW_PAGAMENTO_FORMA VARCHAR(500);
BEGIN

    HISTORICO = '';

    NEW_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.DESCRICAO FROM TBPAGAMENTO_FORMA A WHERE A.CODIGO = NEW.PAGAMENTO_FORMA_ID), '');

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'FORMA DE PAGAMENTO: '||NEW_PAGAMENTO_FORMA||' INCLUIDA';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', NEW.CATALOGO_PRODUTO_ID, FN_ELIPSE(HISTORICO, 500));
    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 */
    DELETE FROM TBCATALOGO_PRODUTO_VENDEDORES B WHERE B.CATALOGO_PRODUTO_ID = OLD.ID;   /* Remove registros filhos da TBCATALOGO_PRODUTO_VENDEDORES */
    DELETE FROM TBCATALOGO_PRODUTO_FORMPAG C WHERE C.CATALOGO_PRODUTO_ID = OLD.ID;      /* Remove registros filhos da TBCATALOGO_PRODUTO_FORMPAG */
END
^

SET TERM ; ^

