]> wagnertech.de Git - mfinanz.git/blobdiff - SL/BackgroundJob/ConvertTimeRecordings.pm
restart apache2 in postinst
[mfinanz.git] / SL / BackgroundJob / ConvertTimeRecordings.pm
index ff8c79b6137d97d8f381b3175ae91b5fb0eacad7..8f90d40b9d03c5ef1767d4cc8b550eb12c598301 100644 (file)
@@ -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']);