/******************************************************************************/
/****     Following SET SQL DIALECT is just for the Database Comparer      ****/
/******************************************************************************/

SET SQL DIALECT 3;


/******************************************************************************/
/****                             Create Sequence                          ****/
/******************************************************************************/

CREATE SEQUENCE GTBMODELO_BLOQUEIO_PERFIL;

/******************************************************************************/
/****                             Table DDL                             ****/
/******************************************************************************/

CREATE TABLE TBMODELO_BLOQUEIO_PERFIL (
    ID                INTEGER     NOT NULL  ,
    MODELO_ID         INTEGER     DEFAULT  0,
    COR_ID            INTEGER     DEFAULT  0,
    TAMANHO           INTEGER     DEFAULT  0,
    PERFIL            VARCHAR(10) DEFAULT ''
);

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

ALTER TABLE TBMODELO_BLOQUEIO_PERFIL ADD CONSTRAINT PK_TBMODELO_BLOQUEIO_PERFIL PRIMARY KEY (ID);

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

CREATE INDEX ITBMODELO_BLOQUEIO_PERFIL_001 ON TBMODELO_BLOQUEIO_PERFIL (ID);
CREATE INDEX ITBMODELO_BLOQUEIO_PERFIL_002 ON TBMODELO_BLOQUEIO_PERFIL (MODELO_ID);
CREATE INDEX ITBMODELO_BLOQUEIO_PERFIL_003 ON TBMODELO_BLOQUEIO_PERFIL (COR_ID);
CREATE INDEX ITBMODELO_BLOQUEIO_PERFIL_004 ON TBMODELO_BLOQUEIO_PERFIL (TAMANHO);
CREATE INDEX ITBMODELO_BLOQUEIO_PERFIL_005 ON TBMODELO_BLOQUEIO_PERFIL (PERFIL);

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

CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B01I FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable ENCONTRADO INTEGER;
declare variable PERFIL  VARCHAR(100);
declare variable COR     VARCHAR(100);
declare variable TAMANHO VARCHAR(100);
BEGIN
    ENCONTRADO = 0;
    ENCONTRADO = IIF((SELECT FIRST 1 A.ID FROM TBMODELO_BLOQUEIO_PERFIL A WHERE A.PERFIL = NEW.PERFIL AND A.MODELO_ID = NEW.MODELO_ID AND A.COR_ID = NEW.COR_ID AND A.TAMANHO = NEW.TAMANHO) > 0,1,0);

    IF(:ENCONTRADO = 1)THEN
    BEGIN
      PERFIL  = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBPERFIL A WHERE A.ID = NEW.PERFIL AND A.TABELA = 'PED'),'');
      COR     = IIF(NEW.COR_ID > 0 ,'COR '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBCOR B WHERE B.CODIGO = NEW.COR_ID),''),' DE TODAS AS CORES');
      TAMANHO = IIF(NEW.TAMANHO > 0,'TAM '||COALESCE((SELECT FIRST 1 C.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) C WHERE C.TAMANHO = NEW.TAMANHO),''),' EM TODOS OS TAMANHOS');

      EXCEPTION "..." 'BLOQUEIO '||:COR||''||:TAMANHO||' NO PERFIL '||:PERFIL||' JA EXISTENTE';
    END

    IF(NEW.ID IS NULL) THEN
    BEGIN
        NEW.ID = GEN_ID(GTBMODELO_BLOQUEIO_PERFIL,1);
    END
END;

CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B02I FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';
    IF(NEW.MODELO_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' BLOQUEIO ID '||FN_LPAD(NEW.ID,4,0);
        IF(NEW.PERFIL IS NOT NULL) THEN
        BEGIN
           HISTORICO = HISTORICO||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = NEW.PERFIL AND B.TABELA = 'PED'),'');
        END

        HISTORICO = HISTORICO||', COR '||IIF(NEW.COR_ID > 0,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = NEW.COR_ID),''),'TODAS');
        HISTORICO = HISTORICO||', TAM '||IIF(NEW.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) A WHERE A.TAMANHO = NEW.TAMANHO),''),'TODOS');

    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = HISTORICO||' INCLUIDO'; 
        EXECUTE PROCEDURE SPI_HISTORICO('TBMODELO',NEW.MODELO_ID,HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B01D FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';
    IF(OLD.MODELO_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' BLOQUEIO ID '||FN_LPAD(OLD.ID,4,0);

        IF(OLD.PERFIL IS NOT NULL) THEN
        BEGIN
           HISTORICO = HISTORICO||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = OLD.PERFIL AND B.TABELA = 'PED'),'');
        END
        HISTORICO = HISTORICO||', COR '||IIF(OLD.COR_ID > 0,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = OLD.COR_ID),''),'TODAS');
        HISTORICO = HISTORICO||', TAM '||IIF(OLD.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(OLD.MODELO_ID) A WHERE A.TAMANHO = OLD.TAMANHO),''),'TODOS');
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = HISTORICO||' EXCLUIDO'; 
        EXECUTE PROCEDURE SPI_HISTORICO('TBMODELO',OLD.MODELO_ID,HISTORICO);
    END
END;

CREATE TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B01U FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE UPDATE POSITION 5
AS
declare variable historico varchar(8000);
BEGIN
 HISTORICO = '';
    IF(NEW.MODELO_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' BLOQUEIO ID '||FN_LPAD(NEW.ID,4,0)||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = OLD.PERFIL AND B.TABELA = 'PED'),'');
        IF(NEW.COR_ID <> old.COR_ID) THEN
        BEGIN
           HISTORICO = HISTORICO||' COR '||IIF(OLD.COR_ID > 0,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = OLD.COR_ID),''),'TODAS')
           ||' -> '||IIF(NEW.COR_ID > 0,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = NEW.COR_ID),''),'TODAS');
        END

        IF(NEW.TAMANHO <> OLD.TAMANHO) THEN
        BEGIN
           HISTORICO = HISTORICO||', TAM '||IIF(OLD.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(OLD.MODELO_ID) A WHERE A.TAMANHO = OLD.TAMANHO),''),'TODOS')
           ||' -> '||IIF(NEW.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) A WHERE A.TAMANHO = NEW.TAMANHO),''),'TODOS');
        END

        IF(NEW.PERFIL IS DISTINCT FROM OLD.PERFIL) THEN
        BEGIN
           HISTORICO = HISTORICO||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = OLD.PERFIL AND B.TABELA = 'PED'),'')
           ||' -> '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = NEW.PERFIL AND B.TABELA = 'PED'),'');
        END
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBMODELO',NEW.MODELO_ID,FN_ELIPSES(HISTORICO,500));
    END
END;