Rechnungsmassenerstellen: keine DB-Transaktion um convert_to_invoice()
authorMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 18 Aug 2016 07:56:24 +0000 (09:56 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 11 Dec 2019 13:24:33 +0000 (14:24 +0100)
convert_to_invoice() macht selber intern bereits eine Transaktion auf;
daher ist die außen unnötig.

Weiterhin waren die Parameter merkwürdig übergeben:

• Für eine On-The-Fly-Unterscheidung für »diese Parameter« vs. »keine
  Parameter« benötigt man keine sub; das geht einfach mit einem ternären
  Operator.
• »Keine Parameter« drückt man nicht durch »undef« aus, sondern durch
  die leere Liste »()«. Wird »undef« als einziger Parameter übergeben,
  so wird in der Funktion de Facto das hier gemacht:

  my %hash = (undef);

  und das ergibt eine Warnung, dass eine Liste mit ungerader Anzahl von
  Elementen in ein Hash umgewandelt werden soll.

(cherry picked from commit e5a76ed158219e3d2b19f142213f8a80c11627f1)

Cherry pick aus dem master selber, da dieser commit durch
54ce51443886623bb785e7c54492ecbc8dc9b3aa "Dateimanagement: Massendruck"
überschrieben wurde.

Behebt #411 (redmine).

SL/BackgroundJob/MassRecordCreationAndPrinting.pm

index 756867a..0ab03bd 100644 (file)
@@ -49,17 +49,12 @@ sub create_invoices {
     my $data   = $job_obj->data_as_hash;
 
     eval {
-      my $invoice;
       my $sales_delivery_order = SL::DB::DeliveryOrder->new(id => $delivery_order_id)->load;
       $number                  = $sales_delivery_order->donumber;
+      my %conversion_params    = $data->{transdate} ? ('attributes' => { transdate => $data->{transdate} }) : ();
+      my $invoice              = $sales_delivery_order->convert_to_invoice(%conversion_params);
 
-      if (!$db->with_transaction(sub {
-        $invoice = $sales_delivery_order->convert_to_invoice(sub { $data->{transdate} ? ('attributes' => { transdate => $data->{transdate} }) :
-                                                                         undef }->() ) || die $db->error;
-        1;
-      })) {
-        die $db->error;
-      }
+      die $db->error if !$invoice;
 
       $data->{num_created}++;
       push @{ $data->{invoice_ids} }, $invoice->id;