|
Lines 131-136
BEGIN {
Link Here
|
| 131 |
&SuspendAll |
131 |
&SuspendAll |
| 132 |
|
132 |
|
| 133 |
&GetReservesControlBranch |
133 |
&GetReservesControlBranch |
|
|
134 |
&ReservesOnSamePeriod |
| 134 |
|
135 |
|
| 135 |
IsItemOnHoldAndFound |
136 |
IsItemOnHoldAndFound |
| 136 |
|
137 |
|
|
Lines 279-285
sub AddReserve {
Link Here
|
| 279 |
|
280 |
|
| 280 |
=head2 CanBookBeReserved |
281 |
=head2 CanBookBeReserved |
| 281 |
|
282 |
|
| 282 |
$canReserve = &CanBookBeReserved($borrowernumber, $biblionumber, $branchcode) |
283 |
$canReserve = &CanBookBeReserved($borrowernumber, $biblionumber, $branchcode, { |
|
|
284 |
hold_date => $hold_date, |
| 285 |
expiration_date => $expiration_date, |
| 286 |
}) |
| 283 |
if ($canReserve eq 'OK') { #We can reserve this Item! } |
287 |
if ($canReserve eq 'OK') { #We can reserve this Item! } |
| 284 |
|
288 |
|
| 285 |
See CanItemBeReserved() for possible return values. |
289 |
See CanItemBeReserved() for possible return values. |
|
Lines 287-293
See CanItemBeReserved() for possible return values.
Link Here
|
| 287 |
=cut |
291 |
=cut |
| 288 |
|
292 |
|
| 289 |
sub CanBookBeReserved{ |
293 |
sub CanBookBeReserved{ |
| 290 |
my ($borrowernumber, $biblionumber, $pickup_branchcode) = @_; |
294 |
my ($borrowernumber, $biblionumber, $pickup_branchcode, $params) = @_; |
| 291 |
|
295 |
|
| 292 |
my @itemnumbers = Koha::Items->search({ biblionumber => $biblionumber})->get_column("itemnumber"); |
296 |
my @itemnumbers = Koha::Items->search({ biblionumber => $biblionumber})->get_column("itemnumber"); |
| 293 |
#get items linked via host records |
297 |
#get items linked via host records |
|
Lines 298-304
sub CanBookBeReserved{
Link Here
|
| 298 |
|
302 |
|
| 299 |
my $canReserve = { status => '' }; |
303 |
my $canReserve = { status => '' }; |
| 300 |
foreach my $itemnumber (@itemnumbers) { |
304 |
foreach my $itemnumber (@itemnumbers) { |
| 301 |
$canReserve = CanItemBeReserved( $borrowernumber, $itemnumber, $pickup_branchcode ); |
305 |
$canReserve = CanItemBeReserved( $borrowernumber, $itemnumber, $pickup_branchcode, $params ); |
| 302 |
return { status => 'OK' } if $canReserve->{status} eq 'OK'; |
306 |
return { status => 'OK' } if $canReserve->{status} eq 'OK'; |
| 303 |
} |
307 |
} |
| 304 |
return $canReserve; |
308 |
return $canReserve; |
|
Lines 306-312
sub CanBookBeReserved{
Link Here
|
| 306 |
|
310 |
|
| 307 |
=head2 CanItemBeReserved |
311 |
=head2 CanItemBeReserved |
| 308 |
|
312 |
|
| 309 |
$canReserve = &CanItemBeReserved($borrowernumber, $itemnumber, $branchcode) |
313 |
$canReserve = &CanItemBeReserved($borrowernumber, $itemnumber, $branchcode, { |
|
|
314 |
hold_date => $hold_date, |
| 315 |
expiration_date => $expiration_date, |
| 316 |
}) |
| 310 |
if ($canReserve->{status} eq 'OK') { #We can reserve this Item! } |
317 |
if ($canReserve->{status} eq 'OK') { #We can reserve this Item! } |
| 311 |
|
318 |
|
| 312 |
@RETURNS { status => OK }, if the Item can be reserved. |
319 |
@RETURNS { status => OK }, if the Item can be reserved. |
|
Lines 324-330
sub CanBookBeReserved{
Link Here
|
| 324 |
=cut |
331 |
=cut |
| 325 |
|
332 |
|
| 326 |
sub CanItemBeReserved { |
333 |
sub CanItemBeReserved { |
| 327 |
my ( $borrowernumber, $itemnumber, $pickup_branchcode ) = @_; |
334 |
my ( $borrowernumber, $itemnumber, $pickup_branchcode, $params ) = @_; |
|
|
335 |
|
| 336 |
$params //= {}; |
| 328 |
|
337 |
|
| 329 |
my $dbh = C4::Context->dbh; |
338 |
my $dbh = C4::Context->dbh; |
| 330 |
my $ruleitemtype; # itemtype of the matching issuing rule |
339 |
my $ruleitemtype; # itemtype of the matching issuing rule |
|
Lines 513-518
sub CanItemBeReserved {
Link Here
|
| 513 |
} |
522 |
} |
| 514 |
} |
523 |
} |
| 515 |
|
524 |
|
|
|
525 |
if (C4::Context->preference('PreventReservesOnSamePeriod')) { |
| 526 |
my $overlapping_reserves = ReservesOnSamePeriod($item->biblionumber, $item->itemnumber, $params->{hold_date}, $params->{expiration_date}); |
| 527 |
if ($overlapping_reserves && 0 < scalar @$overlapping_reserves) { |
| 528 |
return { status => 'reservesOnSamePeriod' }; |
| 529 |
} |
| 530 |
} |
| 531 |
|
| 516 |
return { status => 'OK' }; |
532 |
return { status => 'OK' }; |
| 517 |
} |
533 |
} |
| 518 |
|
534 |
|
|
Lines 2243-2248
sub GetHoldRule {
Link Here
|
| 2243 |
return $rules; |
2259 |
return $rules; |
| 2244 |
} |
2260 |
} |
| 2245 |
|
2261 |
|
|
|
2262 |
=head2 ReservesOnSamePeriod |
| 2263 |
|
| 2264 |
my $reserve = ReservesOnSamePeriod( $biblionumber, $itemnumber, $resdate, $expdate); |
| 2265 |
|
| 2266 |
Return the reserve that match the period ($resdate => $expdate), |
| 2267 |
undef if no reserve match. |
| 2268 |
|
| 2269 |
=cut |
| 2270 |
|
| 2271 |
sub ReservesOnSamePeriod { |
| 2272 |
my ($biblionumber, $itemnumber, $resdate, $expdate) = @_; |
| 2273 |
|
| 2274 |
unless ($resdate && $expdate) { |
| 2275 |
return; |
| 2276 |
} |
| 2277 |
|
| 2278 |
my @reserves = Koha::Holds->search({ biblionumber => $biblionumber }); |
| 2279 |
|
| 2280 |
$resdate = output_pref({ str => $resdate, dateonly => 1, dateformat => 'iso' }); |
| 2281 |
$expdate = output_pref({ str => $expdate, dateonly => 1, dateformat => 'iso' }); |
| 2282 |
|
| 2283 |
my @reserves_overlaps; |
| 2284 |
foreach my $reserve ( @reserves ) { |
| 2285 |
|
| 2286 |
unless ($reserve->reservedate && $reserve->expirationdate) { |
| 2287 |
next; |
| 2288 |
} |
| 2289 |
|
| 2290 |
if (date_ranges_overlap($resdate, $expdate, |
| 2291 |
$reserve->reservedate, |
| 2292 |
$reserve->expirationdate)) { |
| 2293 |
|
| 2294 |
# If reserve is item level and the requested periods overlap. |
| 2295 |
if ($itemnumber && $reserve->itemnumber == $itemnumber ) { |
| 2296 |
return [$reserve->unblessed]; |
| 2297 |
} |
| 2298 |
push @reserves_overlaps, $reserve->unblessed; |
| 2299 |
} |
| 2300 |
} |
| 2301 |
|
| 2302 |
if ( @reserves_overlaps >= Koha::Items->search({ biblionumber => $biblionumber })->count() ) { |
| 2303 |
return \@reserves_overlaps; |
| 2304 |
} |
| 2305 |
|
| 2306 |
return; |
| 2307 |
} |
| 2308 |
|
| 2246 |
=head1 AUTHOR |
2309 |
=head1 AUTHOR |
| 2247 |
|
2310 |
|
| 2248 |
Koha Development Team <http://koha-community.org/> |
2311 |
Koha Development Team <http://koha-community.org/> |