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 {