From 75ecbc6773e70ce2cfb0defbbcc31430a42e61a7 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 14 Jul 2023 07:36:47 -0400 Subject: [PATCH] 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! --- C4/Overdues.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/C4/Overdues.pm b/C4/Overdues.pm index 8074411a9a..41674a468a 100644 --- a/C4/Overdues.pm +++ b/C4/Overdues.pm @@ -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 -- 2.30.2