Bugzilla – Attachment 10204 Details for
Bug 7751
Decrease loan period on items with a high number of holds
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7751 : Decrease Loans for Items with Highholds
bug_7751_rebased.patch (text/plain), 18.71 KB, created by
Martin Renvoize (ashimema)
on 2012-06-11 13:47:27 UTC
(
hide
)
Description:
Bug 7751 : Decrease Loans for Items with Highholds
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2012-06-11 13:47:27 UTC
Size:
18.71 KB
patch
obsolete
>From 1097e23cccec6d393ae89c58415cad1380e11651 Mon Sep 17 00:00:00 2001 >From: Mark Gavillet <mark.gavillet@ptfs-europe.com> >Date: Wed, 4 May 2011 12:41:41 +0100 >Subject: [PATCH 1/6] Bug 7751 : Decrease loan period on checkout for items with high holds >Content-Type: text/plain; charset="utf-8" > >--- > C4/Circulation.pm | 63 ++++++++++++++++++++ > installer/data/mysql/sysprefs.sql | 3 + > .../prog/en/modules/circ/circulation.tt | 11 ++++ > 3 files changed, 77 insertions(+), 0 deletions(-) > >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index 9b523e3..3dc5d7a 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -931,9 +931,72 @@ sub CanBookBeIssued { > } > } > } >+ >+ ## check for high holds decreasing loan period >+ if (C4::Context->preference("decreaseLoanHighHolds") == 1) >+ { >+ my ($reserved,$num,$duration,$returndate)=checkHighHolds($item,$borrower); >+ #print "reserved: $reserved\n".Dumper($num); >+ if ($num>=C4::Context->preference("decreaseLoanHighHoldsValue")) >+ { >+ $needsconfirmation{HIGHHOLDS} = 1; >+ $needsconfirmation{'num_holds'} = $num; >+ $needsconfirmation{'duration'} = $duration; >+ $needsconfirmation{'returndate'} = format_date($returndate); >+ } >+ } >+ > return ( \%issuingimpossible, \%needsconfirmation, \%alerts ); > } > >+=head2 CheckHighHolds >+ >+ used when syspref decreaseLoanHighHolds is active. Returns 1 or 0 to define whether the minimum value held in >+ decreaseLoanHighHoldsValue is exceeded, the total number of outstanding holds, the number of days the loan >+ has been decreased to (held in syspref decreaseLoanHighHoldsValue), and the new due date >+ >+=cut >+ >+sub checkHighHolds { >+ my ($item,$borrower) = @_; >+ my $biblio = GetBiblioFromItemNumber($item->{itemnumber}); >+ my $branch = _GetCircControlBranch($item,$borrower); >+ my $dbh = C4::Context->dbh; >+ my $sth; >+ $sth = $dbh->prepare("select count(borrowernumber) as num_holds from reserves where biblionumber=?"); >+ $sth->execute($item->{'biblionumber'}); >+ my $holds = $sth->fetchrow_array; >+ if ($holds>0) >+ { >+ my $issuedate = strftime( "%Y-%m-%d", localtime ); >+ my $startdate=C4::Dates->new( $issuedate, 'iso' ); >+ my $calendar = C4::Calendar->new( branchcode => $branch ); >+ >+ my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'}; >+ my $due = C4::Circulation::CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower ); >+ my $normaldue = sprintf("%04d-%02d-%02d",($due->{'dmy_arrayref'}[5]+1900),($due->{'dmy_arrayref'}[4]+1), >+ $due->{'dmy_arrayref'}[3]); >+ >+ my $datedue = $calendar->addDate($startdate, C4::Context->preference("decreaseLoanHighHoldsDuration")); >+ my $returndate = sprintf("%04d-%02d-%02d",($datedue->{'dmy_arrayref'}[5]+1900),($datedue->{'dmy_arrayref'}[4]+1), >+ $datedue->{'dmy_arrayref'}[3]); >+ >+ my $daysBetween = $calendar->daysBetween($datedue, $due); >+ if ($daysBetween>0) >+ { >+ return (1,$holds,C4::Context->preference("decreaseLoanHighHoldsDuration"),$returndate); >+ } >+ else >+ { >+ return (0,0,0,0); >+ } >+ } >+ else >+ { >+ return (0,0,0,0); >+ } >+} >+ > =head2 AddIssue > > &AddIssue($borrower, $barcode, [$datedue], [$cancelreserve], [$issuedate]) >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index c4060fe..46afb89 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/installer/data/mysql/sysprefs.sql >@@ -364,6 +364,9 @@ INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ( > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacStarRatings','all',NULL,'disable|all|details','Choice'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacBrowseResults','1','Disable/enable browsing and paging search results from the OPAC detail page.',NULL,'YesNo'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SvcMaxReportRows','10','Maximum number of rows to return via the report web service.',NULL,'Integer'); >+INSERT INTO `systempreferences` (`variable`,`value`,`options`,`explanation`,`type`) VALUES ('decreaseLoanHighHolds', NULL, '', 'Decreases the loan period for items with number of holds above the threshold specified in decreaseLoanHighHoldsValue', 'YesNo'); >+INSERT INTO `systempreferences` (`variable`,`value`,`options`,`explanation`,`type`) VALUES ('decreaseLoanHighHoldsValue', NULL, '', 'Specifies a threshold for the minimum number of holds needed to trigger a reduction in loan duration (used with decreaseLoanHighHolds)', 'Integer'); >+INSERT INTO `systempreferences` (`variable`,`value`,`options`,`explanation`,`type`) VALUES ('decreaseLoanHighHoldsDuration', NULL, '', 'Specifies a number of days that a loan is reduced to when used in conjunction with decreaseLoanHighHolds', 'Integer'); > INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IssueLostItem', 'alert', 'alert|confirm|nothing', 'Defines what should be done when an attempt is made to issue an item that has been marked as lost.', 'Choice'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('SuspendHoldsIntranet', '1', NULL , 'Allow holds to be suspended from the intranet.', 'YesNo'); >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 64ca686..9528a97 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >@@ -288,8 +288,19 @@ function refocus(calendar) { > [% IF ( ITEM_LOST ) %] > <li>This item has been lost with a status of "[% ITEM_LOST %]". Check out anyway?</li> > [% END %] >+ >+[% IF ( HIGHHOLDS ) %] >+ <li>High demand item. Loan period shortened to [% duration %] days (due [% returndate %]). Check out anyway?</li> >+[% END %] > </ul> > >+[% IF ( HIGHHOLDS ) %] >+ <script language="JavaScript" type="text/javascript"> >+ $(document).ready(function() { >+ $("input[name=duedatespec]:hidden").val('[% returndate %]'); >+ }); >+ </script> >+[% END %] > <form method="post" action="/cgi-bin/koha/circ/circulation.pl" autocomplete="off"> > > [% IF ( RESERVED ) %] >-- >1.7.2.5 > > >From bdb8fd3b3b182840ab8a688e7023c6b6f1bee123 Mon Sep 17 00:00:00 2001 >From: Colin Campbell <colin.campbell@ptfs-europe.com> >Date: Wed, 29 Jun 2011 17:25:49 +0100 >Subject: [PATCH 2/6] Bug 7751 : HIGHHOLDS should be a single datastructure >Content-Type: text/plain; charset="utf-8" > >Data returned with HIGHHOLDS was being returned on the same >level as the flag so that it might be interpreted as further >items requiring confirmation. >Instead of HIGHHOLDS being returned as a flag return it as a >data structure containing that data. Change template to >reflect this > >Conflicts: > > C4/Circulation.pm >--- > C4/Circulation.pm | 9 +++++---- > .../prog/en/modules/circ/circulation.tt | 8 ++++---- > 2 files changed, 9 insertions(+), 8 deletions(-) > >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index 3dc5d7a..05517d8 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -939,10 +939,11 @@ sub CanBookBeIssued { > #print "reserved: $reserved\n".Dumper($num); > if ($num>=C4::Context->preference("decreaseLoanHighHoldsValue")) > { >- $needsconfirmation{HIGHHOLDS} = 1; >- $needsconfirmation{'num_holds'} = $num; >- $needsconfirmation{'duration'} = $duration; >- $needsconfirmation{'returndate'} = format_date($returndate); >+ $needsconfirmation{HIGHHOLDS} = { >+ num_holds => $num, >+ duration => $duration, >+ returndate => format_date($returndate), >+ }; > } > } > >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 9528a97..58c72cd 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >@@ -289,15 +289,15 @@ function refocus(calendar) { > <li>This item has been lost with a status of "[% ITEM_LOST %]". Check out anyway?</li> > [% END %] > >-[% IF ( HIGHHOLDS ) %] >- <li>High demand item. Loan period shortened to [% duration %] days (due [% returndate %]). Check out anyway?</li> >+[% IF HIGHHOLDS %] >+ <li>High demand item. Loan period shortened to [% HIGHHOLDS.duration %] days (due [% HIGHHOLDS.returndate %]). Check out anyway?</li> > [% END %] > </ul> > >-[% IF ( HIGHHOLDS ) %] >+[% IF HIGHHOLDS %] > <script language="JavaScript" type="text/javascript"> > $(document).ready(function() { >- $("input[name=duedatespec]:hidden").val('[% returndate %]'); >+ $("input[name=duedatespec]:hidden").val('[% HIGHHOLDS.returndate %]'); > }); > </script> > [% END %] >-- >1.7.2.5 > > >From b3e0cf667d5608d235b5db20bb6110ed1972bcc0 Mon Sep 17 00:00:00 2001 >From: Colin Campbell <colin.campbell@ptfs-europe.com> >Date: Mon, 27 Jun 2011 12:15:50 +0100 >Subject: [PATCH 3/6] Bug 7751 : Self Check should recognize Reduced Loan Periods >Content-Type: text/plain; charset="utf-8" > >Staffs Reduced Loan feature returns the reduced >due date as 'needs confirm' Self Check should apply it as >due date when adding the issue > >Conflicts: > > C4/SIP/ILS/Transaction/Checkout.pm >--- > C4/SIP/ILS/Transaction/Checkout.pm | 10 +++++++--- > 1 files changed, 7 insertions(+), 3 deletions(-) > >diff --git a/C4/SIP/ILS/Transaction/Checkout.pm b/C4/SIP/ILS/Transaction/Checkout.pm >index d483e16..6cc3437 100644 >--- a/C4/SIP/ILS/Transaction/Checkout.pm >+++ b/C4/SIP/ILS/Transaction/Checkout.pm >@@ -55,6 +55,7 @@ sub do_checkout { > my $shelf = $self->{item}->hold_shelf; > my $barcode = $self->{item}->id; > my $patron_barcode = $self->{patron}->id; >+ my $overridden_duedate; # usually passed as undef to AddIssue > $debug and warn "do_checkout: patron (" . $patron_barcode . ")"; > my $borrower = $self->{patron}->getmemberdetails_object(); > $debug and warn "do_checkout borrower: . " . Dumper $borrower; >@@ -73,7 +74,7 @@ sub do_checkout { > $noerror = 0; > } > } else { >- foreach my $confirmation (keys %$needsconfirmation) { >+ foreach my $confirmation (keys %{$needsconfirmation}) { > if ($confirmation eq 'RENEW_ISSUE'){ > $self->screen_msg("Item already checked out to you: renewing item."); > } elsif ($confirmation eq 'RESERVED' or $confirmation eq 'RESERVE_WAITING') { >@@ -88,6 +89,9 @@ sub do_checkout { > $self->screen_msg("Item already checked out to another patron. Please return item for check-in."); > $noerror = 0; > } elsif ($confirmation eq 'DEBT') { # don't do anything, it's the minor debt, and alarms fire elsewhere >+ } elsif ($confirmation eq 'HIGHHOLDS') { >+ $overridden_duedate = $needsconfirmation->{$confirmation}->{returndate}; >+ $self->screen_msg('Loan period reduced for high-demand item'); > } else { > $self->screen_msg($needsconfirmation->{$confirmation}); > $noerror = 0; >@@ -119,10 +123,10 @@ sub do_checkout { > # TODO: adjust representation in $self->item > } > # can issue >- $debug and warn "do_checkout: calling AddIssue(\$borrower,$barcode, undef, 0)\n" >+ $debug and warn "do_checkout: calling AddIssue(\$borrower,$barcode, $overridden_duedate, 0)\n" > # . "w/ \$borrower: " . Dumper($borrower) > . "w/ C4::Context->userenv: " . Dumper(C4::Context->userenv); >- my $due_dt = AddIssue($borrower, $barcode, undef, 0); >+ my $due_dt = AddIssue($borrower, $barcode, $overridden_duedate, 0); > if ($due_dt) { > $self->{due} = $due_dt->clone(); > } else { >-- >1.7.2.5 > > >From 31815f75c49c9889ece5e42c4aa16286bf74e2b1 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Mon, 28 May 2012 16:33:35 +0100 >Subject: [PATCH 4/6] Bug 7751 : Added sysprefs to circulation.pref (removed from "Local use") >Content-Type: text/plain; charset="utf-8" > >--- > .../en/modules/admin/preferences/circulation.pref | 16 ++++++++++++++++ > 1 files changed, 16 insertions(+), 0 deletions(-) > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >index d2d11b4..76cc5dc 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >@@ -370,6 +370,22 @@ Circulation: > yes: Allow > no: "Don't allow" > - holds to be suspended from the OPAC. >+ - >+ - pref: decreaseLoanHighHolds >+ choices: >+ yes: Enable >+ no: "Don't enable" >+ - the reduction of loan period for items with number of holds above the threshold specified in decreaseLoanHighHoldsValue >+ - >+ - A loan should be reduced by >+ - pref: decreaseLoanHighHoldsDuration >+ class: integer >+ - days, when decreaseLoanHighHoldsValue threshold is reached (if decreaseLoanHighHolds is enabled) >+ - >+ - A loan should be reduced by decreaseLoanHighHoldsDuration when >+ - pref: decreaseLoanHighHoldsValue >+ class: integer >+ - holds have been places (if decreaseLoanHighHolds is enables) > Fines Policy: > - > - Calculate fines based on days overdue >-- >1.7.2.5 > > >From d8b8c56afedb142a4c5226293fae5fc8b9cb9119 Mon Sep 17 00:00:00 2001 >From: Colin Campbell <colin.campbell@ptfs-europe.com> >Date: Mon, 20 Jun 2011 17:02:49 +0100 >Subject: [PATCH 5/6] Bug 7751 : Make Reduce Duedate aware of New Date formats >Content-Type: text/plain; charset="utf-8" > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > C4/Circulation.pm | 34 ++++++++++++++-------------------- > 1 files changed, 14 insertions(+), 20 deletions(-) > >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index 05517d8..4322255 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -931,7 +931,7 @@ sub CanBookBeIssued { > } > } > } >- >+ > ## check for high holds decreasing loan period > if (C4::Context->preference("decreaseLoanHighHolds") == 1) > { >@@ -942,7 +942,7 @@ sub CanBookBeIssued { > $needsconfirmation{HIGHHOLDS} = { > num_holds => $num, > duration => $duration, >- returndate => format_date($returndate), >+ returndate => output_pref($returndate), > }; > } > } >@@ -963,38 +963,32 @@ sub checkHighHolds { > my $biblio = GetBiblioFromItemNumber($item->{itemnumber}); > my $branch = _GetCircControlBranch($item,$borrower); > my $dbh = C4::Context->dbh; >- my $sth; >- $sth = $dbh->prepare("select count(borrowernumber) as num_holds from reserves where biblionumber=?"); >+ my $sth = $dbh->prepare('select count(borrowernumber) as num_holds from reserves where biblionumber=?'); > $sth->execute($item->{'biblionumber'}); >- my $holds = $sth->fetchrow_array; >- if ($holds>0) >+ my ($holds) = $sth->fetchrow_array; >+ if ($holds) > { >- my $issuedate = strftime( "%Y-%m-%d", localtime ); >- my $startdate=C4::Dates->new( $issuedate, 'iso' ); >- my $calendar = C4::Calendar->new( branchcode => $branch ); >+ my $issuedate = DateTime->new( time_zone => C4::Context->tz()); >+ # my $startdate=C4::Dates->new( $issuedate, 'iso' ); >+ my $calendar = Koha::Calendar->new( branchcode => $branch ); > > my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'}; >- my $due = C4::Circulation::CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower ); >- my $normaldue = sprintf("%04d-%02d-%02d",($due->{'dmy_arrayref'}[5]+1900),($due->{'dmy_arrayref'}[4]+1), >- $due->{'dmy_arrayref'}[3]); >+ my $orig_due = C4::Circulation::CalcDateDue( $issuedate, $itype, $branch, $borrower ); > >- my $datedue = $calendar->addDate($startdate, C4::Context->preference("decreaseLoanHighHoldsDuration")); >- my $returndate = sprintf("%04d-%02d-%02d",($datedue->{'dmy_arrayref'}[5]+1900),($datedue->{'dmy_arrayref'}[4]+1), >- $datedue->{'dmy_arrayref'}[3]); >+ my $reduced_datedue = $calendar->addDate($issuedate, C4::Context->preference("decreaseLoanHighHoldsDuration")); > >- my $daysBetween = $calendar->daysBetween($datedue, $due); >- if ($daysBetween>0) >+ if (DateTime->compare($reduced_datedue,$orig_due) == -1 ) > { >- return (1,$holds,C4::Context->preference("decreaseLoanHighHoldsDuration"),$returndate); >+ return (1,$holds,C4::Context->preference("decreaseLoanHighHoldsDuration"),$reduced_datedue); > } > else > { >- return (0,0,0,0); >+ return (0,0,0,undef); > } > } > else > { >- return (0,0,0,0); >+ return (0,0,0,undef); > } > } > >-- >1.7.2.5 > > >From d2dd127f33c350b1ec1a79abdefd10456de071dd Mon Sep 17 00:00:00 2001 >From: Colin Campbell <colin.campbell@ptfs-europe.com> >Date: Thu, 23 Jun 2011 12:10:51 +0100 >Subject: [PATCH 6/6] Bug 7751 : Fix a couple of comparisons in C4::Circulation >Content-Type: text/plain; charset="utf-8" > >Changed a string comparison called on an integer >Deal with case where value is not set without runtime warnings > >This is dependent on bug 5549 > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > C4/Circulation.pm | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index 4322255..359b710 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -933,11 +933,12 @@ sub CanBookBeIssued { > } > > ## check for high holds decreasing loan period >- if (C4::Context->preference("decreaseLoanHighHolds") == 1) >+ my $decrease_loan = C4::Context->preference('decreaseLoanHighHolds'); >+ if ($decrease_loan && $decrease_loan == 1) > { > my ($reserved,$num,$duration,$returndate)=checkHighHolds($item,$borrower); > #print "reserved: $reserved\n".Dumper($num); >- if ($num>=C4::Context->preference("decreaseLoanHighHoldsValue")) >+ if ($num >= C4::Context->preference("decreaseLoanHighHoldsValue")) > { > $needsconfirmation{HIGHHOLDS} = { > num_holds => $num, >-- >1.7.2.5 >
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 7751
:
8313
|
8314
|
8315
|
9801
|
9803
|
9804
|
9810
|
9811
|
9812
|
9834
|
10040
|
10199
|
10204
|
11477
|
11672
|
11676
|
12337
|
12345
|
12528
|
12643
|
12786
|
12787
|
12802
|
12803