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


CREATE GENERATOR GTBCATALOGO_PRODUTO_REVEND;

CREATE TABLE TBCATALOGO_PRODUTO_REVENDEDORES (
    ID                   INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID  INTEGER,
    EMPRESA_ID           INTEGER
);




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

ALTER TABLE TBCATALOGO_PRODUTO_REVENDEDORES ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_REVENDEDO PRIMARY KEY (ID);


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

CREATE INDEX ITBCATALOGO_PRODUTO_REVEND_01 ON TBCATALOGO_PRODUTO_REVENDEDORES (CATALOGO_PRODUTO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_REVEND_02 ON TBCATALOGO_PRODUTO_REVENDEDORES (EMPRESA_ID);


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



SET TERM ^ ;



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



/* Trigger: TTBCATALOGO_PRODUTO_REVEND_B01D */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_REVEND_B01D FOR TBCATALOGO_PRODUTO_REVENDEDORES
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE OLD_EMPRESA VARCHAR(500);
BEGIN

    :HISTORICO = '';
    :OLD_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.RAZAOSOCIAL FROM TBEMPRESA A WHERE A.CODIGO = OLD.EMPRESA_ID), '');

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

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


/* Trigger: TTBCATALOGO_PRODUTO_REVEND_B01I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_REVEND_B01I FOR TBCATALOGO_PRODUTO_REVENDEDORES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO_REVEND, 1);
END
^


/* Trigger: TTBCATALOGO_PRODUTO_REVEND_B01U */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_REVEND_B01U FOR TBCATALOGO_PRODUTO_REVENDEDORES
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_EMPRESA VARCHAR(500);
DECLARE VARIABLE NEW_EMPRESA VARCHAR(500);
BEGIN

    :HISTORICO = '';
    :OLD_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.RAZAOSOCIAL FROM TBEMPRESA A WHERE A.CODIGO = OLD.EMPRESA_ID), '');
    :NEW_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.RAZAOSOCIAL FROM TBEMPRESA A WHERE A.CODIGO = NEW.EMPRESA_ID), '');

    IF (OLD.EMPRESA_ID IS DISTINCT FROM NEW.EMPRESA_ID) THEN
    BEGIN
        :HISTORICO = :HISTORICO||' EMPRESA:'||:OLD_EMPRESA||'->'||:NEW_EMPRESA;
    END

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


/* Trigger: TTBCATALOGO_PRODUTO_REVEND_B02I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_REVEND_B02I FOR TBCATALOGO_PRODUTO_REVENDEDORES
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE NEW_EMPRESA VARCHAR(500);
BEGIN

    :HISTORICO = '';
    :NEW_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.RAZAOSOCIAL FROM TBEMPRESA A WHERE A.CODIGO = NEW.EMPRESA_ID), '');

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

    IF (:HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO_REVENDEDORES', NEW.CATALOGO_PRODUTO_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 */
    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 */
    DELETE FROM TBEMPRESA_CATALOGO D WHERE D.CATALOGO_PRODUTO_ID = OLD.ID;              /* Remove registros filhos da TBEMPRESA_CATALOGO - Permissao de Area Exclusiva */

    DELETE FROM TBCATALOGO_PRODUTO_IMPORT E WHERE E.CATALOGO_PRODUTO_ID = OLD.ID;       /* Remove registros filhos da TBCATALOGO_PRODUTO_IMPORT criados pelo catalgo simplificado*/
    DELETE FROM TBCATALOGO_PRODUTO_ENTREGA F WHERE F.CATALOGO_PRODUTO_ID = OLD.ID;      /* Remove registros filhos da TBCATALOGO_PRODUTO_ENTREGA criados pelo catalgo simplificado*/
    DELETE FROM TBCATALOGO_PRODUTO_REVENDEDORES G WHERE G.CATALOGO_PRODUTO_ID = OLD.ID; /* Remove registros filhos da TBCATALOGO_PRODUTO_REVENDEDORES criados pelo catalgo simplificado*/
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_prod_entrega_b02d for tbcatalogo_produto_entrega
active before delete position 10
AS
BEGIN
    DELETE FROM TBCATALOGO_PRODUTO_TRANSP A WHERE A.CATALOGO_PRODUTO_ENTREGA_ID = OLD.ID;  /* Remove registros filhos da TBCATALOGO_PRODUTO_TRANSP criados pelo catalgo simplificado */
END
^

SET TERM ; ^

