CREATE TABLE TBLOCALIZACAO_FAMILIA (
    ID INTEGER NOT NULL,
    LOCALIZACAO_ID INTEGER,
    FAMILIA_ID INTEGER);

ALTER TABLE TBLOCALIZACAO_FAMILIA
ADD CONSTRAINT PK_TBLOCALIZACAO_FAMILIA
PRIMARY KEY (ID);

COMMENT ON COLUMN TBLOCALIZACAO_FAMILIA.LOCALIZACAO_ID IS
'id da localizacao';

COMMENT ON COLUMN TBLOCALIZACAO_FAMILIA.FAMILIA_ID IS
'id da familia';

CREATE SEQUENCE GTBLOCALIZACAO_FAMILIA;

SET TERM ^ ;

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


COMMENT ON TABLE TBLOCALIZACAO_FAMILIA IS 'tabela com as familias permitidas por localizacao';

CREATE OR ALTER function fn_localizacao_familia (
    localizacao_id integer,
    familia_id integer)
returns boolean
as
declare variable item varchar(10);
declare variable liberado boolean;
begin

    LIBERADO = false;

    for
       select
          o.familia_id
       from tblocalizacao_familia o
       where o.localizacao_id = :LOCALIZACAO_ID
    into
        :ITEM
    do
    begin
       if(familia_id = ITEM)then
       begin
          LIBERADO = true;
       end
    end

  return LIBERADO;
end;

CREATE OR ALTER trigger ttbestoque_transacao_item_b4i for tbestoque_transacao_item
active before insert or update position 0
AS
declare variable liberado boolean;
declare variable FAMILIA_PRODUTO integer;
begin
  if(new.localizacao_codigo > 0 and new.localizacao_codigo > 0)then
  begin
     FAMILIA_PRODUTO = coalesce((select first 1 p.familia_codigo from tbproduto p where p.codigo = new.produto_codigo),0);
     liberado = fn_localizacao_familia(new.localizacao_codigo, FAMILIA_PRODUTO);

     if(liberado =  false)then
     begin
        exception "..." 'FAMILIA NAO PERMITIDA PARA LOCALIZACAO INFORMADA. FAMILIA:'||FAMILIA_PRODUTO||' LOCALIZACAO:'||new.localizacao_codigo||'';
     end
  end
end;



