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:
Henri-Damien LAURENT 2008-11-24 06:29:58 +01:00
parent 7822223b72
commit 620ead4445
7 changed files with 87 additions and 37 deletions

View File

@ -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 {

View File

@ -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";

View File

@ -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;

View File

@ -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" -->&amp;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" -->&amp;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>

View File

@ -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" />

View File

@ -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,

View File

@ -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);
}