CREATE TABLE TBCUSTO_AGENDAMENTO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(50),
    STATUS INTEGER,
    SQL BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    DATA_AGENDAMENTO TIMESTAMP,
    DATA_INICIADO TIMESTAMP,
    DATA_FINALIZADO TIMESTAMP,
    STATUS_AGENDAMENTO INTEGER,
    "LOG" BLOB SUB_TYPE 0 SEGMENT SIZE 80);

ALTER TABLE TBCUSTO_AGENDAMENTO
ADD CONSTRAINT PK_TBCUSTO_AGENDAMENTO
PRIMARY KEY (ID);

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO.DESCRICAO IS
'DESCRICAO';

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

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO.SQL IS
'SQL DO AGENDAMENTO';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO.DATA_AGENDAMENTO IS
'DATA QUE SERA EXECUTADO';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO.DATA_INICIADO IS
'DATA EM QUE FOI INICIADO O TRATAMENTO';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO.DATA_FINALIZADO IS
'DATA QUE FOI FINALIZADO O AGENDAMENTO';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO.STATUS_AGENDAMENTO IS
'0 - PENDENTE
1 - EM ANDAMENTO
2 - FINALIZADO';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO."LOG" IS
'LOG DO ULTIMO AGENDAMENTO';

CREATE SEQUENCE GTBCUSTO_AGENDAMENTO;

create trigger Ttbcusto_agendamento_b01i for tbcusto_agendamento
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbcusto_agendamento,1);
end;

COMMENT ON TABLE TBCUSTO_AGENDAMENTO IS 'tabela de agendamento de tratamento de custo';

CREATE TABLE TBCUSTO_AGENDAMENTO_DETALHE (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(20),
    PARAMENTRO VARCHAR(20),
    VALOR VARCHAR(20),
    TIPO INTEGER,
    CUSTO_AGENDAMENTO_ID INTEGER);

ALTER TABLE TBCUSTO_AGENDAMENTO_DETALHE
ADD CONSTRAINT PK_TBCUSTO_AGENDAMENTO_DETALHE
PRIMARY KEY (ID);

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO_DETALHE.DESCRICAO IS
'DESCRICAO DO PARAMETRO';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO_DETALHE.PARAMENTRO IS
'PARAMETRO DO SQL';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO_DETALHE.VALOR IS
'VALOR PADRAO';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO_DETALHE.TIPO IS
'1 - NUMERO
2 - STRING
3 - DATA';

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO_DETALHE.CUSTO_AGENDAMENTO_ID IS
'ID DO AGENDAMENTO';

CREATE SEQUENCE GTBCUSTO_AGENDAMENTO_D;

create trigger ttbcusto_agendamento_d_b01i for tbcusto_agendamento_detalhe
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbcusto_agendamento_d,1);
end;

COMMENT ON TABLE TBCUSTO_AGENDAMENTO_DETALHE IS 'TABELA DE PARAMETROS DO AGENDAMENTO DE CUSTOS';

ALTER TABLE TBCUSTO_AGENDAMENTO_DETALHE
    ADD PARAMETRO INTEGER;

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO_DETALHE.PARAMETRO IS
'PARAMETRO DO SQL';

ALTER TABLE TBCUSTO_AGENDAMENTO_DETALHE DROP PARAMENTRO;

ALTER TABLE TBCUSTO_AGENDAMENTO_DETALHE
    ALTER PARAMETRO TYPE VARCHAR(20);

CREATE trigger ttbcusto_agendamento_b02i for tbcusto_agendamento
active before insert position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = 'Incluido: ' ||new.id;

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBCUSTO_AGENDAMENTO', new.id, :HISTORICO);
   End
end;

CREATE OR ALTER trigger tbcusto_agendamento_bu0 for tbcusto_agendamento
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if(old.data_agendamento <> new.data_agendamento and new.data_agendamento >= current_timestamp)then
   begin
      new.status_agendamento = 0;
      HISTORICO = HISTORICO || 'Agendado para '||formatdatetime(new.data_agendamento);
   end

   if(old.status_agendamento = 0 and new.status_agendamento = 1)then
   begin
      HISTORICO = HISTORICO || 'Iniciado em '||formatdatetime(current_timestamp);
   end

   if(old.status_agendamento = 1 and new.status_agendamento = 2)then
   begin
      HISTORICO = HISTORICO || 'Finalizado em '||formatdatetime(current_timestamp);
   end

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBCUSTO_AGENDAMENTO', new.id, :HISTORICO);
   End

end;


ALTER TABLE TBCUSTO_AGENDAMENTO_DETALHE
    ADD STATUS INTEGER;

ALTER TABLE TBCUSTO_AGENDAMENTO
    ADD "USER" INTEGER;

COMMENT ON COLUMN TBCUSTO_AGENDAMENTO."USER" IS
'usuario do agendamento';

