-- DERECHOS DE AUTOR ING. MARCO T. GONZALEZ
-- DESARROLLO CREATIVO S.A.
-- LICENCIA DE USO A DENEINSA
-- SECRETO COMERCIAL PROTEGIDO POR ACUERDO DE NO DIVULGACION

CREATE OR REPLACE TRIGGER ACTUALIZA_RESERVADO
AFTER INSERT OR UPDATE OR DELETE ON VenDetPedido
FOR EACH ROW
Declare
   procedure Actualizar(Pcia in char, Pbod in char, Part in varchar2, Plot in varchar2,
                        Pmed in varchar2, PCant in number) is
      Vmed      inv_articulo.medida%type;
      Vcant     inv_lote_artic_bodega.can_apartado%type:=Pcant;
   Begin
      Vmed:=ConvMedida.MedidaArt(Pcia, Part);
      if Vmed!=Pmed then
         ConvMedida.FijarMedida(1, Vmed);
         Vcant:=ConvMedida.FactorEstandar(Pcant, Pmed);
      end if;
      update inv_lote_artic_bodega
         Set can_apartado=Can_apartado+VCant
      where cod_cia=Pcia
        and cod_bodega=Pbod
        and cod_articulo=Part
        and cod_lote=Plot;
      if sql%notfound then
         insert into inv_lote_artic_bodega
             (cod_cia, cod_bodega, cod_lote, cod_articulo,
              can_existe, can_apartado)
            values (Pcia, Pbod, Plot, Part, 0, Vcant);
      end if;
   End;
BEGIN
   If Inserting Then
      if :new.reservado>:new.facturado then
         Actualizar(:new.cia, :new.bodega, :new.articulo, :new.lote,
                    :new.medida, :new.reservado-:new.facturado);
      end if;
   elsif Updating then
      if :old.reservado>:old.facturado then
         Actualizar(:old.cia, :old.bodega, :old.articulo, :old.lote,
                    :old.medida, -:old.reservado+:old.facturado);
      end if;
      if :new.reservado>:new.facturado then
         Actualizar(:new.cia, :new.bodega, :new.articulo, :new.lote,
                    :new.medida, :new.reservado-:new.facturado);
      end if;
   elsif Deleting then
      if :old.reservado>:old.facturado then
         Actualizar(:old.cia, :old.bodega, :old.articulo, :old.lote,
                    :old.medida, -:old.reservado+:old.facturado);
      end if;
   end if;
END;
/
