SET TERM ^ ; CREATE OR ALTER procedure SLS_VINCULA_MP ( TALAO integer) as declare variable CONS_ID integer; declare variable CONS_QUANTIDADE integer; declare variable CONS_REMESSA integer; declare variable CONS_TALAO_DETALHE_ID integer; declare variable CONS_TAMANHO integer; declare variable CONS_PRODUTO_ID integer; declare variable V_REMESSA integer; declare variable V_REMESSA_ACUMULADO_CONTROLE integer; declare variable V_QUANTIDADE integer; declare variable QUANTIDADE_A_REGISTRAR integer; declare variable ALOCADO integer; declare variable SALDO integer; declare variable TALAO_ID integer; declare variable V_TALAO integer; declare variable JA_ADICIONADO integer; begin for select rc.id, rc.consumo_kg as quantidade_consumo, rc.remessa, rc.talao_detalhe_id, rc.tamanho, rc.produto_id from tbremessa_consumo rc where rc.talao_detalhe_id = :talao and rc.fixo = 1 into :cons_id, :cons_quantidade, :cons_remessa, :cons_talao_detalhe_id, :cons_tamanho, :cons_produto_id do begin for select p1.remessa, p1.remessa_acumulado_controle, p1.controle, p1.quantidade_producao from tbpedido_item_processado p, tbpedido_item_processado p1, tbremessa_consumo_vinculo rcv, tbremessa_consumo rc where p.controle = :talao and rc.remessa = p.remessa and rc.talao_detalhe_id = p.controle and rcv.consumo_id = rc.id and p1.controle = rcv.remessa_talao_detalhe_id into :v_remessa, :v_remessa_acumulado_controle, :v_talao, :v_quantidade do begin :quantidade_a_registrar = 0; :alocado = coalesce((select sum(v.quantidade) from tbremessa_talao_vinculo v where v.consumo_id = :cons_id), 0); :ja_adicionado = coalesce((select sum(v.quantidade) from tbremessa_talao_vinculo v where v.tabela_id = :v_talao ), 0); :saldo = :cons_quantidade - :alocado; if(:saldo < :v_quantidade) then begin :quantidade_a_registrar = :saldo; end else begin :quantidade_a_registrar = :v_quantidade; end if(:cons_quantidade < :quantidade_a_registrar) then begin :quantidade_a_registrar = :cons_quantidade - :alocado; end :talao_id = (select id from tbremessa_item_processado p where p.controle = :v_remessa_acumulado_controle and p.remessa = :v_remessa); if(:ja_adicionado = 0) then -- anselmo 06/02/2025: serve para verificar se o talão já foi vinculado a este consumo e evitar tentativa de duplicidade (e travamento por exception) begin if(:saldo > 0) then begin insert into tbremessa_talao_vinculo ( talao_id, consumo_id, tipo, tabela_id, produto_id, tamanho, quantidade, quantidade_alternativa, status, datahora )values( :talao_id, :cons_id, 'D', :v_talao, :cons_produto_id, :cons_tamanho, :quantidade_a_registrar, 0, 0, localtimestamp ); end end end end end ^ SET TERM ; ^