X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/662df9d7fdc9c953d324a975a5bf554e6534c42e..f217d072d76183bc07723dcc29503b732bd2022d:/SL/BackgroundJob/ConvertTimeRecordings.pm diff --git a/SL/BackgroundJob/ConvertTimeRecordings.pm b/SL/BackgroundJob/ConvertTimeRecordings.pm index ff8c79b61..8f90d40b9 100644 --- a/SL/BackgroundJob/ConvertTimeRecordings.pm +++ b/SL/BackgroundJob/ConvertTimeRecordings.pm @@ -13,7 +13,7 @@ use SL::Locale::String qw(t8); use DateTime; use List::Util qw(any); - +use Try::Tiny; sub create_job { $_[0]->create_standard_job('7 3 1 * *'); # every first day of month at 03:07 } @@ -109,13 +109,24 @@ sub initialize_params { # convert date from string to object - my $from_date; - my $to_date; - $from_date = DateTime->from_kivitendo($self->params->{from_date}); - $to_date = DateTime->from_kivitendo($self->params->{to_date}); - # DateTime->from_kivitendo returns undef if the string cannot be parsed. Therefore test the result. - die 'Cannot convert date from string "' . $self->params->{from_date} . '"' if !$from_date; - die 'Cannot convert date to string "' . $self->params->{to_date} . '"' if !$to_date; + my ($from_date, $to_date); + try { + if ($self->params->{from_date}) { + $from_date = DateTime->from_kivitendo($self->params->{from_date}); + # no undef and no other type. + die unless ref $from_date eq 'DateTime'; + } + if ($self->params->{to_date}) { + $to_date = DateTime->from_kivitendo($self->params->{to_date}); + # no undef and no other type. + die unless ref $to_date eq 'DateTime'; + } + } catch { + die t8("Cannot convert date.") ."\n" . + t8("Input from string: #1", $self->params->{from_date}) . "\n" . + t8("Input to string: #1", $self->params->{to_date}) . "\n" . + t8("Details: #1", $_); + }; $to_date->add(days => 1); # to get all from the to_date, because of the time part (15.12.2020 23.59 > 15.12.2020) @@ -224,24 +235,6 @@ sub convert_with_linking { $do->save; $_->update_attributes(booked => 1) for @{$time_recordings_by_order_id->{$related_order_id}}; - $related_order->link_to_record($do); - - # TODO extend link_to_record for items, otherwise long-term no d.r.y. - foreach my $item (@{ $do->items }) { - foreach (qw(orderitems)) { - if ($item->{"converted_from_${_}_id"}) { - die unless $item->{id}; - RecordLinks->create_links('mode' => 'ids', - 'from_table' => $_, - 'from_ids' => $item->{"converted_from_${_}_id"}, - 'to_table' => 'delivery_order_items', - 'to_id' => $item->{id}, - ) || die; - delete $item->{"converted_from_${_}_id"}; - } - } - } - # update delivered and item's ship for related order my $helper = SL::Helper::ShippedQty->new->calculate($related_order)->write_to_objects; $related_order->delivered($related_order->{delivered}); @@ -294,7 +287,7 @@ sub get_order_for_time_recording { } $orders = SL::DB::Manager::Order->get_all(where => [customer_id => $tr->customer_id, - or => [quotation => undef, quotation => 0], + record_type => 'sales_order', globalproject_id => $project_id, ], with_objects => ['orderitems']);