From 821897bbffd3db8a47a665ce548f97baf25140a0 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Thu, 18 Nov 2021 12:03:36 +0000 Subject: [PATCH] Bug 29517: Check if agerestriction field is mapped before fetching biblio This patch simply adds a check of cached values to see if agerestriction enabled before fetching the biblio object To test: 1 - prove -v t/db_dependent/Holds.t Signed-off-by: Fridolin Somers Signed-off-by: Marcel de Rooy Signed-off-by: Fridolin Somers --- C4/Reserves.pm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 54af13d7f0..d291a888e6 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -24,6 +24,7 @@ package C4::Reserves; use Modern::Perl; use C4::Accounts; +use C4::Biblio qw( GetMarcFromKohaField ); use C4::Circulation qw( CheckIfIssuedToPatron GetAgeRestriction GetBranchItemRule ); use C4::Context; use C4::Items qw( CartToShelf get_hostitemnumbers_of ); @@ -398,7 +399,6 @@ sub CanItemBeReserved { # we retrieve borrowers and items informations # # item->{itype} will come for biblioitems if necessery - my $biblio = $item->biblio; my $borrower = $patron->unblessed; # If an item is damaged and we don't allow holds on damaged items, we can stop right here @@ -406,10 +406,13 @@ sub CanItemBeReserved { if ( $item->damaged && !C4::Context->preference('AllowHoldsOnDamagedItems') ); - # Check for the age restriction - my ( $ageRestriction, $daysToAgeRestriction ) = - C4::Circulation::GetAgeRestriction( $biblio->biblioitem->agerestriction, $borrower ); - return { status => 'ageRestricted' } if $daysToAgeRestriction && $daysToAgeRestriction > 0; + if( GetMarcFromKohaField('biblioitems.agerestriction') ){ + my $biblio = $item->biblio; + # Check for the age restriction + my ( $ageRestriction, $daysToAgeRestriction ) = + C4::Circulation::GetAgeRestriction( $biblio->biblioitem->agerestriction, $borrower ); + return { status => 'ageRestricted' } if $daysToAgeRestriction && $daysToAgeRestriction > 0; + } # Check that the patron doesn't have an item level hold on this item already return { status =>'itemAlreadyOnHold' } @@ -417,7 +420,7 @@ sub CanItemBeReserved { # Check that patron have not checked out this biblio (if AllowHoldsOnPatronsPossessions set) if ( !C4::Context->preference('AllowHoldsOnPatronsPossessions') - && C4::Circulation::CheckIfIssuedToPatron( $patron->borrowernumber, $biblio->biblionumber ) ) { + && C4::Circulation::CheckIfIssuedToPatron( $patron->borrowernumber, $item->biblionumber ) ) { return { status =>'alreadypossession' }; } -- 2.39.5