From 56d0848d106a5618331a87695b5febe7dec57717 Mon Sep 17 00:00:00 2001 From: Emmi Takkinen Date: Tue, 6 Aug 2019 11:13:33 +0300 Subject: [PATCH] Bug 23415: Notify patron fines when renewing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It is possible to renew items for patron who has fines over accepted limit on renew page or from checkout list. This patch adds confirmation alerts to these renew actions when patron has fines over "noissuescharge" syspref. Test plan: 1. Have patron with checkouts and fines over allowed limit 2. Renew checkouts either from renew page or checkout list => renew is successful 3. Apply patch 4. Repeat steps 1 and 2 => On renew page an alert is displayed and user has to confirm renew => When renew is done from checkout list confirmation pop-up is displayed Signed-off-by: Anneli Österman Signed-off-by: Kelly McElligott --- circ/circulation.pl | 2 +- circ/renew.pl | 20 +++++- .../prog/en/modules/circ/circulation.tt | 4 ++ .../intranet-tmpl/prog/en/modules/circ/renew.tt | 10 +++ .../prog/en/modules/members/moremember.tt | 4 ++ koha-tmpl/intranet-tmpl/prog/js/checkouts.js | 74 +++++++++++++--------- 6 files changed, 82 insertions(+), 32 deletions(-) diff --git a/circ/circulation.pl b/circ/circulation.pl index 3655ec16c3..10558e8f75 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -311,7 +311,7 @@ if ($patron) { $template->param( overduecount => $overdues->count, issuecount => $issues->count, - finetotal => $balance, + fines => $balance, ); if ( $patron and $patron->is_debarred ) { diff --git a/circ/renew.pl b/circ/renew.pl index df1e043bdb..9a70f31280 100755 --- a/circ/renew.pl +++ b/circ/renew.pl @@ -28,6 +28,7 @@ use C4::Koha; use Koha::DateUtils; use Koha::Database; use Koha::BiblioFrameworks; +use Koha::Patrons; my $cgi = new CGI; @@ -48,10 +49,11 @@ $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespae $barcode = barcodedecode($barcode) if( $barcode && C4::Context->preference('itemBarcodeInputFilter')); my $override_limit = $cgi->param('override_limit'); my $override_holds = $cgi->param('override_holds'); +my $override_debt = $cgi->param('override_debt'); my ( $item, $issue, $borrower ); my $error = q{}; -my ( $soonest_renew_date, $latest_auto_renew_date ); +my ( $soonest_renew_date, $latest_auto_renew_date, $balance ); if ($barcode) { $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace @@ -64,7 +66,10 @@ if ($barcode) { if ($issue) { $borrower = $issue->borrower(); - + my $patron = Koha::Patrons->find($borrower->borrowernumber); + $balance = $patron->account->balance; + my $amountlimit = C4::Context->preference("noissuescharge"); + if ( ( $borrower->debarred() || q{} ) lt dt_from_string()->ymd() ) { my $can_renew; ( $can_renew, $error ) = @@ -93,6 +98,16 @@ if ($barcode) { $item->itemnumber(), ); } + + if ( $balance > $amountlimit ) { + $error = "too_much_debt"; + $can_renew = 0; + if($override_debt){ + $can_renew = 1; + $error = undef; + } + } + if ($can_renew) { my $branchcode = C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef; my $date_due; @@ -122,6 +137,7 @@ if ($barcode) { error => $error, soonestrenewdate => $soonest_renew_date, latestautorenewdate => $latest_auto_renew_date, + balance => $balance, ); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index 1eeb19e3af..499431121f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -1068,6 +1068,10 @@ [% UNLESS ( patron.borrowernumber ) %][% UNLESS ( borrowers ) %]window.onload=function(){ $('#findborrower').focus(); };[% END %][% END %] + var amountlimit = "[% Koha.Preference('noissuescharge') %]"; + var fines = "[% fines %]"; + var MSG_CONFRIM_RENEW = _("The patron has a debt of %s.\n Are you sure you want to renew checkout(s)?").format(fines); + // On-site checkout function toggle_onsite_checkout(){ if ( $("#onsite_checkout").prop('checked') ) { diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt index 608ed5c84d..4d18609ef0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt @@ -2,6 +2,7 @@ [% USE Asset %] [% USE Koha %] [% USE KohaDates %] +[% USE Price %] [% SET footerjs = 1 %] [% INCLUDE 'doc-head-open.inc' %] @@ -135,8 +136,17 @@

Item is not allowed renewal.

[% ELSIF error == "onsite_checkout" %] +

Item cannot be renewed because it's an onsite checkout

+ [% ELSIF error == "too_much_debt" %] + +
  • The patron has a debt of [% balance | $Price %].
  • +
    + + + +
    [% ELSE %] [% error | html %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt index 19e573752d..d9010889b6 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -887,6 +887,10 @@ columns_settings_issues_table = [% ColumnsSettings.GetColumns( 'members', 'moremember', 'issues-table', 'json' ) | $raw %] + var amountlimit = "[% Koha.Preference('noissuescharge') %]"; + var fines = "[% fines %]"; + var MSG_CONFRIM_RENEW = _("The patron has a debt of %s.\n Are you sure you want to renew checkout(s)?").format(fines); + $(document).ready(function() { if ( $('#clubs-tab').length ) { $('#clubs-tab-link').on('click', function() { diff --git a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js b/koha-tmpl/intranet-tmpl/prog/js/checkouts.js index c1ca172f33..416c2958e8 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js +++ b/koha-tmpl/intranet-tmpl/prog/js/checkouts.js @@ -137,7 +137,16 @@ $(document).ready(function() { var itemnumber = $(this).val(); - $(this).parent().parent().replaceWith(""); + var can_renew = true; + + if( parseFloat(fines) > parseFloat(amountlimit) ) { + var result = confirm(MSG_CONFRIM_RENEW); + if(result){ + can_renew = true; + }else{ + can_renew = false; + } + } var params = { itemnumber: itemnumber, @@ -155,34 +164,10 @@ $(document).ready(function() { params.date_due = dueDate } - $.post( "/cgi-bin/koha/svc/renew", params, function( data ) { - var id = "#renew_" + data.itemnumber; - - var content = ""; - if ( data.renew_okay ) { - content = CIRCULATION_RENEWED_DUE + " " + data.date_due; - $('#date_due_' + data.itemnumber).replaceWith( data.date_due ); - } else { - content = CIRCULATION_RENEW_FAILED + " "; - if ( data.error == "no_checkout" ) { - content += NOT_CHECKED_OUT; - } else if ( data.error == "too_many" ) { - content += TOO_MANY_RENEWALS; - } else if ( data.error == "on_reserve" ) { - content += ON_RESERVE; - } else if ( data.error == "restriction" ) { - content += NOT_RENEWABLE_RESTRICTION; - } else if ( data.error == "overdue" ) { - content += NOT_RENEWABLE_OVERDUE; - } else if ( data.error ) { - content += data.error; - } else { - content += REASON_UNKNOWN; - } - } - - $(id).replaceWith( content ); - }, "json") + if(can_renew) { + $(this).parent().parent().replaceWith(""); + renew(params); + } }); // Refocus on barcode field if it exists @@ -194,6 +179,37 @@ $(document).ready(function() { return false; }); + function renew(params){ + $.post( "/cgi-bin/koha/svc/renew", params, function( data ) { + var id = "#renew_" + data.itemnumber; + + var content = ""; + if ( data.renew_okay ) { + content = CIRCULATION_RENEWED_DUE + " " + data.date_due; + $('#date_due_' + data.itemnumber).replaceWith( data.date_due ); + } else { + content = CIRCULATION_RENEW_FAILED + " "; + if ( data.error == "no_checkout" ) { + content += NOT_CHECKED_OUT; + } else if ( data.error == "too_many" ) { + content += TOO_MANY_RENEWALS; + } else if ( data.error == "on_reserve" ) { + content += ON_RESERVE; + } else if ( data.error == "restriction" ) { + content += NOT_RENEWABLE_RESTRICTION; + } else if ( data.error == "overdue" ) { + content += NOT_RENEWABLE_OVERDUE; + } else if ( data.error ) { + content += data.error; + } else { + content += REASON_UNKNOWN; + } + } + + $(id).replaceWith( content ); + }, "json") + } + $("#RenewAll").on("click",function(){ $("#CheckAllRenewals").click(); $("#UncheckAllCheckins").click(); -- 2.11.0