From 43b671ac858e9ae63b3ce8e74e555a41600bc383 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 13 Aug 2018 12:40:22 -0300 Subject: [PATCH] Bug 21196: Use replacement cost from the item type if not set at item level When circ rules are set to cap at item replacement cost, calcfine only checks the price in the item record, not the default replacement cost by item type. Note: We do not take '0' into account, what if you do not want to set a replacement cost for an item? It is how it is done in chargelostitem so keeping the existing behaviour, but that may be considered as a bug (?) Test plan: - Set useDefaultReplacementCost to use - Set a default replacement cost for a given item type - Create an item of that type with a replacementcost=0 - Create a circ rule for that item type that accrues fines but caps at replacement cost - check the item out, forcing a due date in the past - check that item in => Fines should have been generated Signed-off-by: Caroline Cyr La rose Signed-off-by: Katrin Fischer Signed-off-by: Nick Clemens (cherry picked from commit a62742f4260425af8e69a88822b7affc9cc93c68) Signed-off-by: Martin Renvoize --- C4/Overdues.pm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/C4/Overdues.pm b/C4/Overdues.pm index f5c5132c96..1e67b7f437 100644 --- a/C4/Overdues.pm +++ b/C4/Overdues.pm @@ -240,6 +240,8 @@ sub CalcFine { my $itemtype = $item->{itemtype} || $item->{itype}; my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule({ categorycode => $bortype, itemtype => $itemtype, branchcode => $branchcode }); + $itemtype = Koha::ItemTypes->find($itemtype); + return unless $issuing_rule; # If not rule exist, there is no fine my $fine_unit = $issuing_rule->lengthunit || 'days'; @@ -257,7 +259,15 @@ 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; + + # This must be moved to Koha::Item (see also similar code in C4::Accounts::chargelostitem + $item->{replacementprice} ||= $itemtype->defaultreplacecost + if $itemtype + && $item->{replacementprice} == 0 + && C4::Context->preference("useDefaultReplacementCost"); + $amount = $item->{replacementprice} if ( $issuing_rule->cap_fine_to_replacement_price && $item->{replacementprice} && $amount > $item->{replacementprice} ); + $debug and warn sprintf("CalcFine returning (%s, %s, %s, %s)", $amount, $issuing_rule->chargename, $units_minus_grace, $chargeable_units); return ($amount, $issuing_rule->chargename, $units_minus_grace, $chargeable_units); # FIXME: chargename is NEVER populated anywhere. -- 2.39.5