Lines 24-29
use Modern::Perl;
Link Here
|
24 |
use Koha::Database; |
24 |
use Koha::Database; |
25 |
|
25 |
|
26 |
use Koha::Library::FloatLimit; |
26 |
use Koha::Library::FloatLimit; |
|
|
27 |
use Koha::Libraries; |
27 |
use C4::Circulation qw(IsBranchTransferAllowed); |
28 |
use C4::Circulation qw(IsBranchTransferAllowed); |
28 |
|
29 |
|
29 |
use base qw(Koha::Objects); |
30 |
use base qw(Koha::Objects); |
Lines 43-82
Koha::Library::FloatLimits - Koha Library::FloatLimit object set class
Link Here
|
43 |
sub lowest_ratio_library { |
44 |
sub lowest_ratio_library { |
44 |
my ( $self, $item, $branchcode ) = @_; |
45 |
my ( $self, $item, $branchcode ) = @_; |
45 |
|
46 |
|
46 |
my $field = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype'; |
47 |
my $schema = Koha::Database->new->schema; |
47 |
my $query = qq{ |
48 |
|
48 |
SELECT branchcode |
49 |
my @float_limits = $schema->resultset('LibraryFloatLimit')->search( |
49 |
FROM library_float_limits |
50 |
{ |
50 |
LEFT JOIN items ON ( items.itype = library_float_limits.itemtype AND items.holdingbranch = library_float_limits.branchcode ) |
51 |
itemtype => $item->effective_itemtype, |
51 |
LEFT JOIN biblioitems ON ( items.biblioitemnumber = biblioitems.biblioitemnumber ) |
52 |
float_limit => { '!=' => 0 } |
52 |
WHERE library_float_limits.itemtype = ? |
53 |
} |
53 |
AND ( $field = ? OR $field IS NULL ) |
54 |
)->all; |
54 |
AND library_float_limits.float_limit != 0 |
55 |
|
55 |
GROUP BY branchcode |
56 |
return unless @float_limits; |
56 |
ORDER BY COUNT(items.holdingbranch)/library_float_limits.float_limit ASC, library_float_limits.float_limit DESC; |
57 |
|
57 |
}; |
58 |
my @candidates; |
58 |
|
59 |
my $use_item_level = C4::Context->preference('item-level_itypes'); |
59 |
my $results = C4::Context->dbh->selectall_arrayref( |
60 |
|
60 |
$query, { Slice => {} }, $item->effective_itemtype, |
61 |
foreach my $limit (@float_limits) { |
61 |
$item->effective_itemtype |
62 |
my $branch = $limit->get_column('branchcode'); |
62 |
); |
63 |
my $float_limit_val = $limit->get_column('float_limit'); |
|
|
64 |
|
65 |
my $item_count; |
66 |
|
67 |
if ($use_item_level) { |
68 |
$item_count = Koha::Items->search( |
69 |
{ |
70 |
itype => $item->effective_itemtype, |
71 |
holdingbranch => $branch |
72 |
} |
73 |
)->count; |
74 |
} else { |
75 |
$item_count = Koha::Items->search( |
76 |
{ |
77 |
holdingbranch => $branch, |
78 |
'biblioitem.itemtype' => $item->effective_itemtype |
79 |
}, |
80 |
{ join => 'biblioitem' } |
81 |
)->count; |
82 |
} |
83 |
|
84 |
my $ratio = $item_count / $float_limit_val; |
85 |
push @candidates, { |
86 |
branchcode => $branch, |
87 |
ratio => $ratio, |
88 |
float_limit => $float_limit_val |
89 |
}; |
90 |
} |
91 |
|
92 |
@candidates = sort { $a->{ratio} <=> $b->{ratio} || $b->{float_limit} <=> $a->{float_limit} } @candidates; |
63 |
|
93 |
|
64 |
my $UseBranchTransferLimits = C4::Context->preference("UseBranchTransferLimits"); |
94 |
my $UseBranchTransferLimits = C4::Context->preference("UseBranchTransferLimits"); |
65 |
my $BranchTransferLimitsType = |
95 |
my $BranchTransferLimitsType = |
66 |
C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ? 'effective_itemtype' : 'ccode'; |
96 |
C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ? 'effective_itemtype' : 'ccode'; |
67 |
|
97 |
|
68 |
foreach my $r (@$results) { |
98 |
for my $candidate (@candidates) { |
69 |
if ($UseBranchTransferLimits) { |
99 |
if ($UseBranchTransferLimits) { |
70 |
my $allowed = C4::Circulation::IsBranchTransferAllowed( |
100 |
my $allowed = C4::Circulation::IsBranchTransferAllowed( |
71 |
$r->{branchcode}, # to |
101 |
$candidate->{branchcode}, |
72 |
$branchcode, # from |
102 |
$branchcode, |
73 |
$item->$BranchTransferLimitsType |
103 |
$item->$BranchTransferLimitsType |
74 |
); |
104 |
); |
75 |
return $r->{branchcode} if $allowed; |
105 |
return Koha::Libraries->find( $candidate->{branchcode} ) if $allowed; |
76 |
} else { |
106 |
} else { |
77 |
return $r->{branchcode}; |
107 |
return Koha::Libraries->find( $candidate->{branchcode} ); |
78 |
} |
108 |
} |
79 |
} |
109 |
} |
|
|
110 |
|
111 |
return; |
80 |
} |
112 |
} |
81 |
|
113 |
|
82 |
=head3 _type |
114 |
=head3 _type |
83 |
- |
|
|