---------------------------------------------------------------------------------
-- TBAUTORIZACAO_PRECO --

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


CREATE GENERATOR GTBAUTORIZACAO_PRECO;

CREATE TABLE TBAUTORIZACAO_PRECO (
    ID                      INTEGER NOT NULL,
    DATA_SOLICITACAO        DATE,
    OBSERVACAO              VARCHAR(100),
    DATA_INICIAL            DATE,
    DATA_FINAL              DATE,
    CLIENTE_ID              INTEGER,
    USUARIO_SOLICITANTE_ID  INTEGER,
    USUARIO_ID              INTEGER,
    QUANTIDADE              INTEGER
);




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

ALTER TABLE TBAUTORIZACAO_PRECO ADD CONSTRAINT PK_TBAUTORIZACAO_PRECO PRIMARY KEY (ID);


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



SET TERM ^ ;



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



/* Trigger: TTBAUTORIZACAO_PRECO_B01D */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_B01D FOR TBAUTORIZACAO_PRECO
ACTIVE BEFORE DELETE POSITION 1
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('TBAUTORIZACAO_PRECO', OLD.ID, HISTORICO);
    END
END
^


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


/* Trigger: TTBAUTORIZACAO_PRECO_B01U */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_B01U FOR TBAUTORIZACAO_PRECO
ACTIVE BEFORE UPDATE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_CLIENTE VARCHAR(500);
DECLARE VARIABLE NEW_CLIENTE VARCHAR(500);
DECLARE VARIABLE OLD_USUARIO_SOLICITANTE VARCHAR(500);
DECLARE VARIABLE NEW_USUARIO_SOLICITANTE VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_CLIENTE             = COALESCE((SELECT FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A WHERE A.CODIGO = OLD.CLIENTE_ID), '');
    NEW_CLIENTE             = COALESCE((SELECT FN_LPAD(B.CODIGO, 6, '0')||' - '||B.NOMEFANTASIA FROM TBEMPRESA B WHERE B.CODIGO = NEW.CLIENTE_ID), '');
    OLD_USUARIO_SOLICITANTE = COALESCE((SELECT FN_LPAD(C.CODIGO, 4, '0')||' - '||C.USUARIO FROM TBUSUARIO C WHERE C.CODIGO = OLD.USUARIO_SOLICITANTE_ID), '');
    NEW_USUARIO_SOLICITANTE = COALESCE((SELECT FN_LPAD(D.CODIGO, 4, '0')||' - '||D.USUARIO FROM TBUSUARIO D WHERE D.CODIGO = OLD.USUARIO_SOLICITANTE_ID), '');

    IF(OLD.DATA_SOLICITACAO <> NEW.DATA_SOLICITACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' D.SOLICITACAO:'||FN_DATE(OLD.DATA_SOLICITACAO)||'->'||FN_DATE(NEW.DATA_SOLICITACAO);
    END

    IF(OLD.OBSERVACAO <> NEW.OBSERVACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBS:'||OLD.OBSERVACAO||'->'||NEW.OBSERVACAO;
    END
    
    IF(OLD.DATA_INICIAL <> NEW.DATA_INICIAL)THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA INICIAL:'||FN_DATE(OLD.DATA_INICIAL)||'->'||FN_DATE(NEW.DATA_INICIAL);
    END
    
    IF(OLD.DATA_FINAL <> NEW.DATA_FINAL)THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA FINAL:'||FN_DATE(OLD.DATA_FINAL)||'->'||FN_DATE(NEW.DATA_FINAL);
    END

    IF(OLD.CLIENTE_ID <> NEW.CLIENTE_ID)THEN
    BEGIN
    HISTORICO = HISTORICO||' CLIENTE:'||OLD_CLIENTE||'->'||NEW_CLIENTE;
    END

    IF(OLD.USUARIO_SOLICITANTE_ID <> NEW.USUARIO_SOLICITANTE_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' SOLICITANTE:'||OLD_USUARIO_SOLICITANTE||'->'||NEW_USUARIO_SOLICITANTE;
    END

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

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


/* Trigger: TTBAUTORIZACAO_PRECO_B02D */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_B02D FOR TBAUTORIZACAO_PRECO
ACTIVE BEFORE DELETE POSITION 2
AS
BEGIN
    DELETE FROM TBAUTORIZACAO_PRECO_ITENS A WHERE A.AUTORIZACAO_PRECO_ID = OLD.ID;
END
^


/* Trigger: TTBAUTORIZACAO_PRECO_B02I */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_B02I FOR TBAUTORIZACAO_PRECO
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('TBAUTORIZACAO_PRECO', NEW.ID, HISTORICO);
    END
END
^


/* Trigger: TTBAUTORIZACAO_PRECO_B02U */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_B02U FOR TBAUTORIZACAO_PRECO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE APROVADOS INTEGER;
BEGIN
    APROVADOS = COALESCE((SELECT COUNT(A.ID) FROM TBAUTORIZACAO_PRECO_ITENS A WHERE A.STATUS <> 0 AND A.AUTORIZACAO_PRECO_ID = OLD.ID), 0);

    IF(APROVADOS > 0)THEN
    BEGIN
        EXCEPTION "..." 'HÁ MODELOS JÁ APROVADOS/REPROVADOS NESTE REGISTRO! ALTERAÇÃO NÃO AUTORIZADA.';
    END
END
^


/* Trigger: TTBAUTORIZACAO_PRECO_B03D */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_B03D FOR TBAUTORIZACAO_PRECO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE APROVADOS INTEGER;
BEGIN
    APROVADOS = COALESCE((SELECT COUNT(A.ID) FROM TBAUTORIZACAO_PRECO_ITENS A WHERE A.STATUS <> 0 AND A.AUTORIZACAO_PRECO_ID = OLD.ID), 0);

    IF(APROVADOS > 0)THEN
    BEGIN
        EXCEPTION "..." 'HÁ MODELOS JÁ APROVADOS/REPROVADOS NESTE REGISTRO! EXCLUSÃO NÃO AUTORIZADA.';
    END
END
^

SET TERM ; ^

---------------------------------------------------------------------------------
-- TBAUTORIZACAO_PRECO_ITENS --

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


CREATE GENERATOR GTBAUTORIZACAO_PRECO_ITENS;

CREATE TABLE TBAUTORIZACAO_PRECO_ITENS (
    ID                    INTEGER NOT NULL,
    AUTORIZACAO_PRECO_ID  INTEGER,
    STATUS                CHAR(1),
    MODELO_ID             INTEGER,
    COR_ID                INTEGER,
    TAMANHO               INTEGER,
    QUANTIDADE            INTEGER,
    PRECO_SUGERIDO        DECIMAL(15,2),
    PRECO_AUTORIZADO      DECIMAL(15,2)
);




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

ALTER TABLE TBAUTORIZACAO_PRECO_ITENS ADD CONSTRAINT PK_TBAUTORIZACAO_PRECO_ITENS PRIMARY KEY (ID);


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



SET TERM ^ ;



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



/* Trigger: TTBAUTORIZACAO_PRECO_ITENS_B01D */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_ITENS_B01D FOR TBAUTORIZACAO_PRECO_ITENS
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE MODELO VARCHAR(500);
BEGIN

    HISTORICO = '';
    MODELO  = COALESCE((SELECT 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: '||MODELO||' EXCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO_PRECO', OLD.AUTORIZACAO_PRECO_ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^


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


/* Trigger: TTBAUTORIZACAO_PRECO_ITENS_B01U */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_ITENS_B01U FOR TBAUTORIZACAO_PRECO_ITENS
ACTIVE BEFORE UPDATE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_MODELO VARCHAR(500);
DECLARE VARIABLE NEW_MODELO VARCHAR(500);
DECLARE VARIABLE OLD_COR VARCHAR(500);
DECLARE VARIABLE NEW_COR VARCHAR(500);
DECLARE VARIABLE OLD_TAMANHO VARCHAR(500);
DECLARE VARIABLE NEW_TAMANHO VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_MODELO  = COALESCE((SELECT FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO FROM TBMODELO A WHERE A.CODIGO = OLD.MODELO_ID), '');
    NEW_MODELO  = COALESCE((SELECT FN_LPAD(B.CODIGO, 6, '0')||' - '||B.DESCRICAO FROM TBMODELO B WHERE B.CODIGO = NEW.MODELO_ID), '');
    OLD_COR     = COALESCE((SELECT FN_LPAD(C.CODIGO, 6, '0')||' - '||C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = OLD.COR_ID), '000000 - TODAS');
    NEW_COR     = COALESCE((SELECT FN_LPAD(D.CODIGO, 6, '0')||' - '||D.DESCRICAO FROM TBCOR D WHERE D.CODIGO = NEW.COR_ID), '000000 - TODAS');
    OLD_TAMANHO = COALESCE((SELECT FN_LPAD(E.TAMANHO, 4, '0')||' - '||E.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(OLD.MODELO_ID) E WHERE E.TAMANHO = OLD.TAMANHO), '0000 - TODOS');
    NEW_TAMANHO = COALESCE((SELECT FN_LPAD(F.TAMANHO, 4, '0')||' - '||F.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) F WHERE F.TAMANHO = NEW.TAMANHO), '0000 - TODOS');

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

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

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

    IF(OLD.PRECO_SUGERIDO <> NEW.PRECO_SUGERIDO)THEN
    BEGIN
        HISTORICO = HISTORICO||' PR.SUGERIDO:'||'R$'||OLD.PRECO_SUGERIDO||'->'||'R$'||NEW.PRECO_SUGERIDO;
    END

    IF((OLD.PRECO_AUTORIZADO <> NEW.PRECO_AUTORIZADO) OR (OLD.PRECO_AUTORIZADO IS NULL AND NEW.PRECO_AUTORIZADO IS NOT NULL) )THEN
    BEGIN
        HISTORICO = HISTORICO||' PR.AUTORIZADO:'||'R$'||OLD.PRECO_AUTORIZADO||'->'||'R$'||NEW.PRECO_AUTORIZADO;
    END

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


/* Trigger: TTBAUTORIZACAO_PRECO_ITENS_B02D */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_ITENS_B02D FOR TBAUTORIZACAO_PRECO_ITENS
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE MODELO VARCHAR(500);
BEGIN
    MODELO = COALESCE((SELECT FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO FROM TBMODELO A WHERE A.CODIGO = OLD.MODELO_ID), '');

    IF(OLD.STATUS <> 0)THEN
    BEGIN
        EXCEPTION "..." 'MODELO: '||MODELO||' JÁ APROVADO/REPROVADO! EXCLUSÃO NÃO AUTORIZADA.';
    END
END
^


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

    HISTORICO = '';
    MODELO  = COALESCE((SELECT 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: '||MODELO||' INCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO_PRECO', NEW.AUTORIZACAO_PRECO_ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^


/* Trigger: TTBAUTORIZACAO_PRECO_ITENS_B02U */
CREATE OR ALTER TRIGGER TTBAUTORIZACAO_PRECO_ITENS_B02U FOR TBAUTORIZACAO_PRECO_ITENS
INACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE MODELO VARCHAR(500);
BEGIN
    MODELO = COALESCE((SELECT FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO FROM TBMODELO A WHERE A.CODIGO = OLD.MODELO_ID), '');

    IF(OLD.STATUS <> 0)THEN
    BEGIN
        EXCEPTION "..." 'MODELO: '||MODELO||' JÁ APROVADO/REPROVADO! ALTERAÇÃO NÃO AUTORIZADA.';
    END
END
^

SET TERM ; ^



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

COMMENT ON COLUMN TBAUTORIZACAO_PRECO_ITENS.STATUS IS 
'0 - PENDENTE;
1 - APROVADO;
2 - REPROVADO;';