Bugzilla – Attachment 10100 Details for
Bug 7710
multiple holds per title
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7710 - multiple holds per title - Part 3 - Add multiple holds per record for intranet
Bug-7710---multiple-holds-per-title---Part-3---Add.patch (text/plain), 7.93 KB, created by
Kyle M Hall
on 2012-06-10 13:14:13 UTC
(
hide
)
Description:
Bug 7710 - multiple holds per title - Part 3 - Add multiple holds per record for intranet
Filename:
MIME Type:
Creator:
Kyle M Hall
Created:
2012-06-10 13:14:13 UTC
Size:
7.93 KB
patch
obsolete
>From e52bc39db9d35ea36a615f2a6f6a8666d0c849d9 Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Wed, 21 Mar 2012 10:35:33 -0400 >Subject: [PATCH] Bug 7710 - multiple holds per title - Part 3 - Add multiple holds per record for intranet > >--- > C4/Reserves.pm | 75 +++++++++++++------- > .../prog/en/modules/reserve/request.tt | 4 +- > reserve/request.pl | 20 ++++-- > 3 files changed, 63 insertions(+), 36 deletions(-) > >diff --git a/C4/Reserves.pm b/C4/Reserves.pm >index 204cb9f..5b73527 100644 >--- a/C4/Reserves.pm >+++ b/C4/Reserves.pm >@@ -438,8 +438,10 @@ This function return 1 if an item can be issued by this borrower. > sub CanItemBeReserved{ > my ($borrowernumber, $itemnumber) = @_; > >- my $dbh = C4::Context->dbh; >+ my $dbh = C4::Context->dbh; > my $allowedreserves = 0; >+ my $multi_holds_allowed_same = 0; >+ my $multi_holds_allowed_diff = 0; > > my $controlbranch = C4::Context->preference('ReservesControlBranch'); > my $itype = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype"; >@@ -448,27 +450,14 @@ sub CanItemBeReserved{ > my $item = GetItem($itemnumber); > my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber); > >- # we retrieve user rights on this itemtype and branchcode >- my $sth = $dbh->prepare("SELECT categorycode, itemtype, branchcode, reservesallowed >- FROM issuingrules >- WHERE (categorycode in (?,'*') ) >- AND (itemtype IN (?,'*')) >- AND (branchcode IN (?,'*')) >- ORDER BY >- categorycode DESC, >- itemtype DESC, >- branchcode DESC;" >- ); >- >- my $querycount ="SELECT >- count(*) as count >- FROM reserves >- LEFT JOIN items USING (itemnumber) >- LEFT JOIN biblioitems ON (reserves.biblionumber=biblioitems.biblionumber) >- LEFT JOIN borrowers USING (borrowernumber) >- WHERE borrowernumber = ? >- "; >- >+ my $querycount = " >+ SELECT count(*) AS count >+ FROM reserves >+ LEFT JOIN items USING (itemnumber) >+ LEFT JOIN biblioitems ON (reserves.biblionumber=biblioitems.biblionumber) >+ LEFT JOIN borrowers USING (borrowernumber) >+ WHERE borrowernumber = ? >+ "; > > my $itemtype = $item->{$itype}; > my $categorycode = $borrower->{categorycode}; >@@ -484,14 +473,19 @@ sub CanItemBeReserved{ > } > > # we retrieve rights >- $sth->execute($categorycode, $itemtype, $branchcode); >- if(my $rights = $sth->fetchrow_hashref()){ >+ my $rights = C4::Circulation::GetIssuingRule( $categorycode, $itemtype, $branchcode ); >+ if ( defined $rights ) { > $itemtype = $rights->{itemtype}; > $allowedreserves = $rights->{reservesallowed}; > }else{ > $itemtype = '*'; > } > >+ my $multi_holds_same = GetMultiHoldsCountSameEnum( >+ borrowernumber => $borrowernumber, >+ itemnumber => $itemnumber >+ ); >+ > # we retrieve count > > $querycount .= "AND $branchfield = ?"; >@@ -511,10 +505,10 @@ sub CanItemBeReserved{ > } > > # we check if it's ok or not >- if( $reservecount < $allowedreserves ){ >- return 1; >- }else{ >+ if( $reservecount >= $allowedreserves ){ ## too many reserves > return 0; >+ }else{ >+ return 1; > } > } > #-------------------------------------------------------------------------------- >@@ -2025,6 +2019,33 @@ sub ReserveSlip { > ); > } > >+=head2 GetMultiHoldsCountSameEnum >+ >+ my $count = GetMultiHoldsCountSameEnum( >+ borrowernumber => $borrowernumber, >+ itemnumber => $itemnumber, >+ ) >+ >+ This function returns the number of holds a borrower has placed >+ on specific items with the same enumchron field as the given >+ item, on the same bibliographic record. >+ >+=cut >+ >+sub GetMultiHoldsCountSameEnum { >+ my %params = @_; >+ my $borrowernumber = $params{'borrowernumber'}; >+ my $itemnumber = $params{'itemnumber'}; >+ >+ return unless ( $borrowernumber && $itemnumber ); >+ >+ my $dbh = C4::Context->dbh; >+ my $query = " >+ SELECT COUNT(*) AS count FROM reserves >+ LEFT JOIN items ON ( reserves.itemnumber = items.itemnumber ) >+ "; >+} >+ > =head1 AUTHOR > > Koha Development Team <http://koha-community.org/> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt >index 81aee44..ccb8482 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt >@@ -55,7 +55,7 @@ function check() { > } > > if (alreadyreserved > "0"){ >- msg += (_("- This patron had already placed a hold on this item") + "\n" + _("Please cancel the previous hold first") + "\n"); >+ msg += (_("This patron has already placed the maximum number of holds for this record") + "\n" + _("Please cancel a previous hold first") + "\n"); > } > > if (msg == "") return(true); >@@ -208,7 +208,7 @@ function checkMultiHold() { > <li><strong>Too Many Holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %] </a> has too many holds.</li> > [% END %] > [% IF ( alreadyreserved ) %] >- <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %]</a> <strong>already has a hold</strong> on this item </li> >+ <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %]</a> <strong>has already placed the maximum allowed number of holds</strong> on this record</li> > [% END %] > [% IF ( none_available ) %] > <li> <strong>No copies are available</strong> to be placed on hold</li> >diff --git a/reserve/request.pl b/reserve/request.pl >index 045ec92..8cdcf1c 100755 >--- a/reserve/request.pl >+++ b/reserve/request.pl >@@ -223,6 +223,7 @@ if ($borrowerslist) { > > # FIXME launch another time GetMember perhaps until > my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold ); >+my $max_holds_per_record = C4::Context->preference('MaxHoldsPerRecord'); > > my @biblionumbers = (); > my $biblionumbers = $input->param('biblionumbers'); >@@ -248,7 +249,8 @@ foreach my $biblionumber (@biblionumbers) { > # get existing reserves ..... > my ( $count, $reserves ) = GetReservesFromBiblionumber($biblionumber,1); > my $totalcount = $count; >- my $alreadyreserved; >+ my $holds_count = 0; >+ my $alreadyreserved = 0; > > foreach my $res (@$reserves) { > if ( defined $res->{found} && $res->{found} eq 'W' ) { >@@ -256,17 +258,21 @@ foreach my $biblionumber (@biblionumbers) { > } > > if ( defined $borrowerinfo && ($borrowerinfo->{borrowernumber} eq $res->{borrowernumber}) ) { >- $warnings = 1; >+ $holds_count++; >+ } >+ } >+ >+ if ( $holds_count >= $max_holds_per_record ) { > $alreadyreserved = 1; >+ $warnings = 1; > $biblioloopiter{warn} = 1; >- $biblioloopiter{alreadyres} = 1; >- } >+ $biblioloopiter{alreadyres} = 1; > } > > $template->param( alreadyreserved => $alreadyreserved, >- messages => $messages, >- warnings => $warnings, >- maxreserves=>$maxreserves >+ messages => $messages, >+ warnings => $warnings, >+ maxreserves=> $maxreserves > ); > > >-- >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 7710
:
8598
|
8599
|
8600
|
8601
|
8602
|
8603
|
10091
|
10098
|
10099
|
10100
|
10101
|
10102
|
10818
|
10897
|
12620
|
14083
|
14600
|
14602
|
14603
|
15252
|
15253
|
15295
|
15731
|
15732
|
17448
|
18217
|
18320
|
18321
|
19117
|
27429
|
30218
|
35397
|
35518