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)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 18 Aug 2016 07:56:24 +0000 (09:56 +0200)
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.

SL/BackgroundJob/MassRecordCreationAndPrinting.pm

index e4c75b8..16823dc 100644 (file)
@@ -46,17 +46,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->do_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;