|
Lines 41-47
Koha::Library::FloatLimits - Koha Library::FloatLimit object set class
Link Here
|
| 41 |
|
41 |
|
| 42 |
sub lowest_ratio_library { |
42 |
sub lowest_ratio_library { |
| 43 |
my ( $self, $item, $branchcode ) = @_; |
43 |
my ( $self, $item, $branchcode ) = @_; |
| 44 |
|
|
|
| 45 |
my $schema = Koha::Database->new->schema; |
44 |
my $schema = Koha::Database->new->schema; |
| 46 |
|
45 |
|
| 47 |
my @float_limits = $schema->resultset('LibraryFloatLimit')->search( |
46 |
my @float_limits = $schema->resultset('LibraryFloatLimit')->search( |
|
Lines 51-56
sub lowest_ratio_library {
Link Here
|
| 51 |
} |
50 |
} |
| 52 |
)->all; |
51 |
)->all; |
| 53 |
|
52 |
|
|
|
53 |
# check the items return policy |
| 54 |
my $hbr = Koha::CirculationRules->get_return_branch_policy($item); |
| 55 |
|
| 56 |
# if item only floats in the library group we must eliminate all other candidates |
| 57 |
if ( $hbr && $hbr eq 'returnbylibrarygroup' ) { |
| 58 |
my $current_library = Koha::Libraries->find($branchcode); |
| 59 |
my $float_libraries = $current_library->get_float_libraries; |
| 60 |
|
| 61 |
if ( $float_libraries->count > 0 ) { |
| 62 |
my @allowed_branchcodes = $float_libraries->get_column('branchcode'); |
| 63 |
my %allowed_branches = map { $_ => 1 } @allowed_branchcodes; |
| 64 |
@float_limits = grep { $allowed_branches{ $_->get_column('branchcode') } } @float_limits; |
| 65 |
} |
| 66 |
} |
| 67 |
|
| 54 |
return unless @float_limits; |
68 |
return unless @float_limits; |
| 55 |
|
69 |
|
| 56 |
my @candidates; |
70 |
my @candidates; |
|
Lines 153-160
sub lowest_ratio_library {
Link Here
|
| 153 |
}; |
167 |
}; |
| 154 |
} |
168 |
} |
| 155 |
|
169 |
|
| 156 |
# sort the branches by lowest ratio in the event of a tie choose a random branch |
170 |
# sort the branches by lowest ratio |
| 157 |
@candidates = sort { $a->{ratio} <=> $b->{ratio} || rand() <=> rand() } @candidates; |
171 |
# in the event of a tie the item should stay where it is, if the current branch is involved in the tie |
|
|
172 |
# when the current branch is not involved in the tie a random branch is choosen from those who tied |
| 173 |
@candidates = sort { |
| 174 |
$a->{ratio} <=> $b->{ratio} |
| 175 |
|| ( $a->{branchcode} eq $branchcode ? -1 : 0 ) - ( $b->{branchcode} eq $branchcode ? -1 : 0 ) |
| 176 |
|| rand() <=> rand() |
| 177 |
} @candidates; |
| 158 |
|
178 |
|
| 159 |
my $UseBranchTransferLimits = C4::Context->preference("UseBranchTransferLimits"); |
179 |
my $UseBranchTransferLimits = C4::Context->preference("UseBranchTransferLimits"); |
| 160 |
my $BranchTransferLimitsType = |
180 |
my $BranchTransferLimitsType = |
|
Lines 162-173
sub lowest_ratio_library {
Link Here
|
| 162 |
|
182 |
|
| 163 |
my $transfer_branch; |
183 |
my $transfer_branch; |
| 164 |
for my $candidate (@candidates) { |
184 |
for my $candidate (@candidates) { |
|
|
185 |
|
| 165 |
if ($UseBranchTransferLimits) { |
186 |
if ($UseBranchTransferLimits) { |
| 166 |
my $allowed = C4::Circulation::IsBranchTransferAllowed( |
187 |
my $allowed = C4::Circulation::IsBranchTransferAllowed( |
| 167 |
$candidate->{branchcode}, |
188 |
$candidate->{branchcode}, |
| 168 |
$branchcode, |
189 |
$branchcode, |
| 169 |
$item->$BranchTransferLimitsType |
190 |
$item->$BranchTransferLimitsType |
| 170 |
); |
191 |
); |
|
|
192 |
|
| 171 |
$transfer_branch = Koha::Libraries->find( $candidate->{branchcode} ) if $allowed; |
193 |
$transfer_branch = Koha::Libraries->find( $candidate->{branchcode} ) if $allowed; |
| 172 |
last; |
194 |
last; |
| 173 |
} else { |
195 |
} else { |
| 174 |
- |
|
|