SET TERM ^ ;

CREATE OR ALTER trigger tbrequisicao_b3i_01 for tbrequisicao
active before insert position 0
AS
DECLARE VARIABLE PROGRAMACAO_ID INTEGER;
DECLARE VARIABLE talao varchar(10);
DECLARE VARIABLE STATUS INTEGER;
DECLARE VARIABLE LINHA INTEGER;
DECLARE VARIABLE QUANTIDADE numeric(15,4);
BEGIN

  FOR
     SELECT
         P.ID,
         P.STATUS,
         fn_lpad(coalesce((select first 1 g.controle from tbremessa_item_processado g where g.remessa = new.remessa and g.id = p.tabela_id),0),4,'0') talao,
         ROW_NUMBER() OVER (ORDER BY P.ID DESC) AS LINHA
     FROM TBPROGRAMACAO P
     WHERE P.GP_ID    = NEW.GP_ID
     AND P.REMESSA_ID = NEW.REMESSA
     AND P.PRODUTO_ID = NEW.PRODUTO_ID
     AND P.TAMANHO    = NEW.TAMANHO
     --AND P.STATUS_REQUISICAO = 0

     ORDER BY P.ID DESC
  INTO
    :PROGRAMACAO_ID,
    :STATUS,
    :talao,
    :LINHA
  DO
  BEGIN

    --NAO PERMITE REGISTRAR REQUISICAO SE SKU EM ABERTO NA REMESSA
    IF(:STATUS < 3)THEN
    BEGIN
        EXCEPTION "..." 'REQUISICAO NAO PERMITIDA, HA TALOES DESTE SKU EM ABERTO NA CONFORMACAO, REMESSA:'||:NEW.REMESSA||'/'||talao||' GP:'||NEW.GP_ID||'. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    END

    --MARCA O PRIMEIRO GEGISTRO COMO AGUARDANDO REQUISICAO
    IF(:LINHA = 1)THEN
    BEGIN

        QUANTIDADE = coalesce(NEW.QUANTIDADE,0);
        QUANTIDADE = QUANTIDADE + coalesce((select sum(j.pares) from tbrequisicao_placa j where j.requisicao_id = new.id and j.status < 3),0);
        --QUANTIDADE = QUANTIDADE + coalesce((select sum(j.pares) from tbrequisicao_sobra s where s.requisicao_id = new.id and s.status < 3),0);

        UPDATE TBPROGRAMACAO P
           SET P.STATUS             = 1,
               P.STATUS_REQUISICAO  = 1,
               P.STATUS_SOLICITACAO = 0,
               P.REQUISICAO_ID      = NEW.ID,
               P.QUANTIDADE         = :QUANTIDADE
         WHERE P.ID = :PROGRAMACAO_ID;

    END ELSE
    BEGIN

    END

  END

END
^

SET TERM ; ^

