CREATE TABLE TBCUBAGEM_CARRETA (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(100),
    STATUS INTEGER DEFAULT 0);

ALTER TABLE TBCUBAGEM_CARRETA
ADD CONSTRAINT PK_TBCUBAGEM_CARRETA
PRIMARY KEY (ID);

CREATE SEQUENCE GTBCUBAGEM_CARRETA;

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

CREATE TABLE TBCARRETA_DIMENSOES (
    ID INTEGER,
    DESCRICAO VARCHAR(100),
    STATUS INTEGER,
    ALTURA INTEGER,
    LARGURA INTEGER,
    COMPRIMENTO INTEGER);

COMMENT ON COLUMN TBCARRETA_DIMENSOES.ALTURA IS
'em cm';

COMMENT ON COLUMN TBCARRETA_DIMENSOES.LARGURA IS
'em cm';

COMMENT ON COLUMN TBCARRETA_DIMENSOES.COMPRIMENTO IS
'em cm';

CREATE SEQUENCE GTBCARRETA_DIMENSOES;

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

CREATE trigger ttbcarreta_dimensoes_b02i for tbcarreta_dimensoes
active before insert position 0
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('TBCARRETA_DIMENSOES',NEW.ID, HISTORICO);
    END
end;

CREATE trigger ttbcarreta_dimensoes_b01u for tbcarreta_dimensoes
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( old.descricao <> NEW.descricao > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Descrição: '||old.descricao||' -> '||NEW.descricao;
    END

    IF ( old.status <> NEW.status > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||', Status: '||old.status||' -> '||NEW.status;
    END

    IF ( old.altura <> NEW.altura > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||', Altura: '||old.altura||' -> '||NEW.altura;
    END

    IF ( old.largura <> NEW.largura > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||', Largura: '||old.largura||' -> '||NEW.largura;
    END

    IF ( old.comprimento <> NEW.comprimento > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||', Comprimento: '||old.comprimento||' -> '||NEW.comprimento;
    END

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

ALTER TABLE TBCUBAGEM_CARRETA
    ADD CARRETA_ID INTEGER;

CREATE TABLE TBCUBAGEM_CARRETA_ITENS (
    ID INTEGER NOT NULL,
    CUBAGEM_CARRETA_ID INTEGER,
    PEDIDO_ID INTEGER);

ALTER TABLE TBCUBAGEM_CARRETA_ITENS
ADD CONSTRAINT PK_TBCUBAGEM_CARRETA_ITENS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBCUBAGEM_CARRETA_ITENS;

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

CREATE OR ALTER trigger TTBIMOBILIZADO_B01U for tbimobilizado
active before update position 0
AS
declare variable grupo integer;
begin
  grupo = coalesce((select g.imobilizado_grupo_id from tbimobilizado_subgrupo g where g.id = new.subgrupo),0);
  if(grupo <> new.grupo_id)then
  begin
     exception "..." 'Vínculo entre o grupo e o subgrupo com erro, selecione outro grupo ou subgrupo.';
  end
end;

CREATE OR ALTER trigger ttbimobilizado_b9u for tbimobilizado
active after update position 9
AS
--*****************************
--*       Registra log        *
--*       de alteracaoo        *
--*****************************
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (old.descricao <> new.descricao) then
       begin
       historico = historico||' Desc.: '||OLD.descricao||'->'||NEW.descricao;
       end
   if (old.observacao <> new.observacao) then
       begin
       historico = historico||' Obs.: '||OLD.observacao||'->'||NEW.observacao;
       end
   if (old.vida_util <> new.vida_util) then
       begin
       historico = historico||' V.Util: '||OLD.vida_util||'->'||NEW.vida_util;
       end

   if (old.tipo_id <> new.tipo_id) then
       begin
       historico = historico||' Tipo: '||OLD.tipo_id||'->'||NEW.tipo_id;
       end
   if (old.CCONTABIL <> new.CCONTABIL) then
       begin
       historico = historico||' C.Cont.: '||OLD.CCONTABIL||'->'||NEW.CCONTABIL;
       end
   if (old.ccusto <> new.ccusto) then
       begin
       historico = historico||' C.Custo: '||OLD.ccusto||'->'||NEW.ccusto;
       end
   if (old.data_depreciacao <> new.data_depreciacao) then
       begin
       historico = historico||' Data: '||formatdate(OLD.data_depreciacao)||'->'||formatdate(NEW.data_depreciacao);
       end

   if (old.grupo_id <> new.grupo_id) then
       begin
       historico = historico||' Grupo: '||(OLD.grupo_id)||'->'||(NEW.grupo_id);
       end

   if (old.subgrupo <> new.subgrupo) then
       begin
       historico = historico||' Subrupo: '||(OLD.subgrupo)||'->'||(NEW.subgrupo);
       end

   if (HISTORICO <> '') Then
   Begin
        EXECUTE PROCEDURE SPI_HISTORICO('TBIMOBILIZADO',NEW.ID,:Historico);
   End
end;

CREATE TABLE TBCARRETA_EMBALAGENS (
    ID INTEGER NOT NULL,
    CUBAGEM_CARRETA_ID INTEGER,
    PRODUTO_ID INTEGER,
    QUANTIDADE INTEGER);

ALTER TABLE TBCARRETA_EMBALAGENS
ADD CONSTRAINT PK_TBCARRETA_EMBALAGENS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBCARRETA_EMBALAGENS;

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

CREATE OR ALTER trigger ttbcubagem_carreta_itens_b01i for tbcubagem_carreta_itens
active before insert position 0
as
declare variable pedido integer;
begin

  pedido = coalesce( (select first 1 o.pedido from tbpedido_item o where o.pedido = coalesce(new.pedido_id,0)),0);

  if (pedido = 0) then
  exception "..." 'Pedido não encontrado';

  if (new.id is null) then
    new.id = gen_id(gtbcubagem_carreta_itens,1);
end;

CREATE TABLE TBCARRETA_PRODUTOS (
    ID INTEGER NOT NULL,
    CUBAGEM_CARRETA_ID INTEGER,
    PRODUTO_ID INTEGER,
    QUANTIDADE INTEGER);

ALTER TABLE TBCARRETA_PRODUTOS
ADD CONSTRAINT PK_TBCARRETA_PRODUTOS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBCARRETA_PRODUTOS;

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

ALTER TABLE TBCARRETA_PRODUTOS
    ADD TAMANHO INTEGER;

