Bug 21262: Do not format numbers for editing if too big
authorNick Clemens <nick@bywatersolutions.com>
Thu, 23 Aug 2018 14:44:31 +0000 (14:44 +0000)
committerNick Clemens <nick@bywatersolutions.com>
Sat, 15 Sep 2018 23:59:59 +0000 (23:59 +0000)
This patch copies the code from bug 15770 to the format_for_editing
sub.

It also corrects schema issue, listing the purpose for two acq columns
instead of claing unused

To test:
1 - Edit a fund
2 - Set warning at amount to: 100000000000000
3 - Save budget
4 - Try to edit - internal server error
5 - Apply patch
6 - Should be able to edit budget
7 - Number should appear unformatted

Signed-off-by: Christopher Brannon <cbrannon@cdalibrary.org>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2 quick notes:
1. Code must be moved to a subroutine if reused later
2. It would have prefered to have the comment of the 2 DB columns on a separate patch
(even separate bug report). As it's minor and that the patch will certainly backported
I will not block it.

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Koha/Number/Price.pm
installer/data/mysql/kohastructure.sql

index f549d8a..64c9dfe 100644 (file)
@@ -61,6 +61,11 @@ sub format_for_editing {
         mon_decimal_point => '.',
     };
 
+    # To avoid the system to crash, we will not format big number
+    # We divide per 100 because we want to keep the default DECIMAL_DIGITS (2)
+    # error - round() overflow. Try smaller precision or use Math::BigFloat
+    return $self->value if $self->value > Number::Format::MAX_INT/100;
+
     return Number::Format->new(%$format_params)->format_price($self->value);
 }
 
index 60d03ef..d5368d4 100644 (file)
@@ -2833,8 +2833,8 @@ CREATE TABLE `aqbudgets` ( -- information related to Funds
   `budget_name` varchar(80) default NULL, -- name assigned to the fund by the user
   `budget_branchcode` varchar(10) default NULL, -- branch that this fund belongs to (branches.branchcode)
   `budget_amount` decimal(28,6) NULL default '0.00', -- total amount for this fund
-  `budget_encumb` decimal(28,6) NULL default '0.00', -- not used in the code
-  `budget_expend` decimal(28,6) NULL default '0.00', -- not used in the code
+  `budget_encumb` decimal(28,6) NULL default '0.00', -- budget warning at percentage
+  `budget_expend` decimal(28,6) NULL default '0.00', -- budget warning at amount
   `budget_notes` LONGTEXT, -- notes related to this fund
   `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, -- date and time this fund was last touched (created or modified)
   `budget_period_id` int(11) default NULL, -- id of the budget that this fund belongs to (aqbudgetperiods.budget_period_id)