From 62d2cede56a12219105be28fde0d70c3b686b6b5 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 Signed-off-by: Andrew Fuerste Henry Signed-off-by: Nick Clemens Signed-off-by: Katrin Fischer --- Koha/Item.pm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Koha/Item.pm b/Koha/Item.pm index b325570910..647e2c4184 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -1517,6 +1517,29 @@ sub _set_found_trigger { # will be credited which settles the debt without # creating extra credits + if ( $lost_charge->amountoutstanding == 0 ) { + 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' } )->last; + 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'); + if ( $payment_age_in_days > $no_refund_if_lost_fee_paid_age ) { + $self->add_message( + { + type => 'info', + message => 'payment_not_refunded', + payload => undef + } + ); + return $self; + } + } + } + } + my $credit_offsets = $lost_charge->debit_offsets( { 'credit_id' => { '!=' => undef }, -- 2.39.5