Lagerbestand auch für andere Daten als heute anzeigbar.
[kivitendo-erp.git] / SL / WH.pm
index 833b573..f760f5e 100644 (file)
--- a/SL/WH.pm
+++ b/SL/WH.pm
@@ -59,7 +59,6 @@ sub transfer {
   my $employee   = SL::DB::Manager::Employee->find_by(login => $::form->{login});
   my ($now)      = selectrow_query($::form, $::form->get_standard_dbh, qq|SELECT current_date|);
   my @directions = (undef, qw(out in transfer));
-  my $db         = SL::DB->create(undef, 'LXOFFICE'); # get handle for transaction
 
   my $objectify = sub {
     my ($transfer, $field, $class, @find_by) = @_;
@@ -74,14 +73,15 @@ sub transfer {
     return;
   };
 
-  $db->begin_work;
-  eval {
+  my @trans_ids;
 
-    for my $transfer (@args) {
+  my $db = SL::DB::Inventory->new->db;
+  $db->do_transaction(sub{
+    while (my $transfer = shift @args) {
       my ($trans_id) = selectrow_query($::form, $::form->get_standard_dbh, qq|SELECT nextval('id')|);
 
       my $part          = $objectify->($transfer, 'parts',         'SL::DB::Part');
-      my $unit          = $objectify->($transfer, 'unit',          'SL::DB::Unit',         unit => $transfer->{unit});
+      my $unit          = $objectify->($transfer, 'unit',          'SL::DB::Unit',         name => $transfer->{unit});
       my $qty           = $transfer->{qty};
       my $src_bin       = $objectify->($transfer, 'src_bin',       'SL::DB::Bin');
       my $dst_bin       = $objectify->($transfer, 'dst_bin',       'SL::DB::Bin');
@@ -111,7 +111,7 @@ sub transfer {
       );
 
       if ($unit) {
-        $qty *= $unit->factor;
+        $qty *= $unit->factor           || 1;
         $qty /= $part->unit_obj->factor || 1 if $part->unit;
       }
 
@@ -132,17 +132,16 @@ sub transfer {
           qty       => $qty,
         )->save;
       }
-    }
-
-    $db->commit;
 
-    1;
-  } or do {
-    $db->rollback;
-    die $@; # rethrow
+      push @trans_ids, $trans_id;
+    }
+  }) or do {
+    $::form->error("Warehouse transfer error: " . join("\n", (split(/\n/, $db->error))[0..2]));
   };
 
   $::lxdebug->leave_sub;
+
+  return @trans_ids;
 }
 
 sub transfer_assembly {
@@ -621,6 +620,11 @@ sub get_warehouse_report {
     push @filter_vars, '%' . $filter{ean} . '%';
   }
 
+  if ($filter{date}) {
+    push @filter_ary, "i.itime <= ?";
+    push @filter_vars, $filter{date};
+  }
+
   # prepare qty comparison for later filtering
   my ($f_qty_op, $f_qty, $f_qty_base_unit);