
CREATE OR ALTER trigger ttbcolaborador_b02u for tbcolaborador
active before update position 0
AS
begin

  if (old.situacao = 1 and new.situacao <> 1) then
  begin
     update tbusuario u set u.status = 0 where u.colaborador_id = new.codigo;

     -- data fim do cargo se colaborador demitido ou desistente
      if(new.situacao > 0)then
      begin
         update TBCOLABORADOR_CARGO c
         set c.data_final = dateadd(day, -1, coalesce(new.data_demissao, current_date))
         where c.colaborador_codigo = new.codigo
         and c.data_final is null;
      end
  end
end;

CREATE OR ALTER trigger ttbcolaborador_cargo_b01i for tbcolaborador_cargo
active before insert position 0
AS
declare variable old_cargo integer;
begin
  --coloca data fim em um colaborador que mudou de cargo
  old_cargo = coalesce((select first 1 c.cargo_codigo from TBCOLABORADOR_CARGO c where c.colaborador_codigo = new.colaborador_codigo),0);

  if(old_cargo > 0)then
  begin
     update TBCOLABORADOR_CARGO c
     set c.data_final = dateadd(day, -1, new.data_inicial)
     where c.colaborador_codigo = new.colaborador_codigo
     and c.cargo_codigo = :old_cargo
     and c.data_final is null;
  end
end;
