From 64b0984a51cb8c74638569fb07c3315c4f9ee7d9 Mon Sep 17 00:00:00 2001 From: Lyon3 Team Date: Mon, 9 Mar 2015 16:24:20 +0100 Subject: [PATCH] Bug 8236: Renewing policy in overdue or restriction case This patch introduces 2 sysprefs : RestrictionBlockRenewing to allow/block renewal of items when patron is restricted. OverduesBlockRenewing to allow, block only the late ones or block all checked out items Default is "allow" in both case. Signed-off-by: Matthias Meusburger Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- C4/Circulation.pm | 12 +++++++++++- .../bug_8236-add-overduesblockrenewing.sql | 1 + .../bug_8236-add-restrictionblockrenewing.sql | 1 + installer/data/mysql/sysprefs.sql | 2 ++ .../intranet-tmpl/prog/en/includes/strings.inc | 2 ++ .../intranet-tmpl/prog/en/js/checkouts.js | 18 ++++++++++++++++++ .../modules/admin/preferences/circulation.pref | 16 +++++++++++++++- .../bootstrap/en/modules/opac-user.tt | 4 ++++ opac/opac-user.pl | 3 +++ 9 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_8236-add-overduesblockrenewing.sql create mode 100644 installer/data/mysql/atomicupdate/bug_8236-add-restrictionblockrenewing.sql diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 7313897189..587f211541 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2795,7 +2795,6 @@ sub CanBookBeRenewed { } } } - return ( 0, "on_reserve" ) if $resfound; # '' when no hold was found return ( 1, undef ) if $override_limit; @@ -2807,6 +2806,17 @@ sub CanBookBeRenewed { return ( 0, "too_many" ) if $issuingrule->{renewalsallowed} <= $itemissue->{renewals}; + my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing'); + my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing'); + my $restricted = Koha::Borrower::Debarments::IsDebarred($borrowernumber); + my $hasoverdues = C4::Members::HasOverdues($borrowernumber); + + if ( $restricted and $restrictionblockrenewing ) { + return ( 0, 'restriction'); + } elsif ( ($hasoverdues and $overduesblockrenewing eq 'block') || ($itemissue->{overdue} and $overduesblockrenewing eq 'blockitem') ) { + return ( 0, 'overdue'); + } + if ( $issuingrule->{norenewalbefore} ) { # Get current time and add norenewalbefore. diff --git a/installer/data/mysql/atomicupdate/bug_8236-add-overduesblockrenewing.sql b/installer/data/mysql/atomicupdate/bug_8236-add-overduesblockrenewing.sql new file mode 100644 index 0000000000..72f5406494 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_8236-add-overduesblockrenewing.sql @@ -0,0 +1 @@ +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OverduesBlockRenewing','allow','If any of a patron checked out documents is late, should renewal be allowed, blocked only on overdue items or blocked on whatever checked out document','allow|blockitem|block','Choice'); \ No newline at end of file diff --git a/installer/data/mysql/atomicupdate/bug_8236-add-restrictionblockrenewing.sql b/installer/data/mysql/atomicupdate/bug_8236-add-restrictionblockrenewing.sql new file mode 100644 index 0000000000..4d3e01409d --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_8236-add-restrictionblockrenewing.sql @@ -0,0 +1 @@ +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('RestrictionBlockRenewing','0','If patron is restricted, should renewal be allowed or blocked',NULL,'YesNo'); \ No newline at end of file diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 1024a5eec4..5a9dd2abac 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -337,6 +337,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('OverdueNoticeBcc','','','Email address to bcc outgoing overdue notices sent by email','free'), ('OverdueNoticeCalendar',0,NULL,'Take the calendar into consideration when generating overdue notices','YesNo'), ('OverduesBlockCirc','noblock','noblock|confirmation|block','When checking out an item should overdues block checkout, generate a confirmation dialogue, or allow checkout','Choice'), +('OverduesBlockRenewing','allow','allow|blockitem|block','If any of patron checked out documents is late, should renewal be allowed, blocked only on overdue items or blocked on whatever checked out document','Choice'), ('patronimages','0',NULL,'Enable patron images for the Staff Client','YesNo'), ('PatronSelfRegistration','0',NULL,'If enabled, patrons will be able to register themselves via the OPAC.','YesNo'), ('PatronSelfRegistrationAdditionalInstructions','','','A free text field to display additional instructions to newly self registered patrons.','free'), @@ -372,6 +373,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('RestrictedPageLocalIPs','',NULL,'Beginning of IP addresses considered as local (comma separated ex: "127.0.0,127.0.2")','Free'), ('RestrictedPageContent','',NULL,'HTML content of the restricted page','TextArea'), ('RestrictedPageTitle','',NULL,'Title of the restricted page (breadcrumb and header)','Free'), +('RestrictionBlockRenewing','0',NULL,'If patron is restricted, should renewal be allowed or blocked','YesNo'), ('ReturnBeforeExpiry','0',NULL,'If ON, checkout will be prevented if returndate is after patron card expiry','YesNo'), ('ReturnLog','1',NULL,'If ON, enables the circulation (returns) log','YesNo'), ('ReturnToShelvingCart','0','','If set, when any item is \'checked in\', it\'s location code will be changed to CART.','YesNo'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc index 2421ac6bb2..3226ad3ec7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc @@ -2,6 +2,8 @@ //"; + span_style = "display: none"; + span_class = "renewals-allowed"; + } else if ( oObj.can_renew_error == "restriction" ) { + content += "" + + NOT_RENEWABLE_RESTRICTION + + ""; + + span_style = "display: none"; + span_class = "renewals-allowed"; + } else if ( oObj.can_renew_error == "overdue" ) { + content += "" + + NOT_RENEWABLE_OVERDUE + + ""; + span_style = "display: none"; span_class = "renewals-allowed"; } else if ( oObj.can_renew_error == "too_soon" ) { 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 2e66328214..06516c16fe 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 @@ -399,7 +399,21 @@ Circulation: - on-site checkouts as normal checkouts. - If enabled, the number of checkouts allowed will be normal checkouts + on-site checkouts. - If disabled, both values will be checked separately. - + - + - When a patron's checked out item is late, + - pref: OverduesBlockRenewing + type: choice + choices: + allow: allow renewing. + blockitem: block renewing only for this item. + block: block renewing for all his items. + - + - If patron is restricted, + - pref: RestrictionBlockRenewing + choices: + yes: Block + no: Allow + - renewing of items. Checkin Policy: - - pref: BlockReturnOfWithdrawnItems diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt index 1a200e6fc8..584e50fea5 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt @@ -238,6 +238,8 @@ ([% ISSUE.renewsleft %] of [% ISSUE.renewsallowed %] renewals remaining) [% ELSIF ( ISSUE.too_many ) %] Not renewable + [% ELSIF ( ISSUE.norenew_overdue ) %] + Not allowed (overdue on a document) [% ELSIF ( ISSUE.auto_renew || ISSUE.auto_too_soon ) %] Automatic renewal ([% ISSUE.renewsleft %] of [% ISSUE.renewsallowed %] renewals remaining) @@ -472,6 +474,8 @@ Renew [% END %] ([% OVERDUE.renewsleft %] of [% OVERDUE.renewsallowed %] renewals remaining) + [% ELSIF ( OVERDUE.norenew_overdue ) %] + Not allowed(overdue on a document) [% ELSIF ( OVERDUE.onreserve ) %] On hold [% ELSE %] diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 71347e4353..54c9295788 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -197,6 +197,7 @@ if ($issues){ if ($renewerror) { $issue->{'too_many'} = 1 if $renewerror eq 'too_many'; $issue->{'on_reserve'} = 1 if $renewerror eq 'on_reserve'; + $issue->{'norenew_overdue'} = 1 if $renewerror eq 'overdue'; $issue->{'auto_renew'} = 1 if $renewerror eq 'auto_renew'; $issue->{'auto_too_soon'} = 1 if $renewerror eq 'auto_too_soon'; @@ -244,6 +245,8 @@ if ($issues){ } } } +my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing'); +$canrenew = 0 if ($overduesblockrenewing ne 'allow' and $overdues_count == $count); $template->param( ISSUES => \@issuedat ); $template->param( issues_count => $count ); $template->param( canrenew => $canrenew ); -- 2.39.2