X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fbackground_job%2Fconvert_time_recordings.t;h=454af117a472c5de88bd7922a1e3552b5fed58df;hb=cda088059077643caf3167ad88cf389ab9945eda;hp=32e2828637db1e9b432a4f664633c0d525ec1d92;hpb=a43aa9ac7d2d669ab9b7e52c4135aa5ffa22b6f1;p=kivitendo-erp.git diff --git a/t/background_job/convert_time_recordings.t b/t/background_job/convert_time_recordings.t index 32e282863..454af117a 100644 --- a/t/background_job/convert_time_recordings.t +++ b/t/background_job/convert_time_recordings.t @@ -1,4 +1,4 @@ -use Test::More tests => 40; +use Test::More tests => 52; use strict; @@ -37,7 +37,7 @@ $::locale = Locale->new('en'); clear_up(); ######################################## -# two time recordings, one order linked with project_id +# two time recordings, one order linked with project_id in time recording entry ######################################## my $part = new_service(partnumber => 'Serv1', unit => 'Std')->save; my $project = create_project(projectnumber => 'p1', description => 'Project 1'); @@ -70,7 +70,6 @@ push @time_recordings, new_time_recording( my %data = ( link_order => 1, - project_id => $project->id, from_date => '01.01.2021', to_date => '30.04.2021', ); @@ -102,7 +101,7 @@ clear_up(); ######################################## -# two time recordings, one order linked with project_id +# two time recordings, one order linked with project_id in time recording entry # unit in order is 'min', but part is 'Std' ######################################## $part = new_service(partnumber => 'Serv1', unit => 'Std')->save; @@ -133,10 +132,8 @@ push @time_recordings, new_time_recording( part => $part, )->save; -# two time recordings, one order linked with project_id %data = ( link_order => 1, - project_id => $project->id, from_date => '01.04.2021', to_date => '30.04.2021', ); @@ -161,7 +158,7 @@ clear_up(); ######################################## -# two time recordings, one order linked with project_id +# two time recordings, one order linked with project_id in time recording entry # unit in order is 'Std', but part is 'min' ######################################## $part = new_service(partnumber => 'Serv1', unit => 'min')->save; @@ -192,10 +189,8 @@ push @time_recordings, new_time_recording( part => $part, )->save; -# two time recordings, one order linked with project_id %data = ( link_order => 1, - project_id => $project->id, from_date => '01.04.2021', to_date => '30.04.2021', ); @@ -313,6 +308,135 @@ is($sales_order->items->[0]->ship*1, 1, 'linked by order_id: ship in related ord clear_up(); +######################################## +# override project and part +######################################## +$part = new_service(partnumber => 'Serv1', unit => 'Std')->save; +my $part2 = new_service(partnumber => 'Serv2', unit => 'min')->save; +$project = create_project(projectnumber => 'p1', description => 'Project 1'); +my $project2 = create_project(projectnumber => 'p2', description => 'Project 2'); +$customer = new_customer()->save; + +$sales_order = create_sales_order( + save => 1, + customer => $customer, + globalproject => $project, + taxincluded => 0, + orderitems => [ create_order_item(part => $part, qty => 180, unit => 'min', sellprice => 70), ] +); +my $sales_order2 = create_sales_order( + save => 1, + customer => $customer, + globalproject => $project, + taxincluded => 0, + orderitems => [ create_order_item(part => $part2, qty => 180, unit => 'min', sellprice => 70), ] +); + +new_time_recording( + start_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 10, minute => 10), + end_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 11, minute => 10), + customer => $customer, + project => $project, + part => $part, +)->save; +new_time_recording( + start_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 11, minute => 10), + end_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 12, minute => 10), + customer => $customer, + project => $project2, + part => $part2, +)->save; +new_time_recording( + start_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 12, minute => 10), + end_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 13, minute => 10), + customer => $customer, +)->save; + +%data = ( + link_order => 1, + from_date => '01.04.2021', + to_date => '30.04.2021', + override_part_id => $part->id, + override_project_id => $project->id, +); +$db_obj = SL::DB::BackgroundJob->new(); +$db_obj->set_data(%data); +$job = SL::BackgroundJob::ConvertTimeRecordings->new; +$ret = $job->run($db_obj); + +$linked_dos = $sales_order->linked_records(to => 'DeliveryOrder'); +is($linked_dos->[0]->globalproject_id, $project->id, 'overriden part and project: project in delivery order'); + +$linked_items = $sales_order->items->[0]->linked_records(to => 'DeliveryOrderItem'); +is($linked_items->[0]->qty*1, 3, 'overriden part and project: qty in delivery order'); +is($linked_items->[0]->base_qty*1, 3, 'overriden part and project: base_qty in delivery order'); +is($linked_items->[0]->parts_id, $part->id, 'overriden part and project: part id'); + +my $linked_dos2 = $sales_order2->linked_records(to => 'DeliveryOrder'); +is(scalar @$linked_dos2, 0, 'overriden part and project: no delivery order for unused order'); + +# reload order and orderitems to get changes to deliverd and ship +Rose::DB::Object::Helpers::forget_related($sales_order, 'orderitems'); +$sales_order->load; +Rose::DB::Object::Helpers::forget_related($sales_order2, 'orderitems'); +$sales_order2->load; + +is($sales_order ->items->[0]->ship||0, 180, 'overriden part and project: ship in related order'); +is($sales_order2->items->[0]->ship||0, 0, 'overriden part and project: ship in not related order'); + +clear_up(); + + +######################################## +# default project and part +######################################## +$part = new_service(partnumber => 'Serv1', unit => 'Std')->save; +$project = create_project(projectnumber => 'p1', description => 'Project 1'); +$customer = new_customer()->save; + +$sales_order = create_sales_order( + save => 1, + customer => $customer, + globalproject => $project, + taxincluded => 0, + orderitems => [ create_order_item(part => $part, qty => 180, unit => 'min', sellprice => 70), ] +); + +new_time_recording( + start_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 10, minute => 10), + end_time => DateTime->new(year => 2021, month => 4, day => 19, hour => 11, minute => 40), + customer => $customer, +)->save; + +%data = ( + link_order => 1, + from_date => '01.04.2021', + to_date => '30.04.2021', + default_part_id => $part->id, + default_project_id => $project->id, +); +$db_obj = SL::DB::BackgroundJob->new(); +$db_obj->set_data(%data); +$job = SL::BackgroundJob::ConvertTimeRecordings->new; +$ret = $job->run($db_obj); + +$linked_dos = $sales_order->linked_records(to => 'DeliveryOrder'); +is($linked_dos->[0]->globalproject_id, $project->id, 'default and project: project in delivery order'); + +$linked_items = $sales_order->items->[0]->linked_records(to => 'DeliveryOrderItem'); +is($linked_items->[0]->qty*1, 1.5, 'default part and project: qty in delivery order'); +is($linked_items->[0]->base_qty*1, 1.5, 'default part and project: base_qty in delivery order'); +is($linked_items->[0]->parts_id, $part->id, 'default part and project: part id'); + +# 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, 90, 'default part and project: ship in related order'); + +clear_up(); + + ######################################## # check rounding ######################################## @@ -453,7 +577,7 @@ ok($err_msg =~ '^Customer numbers must be given in an array', 'wrong customer nu ##### %data = ( - part_id => '123', + override_part_id => '123', ); $db_obj = SL::DB::BackgroundJob->new(); @@ -462,13 +586,13 @@ $job = SL::BackgroundJob::ConvertTimeRecordings->new; $err_msg = ''; eval { $ret = $job->run($db_obj); 1; } or do {$err_msg = $@}; -ok($err_msg =~ '^No valid part found by given part id', 'invalid part id detected'); +ok($err_msg =~ '^No valid part found by given override part id', 'invalid part id detected'); ##### $part = new_service(partnumber => 'Serv1', unit => 'Std', obsolete => 1)->save; %data = ( - part_id => $part->id, + override_part_id => $part->id, ); $db_obj = SL::DB::BackgroundJob->new(); @@ -477,12 +601,12 @@ $job = SL::BackgroundJob::ConvertTimeRecordings->new; $err_msg = ''; eval { $ret = $job->run($db_obj); 1; } or do {$err_msg = $@}; -ok($err_msg =~ '^No valid part found by given part id', 'obsolete part detected'); +ok($err_msg =~ '^No valid part found by given override part id', 'obsolete part detected'); ##### %data = ( - project_id => 123, + override_project_id => 123, ); $db_obj = SL::DB::BackgroundJob->new(); @@ -491,13 +615,13 @@ $job = SL::BackgroundJob::ConvertTimeRecordings->new; $err_msg = ''; eval { $ret = $job->run($db_obj); 1; } or do {$err_msg = $@}; -ok($err_msg =~ '^No valid project found by given project id', 'invalid project id detected'); +ok($err_msg =~ '^No valid project found by given override project id', 'invalid project id detected'); ##### $project = create_project(projectnumber => 'p1', description => 'Project 1', valid => 0)->save; %data = ( - project_id => $project->id, + override_project_id => $project->id, ); $db_obj = SL::DB::BackgroundJob->new(); @@ -506,7 +630,7 @@ $job = SL::BackgroundJob::ConvertTimeRecordings->new; $err_msg = ''; eval { $ret = $job->run($db_obj); 1; } or do {$err_msg = $@}; -ok($err_msg =~ '^No valid project found by given project id', 'invalid project detected'); +ok($err_msg =~ '^No valid project found by given override project id', 'invalid project detected'); #####