From 3dcfbd5d3f467eb81bd7e6716712142eafae656f Mon Sep 17 00:00:00 2001
From: Aleisha Amohia <aleishaamohia@hotmail.com>
Date: Mon, 17 Oct 2022 02:16:58 +0000
Subject: [PATCH] Bug 31840: Consider current cost if modifying order

This patch deducts the current cost of an order if modifying it, so that
the current cost isn't counted when checking whether the updated cost
will take the order total amount above the allowed budget.

To test:
1. Add an active budget of $1,000
2. Attach a fund of $1,000. Set the fund to warn at 98% and $900.
3. Add an order to a basket, give it a vendor price of $500 with no
discount or tax and Save
4. Modify the order and change the vendor price to $450 and Save
5. Notice you get a warning that this order total amount will exceed the
allowed budget - this is incorrect.
6. Apply the patch and cancel the change so you're redirected back to
the basket
7. Modify the order and change the vendor price to $450 and Save
8. You should be able to Save without requiring confirmation
9. Add another order to the basket, give it a vendor price of $100 with
no discount or tax and Save. This should save normally, confirming we
can add new orders that do not exceed the allowed budget
10. Add another order to the basket, give it a vendor price of $500 with
no discount or tax and Save. This should trigger the warning that you
will exceed the allowed budget, as expected.

Sponsored-by: Waikato Institute of Technology
---
 acqui/addorder.pl | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/acqui/addorder.pl b/acqui/addorder.pl
index 98e3acbe6d4..d0ac3cbe2fb 100755
--- a/acqui/addorder.pl
+++ b/acqui/addorder.pl
@@ -155,6 +155,14 @@ unless($confirm_budget_exceeding) {
     my $budget = GetBudget($budget_id);
     my $budget_spent = GetBudgetSpent($budget_id);
     my $budget_ordered = GetBudgetOrdered($budget_id);
+
+    my $ordernumber = $input->param('ordernumber');
+    if ( $ordernumber ) {
+        # modifying an existing order so remove order price from $budget_ordered
+        my $order = Koha::Acquisition::Orders->find($ordernumber);
+        $budget_ordered = $budget_ordered - ( $order->ecost_tax_included * $order->quantity );
+    }
+
     my $budget_used = $budget_spent + $budget_ordered;
     my $budget_remaining = $budget->{budget_amount} - $budget_used;
     my $budget_encumbrance = $budget->{budget_amount} * $budget->{budget_encumb} / 100;
-- 
2.20.1