Allow renewal limits to be overridden
Originally by Jesse Weaver <jesse.weaver@liblime.com> This patch creates a new system preference, AllowRenewalLimitOverride, that, if YES, allows the renewal limit to be manually overridden. It updates C4::Circulation and reserve/renewscript.pl to obey this. Adapted for 3.0 : Henri-Damien LAURENT Signed-off-by: Galen Charlton <galen.charlton@liblime.com> Signed-off-by: Henri-Damien LAURENT <henridamien.laurent@biblibre.com>
This commit is contained in:
parent
7822223b72
commit
620ead4445
|
|
@ -1833,7 +1833,7 @@ END_SQL
|
|||
|
||||
=head2 CanBookBeRenewed
|
||||
|
||||
($ok,$error) = &CanBookBeRenewed($borrowernumber, $itemnumber);
|
||||
($ok,$error) = &CanBookBeRenewed($borrowernumber, $itemnumber[, $override_limit]);
|
||||
|
||||
Find out whether a borrowed item may be renewed.
|
||||
|
||||
|
|
@ -1844,6 +1844,10 @@ has the item on loan.
|
|||
|
||||
C<$itemnumber> is the number of the item to renew.
|
||||
|
||||
C<$override_limit>, if supplied with a true value, causes
|
||||
the limit on the number of times that the loan can be renewed
|
||||
(as controlled by the item type) to be ignored.
|
||||
|
||||
C<$CanBookBeRenewed> returns a true value iff the item may be renewed. The
|
||||
item must currently be on loan to the specified borrower; renewals
|
||||
must be allowed for the item's type; and the borrower must not have
|
||||
|
|
@ -1854,7 +1858,7 @@ already renewed the loan. $error will contain the reason the renewal can not pro
|
|||
sub CanBookBeRenewed {
|
||||
|
||||
# check renewal status
|
||||
my ( $borrowernumber, $itemnumber ) = @_;
|
||||
my ( $borrowernumber, $itemnumber, $override_limit ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $renews = 1;
|
||||
my $renewokay = 0;
|
||||
|
|
@ -1889,7 +1893,7 @@ sub CanBookBeRenewed {
|
|||
if ( my $data2 = $sth2->fetchrow_hashref ) {
|
||||
$renews = $data2->{'renewalsallowed'};
|
||||
}
|
||||
if ( $renews && $renews > $data1->{'renewals'} ) {
|
||||
if ( ( $renews && $renews > $data1->{'renewals'} ) || $override_limit ) {
|
||||
$renewokay = 1;
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ my %tabsysprefs;
|
|||
$tabsysprefs{useDaysMode}="Circulation";
|
||||
$tabsysprefs{ReservesNeedReturns}="Circulation";
|
||||
$tabsysprefs{CircAutocompl}="Circulation";
|
||||
$tabsysprefs{AllowRenewalLimitOverride}="Circulation";
|
||||
$tabsysprefs{canreservefromotherbranches}="Circulation";
|
||||
$tabsysprefs{finesMode}="Circulation";
|
||||
$tabsysprefs{emailLibrarianWhenHoldIsPlaced}="Circulation";
|
||||
|
|
|
|||
|
|
@ -435,13 +435,14 @@ if ($borrower) {
|
|||
$it->{'itemnumber'}, $borrower->{'borrowernumber'}
|
||||
);
|
||||
$it->{'charge'} = sprintf("%.2f", $it->{'charge'});
|
||||
my $can_renew_error;
|
||||
($it->{'can_renew'}, $can_renew_error) = CanBookBeRenewed(
|
||||
my ($can_renew, $can_renew_error) = CanBookBeRenewed(
|
||||
$borrower->{'borrowernumber'},$it->{'itemnumber'}
|
||||
);
|
||||
$it->{"renew_error_${can_renew_error}"} = 1 if defined $can_renew_error;
|
||||
my ( $restype, $reserves ) = CheckReserves( $it->{'itemnumber'} );
|
||||
( $restype ) and $it->{'can_renew'} = 0;
|
||||
$it->{'can_renew'} = $can_renew;
|
||||
$it->{'can_confirm'} = !$can_renew && !$restype;
|
||||
$it->{'renew_error'} = $restype;
|
||||
|
||||
$it->{'dd'} = format_date($it->{'date_due'});
|
||||
$it->{'od'} = ( $it->{'date_due'} lt $todaysdate ) ? 1 : 0 ;
|
||||
|
|
@ -700,10 +701,11 @@ $template->param( picture => 1 ) if $picture;
|
|||
|
||||
|
||||
$template->param(
|
||||
debt_confirmed => $debt_confirmed,
|
||||
SpecifyDueDate => C4::Context->preference("SpecifyDueDate"),
|
||||
CircAutocompl => C4::Context->preference("CircAutocompl"),
|
||||
dateformat => C4::Context->preference("dateformat"),
|
||||
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
|
||||
debt_confirmed => $debt_confirmed,
|
||||
SpecifyDueDate => C4::Context->preference("SpecifyDueDate"),
|
||||
CircAutocompl => C4::Context->preference("CircAutocompl"),
|
||||
AllowRenewalLimitOverride => C4::Context->preference("AllowRenewalLimitOverride"),
|
||||
dateformat => C4::Context->preference("dateformat"),
|
||||
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
|
||||
);
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -456,21 +456,34 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span>
|
|||
<td><!-- TMPL_VAR NAME="itemcallnumber" --></td>
|
||||
<td><a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td>
|
||||
<td>
|
||||
<!-- TMPL_IF NAME="can_renew" -->
|
||||
<input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" />
|
||||
<!-- TMPL_IF NAME="od" -->
|
||||
<!-- TMPL_IF NAME="can_renew" -->
|
||||
<input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" />
|
||||
<!-- TMPL_IF NAME="od" -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" />
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" />
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_IF NAME="can_confirm" --><span class="renewals-allowed" style="display: none">
|
||||
<input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" />
|
||||
<!-- TMPL_IF NAME="od" -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" />
|
||||
<!-- TMPL_ELSE -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" />
|
||||
<!-- /TMPL_IF -->
|
||||
</span>
|
||||
<span class="renewals-disabled">
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="renew_error_on_reserve" -->
|
||||
On Hold
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="renew_error_too_many" -->
|
||||
Too Many Renewals
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="can_confirm" -->
|
||||
</span>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_IF NAME="renew_error_on_reserve" -->
|
||||
On Hold
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="renew_error_too_many" -->
|
||||
Too Many Renewals
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF -->
|
||||
</td>
|
||||
<td><a href="/cgi-bin/koha/circ/returns.pl?barcode=<!-- TMPL_VAR NAME="barcode" -->">Check In</a></td>
|
||||
<!-- TMPL_IF NAME="renew_failed" -->
|
||||
|
|
@ -503,22 +516,34 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span>
|
|||
<td><!-- TMPL_VAR NAME="itemcallnumber" --></td>
|
||||
<td><a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td>
|
||||
<td>
|
||||
<!-- TMPL_IF NAME="can_renew" -->
|
||||
<!-- TMPL_IF NAME="can_renew" -->
|
||||
<input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" />
|
||||
<!-- TMPL_IF NAME="od" -->
|
||||
<!-- TMPL_IF NAME="od" -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" />
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" />
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_IF NAME="can_confirm" --><span class="renewals-allowed" style="display: none">
|
||||
<input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" />
|
||||
<!-- TMPL_IF NAME="od" -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" />
|
||||
<!-- TMPL_ELSE -->
|
||||
<input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" />
|
||||
<!-- /TMPL_IF -->
|
||||
</span>
|
||||
<span class="renewals-disabled">
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="renew_error_on_reserve" -->
|
||||
On Hold
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="renew_error_too_many" -->
|
||||
Too Many Renewals
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="can_confirm" -->
|
||||
</span>
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_ELSE -->
|
||||
<!-- TMPL_IF NAME="renew_error_on_reserve" -->
|
||||
On Hold
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="renew_error_too_many" -->
|
||||
Too Many Renewals
|
||||
<!-- /TMPL_IF -->
|
||||
|
||||
<!-- /TMPL_IF -->
|
||||
</td>
|
||||
<td><a href="/cgi-bin/koha/circ/returns.pl?barcode=<!-- TMPL_VAR NAME="barcode" -->">Check In</a></td>
|
||||
<!-- TMPL_IF NAME="renew_failed" -->
|
||||
|
|
@ -532,6 +557,10 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span>
|
|||
</table>
|
||||
<!--TMPL_IF NAME="issuecount"-->
|
||||
<fieldset class="action">
|
||||
<!-- TMPL_IF NAME="AllowRenewalLimitOverride" -->
|
||||
<label for="override_limit">Override Renewal Limit:</label>
|
||||
<input type="checkbox" name="override_limit" id="override_limit" value="1" />
|
||||
<!-- /TMPL_IF -->
|
||||
<input type="submit" name="renew_checked" value="Renew Checked Items" />
|
||||
<input type="submit" name="renew_all" value="Renew All" />
|
||||
</fieldset>
|
||||
|
|
|
|||
|
|
@ -403,6 +403,12 @@ if (nodename =="barcodes[]"){
|
|||
<!-- TMPL_ELSE -->
|
||||
<td>
|
||||
<!-- TMPL_IF name="norenew" -->
|
||||
<!-- TMPL_IF NAME="can_confirm" --><span class="renewals-allowed" style="display: none">
|
||||
<input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" />
|
||||
<!-- TMPL_IF NAME="od" --><input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" /> <!-- TMPL_ELSE --><input type="checkbox" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" /> <!-- /TMPL_IF -->
|
||||
</span>
|
||||
<span class="renewals-disabled">
|
||||
<!-- /TMPL_IF -->
|
||||
<!-- TMPL_IF NAME="norenew_reason_on_reserve" -->
|
||||
<a href="/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">On Hold</a>
|
||||
<!-- /TMPL_IF -->
|
||||
|
|
@ -452,6 +458,10 @@ if (nodename =="barcodes[]"){
|
|||
</tr>
|
||||
</table>
|
||||
<fieldset class="action">
|
||||
<!-- TMPL_IF NAME="AllowRenewalLimitOverride" -->
|
||||
<label for="override_limit">Override Renewal Limit:</label>
|
||||
<input type="checkbox" name="override_limit" id="override_limit" value="1" />
|
||||
<!-- /TMPL_IF -->
|
||||
<input type="submit" name="renew_checked" value="Renew or Return checked items" />
|
||||
<input type="submit" id="renew_all" name="renew_all" value="Renew all" />
|
||||
<input type="submit" id="return_all" name="return_all" value="Return all" />
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ my $dbh = C4::Context->dbh;
|
|||
my $input = new CGI;
|
||||
$debug or $debug = $input->param('debug') || 0;
|
||||
my $print = $input->param('print');
|
||||
my $override_limit = $input->param("override_limit") || 0;
|
||||
my @failedrenews = $input->param('failedrenew');
|
||||
my @failedreturns = $input->param('failedreturn');
|
||||
my $error = $input->param('error');
|
||||
|
|
@ -245,8 +246,9 @@ for ( my $i = 0 ; $i < $count ; $i++ ) {
|
|||
|
||||
$row{'charge'} = sprintf( "%.2f", $charge );
|
||||
|
||||
my ( $renewokay,$renewerror ) = CanBookBeRenewed( $borrowernumber, $issue->[$i]{'itemnumber'});
|
||||
my ( $renewokay,$renewerror ) = CanBookBeRenewed( $borrowernumber, $issue->[$i]{'itemnumber'}, $override_limit );
|
||||
$row{'norenew'} = !$renewokay;
|
||||
$row{'can_confirm'} = ( !$renewokay && $renewerror ne 'on_reserve' );
|
||||
$row{"norenew_reason_$renewerror"} = 1 if $renewerror;
|
||||
$row{'renew_failed'} = $renew_failed{ $issue->[$i]{'itemnumber'} };
|
||||
$row{'return_failed'} = $return_failed{$issue->[$i]{'barcode'}};
|
||||
|
|
@ -349,6 +351,7 @@ if (C4::Context->preference('ExtendedPatronAttributes')) {
|
|||
|
||||
$template->param(
|
||||
detailview => 1,
|
||||
AllowRenewalLimitOverride => C4::Context->preference("AllowRenewalLimitOverride"),
|
||||
DHTMLcalendar_dateformat=>C4::Dates->DHTMLcalendar(),
|
||||
roaddetails => $roaddetails,
|
||||
borrowernumber => $borrowernumber,
|
||||
|
|
|
|||
|
|
@ -75,10 +75,11 @@ if ($input->param('newduedate')){
|
|||
my $cardnumber = $input->param("cardnumber");
|
||||
my $borrowernumber = $input->param("borrowernumber");
|
||||
my $exemptfine = $input->param("exemptfine") || 0;
|
||||
my $override_limit = $input->param("override_limit") || 0;
|
||||
my $failedrenews;
|
||||
foreach my $itemno (@data) {
|
||||
# check status before renewing issue
|
||||
my ($renewokay,$error) = CanBookBeRenewed($borrowernumber,$itemno);
|
||||
my ($renewokay,$error) = CanBookBeRenewed($borrowernumber,$itemno,$override_limit);
|
||||
if ($renewokay){
|
||||
AddRenewal($borrowernumber,$itemno,$branch,$datedue);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue