ALTER TABLE TBCATALOGO_PRODUTO
    ADD LOCALIZACAO_ID INTEGER;

alter table TBCATALOGO_PRODUTO
alter ID position 1;

alter table TBCATALOGO_PRODUTO
alter DESCRICAO position 2;

alter table TBCATALOGO_PRODUTO
alter DATA_INICIAL position 3;

alter table TBCATALOGO_PRODUTO
alter DATA_FIM position 4;

alter table TBCATALOGO_PRODUTO
alter ESTABELECIMENTO_ID position 5;

alter table TBCATALOGO_PRODUTO
alter LOCALIZACAO_ID position 6;

alter table TBCATALOGO_PRODUTO
alter TABELA_PRECO_ID position 7;

alter table TBCATALOGO_PRODUTO
alter CONTATO_VENDEDOR position 8;

alter table TBCATALOGO_PRODUTO
alter LINK position 9;

alter table TBCATALOGO_PRODUTO
alter UTILIZADO position 10;

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

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_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE NEW_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE OLD_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE NEW_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE OLD_LOCALIZACAO VARCHAR(500);
DECLARE VARIABLE NEW_LOCALIZACAO VARCHAR(500);
BEGIN

    HISTORICO = '';

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

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

    IF (OLD.LOCALIZACAO_ID <> NEW.LOCALIZACAO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' LOCALIZACAO:'||OLD_LOCALIZACAO||'->'||NEW_LOCALIZACAO;
    END

    IF (OLD.TABELA_PRECO_ID <> NEW.TABELA_PRECO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAB.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 (OLD.UTILIZADO <> NEW.UTILIZADO) THEN
    BEGIN
        HISTORICO = HISTORICO||' UTILIZADO:'||OLD.UTILIZADO||'->'||NEW.UTILIZADO;
    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 ; ^

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

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


CREATE GENERATOR GTBCATALOGO_PRODUTO_CORES;

CREATE TABLE TBCATALOGO_PRODUTO_CORES (
    ID                   INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID  INTEGER,
    MODELO_ID            INTEGER,
    COR_ID               INTEGER,
    VISIVEL              INTEGER DEFAULT 1
);




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

ALTER TABLE TBCATALOGO_PRODUTO_CORES ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_CORES PRIMARY KEY (ID);


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

CREATE INDEX ITBCATALOGO_PRODUTO_CORES_01 ON TBCATALOGO_PRODUTO_CORES (CATALOGO_PRODUTO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_CORES_02 ON TBCATALOGO_PRODUTO_CORES (MODELO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_CORES_03 ON TBCATALOGO_PRODUTO_CORES (COR_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_CORES_04 ON TBCATALOGO_PRODUTO_CORES (VISIVEL);


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



SET TERM ^ ;



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



/* Trigger: TTBCATALOGO_PRODUTO_CORES_B01D */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_CORES_B01D FOR TBCATALOGO_PRODUTO_CORES
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE OLD_COR VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_COR = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = OLD.COR_ID), '');

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'COR: '||OLD_COR||' DO MODELO: '||FN_LPAD(OLD.MODELO_ID, 6, '0')||' EXCLUIDA';
    END

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


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


/* Trigger: TTBCATALOGO_PRODUTO_CORES_B01U */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_CORES_B01U FOR TBCATALOGO_PRODUTO_CORES
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_COR VARCHAR(500);
DECLARE VARIABLE NEW_COR VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_COR    = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = OLD.COR_ID), '');
    NEW_COR    = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = NEW.COR_ID), '');

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

    IF (OLD.COR_ID <> NEW.COR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' COR:'||OLD_COR||'->'||NEW_COR;
    END

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

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'COR: '||NEW_COR||' DO MODELO: '||NEW.MODELO_ID||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.CATALOGO_PRODUTO_ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^


/* Trigger: TTBCATALOGO_PRODUTO_CORES_B02I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_CORES_B02I FOR TBCATALOGO_PRODUTO_CORES
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE NEW_COR VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    NEW_COR = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = NEW.COR_ID), '');

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'COR: '||NEW_COR||' DO MODELO: '||FN_LPAD(NEW.MODELO_ID, 6, '0')||' INCLUIDA';
    END

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

SET TERM ; ^



/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBCATALOGO_PRODUTO_CORES.VISIVEL IS 
'0 - NAO SERA UTILIZADO; 1 - SERA UTILIZADO;';



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


CREATE GENERATOR GTBCATALOGO_PRODUTO_TAMANHOS;

CREATE TABLE TBCATALOGO_PRODUTO_TAMANHOS (
    ID                   INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID  INTEGER,
    MODELO_ID            INTEGER,
    TAMANHO              INTEGER,
    VISIVEL              INTEGER DEFAULT 1
);




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

ALTER TABLE TBCATALOGO_PRODUTO_TAMANHOS ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_TAMANHOS PRIMARY KEY (ID);


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

CREATE INDEX ITBCATALOGO_PRODUTO_TAMANHO_01 ON TBCATALOGO_PRODUTO_TAMANHOS (CATALOGO_PRODUTO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_TAMANHO_02 ON TBCATALOGO_PRODUTO_TAMANHOS (MODELO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_TAMANHO_03 ON TBCATALOGO_PRODUTO_TAMANHOS (TAMANHO);
CREATE INDEX ITBCATALOGO_PRODUTO_TAMANHO_04 ON TBCATALOGO_PRODUTO_TAMANHOS (VISIVEL);


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



SET TERM ^ ;



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



/* Trigger: TTBCATALOGO_PRODUTO_TAM_B01D */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_TAM_B01D FOR TBCATALOGO_PRODUTO_TAMANHOS
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE OLD_TAMANHO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_TAMANHO = COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(OLD.MODELO_ID) A WHERE A.TAMANHO = OLD.TAMANHO), '');

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'TAM: '||OLD_TAMANHO||' DO MODELO: '||FN_LPAD(OLD.MODELO_ID, 6, '0')||' EXCLUIDO';
    END

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


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


