- [% IF itemloo.force_hold_level == 'record' # Patron has placed a record level hold previously for this record %]
-
-
- Hold must be record level
-
- [% ELSIF ( itemloo.available ) %]
-
- [% ELSIF ( itemloo.override ) %]
-
-
- [% ELSE %]
-
-
- [% IF itemloo.not_holdable %]
- [% IF itemloo.not_holdable == 'damaged' %]
- Item damaged
- [% ELSIF itemloo.not_holdable == 'ageRestricted' %]
- Age restricted
- [% ELSIF itemloo.not_holdable == 'tooManyHoldsForThisRecord' %]
- Exceeded max holds per record
- [% ELSIF itemloo.not_holdable == 'tooManyReservesToday' %]
- Daily hold limit reached for patron
- [% ELSIF itemloo.not_holdable == 'tooManyReserves' %]
- Too many holds
- [% ELSIF itemloo.not_holdable == 'notReservable' %]
- Not holdable
- [% ELSIF itemloo.not_holdable == 'cannotReserveFromOtherBranches' %]
- Patron is from different library
- [% ELSIF itemloo.not_holdable == 'branchNotInHoldGroup' %]
- Cannot place hold from patron's library
- [% ELSIF itemloo.not_holdable == 'itemAlreadyOnHold' %]
- Patron already has hold for this item
- [% ELSIF itemloo.not_holdable == 'cannotBeTransferred' %]
- Cannot be transferred to pickup library
- [% ELSIF itemloo.not_holdable == 'pickupNotInHoldGroup' %]
- Only pickup locations within the same hold group are allowed
- [% ELSIF itemloo.not_holdable == 'noReservesAllowed' %]
- No reserves are allowed on this item
- [% ELSIF itemloo.not_holdable == 'libraryNotPickupLocation' %]
- Library is not a pickup location
- [% ELSIF itemloo.not_holdable == 'no_valid_pickup_location' %]
- No valid pickup location
- [% ELSE %]
- [% itemloo.not_holdable | html %]
- [% END %]
+
+ Place a hold on a specific item
+ [% IF force_hold_level == 'item' %]
+ (Required)
+ [% END %]
+
+ [% IF force_hold_level == 'record' # Patron has placed a record level hold previously for this record %]
+
+
+ Hold must be record level
+
+ [% ELSIF ( itemloo.available ) %]
+
+ [% ELSIF ( itemloo.override ) %]
+
+
+ [% ELSE %]
+
+
+ [% IF itemloo.not_holdable %]
+ [% IF itemloo.not_holdable == 'damaged' %]
+ Item damaged
+ [% ELSIF itemloo.not_holdable == 'ageRestricted' %]
+ Age restricted
+ [% ELSIF itemloo.not_holdable == 'tooManyHoldsForThisRecord' %]
+ Exceeded max holds per record
+ [% ELSIF itemloo.not_holdable == 'tooManyReservesToday' %]
+ Daily hold limit reached for patron
+ [% ELSIF itemloo.not_holdable == 'tooManyReserves' %]
+ Too many holds
+ [% ELSIF itemloo.not_holdable == 'notReservable' %]
+ Not holdable
+ [% ELSIF itemloo.not_holdable == 'cannotReserveFromOtherBranches' %]
+ Patron is from different library
+ [% ELSIF itemloo.not_holdable == 'branchNotInHoldGroup' %]
+ Cannot place hold from patron's library
+ [% ELSIF itemloo.not_holdable == 'itemAlreadyOnHold' %]
+ Patron already has hold for this item
+ [% ELSIF itemloo.not_holdable == 'cannotBeTransferred' %]
+ Cannot be transferred to pickup library
+ [% ELSIF itemloo.not_holdable == 'pickupNotInHoldGroup' %]
+ Only pickup locations within the same hold group are allowed
+ [% ELSIF itemloo.not_holdable == 'noReservesAllowed' %]
+ No reserves are allowed on this item
+ [% ELSIF itemloo.not_holdable == 'libraryNotPickupLocation' %]
+ Library is not a pickup location
+ [% ELSIF itemloo.not_holdable == 'no_valid_pickup_location' %]
+ No valid pickup location
+ [% ELSE %]
+ [% itemloo.not_holdable | html %]
[% END %]
-
- [% END # /IF itemloo.force_hold_level %]
-
- [% IF ( item_level_itypes ) %]
-
- [% UNLESS ( noItemTypeImages ) %]
- [% IF ( itemloo.imageurl ) %] [% END %]
[% END %]
- [% itemloo.itypename | html %]
-
- [% END %]
-
- [% itemloo.barcode | html %]
-
+
+ [% END # /IF force_hold_level %]
+
+ [% IF Koha.Preference('item-level_itypes') %]
- [% Branches.GetName( itemloo.homebranch ) | html %]
+ [% UNLESS ( noItemTypeImages ) %]
+ [% IF ( itemloo.itemtype.image_location) %] [% END %]
+ [% END %]
+ [% itemloo.itemtype.translated_description | html %]
+ [% END %]
+
+ [% itemloo.barcode | html %]
+
+
+ [% Branches.GetName( itemloo.homebranch ) | html %]
+
+
+ [% Branches.GetName( itemloo.holdingbranch ) | html %]
+
+ [% IF itemdata_ccode %]
- [% Branches.GetName( itemloo.holdingbranch ) | html %]
+ [% IF ( itemloo.ccode ) %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => itemloo.ccode ) | html %][% END %]
- [% IF itemdata_ccode %]
-
- [% IF ( itemloo.ccode ) %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => itemloo.ccode ) | html %][% END %]
-
- [% END %]
+ [% END %]
+
+ [% itemloo.itemcallnumber | html %]
+
+
+ [% IF ( itemloo.copynumber ) %][% itemloo.copynumber | html %][% ELSE %] [% END %]
+
+ [% IF itemdata_enumchron %]
- [% itemloo.itemcallnumber | html %]
+ [% itemloo.enumchron | html %]
@@ -1140,7 +1140,7 @@
var biblionumber = "[% biblionumber | $raw %]";
var borrowernumber = "[% patron.borrowernumber | $raw %]";
var patron_homebranch = "[% To.json( Branches.GetName( patron.branchcode ) ) | $raw %]";
- var override_items = {[% FOREACH bibitemloo IN bibitemloop %][% FOREACH itemloo IN bibitemloo.itemloop %][% IF ( itemloo.override ) %]
+ var override_items = {[% FOREACH biblio IN biblioloop %][% FOREACH itemloo IN biblio.itemloop %][% IF ( itemloo.override ) %]
[% itemloo.itemnumber | html %]: {
homebranch: "[% To.json( Branches.GetName( itemloo.homebranch ) ) | $raw %]",
holdallowed: "[% itemloo.holdallowed | html %]"
--- a/reserve/request.pl
+++ a/reserve/request.pl
@@ -68,7 +68,12 @@ my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user(
my $showallitems = $input->param('showallitems');
my $pickup = $input->param('pickup');
-my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
+my $itemtypes = {
+ map {
+ $_->itemtype =>
+ { %{ $_->unblessed }, image_location => $_->image_location }
+ } Koha::ItemTypes->search_with_localization->as_list
+};
# Select borrowers infos
my $findborrower = $input->param('findborrower');
@@ -326,7 +331,6 @@ foreach my $biblionumber (@biblionumbers) {
last;
}
- my $force_hold_level;
if ( $patron ) {
{ # CanBookBeReserved
my $canReserve = CanBookBeReserved( $patron->borrowernumber, $biblionumber );
@@ -370,9 +374,7 @@ foreach my $biblionumber (@biblionumbers) {
found => undef,
}
);
- $force_hold_level = $holds->forced_hold_level();
- $biblioloopiter{force_hold_level} = $force_hold_level;
- $template->param( force_hold_level => $force_hold_level );
+ $template->param( force_hold_level => $holds->forced_hold_level() );
# For a librarian to be able to place multiple record holds for a patron for a record,
# we must find out what the maximum number of holds they can place for the patron is
@@ -383,208 +385,166 @@ foreach my $biblionumber (@biblionumbers) {
$template->param( remaining_holds_for_record => $remaining_holds_for_record );
}
-
- my $count = Koha::Holds->search( { biblionumber => $biblionumber } )->count();
- my $totalcount = $count;
-
# adding a fixed value for priority options
- my $fixedRank = $count+1;
+ my $fixedRank = $biblio->holds->count + 1;
- my %itemnumbers_of_biblioitem;
+ my @items = $biblio->items->as_list;
- my @hostitems = get_hostitemnumbers_of($biblionumber);
- my @itemnumbers;
- if (@hostitems){
- push(@itemnumbers, @hostitems);
+ my @host_items = $biblio->host_items->as_list;
+ if (@host_items) {
+ push @items, @host_items;
}
- my $items = Koha::Items->search({ -or => { biblionumber => $biblionumber, itemnumber => { in => \@itemnumbers } } });
-
- unless ( $items->count ) {
+ unless ( @items ) {
# FIXME Then why do we continue?
$template->param('noitems' => 1) unless ( $multi_hold );
$biblioloopiter{noitems} = 1;
}
- ## Here we go backwards again to create hash of biblioitemnumber to itemnumbers
- ## this is important when we have analytic items which may be on another record
- my ( $iteminfos_of );
- while ( my $item = $items->next ) {
- $item = $item->unblessed;
- my $biblioitemnumber = $item->{biblioitemnumber};
- my $itemnumber = $item->{itemnumber};
- push( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} }, $itemnumber );
- $iteminfos_of->{$itemnumber} = $item;
- }
-
- my @biblioitemnumbers = keys %itemnumbers_of_biblioitem;
-
- my $biblioiteminfos_of = {
- map {
- my $biblioitem = $_;
- ( $biblioitem->{biblioitemnumber} => $biblioitem )
- } @{ Koha::Biblioitems->search(
- { biblioitemnumber => { -in => \@biblioitemnumbers } },
- { select => ['biblionumber', 'biblioitemnumber', 'publicationyear', 'itemtype']}
- )->unblessed
- }
- };
-
- my @bibitemloop;
-
my @available_itemtypes;
- foreach my $biblioitemnumber (@biblioitemnumbers) {
- my $biblioitem = $biblioiteminfos_of->{$biblioitemnumber};
- my $num_available = 0;
- my $num_override = 0;
- my $hiddencount = 0;
- my $num_alreadyheld = 0;
-
- $biblioitem->{force_hold_level} = $force_hold_level;
-
- $biblioloopiter{description} = $biblioitem->{description};
- $biblioloopiter{itypename} = $biblioitem->{description};
- if ( $biblioitem->{itemtype} ) {
-
- $biblioitem->{description} =
- $itemtypes->{ $biblioitem->{itemtype} }{description};
-
- $biblioloopiter{imageurl} =
- getitemtypeimagelocation( 'intranet',
- $itemtypes->{ $biblioitem->{itemtype} }{imageurl} );
- }
-
- # iterating through all items first to check if any of them available
- # to pass this value further inside down to IsAvailableForItemLevelRequest to
- # it's complicated logic to analyse.
- # (before this loop was inside that sub loop so it was O(n^2) )
- my $items_any_available;
- $items_any_available = ItemsAnyAvailableAndNotRestricted( { biblionumber => $biblioitem->{biblionumber}, patron => $patron })
- if $patron;
-
- foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) {
- my $item = $iteminfos_of->{$itemnumber};
- my $do_check;
- if ( $patron ) {
- $do_check = $patron->do_check_for_previous_checkout($item) if $wants_check;
- if ( $do_check && $wants_check ) {
- $item->{checked_previously} = $do_check;
- if ( $multi_hold ) {
- $biblioloopiter{checked_previously} = $do_check;
- } else {
- $template->param( checked_previously => $do_check );
- }
+ my $num_available = 0;
+ my $num_override = 0;
+ my $hiddencount = 0;
+ my $num_alreadyheld = 0;
+
+ # iterating through all items first to check if any of them available
+ # to pass this value further inside down to IsAvailableForItemLevelRequest to
+ # it's complicated logic to analyse.
+ # (before this loop was inside that sub loop so it was O(n^2) )
+ my $items_any_available;
+ $items_any_available = ItemsAnyAvailableAndNotRestricted( { biblionumber => $biblio->biblionumber, patron => $patron })
+ if $patron;
+
+ for my $item_object ( @items ) {
+ my $do_check;
+ my $item = $item_object->unblessed;
+ if ( $patron ) {
+ $do_check = $patron->do_check_for_previous_checkout($item) if $wants_check;
+ if ( $do_check && $wants_check ) {
+ $item->{checked_previously} = $do_check;
+ if ( $multi_hold ) {
+ $biblioloopiter{checked_previously} = $do_check;
+ } else {
+ $template->param( checked_previously => $do_check );
}
}
- $item->{force_hold_level} = $force_hold_level;
-
- unless (C4::Context->preference('item-level_itypes')) {
- $item->{itype} = $biblioitem->{itemtype};
- }
+ }
- $item->{itypename} = $itemtypes->{ $item->{itype} }{description};
- $item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} );
- $item->{homebranch} = $item->{homebranch};
+ $item->{itemtype} = $itemtypes->{ $item_object->effective_itemtype };
- # if the holdingbranch is different than the homebranch, we show the
- # holdingbranch of the document too
- if ( $item->{homebranch} ne $item->{holdingbranch} ) {
- $item->{holdingbranch} = $item->{holdingbranch};
- }
+ if($item->{biblionumber} ne $biblio->biblionumber){
+ $item->{hosttitle} = Koha::Biblios->find( $item->{biblionumber} )->title;
+ }
- if($item->{biblionumber} ne $biblionumber){
- $item->{hosttitle} = Koha::Biblios->find( $item->{biblionumber} )->title;
- }
+ # if the item is currently on loan, we display its return date and
+ # change the background color
+ my $issue = $item_object->checkout;
+ if ( $issue ) { # FIXME must be moved to the template
+ $item->{date_due} = $issue->date_due;
+ $item->{backgroundcolor} = 'onloan';
+ }
- # if the item is currently on loan, we display its return date and
- # change the background color
- my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } );
- if ( $issue ) {
- $item->{date_due} = $issue->date_due;
- $item->{backgroundcolor} = 'onloan';
- }
+ # checking reserve
+ my $holds = $item_object->current_holds;
+ if ( my $first_hold = $holds->next ) {
+ my $p = Koha::Patrons->find( $first_hold->borrowernumber );
- # checking reserve
- my $item_object = Koha::Items->find( $itemnumber );
- my $holds = $item_object->current_holds;
- if ( my $first_hold = $holds->next ) {
- my $p = Koha::Patrons->find( $first_hold->borrowernumber );
-
- $item->{backgroundcolor} = 'reserved';
- $item->{reservedate} = output_pref({ dt => dt_from_string( $first_hold->reservedate ), dateonly => 1 }); # FIXME Should be formatted in the template
- $item->{ReservedFor} = $p;
- $item->{ExpectedAtLibrary} = $first_hold->branchcode;
- $item->{waitingdate} = $first_hold->waitingdate;
- }
+ $item->{backgroundcolor} = 'reserved';
+ $item->{reservedate} = output_pref({ dt => dt_from_string( $first_hold->reservedate ), dateonly => 1 }); # FIXME Should be formatted in the template
+ $item->{ReservedFor} = $p;
+ $item->{ExpectedAtLibrary} = $first_hold->branchcode;
+ $item->{waitingdate} = $first_hold->waitingdate;
+ }
- # Management of the notforloan document
- if ( $item->{notforloan} ) {
- $item->{backgroundcolor} = 'other';
- }
+ # Management of the notforloan document
+ if ( $item->{notforloan} ) {
+ $item->{backgroundcolor} = 'other';
+ }
- # Management of lost or long overdue items
- if ( $item->{itemlost} ) {
- $item->{backgroundcolor} = 'other';
- if ($logged_in_patron->category->hidelostitems && !$showallitems) {
- $item->{hide} = 1;
- $hiddencount++;
- }
+ # Management of lost or long overdue items
+ if ( $item->{itemlost} ) {
+ $item->{backgroundcolor} = 'other';
+ if ($logged_in_patron->category->hidelostitems && !$showallitems) {
+ $item->{hide} = 1;
+ $hiddencount++;
}
+ }
- # Check the transit status
- my ( $transfertwhen, $transfertfrom, $transfertto ) =
- GetTransfers($itemnumber);
+ # Check the transit status
+ my ( $transfertwhen, $transfertfrom, $transfertto ) =
+ GetTransfers($item_object->itemnumber); # FIXME replace with get_transfer
- if ( defined $transfertwhen && $transfertwhen ne '' ) {
- $item->{transfertwhen} = output_pref({ dt => dt_from_string( $transfertwhen ), dateonly => 1 });
- $item->{transfertfrom} = $transfertfrom;
- $item->{transfertto} = $transfertto;
- $item->{nocancel} = 1;
- }
+ if ( defined $transfertwhen && $transfertwhen ne '' ) {
+ $item->{transfertwhen} = output_pref({ dt => dt_from_string( $transfertwhen ), dateonly => 1 });
+ $item->{transfertfrom} = $transfertfrom;
+ $item->{transfertto} = $transfertto;
+ $item->{nocancel} = 1;
+ }
- # If there is no loan, return and transfer, we show a checkbox.
- $item->{notforloan} ||= 0;
-
- # if independent branches is on we need to check if the person can reserve
- # for branches they arent logged in to
- if ( C4::Context->preference("IndependentBranches") ) {
- if (! C4::Context->preference("canreservefromotherbranches")){
- # can't reserve items so need to check if item homebranch and userenv branch match if not we can't reserve
- my $userenv = C4::Context->userenv;
- unless ( C4::Context->IsSuperLibrarian ) {
- $item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} );
- }
+ # If there is no loan, return and transfer, we show a checkbox.
+ $item->{notforloan} ||= 0;
+
+ # if independent branches is on we need to check if the person can reserve
+ # for branches they arent logged in to
+ if ( C4::Context->preference("IndependentBranches") ) {
+ if (! C4::Context->preference("canreservefromotherbranches")){
+ # can't reserve items so need to check if item homebranch and userenv branch match if not we can't reserve
+ my $userenv = C4::Context->userenv;
+ unless ( C4::Context->IsSuperLibrarian ) {
+ $item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} );
}
}
+ }
- if ( $patron ) {
- my $patron_unblessed = $patron->unblessed;
- my $branch = C4::Circulation::_GetCircControlBranch($item, $patron_unblessed);
+ if ( $patron ) {
+ my $patron_unblessed = $patron->unblessed;
+ my $branch = C4::Circulation::_GetCircControlBranch($item, $patron_unblessed);
- my $branchitemrule = GetBranchItemRule( $branch, $item->{'itype'} );
+ my $branchitemrule = GetBranchItemRule( $branch, $item->{'itype'} );
- $item->{'holdallowed'} = $branchitemrule->{'holdallowed'};
+ $item->{'holdallowed'} = $branchitemrule->{'holdallowed'};
- my $can_item_be_reserved = CanItemBeReserved( $patron->borrowernumber, $itemnumber )->{status};
- $item->{not_holdable} = $can_item_be_reserved unless ( $can_item_be_reserved eq 'OK' );
+ my $can_item_be_reserved = CanItemBeReserved( $patron->borrowernumber, $item_object->itemnumber )->{status};
+ $item->{not_holdable} = $can_item_be_reserved unless ( $can_item_be_reserved eq 'OK' );
- $item->{item_level_holds} = Koha::CirculationRules->get_opacitemholds_policy( { item => $item_object, patron => $patron } );
+ $item->{item_level_holds} = Koha::CirculationRules->get_opacitemholds_policy( { item => $item_object, patron => $patron } );
- if (
- !$item->{cantreserve}
- && !$exceeded_maxreserves
- && $can_item_be_reserved eq 'OK'
- # items_any_available defined outside of the current loop,
- # so we avoiding loop inside IsAvailableForItemLevelRequest:
- && IsAvailableForItemLevelRequest($item_object, $patron, undef, $items_any_available)
- )
- {
+ if (
+ !$item->{cantreserve}
+ && !$exceeded_maxreserves
+ && $can_item_be_reserved eq 'OK'
+ # items_any_available defined outside of the current loop,
+ # so we avoiding loop inside IsAvailableForItemLevelRequest:
+ && IsAvailableForItemLevelRequest($item_object, $patron, undef, $items_any_available)
+ )
+ {
+ # Send the pickup locations count to the UI, the pickup locations will be pulled using the API
+ my $pickup_locations = $item_object->pickup_locations({ patron => $patron });
+ $item->{pickup_locations_count} = $pickup_locations->count;
+ if ( $item->{pickup_locations_count} > 0 ) {
+ $num_available++;
+ $item->{available} = 1;
+ # pass the holding branch for use as default
+ my $default_pickup_location = $pickup_locations->search({ branchcode => $item->{holdingbranch} })->next;
+ $item->{default_pickup_location} = $default_pickup_location;
+ }
+ else {
+ $item->{available} = 0;
+ $item->{not_holdable} = "no_valid_pickup_location";
+ }
+
+ push( @available_itemtypes, $item->{itype} );
+ }
+ elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) {
+ # If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules
+ # with the exception of itemAlreadyOnHold because, you know, the item is already on hold
+ if ( $can_item_be_reserved ne 'itemAlreadyOnHold' ) {
# Send the pickup locations count to the UI, the pickup locations will be pulled using the API
my $pickup_locations = $item_object->pickup_locations({ patron => $patron });
$item->{pickup_locations_count} = $pickup_locations->count;
if ( $item->{pickup_locations_count} > 0 ) {
- $num_available++;
- $item->{available} = 1;
+ $item->{override} = 1;
+ $num_override++;
# pass the holding branch for use as default
my $default_pickup_location = $pickup_locations->search({ branchcode => $item->{holdingbranch} })->next;
$item->{default_pickup_location} = $default_pickup_location;
@@ -593,61 +553,39 @@ foreach my $biblionumber (@biblionumbers) {
$item->{available} = 0;
$item->{not_holdable} = "no_valid_pickup_location";
}
+ } else { $num_alreadyheld++ }
- push( @available_itemtypes, $item->{itype} );
- }
- elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) {
- # If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules
- # with the exception of itemAlreadyOnHold because, you know, the item is already on hold
- if ( $can_item_be_reserved ne 'itemAlreadyOnHold' ) {
- # Send the pickup locations count to the UI, the pickup locations will be pulled using the API
- my $pickup_locations = $item_object->pickup_locations({ patron => $patron });
- $item->{pickup_locations_count} = $pickup_locations->count;
- if ( $item->{pickup_locations_count} > 0 ) {
- $item->{override} = 1;
- $num_override++;
- # pass the holding branch for use as default
- my $default_pickup_location = $pickup_locations->search({ branchcode => $item->{holdingbranch} })->next;
- $item->{default_pickup_location} = $default_pickup_location;
- }
- else {
- $item->{available} = 0;
- $item->{not_holdable} = "no_valid_pickup_location";
- }
- } else { $num_alreadyheld++ }
-
- push( @available_itemtypes, $item->{itype} );
- }
+ push( @available_itemtypes, $item->{itype} );
+ }
- # If none of the conditions hold true, then neither override nor available is set and the item cannot be checked
+ # If none of the conditions hold true, then neither override nor available is set and the item cannot be checked
- # Show serial enumeration when needed
- if ($item->{enumchron}) {
- $itemdata_enumchron = 1;
- }
- # Show collection when needed
- if ($item->{ccode}) {
- $itemdata_ccode = 1;
- }
+ # Show serial enumeration when needed
+ if ($item->{enumchron}) {
+ $itemdata_enumchron = 1;
+ }
+ # Show collection when needed
+ if ($item->{ccode}) {
+ $itemdata_ccode = 1;
}
-
- push @{ $biblioitem->{itemloop} }, $item;
}
- # While we can't override an alreay held item, we should be able to override the others
- # Unless all items are already held
- if ( $num_override > 0 && ($num_override + $num_alreadyheld) == scalar( @{ $biblioitem->{itemloop} } ) ) {
- # That is, if all items require an override
- $template->param( override_required => 1 );
- } elsif ( $num_available == 0 ) {
- $template->param( none_available => 1 );
- $biblioloopiter{warn} = 1;
- $biblioloopiter{none_avail} = 1;
- }
- $template->param( hiddencount => $hiddencount);
+ push @{ $biblioloopiter{itemloop} }, $item;
+ }
- push @bibitemloop, $biblioitem;
+ $biblioloopiter{biblioitem} = $biblio->biblioitem;
+
+ # While we can't override an alreay held item, we should be able to override the others
+ # Unless all items are already held
+ if ( $num_override > 0 && ($num_override + $num_alreadyheld) == scalar( @{ $biblioloopiter{itemloop} } ) ) {
+ # That is, if all items require an override
+ $template->param( override_required => 1 );
+ } elsif ( $num_available == 0 ) {
+ $template->param( none_available => 1 );
+ $biblioloopiter{warn} = 1;
+ $biblioloopiter{none_avail} = 1;
}
+ $template->param( hiddencount => $hiddencount);
@available_itemtypes = uniq( @available_itemtypes );
$template->param( available_itemtypes => \@available_itemtypes );
@@ -717,7 +655,6 @@ foreach my $biblionumber (@biblionumbers) {
# display infos
$template->param(
- bibitemloop => \@bibitemloop,
itemdata_enumchron => $itemdata_enumchron,
itemdata_ccode => $itemdata_ccode,
date => $date,
@@ -764,6 +701,7 @@ if ( C4::Context->preference( 'AllowHoldDateInFuture' ) ) {
$template->param(
SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
+ borrowernumber => $borrowernumber_hold,
);
# printout the page
--