Bugzilla – Attachment 31642 Details for
Bug 11577
Automatic renewals
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 11577: Code and intranet template changes
Bug-11577-Code-and-intranet-template-changes.patch (text/plain), 11.06 KB, created by
Holger Meißner
on 2014-09-17 06:49:38 UTC
(
hide
)
Description:
Bug 11577: Code and intranet template changes
Filename:
MIME Type:
Creator:
Holger Meißner
Created:
2014-09-17 06:49:38 UTC
Size:
11.06 KB
patch
obsolete
>From b9dc27037bbe2c0f0b80ae9e744f7c23728a527f Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?Holger=20Mei=C3=9Fner?= <h.meissner.82@web.de> >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 <chris@bigballofwax.co.nz> >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > 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 55f0c27..8c0b208 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'} ); >@@ -2599,7 +2606,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" and 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 >@@ -2611,10 +2620,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' ); >@@ -2623,42 +2630,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 <strong>suspended</strong>"); > 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 1755d6c..b2e47e4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js >+++ b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js >@@ -255,6 +255,20 @@ $(document).ready(function() { > > span_style = "display: none"; > span_class = "renewals-allowed"; >+ } else if ( oObj.can_renew_error == "auto_too_soon" ) { >+ content += "<span class='renewals-disabled'>" >+ + NOT_RENEWABLE_AUTO_TOO_SOON >+ + "</span>"; >+ >+ span_style = "display: none"; >+ span_class = "renewals-allowed"; >+ } else if ( oObj.can_renew_error == "auto_renew" ) { >+ content += "<span class='renewals-disabled'>" >+ + NOT_RENEWABLE_AUTO_RENEW >+ + "</span>"; >+ >+ span_style = "display: none"; >+ span_class = "renewals-allowed"; > } else { > content += "<span class='renewals-disabled'>" > + 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 ae8ef28..fc61059 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 <span class="ex">[% message %]</span> > [% END %] > <button type="submit" class="btn">Check out</button> > >+ <div class="date-select"> >+ [% IF NEEDSCONFIRMATION %] >+ <input type="checkbox" name="auto_renew" id="auto_renew" value="auto_renew" disabled="disabled" /> >+ [% ELSE %] >+ <input type="checkbox" name="auto_renew" id="auto_renew" value="auto_renew" /> >+ [% END %] >+ <label for="auto_renew">Automatic renewal</label> >+ </div> >+ > [% IF ( SpecifyDueDate ) %]<div class="date-select"> > <div class="hint">Specify due date [% INCLUDE 'date-format.inc' %]: </div> > [% IF ( duedatespec ) %]<input type="text" size="13" id="duedatespec" name="duedatespec" value="[% duedatespec %]" readonly="readonly" />[% ELSE %]<input type="text" size="13" id="duedatespec" name="duedatespec" value="" readonly="readonly" /> >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11577
:
28425
|
28426
|
28427
|
28428
|
28429
|
28430
|
28431
|
28432
|
28433
|
28434
|
28454
|
28595
|
28596
|
28597
|
28598
|
28599
|
28600
|
28601
|
28602
|
28603
|
28604
|
29393
|
29394
|
29395
|
29396
|
29397
|
29398
|
29399
|
29400
|
29401
|
29402
|
29966
|
29967
|
29968
|
29969
|
29970
|
29971
|
29972
|
29973
|
29974
|
29975
|
30248
|
30249
|
30250
|
30251
|
30252
|
30253
|
30254
|
30255
|
30256
|
30257
|
30258
|
30692
|
30693
|
30694
|
30695
|
30696
|
30697
|
30698
|
30699
|
30700
|
30701
|
30702
|
31076
|
31077
|
31078
|
31079
|
31080
|
31081
|
31082
|
31083
|
31084
|
31085
|
31086
|
31198
|
31199
|
31200
|
31201
|
31202
|
31203
|
31204
|
31205
|
31206
|
31207
|
31208
|
31209
|
31640
|
31641
|
31642
|
31643
|
31644
|
31645
|
31646
|
31647
|
31648
|
31649
|
31650
|
31651
|
31652
|
31653
|
31654
|
31655
|
31656
|
31657
|
31658
|
31659
|
31660
|
31661
|
31662
|
31663
|
57734