From b8cf34f8dffdad536f0903653f4401d1a3021b3e 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 "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 --- C4/Circulation.pm | 67 ++++++++++---------- circ/circulation.pl | 7 +- .../prog/en/modules/circ/circulation.tt | 19 +++++- .../prog/en/modules/members/moremember.tt | 5 +- 4 files changed, 61 insertions(+), 37 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 639956b..d672ce2 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1176,7 +1176,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') { @@ -1242,12 +1242,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'}; @@ -1260,7 +1266,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'} ); @@ -2553,7 +2560,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 @@ -2565,10 +2574,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' ); @@ -2577,42 +2584,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 91851d2..0bce117 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -145,6 +145,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); @@ -355,7 +359,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/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index 6805126..b33d8c5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -528,6 +528,15 @@ No patron matched [% message %] [% END %] +
+ [% IF NEEDSCONFIRMATION %] + + [% ELSE %] + + [% END %] + +
+ [% IF ( SpecifyDueDate ) %]
Specify due date [% INCLUDE 'date-format.inc' %]:
[% IF ( duedatespec ) %][% ELSE %] @@ -789,7 +798,7 @@ No patron matched [% message %] [% END %] - [% IF todayissue.renewsallowed && todayissue.renewsleft && !todayissue.renew_error_too_soon %] + [% IF todayissue.renewsallowed && todayissue.renewsleft && !todayissue.renew_error_too_soon && !todayissue.renew_error_auto_renew && !todayissue.renew_error_auto_too_soon %] ([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining) [% END %] @@ -798,6 +807,9 @@ No patron matched [% message %] On hold [% ELSIF ( todayissue.renew_error_too_many ) %] Not renewable + [% ELSIF ( todayissue.renew_error_auto_renew || todayissue.renew_error_auto_too_soon ) %] + Automatic renewal + ([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining) [% ELSIF ( todayissue.renew_error_too_soon ) %] No renewal before [% todayissue.soonestrenewdate %] ([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining) @@ -886,7 +898,7 @@ No patron matched [% message %] [% END %] - [% IF previssue.renewsallowed && previssue.renewsleft && !previssue.renew_error_too_soon %] + [% IF previssue.renewsallowed && previssue.renewsleft && !previssue.renew_error_too_soon && !previssue.renew_error_auto_renew && !previssue.renew_error_auto_too_soon %] ([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining) [% END %] @@ -895,6 +907,9 @@ No patron matched [% message %] On Hold [% ELSIF ( previssue.renew_error_too_many ) %] Not renewable + [% ELSIF ( previssue.renew_error_auto_renew || previssue.renew_error_auto_too_soon ) %] + Automatic renewal + ([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining) [% ELSIF ( previssue.renew_error_too_soon ) %] No renewal before [% previssue.soonestrenewdate %] ([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining) 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 345c728..59caab4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -497,7 +497,7 @@ function validate1(date) { [% END %] - [% IF issueloo.renewsallowed && issueloo.renewsleft && !issueloo.norenew_reason_too_soon %] + [% IF issueloo.renewsallowed && issueloo.renewsleft && !issueloo.norenew_reason_too_soon && !issueloo.norenew_reason_auto_renew && !issueloo.norenew_reason_auto_too_soon %] ([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining) [% END %] @@ -506,6 +506,9 @@ function validate1(date) { On Hold [% ELSIF ( issueloo.norenew_reason_too_many ) %] Not renewable + [% ELSIF ( issueloo.norenew_reason_auto_renew || issueloo.norenew_reason_auto_too_soon ) %] + Automatic renewal + ([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining) [% ELSIF ( issueloo.norenew_reason_too_soon ) %] No renewal before [% issueloo.soonestrenewdate %] ([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining) -- 1.7.10.4