Bug 15770: Do not format numbers if too big
At several places we got the following error if we use numbers too big for Number::Format Template process failed: undef error - round() overflow. Try smaller precision or use Math::BigFloat at /home/koha/src/Koha/Number/Price.pm line 44 It make the app explodes. The goal here is to handle these errors gracefully and easily. Test plan: - Add a manual fine to a patron of 100000000000000 - Create a patron category with an enrolment fee of 123456789012345 Signed-off-by: Mark Tompsett <mtompset@hotmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
parent
431d315534
commit
937237a1f2
|
|
@ -41,6 +41,11 @@ sub format {
|
|||
|
||||
my $format_params = $self->_format_params( $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)->format_price($self->value);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 30;
|
||||
use Test::More tests => 31;
|
||||
|
||||
use Test::MockModule;
|
||||
use t::lib::Mocks;
|
||||
|
|
@ -33,6 +33,8 @@ is( Koha::Number::Price->new(3)->format( $format ), '3.00', 'US: format 3' );
|
|||
is( Koha::Number::Price->new(1234567890)->format( $format ),
|
||||
'1,234,567,890.00', 'US: format 1234567890' );
|
||||
|
||||
is( Koha::Number::Price->new(100000000000000)->format, '100000000000000', 'Numbers too big are not formatted');
|
||||
|
||||
# FIXME This should be display symbol, but it was the case before the creation of this module
|
||||
is( Koha::Number::Price->new->format( { %$format, with_symbol => 1 } ),
|
||||
'0.00', 'US: format 0 with symbol' );
|
||||
|
|
|
|||
Loading…
Reference in New Issue