ALTER TABLE TBCALENDARIO_UP
    ADD ID INTEGER;
	
CREATE SEQUENCE GTBCALENDARIO_UP;

CREATE TRIGGER TTBCALENDARIO_UP_B01IU FOR TBCALENDARIO_UP
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
AS
BEGIN
    IF(COALESCE(NEW.ID, 0) = 0) THEN
    BEGIN
        NEW.ID = GEN_ID(GTBCALENDARIO_UP, 1);
    END
END;

UPDATE TBCALENDARIO_UP T SET T.ID = 0;

CREATE TABLE TBCALENDARIO_UP_CAPACIDADE (
    ID INTEGER NOT NULL,
    CALENDARIO_UP_ID INTEGER,
    HORARIO_INICIAL TIME,
    HORARIO_FINAL TIME,
    MINUTOS INTEGER,
    COLABORADORES NUMERIC(15,2),
    TEMPO TIME,
	CALCULO_CAPACIDADE INTEGER);
	
ALTER TABLE TBCALENDARIO_UP_CAPACIDADE
ADD CONSTRAINT PK_TBCALENDARIO_UP_CAPACIDADE
PRIMARY KEY (ID);

CREATE SEQUENCE GTBCALENDARIO_UP_CAPACIDADE;

CREATE TRIGGER TTBCALENDARIO_UP_CAPAC_B01I FOR TBCALENDARIO_UP_CAPACIDADE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBCALENDARIO_UP_CAPACIDADE,1);
END;

CREATE INDEX ITBCALENDARIO_UP_CAPACIDADE_01
ON TBCALENDARIO_UP_CAPACIDADE (CALENDARIO_UP_ID);

COMMENT ON COLUMN TBCALENDARIO_UP_CAPACIDADE.CALCULO_CAPACIDADE IS
'TEMPO EM MINUTOS MULTIPLICADO PELA QUANTIDADE DE COLABORADORES';

CREATE OR ALTER trigger ttbcalendario_up_capac_biu02 for tbcalendario_up_capacidade
active before insert or update position 2
AS
DECLARE VARIABLE CALENDARIO_UP_ID INTEGER;
DECLARE VARIABLE MINUTOS INTEGER;
DECLARE VARIABLE MINUTOS_AUX INTEGER;

BEGIN
    :MINUTOS = COALESCE((SELECT K.MINUTOS FROM TBCALENDARIO_UP K WHERE K.ID = NEW.CALENDARIO_UP_ID), 0);

    IF(INSERTING) THEN
    BEGIN
        :MINUTOS_AUX = :MINUTOS + NEW.MINUTOS;

        UPDATE TBCALENDARIO_UP T SET T.MINUTOS = :MINUTOS_AUX WHERE T.ID = NEW.CALENDARIO_UP_ID;
    END
    
    IF(UPDATING) THEN
    BEGIN
        :MINUTOS_AUX = :MINUTOS + NEW.MINUTOS;

        UPDATE TBCALENDARIO_UP T SET T.MINUTOS = :MINUTOS_AUX WHERE T.ID = NEW.CALENDARIO_UP_ID;
    END
END;

CREATE trigger ttbcalendario_up_b01d for tbcalendario_up
active before delete position 1
AS
BEGIN

    IF(COALESCE(OLD.ID, 0) > 0) THEN
    BEGIN
        DELETE FROM TBCALENDARIO_UP_CAPACIDADE T WHERE T.CALENDARIO_UP_ID = OLD.ID;
    END
END;