Lager-Transfer: Transaktion mit with_transaction statt mit do_transaction.
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Thu, 26 Feb 2015 14:26:10 +0000 (15:26 +0100)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Fri, 6 Mar 2015 13:06:31 +0000 (14:06 +0100)
Hintergrund: Buchen einer Rechnung und Lagerbewegung in einer Transaktion
ausführen können.

Zitat aus einem anderen commit:
"do_transaction startet immer eine Transaktion, auch wenn außen rum
schon eine läuft. Damit wird die äußere Transaktion de facto außer
Kraft gesetzt."

SL/WH.pm

index e836d65..5b24cfd 100644 (file)
--- a/SL/WH.pm
+++ b/SL/WH.pm
@@ -79,7 +79,7 @@ sub transfer {
   my @trans_ids;
 
   my $db = SL::DB::Inventory->new->db;
-  $db->do_transaction(sub{
+  $db->with_transaction(sub{
     while (my $transfer = shift @args) {
       my ($trans_id) = selectrow_query($::form, $::form->get_standard_dbh, qq|SELECT nextval('id')|);
 
@@ -141,10 +141,12 @@ sub transfer {
           $part->update_attributes(warehouse_id  => conv_i($transfer->{dst_warehouse_id}));
           $part->update_attributes(bin_id        => conv_i($transfer->{dst_bin_id}));
         }
-     }
+      }
 
       push @trans_ids, $trans_id;
     }
+
+    1;
   }) or do {
     $::form->error("Warehouse transfer error: " . join("\n", (split(/\n/, $db->error))[0..2]));
   };