/* Trigger: TTBCATALOGO_PRODUTO_TAM_B01U */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_TAM_B01U FOR TBCATALOGO_PRODUTO_TAMANHOS
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_TAMANHO VARCHAR(500);
DECLARE VARIABLE NEW_TAMANHO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_TAMANHO = COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(OLD.MODELO_ID) A WHERE A.TAMANHO = OLD.TAMANHO), '');
    NEW_TAMANHO = COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) A WHERE A.TAMANHO = NEW.TAMANHO), '');

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

    IF (OLD.TAMANHO <> NEW.TAMANHO) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAM:'||OLD_TAMANHO||'->'||NEW_TAMANHO;
    END

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

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


/* Trigger: TTBCATALOGO_PRODUTO_TAM_B02I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PRODUTO_TAM_B02I FOR TBCATALOGO_PRODUTO_TAMANHOS
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE NEW_TAMANHO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    NEW_TAMANHO = COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) A WHERE A.TAMANHO = NEW.TAMANHO), '');

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'TAM: '||NEW_TAMANHO||' DO MODELO: '||FN_LPAD(NEW.MODELO_ID, 6, '0')||' INCLUIDO';
    END

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

SET TERM ; ^



/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBCATALOGO_PRODUTO_TAMANHOS.VISIVEL IS 
'0 - NAO SERA UTILIZADO; 1 - SERA UTILIZADO;';



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

SET TERM ^ ;

CREATE trigger ttbcatalogo_produto_itens_b02d for tbcatalogo_produto_itens
active before delete position 1
AS
BEGIN

    DELETE FROM TBCATALOGO_PRODUTO_CORES A    WHERE A.CATALOGO_PRODUTO_ID = OLD.CATALOGO_PRODUTO_ID AND A.MODELO_ID = OLD.MODELO_ID;    /* Exclui cores vinculados ao modelo */
    DELETE FROM TBCATALOGO_PRODUTO_TAMANHOS B WHERE B.CATALOGO_PRODUTO_ID = OLD.CATALOGO_PRODUTO_ID AND B.MODELO_ID = OLD.MODELO_ID;    /* Exclui tamanhos vinculados ao modelo */

END
^

SET TERM ; ^


