Lines 1-6
Link Here
|
1 |
#!/usr/bin/perl |
1 |
#!/usr/bin/perl |
2 |
|
2 |
|
3 |
|
|
|
4 |
#writen 2/1/00 by chris@katipo.oc.nz |
3 |
#writen 2/1/00 by chris@katipo.oc.nz |
5 |
# Copyright 2000-2002 Katipo Communications |
4 |
# Copyright 2000-2002 Katipo Communications |
6 |
# Parts Copyright 2011 Catalyst IT |
5 |
# Parts Copyright 2011 Catalyst IT |
Lines 41-47
use C4::Koha;
Link Here
|
41 |
use C4::Circulation; |
40 |
use C4::Circulation; |
42 |
use C4::Dates qw/format_date/; |
41 |
use C4::Dates qw/format_date/; |
43 |
use C4::Members; |
42 |
use C4::Members; |
44 |
use C4::Search; # enabled_staff_search_views |
43 |
use C4::Search; # enabled_staff_search_views |
45 |
use Koha::DateUtils; |
44 |
use Koha::DateUtils; |
46 |
|
45 |
|
47 |
my $dbh = C4::Context->dbh; |
46 |
my $dbh = C4::Context->dbh; |
Lines 58-76
my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user(
Link Here
|
58 |
); |
57 |
); |
59 |
|
58 |
|
60 |
my $multihold = $input->param('multi_hold'); |
59 |
my $multihold = $input->param('multi_hold'); |
61 |
$template->param(multi_hold => $multihold); |
60 |
$template->param( multi_hold => $multihold ); |
62 |
my $showallitems = $input->param('showallitems'); |
61 |
my $showallitems = $input->param('showallitems'); |
63 |
|
62 |
|
64 |
# get Branches and Itemtypes |
63 |
# get Branches and Itemtypes |
65 |
my $branches = GetBranches(); |
64 |
my $branches = GetBranches(); |
66 |
my $itemtypes = GetItemTypes(); |
65 |
my $itemtypes = GetItemTypes(); |
67 |
|
66 |
|
68 |
my $userbranch = ''; |
67 |
my $userbranch = ''; |
69 |
if (C4::Context->userenv && C4::Context->userenv->{'branch'}) { |
68 |
if ( C4::Context->userenv && C4::Context->userenv->{'branch'} ) { |
70 |
$userbranch = C4::Context->userenv->{'branch'}; |
69 |
$userbranch = C4::Context->userenv->{'branch'}; |
71 |
} |
70 |
} |
72 |
|
71 |
|
73 |
|
|
|
74 |
# Select borrowers infos |
72 |
# Select borrowers infos |
75 |
my $findborrower = $input->param('findborrower'); |
73 |
my $findborrower = $input->param('findborrower'); |
76 |
$findborrower = '' unless defined $findborrower; |
74 |
$findborrower = '' unless defined $findborrower; |
Lines 81-124
my $maxreserves;
Link Here
|
81 |
my $warnings; |
79 |
my $warnings; |
82 |
my $messages; |
80 |
my $messages; |
83 |
|
81 |
|
84 |
my $date = C4::Dates->today('iso'); |
82 |
my $date = C4::Dates->today('iso'); |
85 |
my $action = $input->param('action'); |
83 |
my $action = $input->param('action'); |
86 |
$action ||= q{}; |
84 |
$action ||= q{}; |
87 |
|
85 |
|
88 |
if ( $action eq 'move' ) { |
86 |
if ( $action eq 'move' ) { |
89 |
my $where = $input->param('where'); |
87 |
my $where = $input->param('where'); |
90 |
my $reserve_id = $input->param('reserve_id'); |
88 |
my $reserve_id = $input->param('reserve_id'); |
91 |
AlterPriority( $where, $reserve_id ); |
89 |
AlterPriority( $where, $reserve_id ); |
92 |
} elsif ( $action eq 'cancel' ) { |
90 |
} |
93 |
my $reserve_id = $input->param('reserve_id'); |
91 |
elsif ( $action eq 'cancel' ) { |
94 |
CancelReserve({ reserve_id => $reserve_id }); |
92 |
my $reserve_id = $input->param('reserve_id'); |
95 |
} elsif ( $action eq 'setLowestPriority' ) { |
93 |
CancelReserve( { reserve_id => $reserve_id } ); |
96 |
my $reserve_id = $input->param('reserve_id'); |
94 |
} |
97 |
ToggleLowestPriority( $reserve_id ); |
95 |
elsif ( $action eq 'setLowestPriority' ) { |
98 |
} elsif ( $action eq 'toggleSuspend' ) { |
96 |
my $reserve_id = $input->param('reserve_id'); |
99 |
my $reserve_id = $input->param('reserve_id'); |
97 |
ToggleLowestPriority($reserve_id); |
100 |
my $suspend_until = $input->param('suspend_until'); |
98 |
} |
101 |
ToggleSuspend( $reserve_id, $suspend_until ); |
99 |
elsif ( $action eq 'toggleSuspend' ) { |
|
|
100 |
my $reserve_id = $input->param('reserve_id'); |
101 |
my $suspend_until = $input->param('suspend_until'); |
102 |
ToggleSuspend( $reserve_id, $suspend_until ); |
102 |
} |
103 |
} |
103 |
|
104 |
|
104 |
if ($findborrower) { |
105 |
if ($findborrower) { |
105 |
my $borrowers = Search($findborrower, 'cardnumber'); |
106 |
my $borrowers = Search( $findborrower, 'cardnumber' ); |
106 |
|
107 |
|
107 |
if ($borrowers && @$borrowers) { |
108 |
if ( $borrowers && @$borrowers ) { |
108 |
if ( @$borrowers == 1 ) { |
109 |
if ( @$borrowers == 1 ) { |
109 |
$borrowernumber_hold = $borrowers->[0]->{'borrowernumber'}; |
110 |
$borrowernumber_hold = $borrowers->[0]->{'borrowernumber'}; |
110 |
} |
111 |
} |
111 |
else { |
112 |
else { |
112 |
$template->param( borrower_list => sort_borrowerlist($borrowers)); |
113 |
$template->param( borrower_list => sort_borrowerlist($borrowers) ); |
113 |
} |
114 |
} |
114 |
} else { |
115 |
} |
|
|
116 |
else { |
115 |
$messageborrower = "'$findborrower'"; |
117 |
$messageborrower = "'$findborrower'"; |
116 |
} |
118 |
} |
117 |
} |
119 |
} |
118 |
|
120 |
|
119 |
# If we have the borrowernumber because we've performed an action, then we |
121 |
# If we have the borrowernumber because we've performed an action, then we |
120 |
# don't want to try to place another reserve. |
122 |
# don't want to try to place another reserve. |
121 |
if ($borrowernumber_hold && !$action) { |
123 |
if ( $borrowernumber_hold && !$action ) { |
122 |
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold ); |
124 |
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold ); |
123 |
my $diffbranch; |
125 |
my $diffbranch; |
124 |
my @getreservloop; |
126 |
my @getreservloop; |
Lines 127-145
if ($borrowernumber_hold && !$action) {
Link Here
|
127 |
# we check the reserves of the borrower, and if he can reserv a document |
129 |
# we check the reserves of the borrower, and if he can reserv a document |
128 |
# FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ... |
130 |
# FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ... |
129 |
|
131 |
|
130 |
my $number_reserves = |
132 |
my $number_reserves = GetReserveCount( $borrowerinfo->{'borrowernumber'} ); |
131 |
GetReserveCount( $borrowerinfo->{'borrowernumber'} ); |
|
|
132 |
|
133 |
|
133 |
if ( C4::Context->preference('maxreserves') && ($number_reserves >= C4::Context->preference('maxreserves')) ) { |
134 |
if ( C4::Context->preference('maxreserves') && ( $number_reserves >= C4::Context->preference('maxreserves') ) ) { |
134 |
$warnings = 1; |
135 |
$warnings = 1; |
135 |
$maxreserves = 1; |
136 |
$maxreserves = 1; |
136 |
} |
137 |
} |
137 |
|
138 |
|
138 |
# we check the date expiry of the borrower (only if there is an expiry date, otherwise, set to 1 (warn) |
139 |
# we check the date expiry of the borrower (only if there is an expiry date, otherwise, set to 1 (warn) |
139 |
my $expiry_date = $borrowerinfo->{dateexpiry}; |
140 |
my $expiry_date = $borrowerinfo->{dateexpiry}; |
140 |
my $expiry = 0; # flag set if patron account has expired |
141 |
my $expiry = 0; # flag set if patron account has expired |
141 |
if ($expiry_date and $expiry_date ne '0000-00-00' and |
142 |
if ( $expiry_date |
142 |
Date_to_Days(split /-/,$date) > Date_to_Days(split /-/,$expiry_date)) { |
143 |
and $expiry_date ne '0000-00-00' |
|
|
144 |
and Date_to_Days( split /-/, $date ) > Date_to_Days( split /-/, $expiry_date ) ) |
145 |
{ |
143 |
$expiry = 1; |
146 |
$expiry = 1; |
144 |
} |
147 |
} |
145 |
|
148 |
|
Lines 149-172
if ($borrowernumber_hold && !$action) {
Link Here
|
149 |
} |
152 |
} |
150 |
|
153 |
|
151 |
$template->param( |
154 |
$template->param( |
152 |
borrowernumber => $borrowerinfo->{'borrowernumber'}, |
155 |
borrowernumber => $borrowerinfo->{'borrowernumber'}, |
153 |
borrowersurname => $borrowerinfo->{'surname'}, |
156 |
borrowersurname => $borrowerinfo->{'surname'}, |
154 |
borrowerfirstname => $borrowerinfo->{'firstname'}, |
157 |
borrowerfirstname => $borrowerinfo->{'firstname'}, |
155 |
borrowerstreetaddress => $borrowerinfo->{'address'}, |
158 |
borrowerstreetaddress => $borrowerinfo->{'address'}, |
156 |
borrowercity => $borrowerinfo->{'city'}, |
159 |
borrowercity => $borrowerinfo->{'city'}, |
157 |
borrowerphone => $borrowerinfo->{'phone'}, |
160 |
borrowerphone => $borrowerinfo->{'phone'}, |
158 |
borrowermobile => $borrowerinfo->{'mobile'}, |
161 |
borrowermobile => $borrowerinfo->{'mobile'}, |
159 |
borrowerfax => $borrowerinfo->{'fax'}, |
162 |
borrowerfax => $borrowerinfo->{'fax'}, |
160 |
borrowerphonepro => $borrowerinfo->{'phonepro'}, |
163 |
borrowerphonepro => $borrowerinfo->{'phonepro'}, |
161 |
borroweremail => $borrowerinfo->{'email'}, |
164 |
borroweremail => $borrowerinfo->{'email'}, |
162 |
borroweremailpro => $borrowerinfo->{'emailpro'}, |
165 |
borroweremailpro => $borrowerinfo->{'emailpro'}, |
163 |
borrowercategory => $borrowerinfo->{'category'}, |
166 |
borrowercategory => $borrowerinfo->{'category'}, |
164 |
borrowerreservs => $count_reserv, |
167 |
borrowerreservs => $count_reserv, |
165 |
cardnumber => $borrowerinfo->{'cardnumber'}, |
168 |
cardnumber => $borrowerinfo->{'cardnumber'}, |
166 |
expiry => $expiry, |
169 |
expiry => $expiry, |
167 |
diffbranch => $diffbranch, |
170 |
diffbranch => $diffbranch, |
168 |
messages => $messages, |
171 |
messages => $messages, |
169 |
warnings => $warnings |
172 |
warnings => $warnings |
170 |
); |
173 |
); |
171 |
} |
174 |
} |
172 |
|
175 |
|
Lines 179-190
my @biblionumbers = ();
Link Here
|
179 |
my $biblionumbers = $input->param('biblionumbers'); |
182 |
my $biblionumbers = $input->param('biblionumbers'); |
180 |
if ($multihold) { |
183 |
if ($multihold) { |
181 |
@biblionumbers = split '/', $biblionumbers; |
184 |
@biblionumbers = split '/', $biblionumbers; |
182 |
} else { |
185 |
} |
|
|
186 |
else { |
183 |
push @biblionumbers, $input->param('biblionumber'); |
187 |
push @biblionumbers, $input->param('biblionumber'); |
184 |
} |
188 |
} |
185 |
|
189 |
|
186 |
my $itemdata_enumchron = 0; |
190 |
my $itemdata_enumchron = 0; |
187 |
my @biblioloop = (); |
191 |
my @biblioloop = (); |
188 |
foreach my $biblionumber (@biblionumbers) { |
192 |
foreach my $biblionumber (@biblionumbers) { |
189 |
|
193 |
|
190 |
my %biblioloopiter = (); |
194 |
my %biblioloopiter = (); |
Lines 208-242
foreach my $biblionumber (@biblionumbers) {
Link Here
|
208 |
} |
212 |
} |
209 |
|
213 |
|
210 |
my $alreadypossession; |
214 |
my $alreadypossession; |
211 |
if (not C4::Context->preference('AllowHoldsOnPatronsPossessions') and CheckIfIssuedToPatron($borrowerinfo->{borrowernumber},$biblionumber)) { |
215 |
if ( not C4::Context->preference('AllowHoldsOnPatronsPossessions') |
|
|
216 |
and CheckIfIssuedToPatron( $borrowerinfo->{borrowernumber}, $biblionumber ) ) |
217 |
{ |
212 |
$alreadypossession = 1; |
218 |
$alreadypossession = 1; |
213 |
} |
219 |
} |
214 |
|
220 |
|
215 |
# get existing reserves ..... |
221 |
# get existing reserves ..... |
216 |
my $reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber, all_dates => 1 }); |
222 |
my $reserves = GetReservesFromBiblionumber( { biblionumber => $biblionumber, all_dates => 1 } ); |
217 |
my $count = scalar( @$reserves ); |
223 |
my $count = scalar(@$reserves); |
218 |
my $totalcount = $count; |
224 |
my $totalcount = $count; |
219 |
my $holds_count = 0; |
225 |
my $holds_count = 0; |
220 |
my $alreadyreserved = 0; |
226 |
my $alreadyreserved = 0; |
221 |
|
227 |
|
222 |
foreach my $res (@$reserves) { |
228 |
foreach my $res (@$reserves) { |
223 |
if ( defined $res->{found} ) { # found can be 'W' or 'T' |
229 |
if ( defined $res->{found} ) { # found can be 'W' or 'T' |
224 |
$count--; |
230 |
$count--; |
225 |
} |
231 |
} |
226 |
|
232 |
|
227 |
if ( defined $borrowerinfo && defined($borrowerinfo->{borrowernumber}) && ($borrowerinfo->{borrowernumber} eq $res->{borrowernumber}) ) { |
233 |
if ( defined $borrowerinfo |
|
|
234 |
&& defined( $borrowerinfo->{borrowernumber} ) |
235 |
&& ( $borrowerinfo->{borrowernumber} eq $res->{borrowernumber} ) ) |
236 |
{ |
228 |
$holds_count++; |
237 |
$holds_count++; |
229 |
} |
238 |
} |
230 |
} |
239 |
} |
231 |
|
240 |
|
232 |
if ( $holds_count ) { |
241 |
if ($holds_count) { |
233 |
$alreadyreserved = 1; |
242 |
$alreadyreserved = 1; |
234 |
$biblioloopiter{warn} = 1; |
243 |
$biblioloopiter{warn} = 1; |
235 |
$biblioloopiter{alreadyres} = 1; |
244 |
$biblioloopiter{alreadyres} = 1; |
236 |
} |
245 |
} |
237 |
|
246 |
|
238 |
$template->param( |
247 |
$template->param( |
239 |
alreadyreserved => $alreadyreserved, |
248 |
alreadyreserved => $alreadyreserved, |
240 |
alreadypossession => $alreadypossession, |
249 |
alreadypossession => $alreadypossession, |
241 |
); |
250 |
); |
242 |
|
251 |
|
Lines 246-277
foreach my $biblionumber (@biblionumbers) {
Link Here
|
246 |
my @optionloop; |
255 |
my @optionloop; |
247 |
for ( 1 .. $count + 1 ) { |
256 |
for ( 1 .. $count + 1 ) { |
248 |
push( |
257 |
push( |
249 |
@optionloop, |
258 |
@optionloop, |
250 |
{ |
259 |
{ |
251 |
num => $_, |
260 |
num => $_, |
252 |
selected => ( $_ == $count + 1 ), |
261 |
selected => ( $_ == $count + 1 ), |
253 |
} |
262 |
} |
254 |
); |
263 |
); |
255 |
} |
264 |
} |
|
|
265 |
|
256 |
# adding a fixed value for priority options |
266 |
# adding a fixed value for priority options |
257 |
my $fixedRank = $count+1; |
267 |
my $fixedRank = $count + 1; |
258 |
|
268 |
|
259 |
my @branchcodes; |
269 |
my @branchcodes; |
260 |
my %itemnumbers_of_biblioitem; |
270 |
my %itemnumbers_of_biblioitem; |
261 |
my @itemnumbers; |
271 |
my @itemnumbers; |
262 |
|
272 |
|
263 |
## $items is array of 'item' table numbers |
273 |
## $items is array of 'item' table numbers |
264 |
if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){ |
274 |
if ( my $items = get_itemnumbers_of($biblionumber)->{$biblionumber} ) { |
265 |
@itemnumbers = @$items; |
275 |
@itemnumbers = @$items; |
266 |
} |
276 |
} |
267 |
my @hostitems = get_hostitemnumbers_of($biblionumber); |
277 |
my @hostitems = get_hostitemnumbers_of($biblionumber); |
268 |
if (@hostitems){ |
278 |
if (@hostitems) { |
269 |
$template->param('hostitemsflag' => 1); |
279 |
$template->param( 'hostitemsflag' => 1 ); |
270 |
push(@itemnumbers, @hostitems); |
280 |
push( @itemnumbers, @hostitems ); |
271 |
} |
281 |
} |
272 |
|
282 |
|
273 |
if (!@itemnumbers) { |
283 |
if ( !@itemnumbers ) { |
274 |
$template->param('noitems' => 1); |
284 |
$template->param( 'noitems' => 1 ); |
275 |
$biblioloopiter{noitems} = 1; |
285 |
$biblioloopiter{noitems} = 1; |
276 |
} |
286 |
} |
277 |
|
287 |
|
Lines 291-325
foreach my $biblionumber (@biblionumbers) {
Link Here
|
291 |
my $notforloan_label_of = get_notforloan_label_of(); |
301 |
my $notforloan_label_of = get_notforloan_label_of(); |
292 |
|
302 |
|
293 |
## Hash of biblioitemnumber to 'biblioitem' table records |
303 |
## Hash of biblioitemnumber to 'biblioitem' table records |
294 |
my $biblioiteminfos_of = GetBiblioItemInfosOf(@biblioitemnumbers); |
304 |
my $biblioiteminfos_of = GetBiblioItemInfosOf(@biblioitemnumbers); |
295 |
|
305 |
|
296 |
my @bibitemloop; |
306 |
my @bibitemloop; |
297 |
|
307 |
|
298 |
foreach my $biblioitemnumber (@biblioitemnumbers) { |
308 |
foreach my $biblioitemnumber (@biblioitemnumbers) { |
299 |
my $biblioitem = $biblioiteminfos_of->{$biblioitemnumber}; |
309 |
my $biblioitem = $biblioiteminfos_of->{$biblioitemnumber}; |
300 |
my $num_available = 0; |
310 |
my $num_available = 0; |
301 |
my $num_override = 0; |
311 |
my $num_override = 0; |
302 |
my $hiddencount = 0; |
312 |
my $hiddencount = 0; |
303 |
|
313 |
|
304 |
$biblioitem->{description} = |
314 |
$biblioitem->{description} = |
305 |
$itemtypes->{ $biblioitem->{itemtype} }{description}; |
315 |
$itemtypes->{ $biblioitem->{itemtype} }{description}; |
306 |
if($biblioitem->{biblioitemnumber} ne $biblionumber){ |
316 |
if ( $biblioitem->{biblioitemnumber} ne $biblionumber ) { |
307 |
$biblioitem->{hostitemsflag}=1; |
317 |
$biblioitem->{hostitemsflag} = 1; |
308 |
} |
318 |
} |
309 |
$biblioloopiter{description} = $biblioitem->{description}; |
319 |
$biblioloopiter{description} = $biblioitem->{description}; |
310 |
$biblioloopiter{itypename} = $biblioitem->{description}; |
320 |
$biblioloopiter{itypename} = $biblioitem->{description}; |
311 |
$biblioloopiter{imageurl} = |
321 |
$biblioloopiter{imageurl} = |
312 |
getitemtypeimagelocation('intranet', $itemtypes->{$biblioitem->{itemtype}}{imageurl}); |
322 |
getitemtypeimagelocation( 'intranet', $itemtypes->{ $biblioitem->{itemtype} }{imageurl} ); |
313 |
|
323 |
|
314 |
foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) { |
324 |
foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) { |
315 |
my $item = $iteminfos_of->{$itemnumber}; |
325 |
my $item = $iteminfos_of->{$itemnumber}; |
316 |
|
326 |
|
317 |
unless (C4::Context->preference('item-level_itypes')) { |
327 |
unless ( C4::Context->preference('item-level_itypes') ) { |
318 |
$item->{itype} = $biblioitem->{itemtype}; |
328 |
$item->{itype} = $biblioitem->{itemtype}; |
319 |
} |
329 |
} |
320 |
|
330 |
|
321 |
$item->{itypename} = $itemtypes->{ $item->{itype} }{description}; |
331 |
$item->{itypename} = $itemtypes->{ $item->{itype} }{description}; |
322 |
$item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} ); |
332 |
$item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} ); |
323 |
$item->{homebranchname} = $branches->{ $item->{homebranch} }{branchname}; |
333 |
$item->{homebranchname} = $branches->{ $item->{homebranch} }{branchname}; |
324 |
|
334 |
|
325 |
# if the holdingbranch is different than the homebranch, we show the |
335 |
# if the holdingbranch is different than the homebranch, we show the |
Lines 329-362
foreach my $biblionumber (@biblionumbers) {
Link Here
|
329 |
$branches->{ $item->{holdingbranch} }{branchname}; |
339 |
$branches->{ $item->{holdingbranch} }{branchname}; |
330 |
} |
340 |
} |
331 |
|
341 |
|
332 |
if($item->{biblionumber} ne $biblionumber){ |
342 |
if ( $item->{biblionumber} ne $biblionumber ) { |
333 |
$item->{hostitemsflag}=1; |
343 |
$item->{hostitemsflag} = 1; |
334 |
$item->{hosttitle} = GetBiblioData($item->{biblionumber})->{title}; |
344 |
$item->{hosttitle} = GetBiblioData( $item->{biblionumber} )->{title}; |
335 |
} |
345 |
} |
336 |
|
346 |
|
337 |
# add information |
347 |
# add information |
338 |
$item->{itemcallnumber} = $item->{itemcallnumber}; |
348 |
$item->{itemcallnumber} = $item->{itemcallnumber}; |
339 |
|
349 |
|
340 |
# if the item is currently on loan, we display its return date and |
350 |
# if the item is currently on loan, we display its return date and |
341 |
# change the background color |
351 |
# change the background color |
342 |
my $issues= GetItemIssue($itemnumber); |
352 |
my $issues = GetItemIssue($itemnumber); |
343 |
if ( $issues->{'date_due'} ) { |
353 |
if ( $issues->{'date_due'} ) { |
344 |
$item->{date_due} = format_sqldatetime($issues->{date_due}); |
354 |
$item->{date_due} = format_sqldatetime( $issues->{date_due} ); |
345 |
$item->{backgroundcolor} = 'onloan'; |
355 |
$item->{backgroundcolor} = 'onloan'; |
346 |
} |
356 |
} |
347 |
|
357 |
|
348 |
# checking reserve |
358 |
# checking reserve |
349 |
my ($reservedate,$reservedfor,$expectedAt,$reserve_id,$wait) = GetReservesFromItemnumber($itemnumber); |
359 |
my ( $reservedate, $reservedfor, $expectedAt, $reserve_id, $wait ) = GetReservesFromItemnumber($itemnumber); |
350 |
my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor ); |
360 |
my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor ); |
351 |
|
361 |
|
352 |
if ( defined $reservedate ) { |
362 |
if ( defined $reservedate ) { |
353 |
$item->{backgroundcolor} = 'reserved'; |
363 |
$item->{backgroundcolor} = 'reserved'; |
354 |
$item->{reservedate} = format_date($reservedate); |
364 |
$item->{reservedate} = format_date($reservedate); |
355 |
$item->{ReservedForBorrowernumber} = $reservedfor; |
365 |
$item->{ReservedForBorrowernumber} = $reservedfor; |
356 |
$item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'}; |
366 |
$item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'}; |
357 |
$item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'}; |
367 |
$item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'}; |
358 |
$item->{ExpectedAtLibrary} = $branches->{$expectedAt}{branchname}; |
368 |
$item->{ExpectedAtLibrary} = $branches->{$expectedAt}{branchname}; |
359 |
$item->{waitingdate} = $wait; |
369 |
$item->{waitingdate} = $wait; |
360 |
} |
370 |
} |
361 |
|
371 |
|
362 |
# Management of the notforloan document |
372 |
# Management of the notforloan document |
Lines 371-396
foreach my $biblionumber (@biblionumbers) {
Link Here
|
371 |
|
381 |
|
372 |
# FIXME localized strings should never be in Perl code |
382 |
# FIXME localized strings should never be in Perl code |
373 |
$item->{message} = |
383 |
$item->{message} = |
374 |
$item->{itemlost} == 1 ? "(lost)" |
384 |
$item->{itemlost} == 1 ? "(lost)" |
375 |
: $item->{itemlost} == 2 ? "(long overdue)" |
385 |
: $item->{itemlost} == 2 ? "(long overdue)" |
376 |
: ""; |
386 |
: ""; |
377 |
$item->{backgroundcolor} = 'other'; |
387 |
$item->{backgroundcolor} = 'other'; |
378 |
if (GetHideLostItemsPreference($borrowernumber) && !$showallitems) { |
388 |
if ( GetHideLostItemsPreference($borrowernumber) && !$showallitems ) { |
379 |
$item->{hide} = 1; |
389 |
$item->{hide} = 1; |
380 |
$hiddencount++; |
390 |
$hiddencount++; |
381 |
} |
391 |
} |
382 |
} |
392 |
} |
383 |
|
393 |
|
384 |
# Check the transit status |
394 |
# Check the transit status |
385 |
my ( $transfertwhen, $transfertfrom, $transfertto ) = |
395 |
my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers($itemnumber); |
386 |
GetTransfers($itemnumber); |
|
|
387 |
|
396 |
|
388 |
if ( defined $transfertwhen && $transfertwhen ne '' ) { |
397 |
if ( defined $transfertwhen && $transfertwhen ne '' ) { |
389 |
$item->{transfertwhen} = format_date($transfertwhen); |
398 |
$item->{transfertwhen} = format_date($transfertwhen); |
390 |
$item->{transfertfrom} = |
399 |
$item->{transfertfrom} = |
391 |
$branches->{$transfertfrom}{branchname}; |
400 |
$branches->{$transfertfrom}{branchname}; |
392 |
$item->{transfertto} = $branches->{$transfertto}{branchname}; |
401 |
$item->{transfertto} = $branches->{$transfertto}{branchname}; |
393 |
$item->{nocancel} = 1; |
402 |
$item->{nocancel} = 1; |
394 |
} |
403 |
} |
395 |
|
404 |
|
396 |
# If there is no loan, return and transfer, we show a checkbox. |
405 |
# If there is no loan, return and transfer, we show a checkbox. |
Lines 399-406
foreach my $biblionumber (@biblionumbers) {
Link Here
|
399 |
# if independent branches is on we need to check if the person can reserve |
408 |
# if independent branches is on we need to check if the person can reserve |
400 |
# for branches they arent logged in to |
409 |
# for branches they arent logged in to |
401 |
if ( C4::Context->preference("IndependentBranches") ) { |
410 |
if ( C4::Context->preference("IndependentBranches") ) { |
402 |
if (! C4::Context->preference("canreservefromotherbranches")){ |
411 |
if ( !C4::Context->preference("canreservefromotherbranches") ) { |
403 |
# cant reserve items so need to check if item homebranch and userenv branch match if not we cant reserve |
412 |
|
|
|
413 |
# cant reserve items so need to check if item homebranch and userenv branch match if not we cant reserve |
404 |
my $userenv = C4::Context->userenv; |
414 |
my $userenv = C4::Context->userenv; |
405 |
unless ( C4::Context->IsSuperLibrarian ) { |
415 |
unless ( C4::Context->IsSuperLibrarian ) { |
406 |
$item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} ); |
416 |
$item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} ); |
Lines 408-511
foreach my $biblionumber (@biblionumbers) {
Link Here
|
408 |
} |
418 |
} |
409 |
} |
419 |
} |
410 |
|
420 |
|
411 |
my $branch = C4::Circulation::_GetCircControlBranch($item, $borrowerinfo); |
421 |
my $branch = C4::Circulation::_GetCircControlBranch( $item, $borrowerinfo ); |
412 |
|
422 |
|
413 |
my $branchitemrule = GetBranchItemRule( $branch, $item->{'itype'} ); |
423 |
my $branchitemrule = GetBranchItemRule( $branch, $item->{'itype'} ); |
414 |
my $policy_holdallowed = 1; |
424 |
my $policy_holdallowed = 1; |
415 |
|
425 |
|
416 |
$item->{'holdallowed'} = $branchitemrule->{'holdallowed'}; |
426 |
$item->{'holdallowed'} = $branchitemrule->{'holdallowed'}; |
417 |
|
427 |
|
418 |
if ( $branchitemrule->{'holdallowed'} == 0 || |
428 |
if ( |
419 |
( $branchitemrule->{'holdallowed'} == 1 && |
429 |
$branchitemrule->{'holdallowed'} == 0 |
420 |
$borrowerinfo->{'branchcode'} ne $item->{'homebranch'} ) ) { |
430 |
|| ( $branchitemrule->{'holdallowed'} == 1 |
|
|
431 |
&& $borrowerinfo->{'branchcode'} ne $item->{'homebranch'} ) |
432 |
) |
433 |
{ |
421 |
$policy_holdallowed = 0; |
434 |
$policy_holdallowed = 0; |
422 |
} |
435 |
} |
423 |
|
436 |
|
424 |
if ( |
437 |
if ( $policy_holdallowed |
425 |
$policy_holdallowed |
|
|
426 |
&& !$item->{cantreserve} |
438 |
&& !$item->{cantreserve} |
427 |
&& IsAvailableForItemLevelRequest($itemnumber) |
439 |
&& IsAvailableForItemLevelRequest($itemnumber) |
428 |
&& CanItemBeReserved( |
440 |
&& CanItemBeReserved( $borrowerinfo->{borrowernumber}, $itemnumber ) eq 'OK' ) |
429 |
$borrowerinfo->{borrowernumber}, $itemnumber |
|
|
430 |
) eq 'OK' |
431 |
) |
432 |
{ |
441 |
{ |
433 |
$item->{available} = 1; |
442 |
$item->{available} = 1; |
434 |
$num_available++; |
443 |
$num_available++; |
435 |
} |
444 |
} |
436 |
elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) { |
445 |
elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) { |
|
|
446 |
|
437 |
# If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules |
447 |
# If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules |
438 |
$item->{override} = 1; |
448 |
$item->{override} = 1; |
439 |
$num_override++; |
449 |
$num_override++; |
440 |
} |
450 |
} |
441 |
|
451 |
|
442 |
# If none of the conditions hold true, then neither override nor available is set and the item cannot be checked |
452 |
# If none of the conditions hold true, then neither override nor available is set and the item cannot be checked |
443 |
|
453 |
|
444 |
# Show serial enumeration when needed |
454 |
# Show serial enumeration when needed |
445 |
if ($item->{enumchron}) { |
455 |
if ( $item->{enumchron} ) { |
446 |
$itemdata_enumchron = 1; |
456 |
$itemdata_enumchron = 1; |
447 |
} |
457 |
} |
448 |
|
458 |
|
449 |
push @{ $biblioitem->{itemloop} }, $item; |
459 |
push @{ $biblioitem->{itemloop} }, $item; |
450 |
} |
460 |
} |
451 |
|
461 |
|
452 |
if ( $num_override == scalar( @{ $biblioitem->{itemloop} } ) ) { # That is, if all items require an override |
462 |
if ( $num_override == scalar( @{ $biblioitem->{itemloop} } ) ) { # That is, if all items require an override |
453 |
$template->param( override_required => 1 ); |
463 |
$template->param( override_required => 1 ); |
454 |
} elsif ( $num_available == 0 ) { |
464 |
} |
|
|
465 |
elsif ( $num_available == 0 ) { |
455 |
$template->param( none_available => 1 ); |
466 |
$template->param( none_available => 1 ); |
456 |
$biblioloopiter{warn} = 1; |
467 |
$biblioloopiter{warn} = 1; |
457 |
$biblioloopiter{none_avail} = 1; |
468 |
$biblioloopiter{none_avail} = 1; |
458 |
} |
469 |
} |
459 |
$template->param( hiddencount => $hiddencount); |
470 |
$template->param( hiddencount => $hiddencount ); |
460 |
|
471 |
|
461 |
push @bibitemloop, $biblioitem; |
472 |
push @bibitemloop, $biblioitem; |
462 |
} |
473 |
} |
463 |
|
474 |
|
464 |
# existingreserves building |
475 |
# existingreserves building |
465 |
my @reserveloop; |
476 |
my @reserveloop; |
466 |
$reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber, all_dates => 1 }); |
477 |
$reserves = GetReservesFromBiblionumber( { biblionumber => $biblionumber, all_dates => 1 } ); |
467 |
foreach my $res ( sort { |
478 |
foreach my $res ( |
|
|
479 |
sort { |
468 |
my $a_found = $a->{found} || ''; |
480 |
my $a_found = $a->{found} || ''; |
469 |
my $b_found = $a->{found} || ''; |
481 |
my $b_found = $a->{found} || ''; |
470 |
$a_found cmp $b_found; |
482 |
$a_found cmp $b_found; |
471 |
} @$reserves ) { |
483 |
} @$reserves |
|
|
484 |
) |
485 |
{ |
472 |
my %reserve; |
486 |
my %reserve; |
473 |
my @optionloop; |
487 |
my @optionloop; |
474 |
for ( my $i = 1 ; $i <= $totalcount ; $i++ ) { |
488 |
for ( my $i = 1 ; $i <= $totalcount ; $i++ ) { |
475 |
push( |
489 |
push( |
476 |
@optionloop, |
490 |
@optionloop, |
477 |
{ |
491 |
{ |
478 |
num => $i, |
492 |
num => $i, |
479 |
selected => ( $i == $res->{priority} ), |
493 |
selected => ( $i == $res->{priority} ), |
480 |
} |
494 |
} |
481 |
); |
495 |
); |
482 |
} |
496 |
} |
483 |
|
497 |
|
484 |
if ( defined $res->{'found'} && ($res->{'found'} eq 'W' || $res->{'found'} eq 'T' )) { |
498 |
if ( defined $res->{'found'} && ( $res->{'found'} eq 'W' || $res->{'found'} eq 'T' ) ) { |
485 |
my $item = $res->{'itemnumber'}; |
499 |
my $item = $res->{'itemnumber'}; |
486 |
$item = GetBiblioFromItemNumber($item,undef); |
500 |
$item = GetBiblioFromItemNumber( $item, undef ); |
487 |
$reserve{'wait'}= 1; |
501 |
$reserve{'wait'} = 1; |
488 |
$reserve{'holdingbranch'}=$item->{'holdingbranch'}; |
502 |
$reserve{'holdingbranch'} = $item->{'holdingbranch'}; |
489 |
$reserve{'biblionumber'}=$item->{'biblionumber'}; |
503 |
$reserve{'biblionumber'} = $item->{'biblionumber'}; |
490 |
$reserve{'barcodenumber'} = $item->{'barcode'}; |
504 |
$reserve{'barcodenumber'} = $item->{'barcode'}; |
491 |
$reserve{'wbrcode'} = $res->{'branchcode'}; |
505 |
$reserve{'wbrcode'} = $res->{'branchcode'}; |
492 |
$reserve{'itemnumber'} = $res->{'itemnumber'}; |
506 |
$reserve{'itemnumber'} = $res->{'itemnumber'}; |
493 |
$reserve{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'}; |
507 |
$reserve{'wbrname'} = $branches->{ $res->{'branchcode'} }->{'branchname'}; |
494 |
if($reserve{'holdingbranch'} eq $reserve{'wbrcode'}){ |
508 |
if ( $reserve{'holdingbranch'} eq $reserve{'wbrcode'} ) { |
|
|
509 |
|
495 |
# Just because the holdingbranch matches the reserve branch doesn't mean the item |
510 |
# Just because the holdingbranch matches the reserve branch doesn't mean the item |
496 |
# has arrived at the destination, check for an open transfer for the item as well |
511 |
# has arrived at the destination, check for an open transfer for the item as well |
497 |
my ( $transfertwhen, $transfertfrom, $transferto ) = C4::Circulation::GetTransfers( $res->{itemnumber} ); |
512 |
my ( $transfertwhen, $transfertfrom, $transferto ) = |
|
|
513 |
C4::Circulation::GetTransfers( $res->{itemnumber} ); |
498 |
if ( not $transferto or $transferto ne $res->{branchcode} ) { |
514 |
if ( not $transferto or $transferto ne $res->{branchcode} ) { |
499 |
$reserve{'atdestination'} = 1; |
515 |
$reserve{'atdestination'} = 1; |
500 |
} |
516 |
} |
501 |
} |
517 |
} |
|
|
518 |
|
502 |
# set found to 1 if reserve is waiting for patron pickup |
519 |
# set found to 1 if reserve is waiting for patron pickup |
503 |
$reserve{'found'} = 1 if $res->{'found'} eq 'W'; |
520 |
$reserve{'found'} = 1 if $res->{'found'} eq 'W'; |
504 |
$reserve{'intransit'} = 1 if $res->{'found'} eq 'T'; |
521 |
$reserve{'intransit'} = 1 if $res->{'found'} eq 'T'; |
505 |
} elsif ($res->{priority} > 0) { |
522 |
} |
506 |
if (defined($res->{itemnumber})) { |
523 |
elsif ( $res->{priority} > 0 ) { |
507 |
my $item = GetItem($res->{itemnumber}); |
524 |
if ( defined( $res->{itemnumber} ) ) { |
508 |
$reserve{'itemnumber'} = $res->{'itemnumber'}; |
525 |
my $item = GetItem( $res->{itemnumber} ); |
|
|
526 |
$reserve{'itemnumber'} = $res->{'itemnumber'}; |
509 |
$reserve{'barcodenumber'} = $item->{'barcode'}; |
527 |
$reserve{'barcodenumber'} = $item->{'barcode'}; |
510 |
$reserve{'item_level_hold'} = 1; |
528 |
$reserve{'item_level_hold'} = 1; |
511 |
} |
529 |
} |
Lines 513-524
foreach my $biblionumber (@biblionumbers) {
Link Here
|
513 |
|
531 |
|
514 |
# get borrowers reserve info |
532 |
# get borrowers reserve info |
515 |
my $reserveborrowerinfo = GetMember( borrowernumber => $res->{'borrowernumber'} ); |
533 |
my $reserveborrowerinfo = GetMember( borrowernumber => $res->{'borrowernumber'} ); |
516 |
if (C4::Context->preference('HidePatronName')){ |
534 |
if ( C4::Context->preference('HidePatronName') ) { |
517 |
$reserve{'hidename'} = 1; |
535 |
$reserve{'hidename'} = 1; |
518 |
$reserve{'cardnumber'} = $reserveborrowerinfo->{'cardnumber'}; |
536 |
$reserve{'cardnumber'} = $reserveborrowerinfo->{'cardnumber'}; |
519 |
} |
537 |
} |
520 |
$reserve{'expirationdate'} = format_date( $res->{'expirationdate'} ) |
538 |
$reserve{'expirationdate'} = format_date( $res->{'expirationdate'} ) |
521 |
unless ( !defined($res->{'expirationdate'}) || $res->{'expirationdate'} eq '0000-00-00' ); |
539 |
unless ( !defined( $res->{'expirationdate'} ) || $res->{'expirationdate'} eq '0000-00-00' ); |
522 |
$reserve{'date'} = format_date( $res->{'reservedate'} ); |
540 |
$reserve{'date'} = format_date( $res->{'reservedate'} ); |
523 |
$reserve{'borrowernumber'} = $res->{'borrowernumber'}; |
541 |
$reserve{'borrowernumber'} = $res->{'borrowernumber'}; |
524 |
$reserve{'biblionumber'} = $res->{'biblionumber'}; |
542 |
$reserve{'biblionumber'} = $res->{'biblionumber'}; |
Lines 526-549
foreach my $biblionumber (@biblionumbers) {
Link Here
|
526 |
$reserve{'firstname'} = $reserveborrowerinfo->{'firstname'}; |
544 |
$reserve{'firstname'} = $reserveborrowerinfo->{'firstname'}; |
527 |
$reserve{'surname'} = $reserveborrowerinfo->{'surname'}; |
545 |
$reserve{'surname'} = $reserveborrowerinfo->{'surname'}; |
528 |
$reserve{'notes'} = $res->{'reservenotes'}; |
546 |
$reserve{'notes'} = $res->{'reservenotes'}; |
529 |
$reserve{'wait'} = |
547 |
$reserve{'wait'} = |
530 |
( ( defined $res->{'found'} and $res->{'found'} eq 'W' ) or ( $res->{'priority'} eq '0' ) ); |
548 |
( ( defined $res->{'found'} and $res->{'found'} eq 'W' ) or ( $res->{'priority'} eq '0' ) ); |
531 |
$reserve{'constrainttypea'} = ( $res->{'constrainttype'} eq 'a' ); |
549 |
$reserve{'constrainttypea'} = ( $res->{'constrainttype'} eq 'a' ); |
532 |
$reserve{'constrainttypeo'} = ( $res->{'constrainttype'} eq 'o' ); |
550 |
$reserve{'constrainttypeo'} = ( $res->{'constrainttype'} eq 'o' ); |
533 |
$reserve{'voldesc'} = $res->{'volumeddesc'}; |
551 |
$reserve{'voldesc'} = $res->{'volumeddesc'}; |
534 |
$reserve{'ccode'} = $res->{'ccode'}; |
552 |
$reserve{'ccode'} = $res->{'ccode'}; |
535 |
$reserve{'barcode'} = $res->{'barcode'}; |
553 |
$reserve{'barcode'} = $res->{'barcode'}; |
536 |
$reserve{'priority'} = $res->{'priority'}; |
554 |
$reserve{'priority'} = $res->{'priority'}; |
537 |
$reserve{'lowestPriority'} = $res->{'lowestPriority'}; |
555 |
$reserve{'lowestPriority'} = $res->{'lowestPriority'}; |
538 |
$reserve{'optionloop'} = \@optionloop; |
556 |
$reserve{'optionloop'} = \@optionloop; |
539 |
$reserve{'suspend'} = $res->{'suspend'}; |
557 |
$reserve{'suspend'} = $res->{'suspend'}; |
540 |
$reserve{'suspend_until'} = $res->{'suspend_until'}; |
558 |
$reserve{'suspend_until'} = $res->{'suspend_until'}; |
541 |
$reserve{'reserve_id'} = $res->{'reserve_id'}; |
559 |
$reserve{'reserve_id'} = $res->{'reserve_id'}; |
542 |
|
560 |
|
543 |
if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) { |
561 |
if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) { |
544 |
$reserve{'branchloop'} = [ GetBranchDetail($res->{'branchcode'}) ]; |
562 |
$reserve{'branchloop'} = [ GetBranchDetail( $res->{'branchcode'} ) ]; |
545 |
} else { |
563 |
} |
546 |
$reserve{'branchloop'} = GetBranchesLoop($res->{'branchcode'}); |
564 |
else { |
|
|
565 |
$reserve{'branchloop'} = GetBranchesLoop( $res->{'branchcode'} ); |
547 |
} |
566 |
} |
548 |
|
567 |
|
549 |
push( @reserveloop, \%reserve ); |
568 |
push( @reserveloop, \%reserve ); |
Lines 553-587
foreach my $biblionumber (@biblionumbers) {
Link Here
|
553 |
my $time = time(); |
572 |
my $time = time(); |
554 |
|
573 |
|
555 |
$template->param( |
574 |
$template->param( |
556 |
branchloop => GetBranchesLoop($userbranch), |
575 |
branchloop => GetBranchesLoop($userbranch), |
557 |
time => $time, |
576 |
time => $time, |
558 |
fixedRank => $fixedRank, |
577 |
fixedRank => $fixedRank, |
559 |
); |
578 |
); |
560 |
|
579 |
|
561 |
# display infos |
580 |
# display infos |
562 |
$template->param( |
581 |
$template->param( |
563 |
optionloop => \@optionloop, |
582 |
optionloop => \@optionloop, |
564 |
bibitemloop => \@bibitemloop, |
583 |
bibitemloop => \@bibitemloop, |
565 |
itemdata_enumchron => $itemdata_enumchron, |
584 |
itemdata_enumchron => $itemdata_enumchron, |
566 |
date => $date, |
585 |
date => $date, |
567 |
biblionumber => $biblionumber, |
586 |
biblionumber => $biblionumber, |
568 |
findborrower => $findborrower, |
587 |
findborrower => $findborrower, |
569 |
title => $dat->{title}, |
588 |
title => $dat->{title}, |
570 |
author => $dat->{author}, |
589 |
author => $dat->{author}, |
571 |
holdsview => 1, |
590 |
holdsview => 1, |
572 |
C4::Search::enabled_staff_search_views, |
591 |
C4::Search::enabled_staff_search_views, |
573 |
); |
592 |
); |
574 |
if (defined $borrowerinfo && exists $borrowerinfo->{'branchcode'}) { |
593 |
if ( defined $borrowerinfo && exists $borrowerinfo->{'branchcode'} ) { |
575 |
$template->param( |
594 |
$template->param( |
576 |
borrower_branchname => $branches->{$borrowerinfo->{'branchcode'}}->{'branchname'}, |
595 |
borrower_branchname => $branches->{ $borrowerinfo->{'branchcode'} }->{'branchname'}, |
577 |
borrower_branchcode => $borrowerinfo->{'branchcode'}, |
596 |
borrower_branchcode => $borrowerinfo->{'branchcode'}, |
578 |
); |
597 |
); |
579 |
} |
598 |
} |
580 |
|
599 |
|
581 |
$biblioloopiter{biblionumber} = $biblionumber; |
600 |
$biblioloopiter{biblionumber} = $biblionumber; |
582 |
$biblioloopiter{title} = $dat->{title}; |
601 |
$biblioloopiter{title} = $dat->{title}; |
583 |
$biblioloopiter{rank} = $fixedRank; |
602 |
$biblioloopiter{rank} = $fixedRank; |
584 |
$biblioloopiter{reserveloop} = \@reserveloop; |
603 |
$biblioloopiter{reserveloop} = \@reserveloop; |
585 |
|
604 |
|
586 |
if (@reserveloop) { |
605 |
if (@reserveloop) { |
587 |
$template->param( reserveloop => \@reserveloop ); |
606 |
$template->param( reserveloop => \@reserveloop ); |
Lines 590-609
foreach my $biblionumber (@biblionumbers) {
Link Here
|
590 |
push @biblioloop, \%biblioloopiter; |
609 |
push @biblioloop, \%biblioloopiter; |
591 |
} |
610 |
} |
592 |
|
611 |
|
593 |
$template->param( biblioloop => \@biblioloop ); |
612 |
$template->param( biblioloop => \@biblioloop ); |
594 |
$template->param( biblionumbers => $biblionumbers ); |
613 |
$template->param( biblionumbers => $biblionumbers ); |
595 |
$template->param( maxreserves => $maxreserves ); |
614 |
$template->param( maxreserves => $maxreserves ); |
596 |
|
615 |
|
597 |
if ($multihold) { |
616 |
if ($multihold) { |
598 |
$template->param( multi_hold => 1 ); |
617 |
$template->param( multi_hold => 1 ); |
599 |
} |
618 |
} |
600 |
|
619 |
|
601 |
if ( C4::Context->preference( 'AllowHoldDateInFuture' ) ) { |
620 |
if ( C4::Context->preference('AllowHoldDateInFuture') ) { |
602 |
$template->param( reserve_in_future => 1 ); |
621 |
$template->param( reserve_in_future => 1 ); |
603 |
} |
622 |
} |
604 |
|
623 |
|
605 |
$template->param( |
624 |
$template->param( |
606 |
SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'), |
625 |
SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'), |
607 |
AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'), |
626 |
AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'), |
608 |
); |
627 |
); |
609 |
|
628 |
|
Lines 613-621
output_html_with_http_headers $input, $cookie, $template->output;
Link Here
|
613 |
sub sort_borrowerlist { |
632 |
sub sort_borrowerlist { |
614 |
my $borrowerslist = shift; |
633 |
my $borrowerslist = shift; |
615 |
my $ref = []; |
634 |
my $ref = []; |
616 |
push @{$ref}, sort { |
635 |
push @{$ref}, |
617 |
uc( $a->{surname} . $a->{firstname} ) cmp |
636 |
sort { uc( $a->{surname} . $a->{firstname} ) cmp uc( $b->{surname} . $b->{firstname} ) } @{$borrowerslist}; |
618 |
uc( $b->{surname} . $b->{firstname} ) |
|
|
619 |
} @{$borrowerslist}; |
620 |
return $ref; |
637 |
return $ref; |
621 |
} |
638 |
} |
622 |
- |
|
|