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).
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;