Revision e5a76ed1
Von Moritz Bunkus vor etwa 8 Jahren hinzugefügt
SL/BackgroundJob/MassRecordCreationAndPrinting.pm | ||
---|---|---|
46 | 46 |
my $data = $job_obj->data_as_hash; |
47 | 47 |
|
48 | 48 |
eval { |
49 |
my $invoice; |
|
50 | 49 |
my $sales_delivery_order = SL::DB::DeliveryOrder->new(id => $delivery_order_id)->load; |
51 | 50 |
$number = $sales_delivery_order->donumber; |
51 |
my %conversion_params = $data->{transdate} ? ('attributes' => { transdate => $data->{transdate} }) : (); |
|
52 |
my $invoice = $sales_delivery_order->convert_to_invoice(%conversion_params); |
|
52 | 53 |
|
53 |
if (!$db->do_transaction(sub { |
|
54 |
$invoice = $sales_delivery_order->convert_to_invoice(sub { $data->{transdate} ? ('attributes' => { transdate => $data->{transdate} }) : |
|
55 |
undef }->() ) || die $db->error; |
|
56 |
1; |
|
57 |
})) { |
|
58 |
die $db->error; |
|
59 |
} |
|
54 |
die $db->error if !$invoice; |
|
60 | 55 |
|
61 | 56 |
$data->{num_created}++; |
62 | 57 |
push @{ $data->{invoice_ids} }, $invoice->id; |
Auch abrufbar als: Unified diff
Rechnungsmassenerstellen: keine DB-Transaktion um convert_to_invoice()
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: