Zeiterfassung: Konvertierung: angegebenen Auftrag als Vorgänger verwenden können
[kivitendo-erp.git] / t / background_job / convert_time_recordings.t
index 4626b3c..db32947 100644 (file)
@@ -1,4 +1,4 @@
-use Test::More tests => 20;
+use Test::More tests => 27;
 
 use strict;
 
@@ -20,7 +20,7 @@ use SL::Dev::ALL qw(:ALL);
 Support::TestSetup::login();
 
 sub clear_up {
-  foreach (qw(OrderItem Order DeliveryOrder TimeRecording Project Part Customer RecordLink)) {
+  foreach (qw(TimeRecording OrderItem Order DeliveryOrder Project Part Customer RecordLink)) {
     "SL::DB::Manager::${_}"->delete_all(all => 1);
   }
   SL::DB::Manager::Employee->delete_all(where => [ '!login' => 'unittests' ]);
@@ -69,10 +69,10 @@ push @time_recordings, new_time_recording(
 )->save;
 
 my %data   = (
-  link_project => 1,
-  project_id   => $project->id,
-  from_date    => '01.04.2021',
-  to_date      => '30.04.2021',
+  link_order => 1,
+  project_id => $project->id,
+  from_date  => '01.04.2021',
+  to_date    => '30.04.2021',
 );
 my $db_obj = SL::DB::BackgroundJob->new();
 $db_obj->set_data(%data);
@@ -135,10 +135,10 @@ push @time_recordings, new_time_recording(
 
 # two time recordings, one order linked with project_id
 %data = (
-  link_project => 1,
-  project_id   => $project->id,
-  from_date    => '01.04.2021',
-  to_date      => '30.04.2021',
+  link_order => 1,
+  project_id => $project->id,
+  from_date  => '01.04.2021',
+  to_date    => '30.04.2021',
 );
 $db_obj = SL::DB::BackgroundJob->new();
 $db_obj->set_data(%data);
@@ -194,10 +194,10 @@ push @time_recordings, new_time_recording(
 
 # two time recordings, one order linked with project_id
 %data = (
-  link_project => 1,
-  project_id   => $project->id,
-  from_date    => '01.04.2021',
-  to_date      => '30.04.2021',
+  link_order => 1,
+  project_id => $project->id,
+  from_date  => '01.04.2021',
+  to_date    => '30.04.2021',
 );
 $db_obj = SL::DB::BackgroundJob->new();
 $db_obj->set_data(%data);
@@ -243,9 +243,9 @@ push @time_recordings, new_time_recording(
 )->save;
 
 %data = (
-  link_project => 0,
-  from_date    => '01.04.2021',
-  to_date      => '30.04.2021',
+  link_order => 0,
+  from_date  => '01.04.2021',
+  to_date    => '30.04.2021',
 );
 $db_obj = SL::DB::BackgroundJob->new();
 $db_obj->set_data(%data);
@@ -259,6 +259,59 @@ is($dos->[0]->items->[0]->base_qty*1, 180, 'date/duration and start/end2: base_q
 clear_up();
 
 
+########################################
+# time recording, linked with order_id
+########################################
+$part     = new_service(partnumber => 'Serv1', unit => 'Std')->save;
+$customer = new_customer()->save;
+
+# sales order with globalproject_id
+$sales_order = create_sales_order(
+  save             => 1,
+  customer         => $customer,
+  taxincluded      => 0,
+  orderitems       => [ create_order_item(part => $part, qty => 3, sellprice => 70), ]
+);
+
+@time_recordings = ();
+push @time_recordings, new_time_recording(
+  start_time => DateTime->new(year => 2021, month =>  4, day => 19, hour => 10, minute =>  5),
+  end_time   => DateTime->new(year => 2021, month =>  4, day => 19, hour => 11, minute =>  5),
+  customer   => $customer,
+  order      => $sales_order,
+  part       => $part,
+)->save;
+
+%data = (
+  link_order => 1,
+  from_date  => '01.04.2021',
+  to_date    => '30.04.2021',
+);
+$db_obj = SL::DB::BackgroundJob->new();
+$db_obj->set_data(%data);
+$job    = SL::BackgroundJob::ConvertTimeRecordings->new;
+$ret    = $job->run($db_obj);
+
+is_deeply($job->{job_errors}, [], 'no errros');
+like($ret, qr{^Number of delivery orders created: 1}, 'linked by order_id: one delivery order created');
+
+$linked_dos = $sales_order->linked_records(to => 'DeliveryOrder');
+is(scalar @$linked_dos, 1, 'linked by order_id: one delivery order linked to order');
+
+$linked_items = $sales_order->items->[0]->linked_records(to => 'DeliveryOrderItem');
+is(scalar @$linked_items, 1, 'linked by order_id: one delivery order item linked to order item');
+is($linked_items->[0]->qty*1, 1, 'linked by order_id: qty in delivery order');
+is($linked_items->[0]->base_qty*1, 1, 'linked by order_id: base_qty in delivery order');
+
+# reload order and orderitems to get changes to deliverd and ship
+Rose::DB::Object::Helpers::forget_related($sales_order, 'orderitems');
+$sales_order->load;
+
+is($sales_order->items->[0]->ship*1, 1, 'linked by order_id: ship in related order');
+
+clear_up();
+
+
 ########################################
 
 $::locale = $old_locale;