Bug 18736: (follow-up) Fix missing rounding and bad formatting
This patch: Adds a missing use Uses 'Koha::Number::Price->round()' instead of 'format()' to ensure numeric returns Ensures too big numbers don't crash round() Uses syspref in 'GetBudgetHierarchy' To test: Follow previous test plan Check values on admin/aqbudgets.pl are affected by syspref Ensure values throughout acquisitions are correctly calculated/displayed (even when greater than 1,000) Signed-off-by: Julian Maurice <julian.maurice@biblibre.com> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
parent
b17ca2b701
commit
4ccbae8879
|
|
@ -2026,7 +2026,7 @@ returns a price rounded as specified in OrderPriceRounding system preference.
|
|||
sub get_rounded_price {
|
||||
my ( $price ) = @_;
|
||||
my $rounding_pref = C4::Context->preference('OrderPriceRounding');
|
||||
if( $rounding_pref eq 'nearest_cent' ) { return Koha::Number::Price->new( $price )->format(); }
|
||||
if( $rounding_pref eq 'nearest_cent' ) { return Koha::Number::Price->new( $price )->round(); }
|
||||
else { return $price; }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -561,14 +561,14 @@ sub GetBudgetHierarchy {
|
|||
# Get all the budgets totals in as few queries as possible
|
||||
my $hr_budget_spent = $dbh->selectall_hashref(q|
|
||||
SELECT aqorders.budget_id, aqbudgets.budget_parent_id,
|
||||
SUM( COALESCE(unitprice_tax_included, ecost_tax_included) * quantity ) AS budget_spent
|
||||
SUM( | . _get_rounding_sql(qq|COALESCE(unitprice_tax_included, ecost_tax_included)|) . q| * quantity ) AS budget_spent
|
||||
FROM aqorders JOIN aqbudgets USING (budget_id)
|
||||
WHERE quantityreceived > 0 AND datecancellationprinted IS NULL
|
||||
GROUP BY budget_id, budget_parent_id
|
||||
|, 'budget_id');
|
||||
my $hr_budget_ordered = $dbh->selectall_hashref(q|
|
||||
SELECT aqorders.budget_id, aqbudgets.budget_parent_id,
|
||||
SUM(ecost_tax_included * quantity) AS budget_ordered
|
||||
SUM( | . _get_rounding_sql(qq|ecost_tax_included|) . q| * quantity) AS budget_ordered
|
||||
FROM aqorders JOIN aqbudgets USING (budget_id)
|
||||
WHERE quantityreceived = 0 AND datecancellationprinted IS NULL
|
||||
GROUP BY budget_id, budget_parent_id
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ package Koha::Number::Price;
|
|||
|
||||
use Modern::Perl;
|
||||
|
||||
use Number::Format qw( format_price );
|
||||
use Number::Format;
|
||||
use C4::Context;
|
||||
use Koha::Acquisition::Currencies;
|
||||
|
||||
|
|
@ -84,6 +84,11 @@ sub round {
|
|||
|
||||
my $format_params = $self->_format_params;
|
||||
|
||||
# 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)->round($self->value);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ use C4::Auth;
|
|||
use C4::Output;
|
||||
use Modern::Perl;
|
||||
use CGI qw ( -utf8 );
|
||||
use C4::Acquisition;
|
||||
use Koha::Acquisition::Invoice::Adjustments;
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
|
|
|||
Loading…
Reference in New Issue