From f823c6c80ca863c6d12692a624dea42bcee7b555 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 30 Oct 2025 22:04:17 +0000 Subject: [PATCH] Bug 23415: (follow-up) Respect OPACFineNoRenewalsIncludeCredits preference This patch fixes a regression introduced in the previous commits where we changed FineNoRenewals checking to use non_issues_charges instead of balance. While this change was correct for focusing on blocking charges, we inadvertently removed the handling of the OPACFineNoRenewalsIncludeCredits preference. The OPACFineNoRenewalsIncludeCredits preference controls whether unapplied account credits should be included when calculating if a patron exceeds the FineNoRenewals threshold. When this preference is enabled, the patron's net balance (debits minus credits) should be used instead of just their outstanding debits. This patch restores the preference handling for both: 1. Manual renewals in CanBookBeRenewed() 2. Auto renewals in _CanBookBeAutoRenewed() When OPACFineNoRenewalsIncludeCredits = 1: Use balance (all charges net of credits) When OPACFineNoRenewalsIncludeCredits = 0: Use non_issues_charges (only blocking charges, no credits) This ensures that patrons with sufficient credits can renew their items when the preference is enabled, while still maintaining the focus on non-issuing charges introduced in the previous commits. Test plan: 1. Run prove t/db_dependent/Circulation.t 2. All tests should pass, particularly the "auto_too_much_owing | OPACFineNoRenewalsBlockAutoRenew & OPACFineNoRenewalsIncludeCredits" subtest Signed-off-by: Martin Renvoize --- C4/Circulation.pm | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index dc04d65f17f..8326735adee 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -3246,6 +3246,10 @@ sub CanBookBeRenewed { my $account = $patron->account; my $balance = $account->balance; my $non_issues_charges = $account->non_issues_charges; + my $amountoutstanding_for_renewal = + C4::Context->preference("OPACFineNoRenewalsIncludeCredits") + ? $balance + : $non_issues_charges; if ( $restricted and $restrictionblockrenewing ) { return ( 0, 'restriction' ); @@ -3253,7 +3257,7 @@ sub CanBookBeRenewed { || ( $issue->is_overdue and $overduesblockrenewing eq 'blockitem' ) ) { return ( 0, 'overdue' ); - } elsif ( $finesblockrenewing && $non_issues_charges > $finesblockrenewing ) { + } elsif ( $finesblockrenewing && $amountoutstanding_for_renewal > $finesblockrenewing ) { return ( 0, 'too_much_owing' ); } @@ -4990,10 +4994,13 @@ sub _CanBookBeAutoRenewed { } if ( C4::Context->preference('OPACFineNoRenewalsBlockAutoRenew') ) { - my $fine_no_renewals = C4::Context->preference("FineNoRenewals"); - my $account = $patron->account; - my $non_issues_charges = $account->non_issues_charges; - if ( $non_issues_charges and $non_issues_charges > $fine_no_renewals ) { + my $fine_no_renewals = C4::Context->preference("FineNoRenewals"); + my $account = $patron->account; + my $amountoutstanding = + C4::Context->preference("OPACFineNoRenewalsIncludeCredits") + ? $account->balance + : $account->non_issues_charges; + if ( $amountoutstanding and $amountoutstanding > $fine_no_renewals ) { return "auto_too_much_owing"; } } -- 2.51.1