@@ -, +, @@
---
circ/circulation.pl | 2 +-
circ/renew.pl | 20 ++++-
.../prog/en/modules/circ/circulation.tt | 4 +
.../prog/en/modules/circ/renew.tt | 9 ++
.../prog/en/modules/members/moremember.tt | 4 +
koha-tmpl/intranet-tmpl/prog/js/checkouts.js | 90 +++++++++++--------
6 files changed, 89 insertions(+), 40 deletions(-)
--- a/circ/circulation.pl
+++ a/circ/circulation.pl
@@ -262,7 +262,7 @@ if ($patron) {
$template->param(
overduecount => $overdues->count,
issuecount => $issues->count,
- finetotal => $balance,
+ fines => $balance,
);
if ( $patron and $patron->is_debarred ) {
--- a/circ/renew.pl
+++ a/circ/renew.pl
@@ -27,6 +27,7 @@ use C4::Circulation qw( barcodedecode CanBookBeRenewed GetLatestAutoRenewDate Ad
use Koha::DateUtils qw( dt_from_string );
use Koha::Database;
use Koha::BiblioFrameworks;
+use Koha::Patrons;
my $cgi = CGI->new;
@@ -47,10 +48,11 @@ $barcode = barcodedecode($barcode) if $barcode;
my $override_limit = $cgi->param('override_limit');
my $override_holds = $cgi->param('override_holds');
my $hard_due_date = $cgi->param('hard_due_date');
+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 = barcodedecode($barcode) if $barcode;
@@ -63,7 +65,10 @@ if ($barcode) {
if ($issue) {
$borrower = $issue->patron();
-
+ 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;
my $info;
@@ -90,6 +95,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 =
@@ -129,6 +144,7 @@ if ($barcode) {
error => $error,
soonestrenewdate => $soonest_renew_date,
latestautorenewdate => $latest_auto_renew_date,
+ balance => $balance,
);
}
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
@@ -1090,6 +1090,10 @@
[% UNLESS ( patron.borrowernumber ) %]window.onload=function(){ $('#findborrower').focus(); };[% 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') ) {
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt
+++ a/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' %]
@@ -170,6 +171,14 @@
[% ELSIF error == 'recalled' %]
This item has been recalled.
+ [% ELSIF error == "too_much_debt" %]
+
+ The patron has a debt of [% balance | $Price %].
+
[% ELSE %]
[% error | html %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt
@@ -893,6 +893,10 @@
table_settings_issues_table = [% TablesSettings.GetTableSettings( 'members', 'moremember', 'issues-table', 'json' ) | $raw %]
table_settings_relatives_issues_table = [% TablesSettings.GetTableSettings( 'members', 'moremember', 'relatives-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() {
$("#info_digests").tooltip();
--- a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js
+++ a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js
@@ -150,7 +150,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,
@@ -174,42 +183,10 @@ $(document).ready(function() {
params.date_due = dueDate
}
- $.post({
- url: "/cgi-bin/koha/svc/renew",
- data: params,
- success: function( data ) {
- var id = "#renew_" + data.itemnumber;
-
- var content = "";
- if ( data.renew_okay ) {
- content = __("Renewed, due:") + " " + data.date_due;
- $('#date_due_' + data.itemnumber).replaceWith( data.date_due );
- } else {
- content = __("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 == "too_unseen" ) {
- content += __("too many consecutive renewals without being seen by the library");
- } else if ( data.error == "on_reserve" ) {
- content += __("on hold");
- } else if ( data.error == "restriction" ) {
- content += __("Not allowed: patron restricted");
- } else if ( data.error == "overdue" ) {
- content += __("Not allowed: overdue");
- } else if ( data.error ) {
- content += data.error;
- } else {
- content += __("reason unknown");
- }
- }
-
- $(id).replaceWith( content );
- },
- dataType: "json",
- async: false,
- });
+ if(can_renew) {
+ $(this).parent().parent().replaceWith("");
+ renew(params);
+ }
});
// Refocus on barcode field if it exists
@@ -221,6 +198,45 @@ $(document).ready(function() {
return false;
});
+ function renew(params){
+ $.post({
+ url: "/cgi-bin/koha/svc/renew",
+ data: params,
+ success: function( data ) {
+ var id = "#renew_" + data.itemnumber;
+
+ var content = "";
+ if ( data.renew_okay ) {
+ content = __("Renewed, due:") + " " + data.date_due;
+ $('#date_due_' + data.itemnumber).replaceWith( data.date_due );
+ } else {
+ content = __("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 == "too_unseen" ) {
+ content += __("too many consecutive renewals without being seen by the library");
+ } else if ( data.error == "on_reserve" ) {
+ content += __("on hold");
+ } else if ( data.error == "restriction" ) {
+ content += __("Not allowed: patron restricted");
+ } else if ( data.error == "overdue" ) {
+ content += __("Not allowed: overdue");
+ } else if ( data.error ) {
+ content += data.error;
+ } else {
+ content += __("reason unknown");
+ }
+ }
+
+ $(id).replaceWith( content );
+ },
+ dataType: "json",
+ async: false,
+ });
+ }
+
$("#RenewAll").on("click",function(){
$("#CheckAllRenewals").click();
$("#UncheckAllCheckins").click();
--