CREATE TABLE TBJUSTIFICATIVA (
    ID              INTEGER NOT NULL,
    DESCRICAO       VARCHAR(200) CHARACTER SET NONE,
	FLAG            VARCHAR(2),
    FALG_DESCRICAO  VARCHAR(50) CHARACTER SET NONE,
    STATUS          INTEGER
);

ALTER TABLE TBJUSTIFICATIVA
ADD CONSTRAINT PK_TBJUSTIFICATIVA
PRIMARY KEY (ID);

COMMENT ON COLUMN TBJUSTIFICATIVA.DESCRICAO IS
'DESCRICAO DA JUSTIFICATIVA';

COMMENT ON COLUMN TBJUSTIFICATIVA.FLAG IS
'FLAG PARA SEPARAR GRUPO DE JUSTIFICATIVAS';

COMMENT ON COLUMN TBJUSTIFICATIVA.FALG_DESCRICAO IS
'DESCRICAO DO AGRUPAMENTO, NÃO É OBRIGATORIO NEM UTILIZADO NO AGRUPAMENO, SERVE COMO REFERENCIA';

COMMENT ON TABLE TBJUSTIFICATIVA IS 'TABELA COM LISTA DE JUSTIFICATIVAS PARA UMA AÇÃO NO SISTEMA, QUE PODE SER UMA PARADA, ICICIO OU FINALIZAÇÃO DE UMA TAREFA';

CREATE SEQUENCE GTBJUSTIFICATIVA;

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

ALTER TABLE TBJUSTIFICATIVA ADD STATUS INTEGER;

COMMENT ON COLUMN TBJUSTIFICATIVA.STATUS IS
' 1 - ATIVO
 0 - INATIVO';

CREATE TABLE TBREGISTRO_PARADA (
    ID             INTEGER NOT NULL,
    TABELA_ID      INTEGER,
    TABELA         VARCHAR(50),
    STATUS         INTEGER,
    VINCULO_ID     INTEGER,
    SUBVINCULO_ID  INTEGER,
    DATA_REGISTRO  DATE DEFAULT current_date,
    HORA_REGISTRO  TIMESTAMP DEFAULT current_timestamp
);

ALTER TABLE TBREGISTRO_PARADA ADD CONSTRAINT "PK_TBREGISTRO_PARADA " PRIMARY KEY (ID);

COMMENT ON COLUMN TBREGISTRO_PARADA.TABELA_ID IS 'ID OD REGISTRO NA TABELA DE ORIGEM';

COMMENT ON COLUMN TBREGISTRO_PARADA.TABELA IS 'TABELA DE ORIGEM DO ID';

COMMENT ON COLUMN TBREGISTRO_PARADA.STATUS IS 'STATUS DO GERISTRO';

COMMENT ON TABLE TBREGISTRO_PARADA IS 'TABELA PARA REGISTRO DE PARADA DE ESTAÇÕES, REMESSAS E SEUS DERIVADOS';

CREATE SEQUENCE GTBREGISTRO_PARADA;

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

ALTER TABLE TBREGISTRO_PARADA ADD VINCULO_ID INTEGER, ADD SUBVINCULO_ID INTEGER;

COMMENT ON COLUMN TBREGISTRO_PARADA.VINCULO_ID IS 'registro ao qual o SUBVINCULO_ID pode esta vinculado';

COMMENT ON COLUMN TBREGISTRO_PARADA.SUBVINCULO_ID IS 'registro ao qual o TABELA_ID pode esta vinculado';

CREATE INDEX TBREGISTRO_PARADA_01 ON "TBREGISTRO_PARADA" (TABELA_ID);
CREATE INDEX TBREGISTRO_PARADA_02 ON "TBREGISTRO_PARADA" (TABELA);
CREATE INDEX TBREGISTRO_PARADA_03 ON "TBREGISTRO_PARADA" (STATUS);
CREATE INDEX TBREGISTRO_PARADA_04 ON "TBREGISTRO_PARADA" (VINCULO_ID);
CREATE INDEX TBREGISTRO_PARADA_05 ON "TBREGISTRO_PARADA" (SUBVINCULO_ID);
CREATE INDEX TBREGISTRO_PARADA_06 ON "TBREGISTRO_PARADA" (DATA_REGISTRO);
CREATE INDEX TBREGISTRO_PARADA_07 ON "TBREGISTRO_PARADA" (HORA_REGISTRO);

ALTER TABLE TBREGISTRO_PARADA ADD OPERADOR_ID INTEGER;

COMMENT ON COLUMN TBREGISTRO_PARADA.DATA_REGISTRO IS 'data do registro';

COMMENT ON COLUMN TBREGISTRO_PARADA.HORA_REGISTRO IS 'data hora do registro';

COMMENT ON COLUMN TBREGISTRO_PARADA.OPERADOR_ID IS 'id do operador';

ALTER TABLE TBPROGRAMACAO_REGISTRO ADD JUSTIFICATIVA_ID INTEGER;

COMMENT ON COLUMN TBPROGRAMACAO_REGISTRO.JUSTIFICATIVA_ID IS 'id da justificativa de parada';

ALTER TABLE TBPROGRAMACAO_REGISTRO ALTER COLUMN JUSTIFICATIVA_ID SET DEFAULT 0;

CREATE trigger tbprogramacao_bu0 for tbprogramacao
active before update position 0
AS
DECLARE VARIABLE CONFLITO varchar(50);
begin
  if(new.status = 2)then
  begin

     CONFLITO = coalesce((SELECT FIRST 1 w.remessa_id||'/'||w.tabela_id||' E FERRAMENTA DE ID:'||w.ferramenta_id
                     FROM TBPROGRAMACAO W

                    WHERE W.FERRAMENTA_ID = new.ferramenta_id
                    
                      AND W.ID <> new.id
                      AND (new.datahora_inicio BETWEEN W.DATAHORA_INICIO AND W.DATAHORA_FIM
                       OR  new.DATAHORA_FIM    BETWEEN W.DATAHORA_INICIO AND W.DATAHORA_FIM
                       OR  W.DATAHORA_INICIO   BETWEEN new.datahora_inicio AND new.DATAHORA_FIM
                       OR  W.DATAHORA_FIM      BETWEEN new.datahora_inicio AND new.DATAHORA_FIM )

                ),'');

     if(CONFLITO <> '')then
     begin
       EXCEPTION "..." 'CONFLITO COM REMESSA '||CONFLITO;
     end
  end
end;

ALTER TABLE TBFERRAMENTARIA
    ADD CODBARRAS VARCHAR(20);

update tbferramentaria f set f.codbarras = f.serie;

CREATE INDEX TBFERRAMENTARIA_02 ON TBFERRAMENTARIA (CODBARRAS);

CREATE OR ALTER trigger tbferramentaria_historico_bi for tbferramentaria_historico
active before insert position 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBFERRAMENTARIA_HISTORICO,1);


   IF (NEW.usuario IS NULL) THEN
    NEW.usuario = current_user;

END;

ALTER TABLE TBFERRAMENTARIA_HISTORICO
    ADD MOTIVO_PARADA INTEGER DEFAULT 0,
    ADD TALAO_ID INTEGER DEFAULT 0;

COMMENT ON COLUMN TBFERRAMENTARIA_HISTORICO.STATUS IS
'E - ENTRADA
S - SAIDA
I - INICIADO
P - PARADO
F - FINALIZADO';






