diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index 682317da47..5b5561d424 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -3266,12 +3266,13 @@ sub CanBookBeRenewed {
$final_unseen_renewal = ( C4::Context->preference('UnseenRenewals')
&& $issuing_rule->{unseen_renewals_allowed} == ( $issue->unseen_renewals + 1 ) ) ? 1 : 0;
- my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing');
- my $finesblockrenewing = C4::Context->preference("FineNoRenewals");
- my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing');
- my $restricted = $patron->is_debarred;
- my $hasoverdues = $patron->has_overdues;
- my $balance = $patron->account->balance;
+ my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing');
+ my $finesblockrenewing = C4::Context->preference("FineNoRenewals");
+ my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing');
+ my $allowfineoverriderenewing = C4::Context->preference("AllowFineOverrideRenewing");
+ my $restricted = $patron->is_debarred;
+ my $hasoverdues = $patron->has_overdues;
+ my $balance = $patron->account->balance;
if ( $restricted and $restrictionblockrenewing ) {
return ( 0, 'restriction' );
@@ -3279,7 +3280,7 @@ sub CanBookBeRenewed {
|| ( $issue->is_overdue and $overduesblockrenewing eq 'blockitem' ) )
{
return ( 0, 'overdue' );
- } elsif ( $finesblockrenewing && $balance > $finesblockrenewing ) {
+ } elsif ( $finesblockrenewing && $balance > $finesblockrenewing && !$allowfineoverriderenewing ) {
return ( 0, 'too_much_oweing');
}
diff --git a/installer/data/mysql/atomicupdate/bug_23415.pl b/installer/data/mysql/atomicupdate/bug_23415.pl
index a4160f16ce..57a3bf9639 100755
--- a/installer/data/mysql/atomicupdate/bug_23415.pl
+++ b/installer/data/mysql/atomicupdate/bug_23415.pl
@@ -2,17 +2,26 @@ use Modern::Perl;
return {
bug_number => "23415",
- description => "Rename OPACFineNoRenewals",
+ description => "Rename OPACFineNoRenewals and add new syspref AllowFineOverrideRenewing",
up => sub {
my ($args) = @_;
my ( $dbh, $out ) = @$args{qw(dbh out)};
$dbh->do(
q{
- UPDATE systempreferences SET variable = "FineNoRenewals", explanation = "Fine limit above which user or staff cannot renew items" WHERE variable = "OPACFineNoRenewals";
+ UPDATE IGNORE systempreferences SET variable = "FineNoRenewals", explanation = "Fine limit above which user or staff cannot renew items" WHERE variable = "OPACFineNoRenewals";
}
);
say $out "Updated system preference 'OPACFineNoRenewals'";
+
+ $dbh->do(
+ q{
+ INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
+ VALUES ('AllowFineOverrideRenewing', '0', '0', 'If on, staff will be able to renew items for patrons with fines greater than FineNoRenewals.','YesNo')
+ }
+ );
+
+ say $out "Added new system preference 'AllowFineOverrideRenewing'";
},
};
diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql
index 14f0bc42b3..d7375a3e7b 100644
--- a/installer/data/mysql/mandatory/sysprefs.sql
+++ b/installer/data/mysql/mandatory/sysprefs.sql
@@ -30,6 +30,7 @@ INSERT INTO systempreferences ( `variable`, `value` ) VALUES
('AllowAllMessageDeletion','0'),
('AllowCheckoutNotes', '0'),
('AllowFineOverride','0'),
+('AllowFineOverrideRenewing','0'),
('AllowHoldDateInFuture','0'),
('AllowHoldItemTypeSelection','0'),
('AllowHoldPolicyOverride','0'),
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
index b4c363b6d6..6f5ddce52e 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
@@ -263,6 +263,12 @@ Circulation:
1: Allow
0: "Don't allow"
- staff to manually override and check out items to patrons who have more in fines than set in the noissuescharge system preference.
+ -
+ - pref: AllowFineOverrideRenewing
+ choices:
+ 1: Allow
+ 0: "Don't allow"
+ - staff to manually override and renew items for patrons who have more in fines than set in the FineNoRenewals system preference.
-
- pref: AutomaticItemReturn
choices:
diff --git a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js b/koha-tmpl/intranet-tmpl/prog/js/checkouts.js
index 51cb9a2324..88ba7d0d80 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/checkouts.js
@@ -501,6 +501,18 @@ function LoadIssuesTable() {
__("Renewal denied by syspref") +
"";
+ span_style = "display: none";
+ span_class = "renewals-allowed";
+ } else if (
+ oObj.can_renew_error == "too_much_oweing"
+ ) {
+ msg +=
+ "" +
+ __(
+ "Cannot renew, he patron has a debt of " + parseFloat(oObj.fine).format_price()
+ ) +
+ "";
+
span_style = "display: none";
span_class = "renewals-allowed";
} else {