@@ -, +, @@
you should not be able to ( default is 1 per record )
you should be able to place 3 holds for one patron on a given
record. A 4th hold should result in a message stating the patron
has placed the max number of holds allowed on this record.
---
C4/Reserves.pm | 59 ++++++++++++--------
installer/data/mysql/sysprefs.sql | 1 +
installer/data/mysql/updatedatabase.pl | 6 ++
.../en/modules/admin/preferences/circulation.pref | 7 ++-
.../prog/en/modules/reserve/request.tt | 25 ++++----
.../opac-tmpl/prog/en/modules/opac-reserve.tt | 6 ++-
opac/opac-reserve.pl | 28 ++++++----
reserve/request.pl | 6 ++
8 files changed, 89 insertions(+), 49 deletions(-)
--- a/C4/Reserves.pm
+++ a/C4/Reserves.pm
@@ -373,36 +373,47 @@ sub GetReservesFromItemnumber {
=head2 GetReservesFromBorrowernumber
- $borrowerreserv = GetReservesFromBorrowernumber($borrowernumber,$tatus);
-
-TODO :: Descritpion
+ $borrowerreserv = GetReservesFromBorrowernumber($borrowernumber[,$status][,$biblionumber][,$itemnumber]);
=cut
sub GetReservesFromBorrowernumber {
- my ( $borrowernumber, $status ) = @_;
- my $dbh = C4::Context->dbh;
- my $sth;
- if ($status) {
- $sth = $dbh->prepare("
- SELECT *
- FROM reserves
- WHERE borrowernumber=?
- AND found =?
- ORDER BY reservedate
- ");
- $sth->execute($borrowernumber,$status);
- } else {
- $sth = $dbh->prepare("
- SELECT *
- FROM reserves
- WHERE borrowernumber=?
- ORDER BY reservedate
- ");
- $sth->execute($borrowernumber);
+ my ( $borrowernumber, $found, $biblionumber, $itemnumber ) = @_;
+
+ my @params;
+
+ my $sql = "SELECT * FROM reserves WHERE borrowernumber = ?";
+ push( @params, $borrowernumber );
+
+ if ( $biblionumber ) {
+ $sql .= " AND biblionumber = ? ";
+ push( @params, $biblionumber );
+ }
+
+ if ( $itemnumber ) {
+ $sql .= " AND itemnumber = ? ";
+ push( @params, $itemnumber );
}
+
+ if ( $found ) {
+ $sql .= " AND found = ? ";
+ push( @params, $found );
+ }
+
+ $sql .= " ORDER BY reservedate ";
+
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( $sql );
+
+ $sth->execute( @params );
+
my $data = $sth->fetchall_arrayref({});
- return @$data;
+
+ if ( scalar @$data ) {
+ return @$data;
+ } else {
+ return ();
+ }
}
#-------------------------------------------------------------------------------------
=head2 CanBookBeReserved
--- a/installer/data/mysql/sysprefs.sql
+++ a/installer/data/mysql/sysprefs.sql
@@ -416,3 +416,4 @@ INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES (
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('IntranetNumbersPreferPhrase','0', NULL, 'Control the use of phr operator in callnumber and standard number staff client searches', 'YesNo');
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UNIMARCField100Language', 'fre','UNIMARC field 100 default language',NULL,'short');
INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('Persona',0,'Use Mozilla Persona for login','','YesNo');
+INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('MaxHoldsPerRecord', '1', 'The maximum number of holds allowed per bibliographic record per borrower', NULL, NULL);
--- a/installer/data/mysql/updatedatabase.pl
+++ a/installer/data/mysql/updatedatabase.pl
@@ -6437,6 +6437,12 @@ if ( CheckVersion($DBversion) ) {
SetVersion($DBversion);
}
+$DBversion = "3.11.00.XXX";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+ $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('MaxHoldsPerRecord', '1', 'The maximum number of holds allowed per bibliographic record per borrower', NULL, NULL)");
+ print "Upgrade to $DBversion done (Add syspref MaxHoldsPerRecord)\n";
+ SetVersion ($DBversion);
+}
=head1 FUNCTIONS
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
@@ -404,7 +404,12 @@ Circulation:
- Patrons can only have
- pref: maxreserves
class: integer
- - holds at once.
+ - total holds at a time.
+ -
+ - Patrons can only place
+ - pref: MaxHoldsPerRecord
+ class: integer
+ - holds on a single record at a time.
-
- pref: emailLibrarianWhenHoldIsPlaced
choices:
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
+++ a/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\n" + _("Please cancel a previous hold first.") + "\n");
}
if (msg == "") return(true);
@@ -208,7 +208,7 @@ function checkMultiHold() {