@@ -, +, @@ --- Koha/CirculationRules.pm | 7 +++ ...ix_calc_fines_fr-currency_21-11-MT39815.pl | 51 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100755 installer/data/mysql/atomicupdate/fix_calc_fines_fr-currency_21-11-MT39815.pl --- a/Koha/CirculationRules.pm +++ a/Koha/CirculationRules.pm @@ -24,6 +24,7 @@ use Koha::Exceptions; use Koha::CirculationRule; use Koha::Caches; use Koha::Cache::Memory::Lite; +use Koha::Number::Price; use base qw(Koha::Objects); @@ -388,6 +389,12 @@ sub set_rule { } )->next(); + if ( $rule + && ( $rule->rule_name eq 'overduefinescap' || $rule->rule_name eq 'fine' ) ) + { + $rule_value = Koha::Number::Price->new($rule_value)->unformat; + } + if ($rule) { if ( defined $rule_value ) { $rule->rule_value($rule_value); --- a/installer/data/mysql/atomicupdate/fix_calc_fines_fr-currency_21-11-MT39815.pl +++ a/installer/data/mysql/atomicupdate/fix_calc_fines_fr-currency_21-11-MT39815.pl @@ -0,0 +1,51 @@ +use Modern::Perl; + +return { + bug_number => "BUG_33028", + description => +"Fix calculations around fines and values with comma as decimal separator", + up => sub { + my ($args) = @_; + my ( $dbh, $out ) = @$args{qw(dbh out)}; + + my $rules = $dbh->selectall_arrayref( +q|select * from circulation_rules where rule_name IN ('fine', 'overduefinescap')|, + { Slice => {} } + ); + + my $query = $dbh->prepare( + "UPDATE circulation_rules SET rule_value = ? where id = ?"); + + foreach my $rule ( @{$rules} ) { + my $rule_id = $rule->{'id'}; + my $rule_value = $rule->{'rule_value'}; + if ( $rule_value =~ /[a-zA-Z]/ ) { + die( + sprintf( + 'No only numbers in rule id %s ("%s") - fix it before restart this update', + $rule_id, $rule_value + ) + ); + } + else { + if ( $rule_value =~ /,/ ) { + if ( $rule_value !~ /,.*?,/ ) { + $rule_value =~ s/,/./; + $query->execute( $rule_value, $rule_id ); + } + else { + die( + sprintf( + 'Many commas in rule id %s ("%s") - fix it before restart this update', + $rule_id, $rule_value + ) + ); + } + } + } + + } + say $out + "BUG_33028 - Patch applied"; + }, + } --