SET TERM ^ ;

CREATE OR ALTER trigger ttbtalao_vinculo_b01iu for tbtalao_vinculo
active before insert or update position 0
AS
declare variable vinculo_id integer;
declare variable status integer;
declare variable origem_remessa integer;
begin

    vinculo_id = coalesce((select s.vinculo_id from TBTALAO_VINCULO s where s.remessa_id = new.remessa_id and s.talao_id = new.talao_id and s.vinculo_id <> new.vinculo_id),0);
    
    if(vinculo_id > 0)then
    begin
      exception "..." 'Remessa: '||new.remessa_id||', Talão: '||new.talao_id||' já tem um vínculo (ID:'||:vinculo_id||').';
    end

    select r.origem from tbremessa r where r.numero = new.REMESSA_ID into origem_remessa;


    origem_remessa = coalesce(origem_remessa, 0);

    if(origem_remessa = 22595) then
    begin
        select
            p.status
        from vwremessa_talao_detalhe t, tbprogramacao p
        where t.remessa_id = new.REMESSA_ID
        and t.id = new.TALAO_ID
        and p.tabela_id = t.id
        and p.remessa_id = t.remessa_id
        and p.tipo = 'D'
        into status;
    end else
    begin
        select
            p.status
        from vwremessa_talao t, tbprogramacao p
        where t.remessa_id = new.REMESSA_ID
        and t.remessa_talao_id = new.TALAO_ID
        and p.tabela_id = t.id
        and p.remessa_id = t.remessa_id
        and p.tipo = 'A'
        into status;
    end

    status = coalesce(status,-1);

    if(not (status = 1 or status = 0))then
    begin

        exception "..." 'Remessa: '||new.remessa_id||', Talão: '||new.talao_id||' não pode ser vinculado, Status: "'||
            iif(status = 0, '0 - PARADO',
            iif(status = 1, '1 - INICIADO/PARADO',
            iif(status = 2, '2 - EM ANDAMENTO',
            iif(status = 3, '3 - FINALIZADO',
            iif(status = 6, '6 - ENCERRADO', 'Não Identificado')))))||'"';

    end

end
^

SET TERM ; ^

