@@ -, +, @@
C4::Reserves::CanItemBeReserved() to the web-templates.
-ageRestricted
-tooManyReserves which translates to maxreserves
#############
- TEST PLAN -
#############
forbidden. (previously you just got a notification about maximum amount of reserves reached)
The "Place Hold" -button is missing on the right sidebar if the underage
user is logged in.
an error about age restrictions.
---
C4/Reserves.pm | 30 +++++++++++++-------
.../prog/en/modules/reserve/request.tt | 5 +++-
.../opac-tmpl/bootstrap/en/modules/opac-reserve.tt | 6 ++++
opac/opac-detail.pl | 4 +--
opac/opac-reserve.pl | 10 ++++++-
reserve/request.pl | 19 ++++++++++---
t/db_dependent/Reserves.t | 6 ++--
7 files changed, 59 insertions(+), 21 deletions(-)
--- a/C4/Reserves.pm
+++ a/C4/Reserves.pm
@@ -448,7 +448,10 @@ sub GetReservesFromBorrowernumber {
#-------------------------------------------------------------------------------------
=head2 CanBookBeReserved
- $error = &CanBookBeReserved($borrowernumber, $biblionumber)
+ $canReserve = &CanBookBeReserved($borrowernumber, $biblionumber)
+ if ($canReserve eq 'OK') { #We can reserve this Item! }
+
+See CanItemBeReserved() for possible return values.
=cut
@@ -462,17 +465,24 @@ sub CanBookBeReserved{
push (@$items,@hostitems);
}
+ my $canReserve;
foreach my $item (@$items){
- return 1 if CanItemBeReserved($borrowernumber, $item);
+ $canReserve = CanItemBeReserved($borrowernumber, $item);
+ return 'OK' if $canReserve eq 'OK';
}
- return 0;
+ return $canReserve;
}
=head2 CanItemBeReserved
- $error = &CanItemBeReserved($borrowernumber, $itemnumber)
+ $canReserve = &CanItemBeReserved($borrowernumber, $itemnumber)
+ if ($canReserve eq 'OK') { #We can reserve this Item! }
-This function return 1 if an item can be issued by this borrower.
+@RETURNS OK, if the Item can be reserved.
+ ageRestricted, if the Item is age restricted for this borrower.
+ damaged, if the Item is damaged.
+ cannotReserveFromOtherBranches, if syspref 'canreservefromotherbranches' is OK.
+ tooManyReserves, if the borrower has exceeded his maximum reserve amount.
=cut
@@ -490,11 +500,11 @@ sub CanItemBeReserved{
my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber);
# If an item is damaged and we don't allow holds on damaged items, we can stop right here
- return 0 if ( $item->{damaged} && !C4::Context->preference('AllowHoldsOnDamagedItems') );
+ return 'damaged' if ( $item->{damaged} && !C4::Context->preference('AllowHoldsOnDamagedItems') );
#Check for the age restriction
my ($ageRestriction, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction( $biblioData->{agerestriction}, $borrower );
- return 0 if $daysToAgeRestriction && $daysToAgeRestriction > 0;
+ return 'ageRestricted' if $daysToAgeRestriction && $daysToAgeRestriction > 0;
my $controlbranch = C4::Context->preference('ReservesControlBranch');
my $itemtypefield = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype";
@@ -561,7 +571,7 @@ sub CanItemBeReserved{
# we check if it's ok or not
if( $reservecount >= $allowedreserves ){
- return 0;
+ return 'tooManyReserves';
}
# If reservecount is ok, we check item branch if IndependentBranches is ON
@@ -571,11 +581,11 @@ sub CanItemBeReserved{
{
my $itembranch = $item->{homebranch};
if ($itembranch ne $borrower->{branchcode}) {
- return 0;
+ return 'cannotReserveFromOtherBranches';
}
}
- return 1;
+ return 'OK';
}
=head2 CanReserveBeCanceledFromOpac
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
@@ -241,7 +241,7 @@ function checkMultiHold() {
[% ELSE %]
-[% IF ( maxreserves || alreadyreserved || none_available || alreadypossession ) %]
+[% IF ( maxreserves || alreadyreserved || none_available || alreadypossession || ageRestricted ) %]
[% UNLESS ( multi_hold ) %]
@@ -250,6 +250,9 @@ function checkMultiHold() {
[% IF ( maxreserves ) %]
Too many holds: [% borrowerfirstname %] [% borrowersurname %] has too many holds.
[% END %]
+ [% IF ( ageRestricted ) %]
+
Age restricted
+ [% END %]
[% IF ( alreadyreserved ) %]
[% borrowerfirstname %] [% borrowersurname %] already has a hold on this item
[% END %]
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-reserve.tt
+++ a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-reserve.tt
@@ -52,6 +52,12 @@
[% END %]
+ [% IF ( ageRestricted ) %]
+
+ Sorry, you are too young to reserve this material.
+
+ [% END %]
+
[% IF ( bad_biblionumber ) %]
ERROR: No biblio record found for biblionumber [% bad_biblionumber %].
--- a/opac/opac-detail.pl
+++ a/opac/opac-detail.pl
@@ -522,8 +522,8 @@ my $dat = &GetBiblioData($biblionumber);
#Check if we can place a hold on this biblio.
my $canReserve = C4::Reserves::CanBookBeReserved( $biblionumber, $biblionumber );
-unless ($canReserve ) {
- $template->param( cannotReserve => 1 ) ;
+unless ($canReserve eq 'OK' ) {
+ $template->param( cannotReserve => $canReserve ) ;
}
--- a/opac/opac-reserve.pl
+++ a/opac/opac-reserve.pl
@@ -548,9 +548,17 @@ foreach my $biblioNum (@biblionumbers) {
if ($biblioLoopIter{already_reserved}) {
$biblioLoopIter{holdable} = undef;
}
- if(not CanBookBeReserved($borrowernumber,$biblioNum)){
+ my $canReserve = CanBookBeReserved($borrowernumber,$biblioNum);
+ if ($canReserve eq 'OK') {
+ #All is OK!
+ }
+ elsif ($canReserve eq 'ageRestricted') {
$biblioLoopIter{holdable} = undef;
+ $template->param( message => 1, $canReserve => 1 );
}
+ else {
+ $biblioLoopIter{holdable} = undef;
+ }
if(not C4::Context->preference('AllowHoldsOnPatronsPossessions') and CheckIfIssuedToPatron($borrowernumber,$biblioNum)) {
$biblioLoopIter{holdable} = undef;
$biblioLoopIter{already_patron_possession} = 1;
--- a/reserve/request.pl
+++ a/reserve/request.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/perl -d
#writen 2/1/00 by chris@katipo.oc.nz
@@ -191,9 +191,20 @@ foreach my $biblionumber (@biblionumbers) {
my $dat = GetBiblioData($biblionumber);
- unless ( CanBookBeReserved($borrowerinfo->{borrowernumber}, $biblionumber) ) {
- $maxreserves = 1;
+ my $canReserve = CanBookBeReserved($borrowerinfo->{borrowernumber}, $biblionumber);
+ if ($canReserve eq 'OK') {
+ #All is OK and we can continue
+ }
+ elsif ( $canReserve eq 'tooManyReserves' ) {
+ $maxreserves = 1;
}
+ elsif ( $canReserve eq 'ageRestricted' ) {
+ $template->param( $canReserve => 1 );
+ $biblioloopiter{ $canReserve } = 1;
+ }
+ else {
+ $biblioloopiter{ $canReserve } = 1;
+ }
my $alreadypossession;
if (not C4::Context->preference('AllowHoldsOnPatronsPossessions') and CheckIfIssuedToPatron($borrowerinfo->{borrowernumber},$biblionumber)) {
@@ -415,7 +426,7 @@ foreach my $biblionumber (@biblionumbers) {
&& IsAvailableForItemLevelRequest($itemnumber)
&& CanItemBeReserved(
$borrowerinfo->{borrowernumber}, $itemnumber
- )
+ ) eq 'OK'
)
{
$item->{available} = 1;
--- a/t/db_dependent/Reserves.t
+++ a/t/db_dependent/Reserves.t
@@ -486,7 +486,7 @@ my ( $ageres_tagid, $ageres_subfieldid ) = GetMarcFromKohaField( "biblioitems.ag
$record->append_fields( MARC::Field->new($ageres_tagid, '', '', $ageres_subfieldid => 'PEGI 16') );
C4::Biblio::ModBiblio( $record, $bibnum, '' );
-is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 1, "Reserving an ageRestricted Biblio without a borrower dateofbirth succeeds" );
+is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 'OK', "Reserving an ageRestricted Biblio without a borrower dateofbirth succeeds" );
#Set the dateofbirth for the Borrower making him "too young".
my $now = DateTime->now();
@@ -494,14 +494,14 @@ my $duration_15years = DateTime::Duration->new(years => 15);
my $past15yearsAgo = DateTime->now()->subtract_duration($duration_15years);
C4::Members::ModMember( borrowernumber => $borrowernumber, dateofbirth => $past15yearsAgo->ymd() );
-is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 0, "Reserving a 'PEGI 16' Biblio by a 15 year old borrower fails");
+is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 'ageRestricted', "Reserving a 'PEGI 16' Biblio by a 15 year old borrower fails");
#Set the dateofbirth for the Borrower making him "too old".
my $duration_30years = DateTime::Duration->new(years => 30);
my $past30yearsAgo = DateTime->now()->subtract_duration($duration_30years);
C4::Members::ModMember( borrowernumber => $borrowernumber, dateofbirth => $past30yearsAgo->ymd() );
-is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 1, "Reserving a 'PEGI 16' Biblio by a 30 year old borrower succeeds");
+is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 'OK', "Reserving a 'PEGI 16' Biblio by a 30 year old borrower succeeds");
####
####### EO Bug 13113 <<<
####
--