From 0dc722c5183bdd162eba6992a4d38a1a9d28f285 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 6 Oct 2017 09:47:26 -0400 Subject: [PATCH] Bug 19425: Adding orders from order file with multiple budgets per record triggers error If you import an order file ( using MarcItemFieldsToOrder ) that has a different budget for each item to be ordered, you will get an error and a partially created basket. This is because Koha attempts to add the item to each order *for each budget*. This is clearly incorrect. Instead, we should be grouping items by budget and for each budget only adding those items that have a matching budget. Test plan: 1) Do not apply this patch 2) Download the provided MARC record 3) Add the branchcode 'ALD' to your server 4) Add the ccode 'ACOL' to your server 5) Add the budget codes 'adultay' and 'branchay' to your server 6) Stage the order file 7) Create a basket, import the order file 8) No we have 3 records, 2 of them have 2 items each with different budget codes 9) Attempt to import, note the error 10) Apply this patch 11) Repeat steps 6-8, note the order completes and results in 5 order lines being added to the basket! Signed-off-by: Kyle M Hall Signed-off-by: Christopher Kellermeyer Signed-off-by: Marcel de Rooy First step of test plan amended (not apply instead of apply). Signed-off-by: Jonathan Druart --- acqui/addorderiso2709.pl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/acqui/addorderiso2709.pl b/acqui/addorderiso2709.pl index cc5d222312..f2272e4a38 100755 --- a/acqui/addorderiso2709.pl +++ b/acqui/addorderiso2709.pl @@ -246,6 +246,8 @@ if ($op eq ""){ for (my $i = 0; $i < $count; $i++) { $budget_hash->{$budget_codes[$i]}->{quantity} += 1; $budget_hash->{$budget_codes[$i]}->{price} = $itemprices[$i]; + $budget_hash->{$budget_codes[$i]}->{itemnumbers} //= []; + push( $budget_hash->{$budget_codes[$i]}->{itemnumbers}, $itemnumbers[$i] ); } # Create orderlines from MarcItemFieldsToOrder @@ -307,7 +309,7 @@ if ($op eq ""){ }; my $order = Koha::Acquisition::Order->new( \%orderinfo )->store; - $order->add_item( $_ ) for @itemnumbers; + $order->add_item( $_ ) for @{ $budget_hash->{$budget_id}->{itemnumbers} }; } } } else { -- 2.39.5