use C4::Dates qw/format_date/;
use List::Util qw(shuffle);
+use List::MoreUtils qw(any);
use Data::Dumper;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$items_query .= "WHERE items.notforloan = 0
AND holdingbranch IS NOT NULL
AND itemlost = 0
- AND wthdrawn = 0";
+ AND withdrawn = 0";
$items_query .= " AND damaged = 0" unless C4::Context->preference('AllowHoldsOnDamagedItems');
$items_query .= " AND items.onloan IS NULL
AND (itemtypes.notforloan IS NULL OR itemtypes.notforloan = 0)
my @items = grep { ! scalar GetTransfers($_->{itemnumber}) } @$itm;
return [ grep {
my $rule = GetBranchItemRule($_->{homebranch}, $_->{itype});
- $_->{holdallowed} = $rule->{holdallowed} != 0
+ $_->{holdallowed} = $rule->{holdallowed};
} @items ];
}
return unless scalar(@$hold_requests) > 0;
return unless scalar(@$available_items) > 0;
- my $automatic_return = C4::Context->preference("AutomaticItemReturn");
-
# identify item-level requests
my %specific_items_requested = map { $_->{itemnumber} => 1 }
grep { defined($_->{itemnumber}) }
my $pickup_branch = $request->{branchcode} || $request->{borrowerbranch};
my ($itemnumber, $holdingbranch);
- my $holding_branch_items = $automatic_return ? undef : $items_by_branch{$pickup_branch};
+ my $holding_branch_items = $items_by_branch{$pickup_branch};
if ( $holding_branch_items ) {
foreach my $item (@$holding_branch_items) {
if ( $request->{borrowerbranch} eq $item->{homebranch} ) {
$itemnumber = $item->{itemnumber};
last;
}
- $itemnumber ||= $holding_branch_items->[0]->{itemnumber};
}
else {
warn "No transport costs for $pickup_branch";
last PULL_BRANCHES;
}
}
- $itemnumber ||= $items_by_branch{$holdingbranch}->[0]->{itemnumber}
- if $holdingbranch;
+
+ unless ( $itemnumber ) {
+ foreach my $current_item ( @{ $items_by_branch{$holdingbranch} } ) {
+ if ( $holdingbranch && ( $current_item->{holdallowed} == 2 || $pickup_branch eq $current_item->{homebranch} ) ) {
+ $itemnumber = $current_item->{itemnumber};
+ last; # quit this loop as soon as we have a suitable item
+ }
+ }
+ }
}
if ($itemnumber) {
#$from - arrayref
my ($to, $from, $transport_cost_matrix) = @_;
-# Nothing really spectacular: supply to branch, a list of potential from branches
-# and find the minimum from - to value from the transport_cost_matrix
+ # Nothing really spectacular: supply to branch, a list of potential from branches
+ # and find the minimum from - to value from the transport_cost_matrix
return $from->[0] if @$from == 1;
+ # If the pickup library is in the list of libraries to pull from,
+ # return that library right away, it is obviously the least costly
+ return ($to) if any { $_ eq $to } @$from;
+
my ($least_cost, @branch);
foreach (@$from) {
my $cell = $transport_cost_matrix->{$to}{$_};