Bug 34279: Don't enforce overduefinescap unless it is greater than 0

When creating a circ rule, we can set overduefinescap to blank or 0 and no cap is enforced. If we edit that rule, the blank/0 is converted to "0.00" which perl considers true, thus zero-ing out any calculated fine.

Considering we've always ignored an overdue fines cap of 0, we should also ignore 0.00. However, perl is evaluating it as a string which makes it true instead of false as 0 is.

Test Plan:
1) Apply the first patch ( unit tests )
2) prove t/db_dependent/Circulation/CalcFine.t
3) Note the test fails
4) Apply the second patch as well
5) prove t/db_dependent/Circulation/CalcFine.t
6) Note the test passes

Test Plan 2:
1) Create an all/all/all rule with an overduefinescap of 0.00, with a
   daily fine. Enable CalculateFinesOnReturn
2) Backdate a checkout so it is overdue
3) Return this item, note the lack of a fine
4) Apply this patch set
5) Backdate a checkout and return it again
6) Note the fine is generated!

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 1763b136d1)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit 662da18be2)
Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com>
This commit is contained in:
Kyle Hall 2023-07-14 07:36:47 -04:00 committed by Pedro Amorim
parent 0860515897
commit 7cb0a706cc
2 changed files with 17 additions and 13 deletions

View file

@ -282,7 +282,10 @@ sub CalcFine {
}
} # else { # a zero (or null) chargeperiod or negative units_minus_grace value means no charge. }
$amount = $issuing_rule->{overduefinescap} if $issuing_rule->{overduefinescap} && $amount > $issuing_rule->{overduefinescap};
$amount = $issuing_rule->{overduefinescap}
if $issuing_rule->{overduefinescap}
&& $issuing_rule->{overduefinescap} > 0
&& $amount > $issuing_rule->{overduefinescap};
# This must be moved to Koha::Item (see also similar code in C4::Accounts::chargelostitem
$item->{replacementprice} ||= $itemtype->defaultreplacecost

View file

@ -122,15 +122,15 @@ subtest 'Overdue fines cap should be disabled when value is 0' => sub {
);
my $start_dt = DateTime->new(
year => 2000,
month => 1,
day => 1,
year => 2000,
month => 1,
day => 1,
);
my $end_dt = DateTime->new(
year => 2000,
month => 1,
day => 30,
year => 2000,
month => 1,
day => 30,
);
my ($amount) = CalcFine( $item->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
@ -161,15 +161,15 @@ subtest 'Overdue fines cap should be disabled when value is 0.00' => sub {
);
my $start_dt = DateTime->new(
year => 2000,
month => 1,
day => 1,
year => 2000,
month => 1,
day => 1,
);
my $end_dt = DateTime->new(
year => 2000,
month => 1,
day => 30,
year => 2000,
month => 1,
day => 30,
);
my ($amount) = CalcFine( $item->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
@ -179,6 +179,7 @@ subtest 'Overdue fines cap should be disabled when value is 0.00' => sub {
teardown();
};
subtest 'Test with fine amount empty' => sub {
plan tests => 1;