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; }
}
# 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
use Modern::Perl;
-use Number::Format qw( format_price );
+use Number::Format;
use C4::Context;
use Koha::Acquisition::Currencies;
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);
}