From f91da3e5c227a16e668e19c3c9ddc0cd0f700e08 Mon Sep 17 00:00:00 2001 From: Matt Blenkinsop Date: Fri, 7 Jun 2024 10:23:01 +0000 Subject: [PATCH] Bug 28575: Stop lost fine refund if fine is older than syspref value Test plan: 1) Apply patch and reset_all 2) Checkout an item to a patron 3) Mark that item as lost 4) Add a manual invoice for that item's barcode to the patron's account 5) Pay that fine in the Make a payment tab 6) In system preferences, search for NoRefundOnLostFinesPaidAge 7) Set this to -1. I use this value here to avoid needing to go into the database to change the date of the payment we made in step 5. Any fines older than -1 days (i.e. all fines) will be caught by the syspref which is what we want to test) 8) Check in the item 9) The check in message should display "Any lost item fees for this item will remain on the patron's account." 10) Navigate to the Patron's account and confirm that no credit has been added and that the lost fee has therefore not been refunded 11) Run unit test: prove t/db_dependent/Circulation.t --- Koha/Item.pm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Koha/Item.pm b/Koha/Item.pm index 91c15b22d5..d1f5606812 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -1467,6 +1467,17 @@ sub _set_found_trigger { my $patron = $lost_charge->patron; if ( $patron ) { + my $no_refund_if_lost_fee_paid_age = C4::Context->preference('NoRefundOnLostFinesPaidAge'); + if ($no_refund_if_lost_fee_paid_age) { + my $lost_fee_payment = $lost_charge->debit_offsets( { type => 'APPLY' } )->single; + if ($lost_fee_payment) { + my $today = dt_from_string(); + my $payment_age_in_days = + dt_from_string( $lost_fee_payment->created_on )->delta_days($today)->in_units('days'); + return $self if $payment_age_in_days > $no_refund_if_lost_fee_paid_age; + } + } + my $account = $patron->account; # Credit outstanding amount -- 2.39.3 (Apple Git-146)