Revision 27a1f595
Von Moritz Bunkus vor etwa 5 Jahren hinzugefügt
SL/BackgroundJob/MassRecordCreationAndPrinting.pm | ||
---|---|---|
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;
|
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:
(cherry picked from commit e5a76ed158219e3d2b19f142213f8a80c11627f1)
Cherry pick aus dem master selber, da dieser commit durch
54ce51443886623bb785e7c54492ecbc8dc9b3aa "Dateimanagement: Massendruck"
überschrieben wurde.
Behebt #411 (redmine).