$expdate = output_pref({ str => $expdate, dateonly => 1, dateformat => 'iso' });
+ # if we have an item selectionned, and the pickup branch is the same as the holdingbranch
+ # of the document, we force the value $priority and $found .
+ if ( $checkitem and not C4::Context->preference('ReservesNeedReturns') ) {
+ $priority = 0;
+ my $item = Koha::Items->find( $checkitem ); # FIXME Prevent bad calls
+ if ( $item->holdingbranch eq $branch ) {
+ $found = 'W';
+ }
+ }
+
if ( C4::Context->preference('AllowHoldDateInFuture') ) {
# Make room in reserves for this before those of a later reserve date
itemtype => $itemtype,
}
)->store();
+ $hold->set_waiting() if $found eq 'W';
logaction( 'HOLDS', 'CREATE', $hold->id, Dumper($hold->unblessed) )
if C4::Context->preference('HoldsLog');
# FIXME - a lot of places in the code do this
# or something similar - need to be
# consolidated
- my $itype = _get_itype($item);
+ my $patron = Koha::Patrons->find( $borrower->{borrowernumber} );
+ my $item_object = Koha::Items->find( $item->{itemnumber } );
+ my $itemtype = $item_object->effective_itemtype;
my $notforloan_per_itemtype
= $dbh->selectrow_array("SELECT notforloan FROM itemtypes WHERE itemtype = ?",
- undef, $itype);
+ undef, $itemtype);
return 0 if
$notforloan_per_itemtype ||
$item->{withdrawn} ||
($item->{damaged} && !C4::Context->preference('AllowHoldsOnDamagedItems'));
- my $on_shelf_holds = _OnShelfHoldsAllowed($itype,$borrower->{categorycode},$item->{holdingbranch});
+ my $on_shelf_holds = Koha::IssuingRules->get_onshelfholds_policy( { item => $item_object, patron => $patron } );
if ( $on_shelf_holds == 1 ) {
return 1;
}
return $any_available ? 0 : 1;
+ } else { # on_shelf_holds == 0 "If any unavailable" (the description is rather cryptic and could still be improved)
+ return $item->{onloan} || IsItemOnHoldAndFound( $item->{itemnumber} );
}
-
- if ($item->{onloan}) {
- return 1;
- }
-
- if ( Koha::Holds->search({itemnumber => $item->{itemnumber},
- found => ['W', 'T']})->count ) {
- return 1;
- }
-
- return 0;
-}
-
-=head2 OnShelfHoldsAllowed
-
- OnShelfHoldsAllowed($itemtype,$borrowercategory,$branchcode);
-
-Checks issuingrules, using the borrowers categorycode, the itemtype, and branchcode to see if onshelf
-holds are allowed, returns true if so.
-
-=cut
-
-sub OnShelfHoldsAllowed {
- my ($item, $borrower) = @_;
-
- my $itype = _get_itype($item);
- return _OnShelfHoldsAllowed($itype,$borrower->{categorycode},$item->{holdingbranch});
}
sub _get_itype {
return $itype;
}
-sub _OnShelfHoldsAllowed {
- my ($itype,$borrowercategory,$branchcode) = @_;
-
- my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule({ categorycode => $borrowercategory, itemtype => $itype, branchcode => $branchcode });
- return $issuing_rule ? $issuing_rule->onshelfholds : undef;
-}
-
=head2 AlterPriority
AlterPriority( $where, $reserve_id );
=head2 ReserveSlip
- ReserveSlip($branchcode, $borrowernumber, $biblionumber)
+ReserveSlip(
+ {
+ branchcode => $branchcode,
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ [ itemnumber => $itemnumber, ]
+ [ barcode => $barcode, ]
+ }
+ )
Returns letter hash ( see C4::Letters::GetPreparedLetter ) or undef
=cut
sub ReserveSlip {
- my ($branch, $borrowernumber, $biblionumber) = @_;
+ my ($args) = @_;
+ my $branchcode = $args->{branchcode};
+ my $borrowernumber = $args->{borrowernumber};
+ my $biblionumber = $args->{biblionumber};
+ my $itemnumber = $args->{itemnumber};
+ my $barcode = $args->{barcode};
-# return unless ( C4::Context->boolean_preference('printreserveslips') );
- my $patron = Koha::Patrons->find( $borrowernumber );
- my $hold = Koha::Holds->search({biblionumber => $biblionumber, borrowernumber => $borrowernumber })->next;
+ my $patron = Koha::Patrons->find($borrowernumber);
+
+ my $hold;
+ if ($itemnumber || $barcode ) {
+ $itemnumber ||= Koha::Items->find( { barcode => $barcode } )->itemnumber;
+
+ $hold = Koha::Holds->search(
+ {
+ biblionumber => $biblionumber,
+ borrowernumber => $borrowernumber,
+ itemnumber => $itemnumber
+ }
+ )->next;
+ }
+ else {
+ $hold = Koha::Holds->search(
+ {
+ biblionumber => $biblionumber,
+ borrowernumber => $borrowernumber
+ }
+ )->next;
+ }
+
return unless $hold;
my $reserve = $hold->unblessed;
return C4::Letters::GetPreparedLetter (
module => 'circulation',
letter_code => 'HOLD_SLIP',
- branchcode => $branch,
+ branchcode => $branchcode,
lang => $patron->lang,
tables => {
'reserves' => $reserve,