From a65623b4642fa12f222108e1a8a2e8f01ec4b1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Holger=20Mei=C3=9Fner?= Date: Thu, 15 May 2014 16:43:00 +0200 Subject: [PATCH] Bug 11577: Code and intranet template changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch adds a checkbox for "Automatic renewal" to the checkout page. CanBookBeRenewed is modified to include two new errors: - auto_renew (renewal shouldn't be done manually) - auto_too_soon (renewal is premature and shouldn't be done manually) To test: 1) Add or edit an issuing rule with "Automatic renewal" and another one without it. 2) Issue at least three items: - automatic renewal by issuing rule - automatic renewal by Checkbox on the checkout page - no automatic renewal 3) Test the following steps for both: Home > Circulation > Checkouts Home > Patrons > Patron details 4) Confirm that issues with automatic renewal cannot be renewed manually, even if there are still renewals left and it's not too soon to renew. 5) Confirm that "Scheduled for automatic renewal" and the remaining renewals are displayed. If no renewals are left "Not renewable" should be displayed. 6) Confirm that issues without automatic renewal behave as usual. Sponsored-by: Hochschule für Gesundheit (hsg), Germany Signed-off-by: Chris Cormack --- C4/Circulation.pm | 67 ++++++++++---------- circ/circulation.pl | 7 +- .../intranet-tmpl/prog/en/includes/strings.inc | 2 + koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js | 14 ++++ .../prog/en/modules/circ/circulation.tt | 9 +++ 5 files changed, 65 insertions(+), 34 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index dc7334a..093ae36 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1183,7 +1183,7 @@ AddIssue does the following things : =cut sub AddIssue { - my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_; + my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode, $auto_renew ) = @_; my $dbh = C4::Context->dbh; my $barcodecheck=CheckValidBarcode($barcode); if ($datedue && ref $datedue ne 'DateTime') { @@ -1249,12 +1249,18 @@ sub AddIssue { $sth->execute(C4::Context->userenv->{'branch'},$item->{'itemnumber'}); } + # If automatic renewal wasn't selected while issuing, set the value according to the issuing rule. + unless ($auto_renew) { + my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branch); + $auto_renew = $issuingrule->{auto_renew}; + } + # Record in the database the fact that the book was issued. my $sth = $dbh->prepare( "INSERT INTO issues - (borrowernumber, itemnumber,issuedate, date_due, branchcode) - VALUES (?,?,?,?,?)" + (borrowernumber, itemnumber,issuedate, date_due, branchcode, auto_renew) + VALUES (?,?,?,?,?,?)" ); unless ($datedue) { my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'}; @@ -1267,7 +1273,8 @@ sub AddIssue { $item->{'itemnumber'}, # itemnumber $issuedate->strftime('%Y-%m-%d %H:%M:00'), # issuedate $datedue->strftime('%Y-%m-%d %H:%M:00'), # date_due - C4::Context->userenv->{'branch'} # branchcode + C4::Context->userenv->{'branch'}, # branchcode + $auto_renew ? 1 : 0 # automatic renewal ); if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart. CartToShelf( $item->{'itemnumber'} ); @@ -2597,7 +2604,9 @@ 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. +(as controlled by the item type) to be ignored. Overriding also allows +to renew sooner than "No renewal before" und to manually renew loans +that are automatically renewed. C<$CanBookBeRenewed> returns a true value if the item may be renewed. The item must currently be on loan to the specified borrower; renewals @@ -2609,10 +2618,8 @@ already renewed the loan. $error will contain the reason the renewal can not pro sub CanBookBeRenewed { my ( $borrowernumber, $itemnumber, $override_limit ) = @_; - my $dbh = C4::Context->dbh; - my $renews = 1; - my $renewokay = 1; - my $error; + my $dbh = C4::Context->dbh; + my $renews = 1; my $item = GetItem($itemnumber) or return ( 0, 'no_item' ); my $itemissue = GetItemIssue($itemnumber) or return ( 0, 'no_checkout' ); @@ -2621,42 +2628,36 @@ sub CanBookBeRenewed { my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return; - my $branchcode = _GetCircControlBranch($item, $borrower); + my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves($itemnumber); - my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode); + return ( 0, "on_reserve" ) if $resfound; # '' when no hold was found + + return ( 1, undef ) if $override_limit; + + my $branchcode = _GetCircControlBranch( $item, $borrower ); + my $issuingrule = + GetIssuingRule( $borrower->{categorycode}, $item->{itype}, $branchcode ); + + return ( 0, "too_many" ) + if $issuingrule->{renewalsallowed} <= $itemissue->{renewals}; if ( $issuingrule->{norenewalbefore} ) { - # Get current time and add norenewalbefore. If this is smaller than date_due, it's too soon for renewal. + # Get current time and add norenewalbefore. + # If this is smaller than date_due, it's too soon for renewal. if ( DateTime->now( time_zone => C4::Context->tz() )->add( $issuingrule->{lengthunit} => $issuingrule->{norenewalbefore} ) < $itemissue->{date_due} - ) + ) { - $renewokay = 0; - $error = "too_soon"; + return ( 0, "auto_too_soon" ) if $itemissue->{auto_renew}; + return ( 0, "too_soon" ); } } - if ( $issuingrule->{renewalsallowed} <= $itemissue->{renewals} ) { - $renewokay = 0; - $error = "too_many"; - } - - if ( $override_limit ) { - $renewokay = 1; - $error = undef; - } - - my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves( $itemnumber ); - - if ( $resfound ) { # '' when no hold was found - $renewokay = 0; - $error = "on_reserve"; - } - - return ( $renewokay, $error ); + return ( 0, "auto_renew" ) if $itemissue->{auto_renew}; + return ( 1, undef ); } =head2 AddRenewal diff --git a/circ/circulation.pl b/circ/circulation.pl index c766e88..8f79f71 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -134,6 +134,10 @@ if ( $barcode ) { $stickyduedate = $query->param('stickyduedate'); $duedatespec = $query->param('duedatespec'); } + $session->param('auto_renew', $query->param('auto_renew')); +} +else { + $session->clear('auto_renew'); } my ($datedue,$invalidduedate); @@ -344,7 +348,8 @@ if ($barcode) { } } unless($confirm_required) { - AddIssue( $borrower, $barcode, $datedue, $cancelreserve ); + AddIssue( $borrower, $barcode, $datedue, $cancelreserve, undef, undef, $session->param('auto_renew') ); + $session->clear('auto_renew'); $inprocess = 1; } } diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc index df9ca78..8d1327e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc @@ -14,6 +14,8 @@ var ON_HOLD = _("On hold"); var NOT_RENEWABLE = _("Not renewable"); var NOT_RENEWABLE_TOO_SOON = _("No renewal before %s"); + var NOT_RENEWABLE_AUTO_TOO_SOON = _("Scheduled for automatic renewal"); + var NOT_RENEWABLE_AUTO_RENEW = _("Scheduled for automatic renewal"); var RENEWALS_REMAINING = _("%s of %s renewals remaining"); var HOLD_IS_SUSPENDED = _("Hold is suspended"); var UNTIL = _("until %s"); diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js index 6efe9f9..1cf84b5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js @@ -248,6 +248,20 @@ $(document).ready(function() { span_style = "display: none"; span_class = "renewals-allowed"; + } else if ( oObj.can_renew_error == "auto_too_soon" ) { + content += "" + + NOT_RENEWABLE_AUTO_TOO_SOON + + ""; + + span_style = "display: none"; + span_class = "renewals-allowed"; + } else if ( oObj.can_renew_error == "auto_renew" ) { + content += "" + + NOT_RENEWABLE_AUTO_RENEW + + ""; + + span_style = "display: none"; + span_class = "renewals-allowed"; } else { content += "" + oObj.can_renew_error 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 fd65b02..d2bed20 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -489,6 +489,15 @@ No patron matched [% message %] [% END %] +
+ [% IF NEEDSCONFIRMATION %] + + [% ELSE %] + + [% END %] + +
+ [% IF ( SpecifyDueDate ) %]
Specify due date [% INCLUDE 'date-format.inc' %]:
[% IF ( duedatespec ) %][% ELSE %] -- 1.7.10.4