CREATE OR ALTER trigger ttbprogramacao_b7u for tbprogramacao
active before update position 0
AS
declare variable REMESSAS_ABERTAS integer;
declare variable REMESSA integer;
declare variable DATA date;
declare variable TIPO varchar(1);
declare variable EM_PRODUCAO integer;
declare variable REQUISICOES_DISPONIVEIS integer;
declare variable E_REQUISICAO integer;
declare variable REMESSAS_NUMERO integer;
begin

    :REMESSAS_NUMERO = 2;

    if(new.status = 2 and new.ferramenta_id > 0 and new.tipo = 'A')then
    begin

        :REMESSAS_NUMERO = (Select first 1 CAST(N.valor_ext AS integer) QUANTIDADE from tbcontrole_n n where n.id = 240);

        IF(:REMESSAS_NUMERO > 0)THEN
        BEGIN
            for
                Select R1.numero as REMESSA, R1.Data, R1.Tipo,
    
                Coalesce((Select Count(Distinct(remessa_id)) from
                (Select p.remessa_id, Count(p.remessa_id) as qtd, sum(p.status_requisicao) as rec
                  From tbprogramacao p
                  where p.status < 3
                    and p.gp_id = p.gp_id
                    and p.tipo = 'A'
                    and p.ferramenta_id > 0
                    and p.gp_id = new.gp_id
                    and p.remessa_id < new.remessa_id
    
                    group by 1
                ) where qtd > rec)
    
                ,0) remessas_abertas,
            
                Coalesce((Select Count(Distinct(p.remessa_id))
                  From tbprogramacao p
                  where p.status = 2
                    and p.tipo = 'A'
                    and p.ferramenta_id > 0
                    and p.remessa_id = new.remessa_id
                    and p.gp_id = new.gp_id
                    and p.up_id = new.up_id
                ),0) em_producao,
    
    
                Coalesce((Select Count(Distinct(p.remessa_id))
                  From tbprogramacao p
                  where p.status < 3
                    and p.tipo = 'A'
                    and p.ferramenta_id > 0
                    and p.status_requisicao = 1
                    and p.gp_id = new.gp_id
                    and p.up_id = new.up_id
                    and Coalesce((SELECT first 1
                            coalesce((select first 1 v.SITUACAO
                               FROM
                                    TBREMESSA_ITEM_PROCESSADO v,
                                    TBREMESSA I
                                WHERE v.REMESSA    = j.REMESSA_GERADA
                                    AND v.CONTROLE   = j.TALAO
                                    AND I.NUMERO     = j.REMESSA_GERADA
                            ),0)
                        
                        FROM TBREQUISICAO j
                        
                        WHERE j.id = p.requisicao_id),0) = 3
            
                ),0) requisicoes_disponiveis,
    
                new.status_requisicao as e_requisicao
            
            From TbRemessa R1
            Where R1.Numero = new.remessa_id
            and R1.Tipo = '1'
        
            into
                :REMESSA,
                :DATA,
                :TIPO,
                :REMESSAS_ABERTAS,
                :EM_PRODUCAO,
                :REQUISICOES_DISPONIVEIS,
                :E_REQUISICAO
            do
            begin
    
                  if(:REQUISICOES_DISPONIVEIS > 0)then
                  begin
                      --se for requisicao vai abrir mais q o permitido
                      if (:E_REQUISICAO = 0) Then
                      Begin
                          if (:REMESSAS_ABERTAS >= REMESSAS_NUMERO) then
                          Begin
                            Exception "..." 'ATENCAO, EXISTEM '||coalesce(:REQUISICOES_DISPONIVEIS,0)||' REQUISICOES DISPONIVEIS PARA PRODUCAO, PRODUZA ELAS PRIMEIRO, EM CASO DE DUVIDA PROCURAR O PCP';
                          End
                      End
    
                  end else
                  begin
    
                      if (:REMESSAS_ABERTAS >= REMESSAS_NUMERO) then
                      Begin
                        Exception "..." 'ATENCAO, NAO SAO PERMITIDOS MAIS DE '||coalesce(:REMESSAS_ABERTAS,0)||' REMESSAS EM ABERTO, EM CASO DE DUVIDA PROCURAR O PCP';
                      End
    
                  End
            end
        END
    end
end;
