

CREATE GENERATOR GTBHORARIO_GP;

CREATE TABLE TBHORARIO_GP (
    ID            INTEGER NOT NULL,
    GP_ID         INTEGER,
    DESCRICAO     VARCHAR(20),
    MINUTOS       INTEGER,
    DATA_INICIO   DATE,
    DATA_FIM      DATE,
    HORA_1        TIME,
    HORA_2        TIME,
    TURNO         INTEGER DEFAULT 1,
    ADD_DIAS_INI  INTEGER DEFAULT 0,
    ADD_DIAS_FIM  INTEGER DEFAULT 0
);

ALTER TABLE TBHORARIO_GP ADD PRIMARY KEY (ID);

CREATE INDEX ITBHORARIO_GP_01 ON TBHORARIO_GP (DATA_INICIO, DATA_FIM, HORA_1, HORA_2);
CREATE INDEX ITBHORARIO_GP_02 ON TBHORARIO_GP (DATA_FIM);
CREATE INDEX ITBHORARIO_GP_03 ON TBHORARIO_GP (HORA_1);
CREATE INDEX ITBHORARIO_GP_04 ON TBHORARIO_GP (HORA_2);
CREATE INDEX ITBHORARIO_GP_05 ON TBHORARIO_GP (DATA_INICIO);
CREATE INDEX ITBHORARIO_GP_06 ON TBHORARIO_GP (GP_ID);


SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBHORARIO_GP_B01D FOR TBHORARIO_GP
ACTIVE BEFORE DELETE POSITION 0
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('TBHORARIO_GP',OLD.ID, HISTORICO);
        END
END
^

CREATE OR ALTER TRIGGER TTBHORARIO_GP_B01I FOR TBHORARIO_GP
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gTBHORARIO_GP,1);
end
^

CREATE OR ALTER TRIGGER TTBHORARIO_GP_B01U FOR TBHORARIO_GP
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

	IF (OLD.GP_ID <> NEW.GP_ID) THEN
        BEGIN
            HISTORICO = HISTORICO||' GP:'||OLD.GP_ID||'->'||NEW.GP_ID;
        END
		
    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
        BEGIN
            HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
        END

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

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

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

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

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

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

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


CREATE OR ALTER TRIGGER TTBHORARIO_GP_B02I FOR TBHORARIO_GP
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('TBHORARIO_GP',NEW.ID, HISTORICO);
        END
END
^

SET TERM ; ^

ALTER TABLE TBHORARIO_GP
    ADD ORDEM INTEGER;

