Bugzilla – Attachment 25857 Details for
Bug 7413
Allow OPAC renewal x days before due date
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[SIGNED OFF] Bug 7413: Code and intranet template changes
SIGNED-OFF-Bug-7413-Code-and-intranet-template-cha.patch (text/plain), 11.96 KB, created by
Martin Renvoize (ashimema)
on 2014-03-05 15:09:15 UTC
(
hide
)
Description:
[SIGNED OFF] Bug 7413: Code and intranet template changes
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2014-03-05 15:09:15 UTC
Size:
11.96 KB
patch
obsolete
>From 85917077dcb83a191445a3d8e80fb33497616668 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?Holger=20Mei=C3=9Fner?= <h.meissner.82@web.de> >Date: Thu, 13 Feb 2014 17:05:08 +0100 >Subject: [PATCH] [SIGNED OFF] Bug 7413: Code and intranet template changes >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >This patch modifies CanBookBeRenewed, so that based on >issuingrules.norenewalbefore a new error "too_soon" can be returned. >Also adds a new subroutine GetSoonestRenewDate. > >To test: >1) Create an issuing rule with "No renewal before" set to value X > and "Unit" set to days. >2) Test the following steps for both: > Home > Patron > Patron details > Home > Circulation > Checkouts >3) On the checkout page, test for today's issues as well as previous > issues. (Check something out on one day and something else on the > next day, then do the testing.) >4) Confirm that items can't be renewed if current date is more than > X days before due date. >5) Confirm that the date and time of the soonest possible renewal are > displayed in the format specified by global sysprefs "dateformat" > and "TimeFormat". >6) Confirm that items can be renewed if "No renewal before" is > undefined or current date is X or less days before due date. >7) Confirm that if the number of allowed renewals is exceeded > "Not renewable" is displayed, no matter what "No renewal before" > is set to. >8) Test the same things with "Unit" set to hours. > >Sponsored-by: Hochschule für Gesundheit (hsg), Germany >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > C4/Circulation.pm | 73 ++++++++++++++++++-- > circ/circulation.pl | 6 ++ > .../prog/en/modules/circ/circulation.tt | 32 +++++---- > .../prog/en/modules/members/moremember.tt | 12 ++-- > members/moremember.pl | 8 +++ > 5 files changed, 108 insertions(+), 23 deletions(-) > >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index f8b204a..39c1fad 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -79,6 +79,7 @@ BEGIN { > &AddIssue > &AddRenewal > &GetRenewCount >+ &GetSoonestRenewDate > &GetItemIssue > &GetItemIssues > &GetIssuingCharges >@@ -2472,7 +2473,7 @@ sub CanBookBeRenewed { > > my $dbh = C4::Context->dbh; > my $renews = 1; >- my $renewokay = 0; >+ my $renewokay = 1; > my $error; > > my $item = GetItem($itemnumber) or return ( 0, 'no_item' ); >@@ -2486,12 +2487,30 @@ sub CanBookBeRenewed { > > my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode); > >- if ( ( $issuingrule->{renewalsallowed} > $itemissue->{renewals} ) || $override_limit ) { >- $renewokay = 1; >- } else { >+ if ( $issuingrule->{norenewalbefore} ) { >+ >+ # 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"; >+ } >+ } >+ >+ 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 >@@ -2668,6 +2687,52 @@ sub GetRenewCount { > return ( $renewcount, $renewsallowed, $renewsleft ); > } > >+=head2 GetSoonestRenewDate >+ >+ $NoRenewalBeforeThisDate = &GetSoonestRenewDate($borrowernumber, $itemnumber); >+ >+Find out the soonest possible renew date of a borrowed item. >+ >+C<$borrowernumber> is the borrower number of the patron who currently >+has the item on loan. >+ >+C<$itemnumber> is the number of the item to renew. >+ >+C<$GetSoonestRenewDate> returns the DateTime of the soonest possible renew date, >+based on the value "No renewal before" of the applicable issuing rule. Returns the >+current date if the item can already be renewed. >+ >+=cut >+ >+sub GetSoonestRenewDate { >+ my ( $borrowernumber, $itemnumber ) = @_; >+ >+ my $dbh = C4::Context->dbh; >+ >+ my $item = GetItem($itemnumber) or return ( 0, 'no_item' ); >+ my $itemissue = GetItemIssue($itemnumber) or return ( 0, 'no_checkout' ); >+ >+ $borrowernumber ||= $itemissue->{borrowernumber}; >+ my $borrower = C4::Members::GetMemberDetails($borrowernumber) >+ or return; >+ >+ my $branchcode = _GetCircControlBranch( $item, $borrower ); >+ my $issuingrule = >+ GetIssuingRule( $borrower->{categorycode}, $item->{itype}, $branchcode ); >+ >+ my $now = DateTime->now( time_zone => C4::Context->tz() ); >+ >+ if ( $issuingrule->{norenewalbefore} ) { >+ my $soonestrenewal = >+ $itemissue->{date_due}->subtract( >+ $issuingrule->{lengthunit} => $issuingrule->{norenewalbefore} ); >+ >+ $soonestrenewal = $now > $soonestrenewal ? $now : $soonestrenewal; >+ return $soonestrenewal; >+ } >+ return $now; >+} >+ > =head2 GetIssuingCharges > > ($charge, $item_type) = &GetIssuingCharges($itemnumber, $borrowernumber); >diff --git a/circ/circulation.pl b/circ/circulation.pl >index 8af776f..4467cce 100755 >--- a/circ/circulation.pl >+++ b/circ/circulation.pl >@@ -514,6 +514,12 @@ sub build_issue_data { > (!$relatives) ? push @previousissues, $it : push @relprevissues, $it; > } > ($it->{'renewcount'},$it->{'renewsallowed'},$it->{'renewsleft'}) = C4::Circulation::GetRenewCount($it->{'borrowernumber'},$it->{'itemnumber'}); #Add renewal count to item data display >+ >+ $it->{'soonestrenewdate'} = output_pref( >+ C4::Circulation::GetSoonestRenewDate( >+ $it->{borrowernumber}, $it->{itemnumber} >+ ) >+ ); > } > } > >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 e667bc3..7839ca8 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >@@ -779,17 +779,19 @@ No patron matched <span class="ex">[% message %]</span> > <input type="checkbox" class="radio" name="items[]" value="[% todayissue.itemnumber %]" /> > [% END %] > </span> >- [% IF todayissue.renewsallowed && todayissue.renewsleft %] >+ [% IF todayissue.renewsallowed && todayissue.renewsleft && !todayissue.renew_error_too_soon %] > <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span> > [% END %] > <span class="renewals-disabled"> > [% END %] >- [% IF ( todayissue.renew_error_on_reserve ) %] >- <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% todayissue.biblionumber %]">On hold</a> >- [% END %] >- [% IF ( todayissue.renew_error_too_many ) %] >- Not renewable >- [% END %] >+ [% IF ( todayissue.renew_error_on_reserve ) %] >+ <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% todayissue.biblionumber %]">On hold</a> >+ [% ELSIF ( todayissue.renew_error_too_many ) %] >+ Not renewable >+ [% ELSIF ( todayissue.renew_error_too_soon ) %] >+ No renewal before [% todayissue.soonestrenewdate %] >+ <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span> >+ [% END %] > [% IF ( todayissue.can_confirm ) %] > </span> > [% END %] >@@ -874,17 +876,19 @@ No patron matched <span class="ex">[% message %]</span> > <input type="checkbox" class="radio" name="items[]" value="[% previssue.itemnumber %]" /> > [% END %] > </span> >- [% IF previssue.renewsallowed && previssue.renewsleft %] >+ [% IF previssue.renewsallowed && previssue.renewsleft && !previssue.renew_error_too_soon %] > <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span> > [% END %] > <span class="renewals-disabled"> > [% END %] >- [% IF ( previssue.renew_error_on_reserve ) %] >- <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% previssue.biblionumber %]">On hold</a> >- [% END %] >- [% IF ( previssue.renew_error_too_many ) %] >- Not renewable >- [% END %] >+ [% IF ( previssue.renew_error_on_reserve ) %] >+ <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% previssue.biblionumber %]">On Hold</a> >+ [% ELSIF ( previssue.renew_error_too_many ) %] >+ Not renewable >+ [% ELSIF ( previssue.renew_error_too_soon ) %] >+ No renewal before [% previssue.soonestrenewdate %] >+ <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span> >+ [% END %] > [% IF ( previssue.can_confirm ) %] > </span> > [% END %] >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 c4705d1..9cd6a90 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >@@ -497,17 +497,19 @@ function validate1(date) { > <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" /> > [% END %] > </span> >- [% IF issueloo.renewsallowed && issueloo.renewsleft %] >+ [% IF issueloo.renewsallowed && issueloo.renewsleft && !issueloo.norenew_reason_too_soon %] > <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span> > [% END %] > <span class="renewals-disabled"> > [% END %] > [% IF ( issueloo.norenew_reason_on_reserve ) %] >- <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On Hold</a> >+ <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On Hold</a> >+ [% ELSIF ( issueloo.norenew_reason_too_many ) %] >+ Not renewable >+ [% ELSIF ( issueloo.norenew_reason_too_soon ) %] >+ No renewal before [% issueloo.soonestrenewdate %] >+ <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span> > [% END %] >- [% IF ( issueloo.norenew_reason_too_many ) %] >- Not renewable >- [% END %] > [% IF ( issueloo.can_confirm ) %] > </span> > [% END %] >diff --git a/members/moremember.pl b/members/moremember.pl >index e794efa..40f6d43 100755 >--- a/members/moremember.pl >+++ b/members/moremember.pl >@@ -521,6 +521,14 @@ sub build_issue_data { > $row{renew_failed} = $renew_failed{ $issue->{itemnumber} }; > $row{return_failed} = $return_failed{ $issue->{barcode} }; > ($row{'renewcount'},$row{'renewsallowed'},$row{'renewsleft'}) = C4::Circulation::GetRenewCount($issue->{'borrowernumber'},$issue->{'itemnumber'}); #Add renewal count to item data display >+ >+ $row{'soonestrenewdate'} = output_pref( >+ C4::Circulation::GetSoonestRenewDate( >+ $issue->{borrowernumber}, >+ $issue->{itemnumber} >+ ) >+ ); >+ > push( @{$localissue}, \%row ); > } > return $localissue; >-- >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 7413
:
24685
|
24686
|
24687
|
24688
|
24689
|
24926
|
24927
|
24928
|
24929
|
24930
|
25166
|
25247
|
25248
|
25249
|
25250
|
25251
|
25252
|
25855
|
25856
|
25857
|
25858
|
25859
|
25860
|
26726
|
26727
|
26728
|
26729
|
26730
|
26731
|
26732
|
26733