use Carp;
use Koha::Database;
+use Koha::DateUtils qw( dt_from_string );
use C4::Context;
use Koha::IssuingRules;
return $issuing_rule->article_requests || q{}
}
+=head3 holds_placed_before_today
+
+=cut
+
+sub holds_placed_before_today {
+ my ( $self ) = @_;
+ my $attributes = { order_by => 'priority' };
+ my $dtf = Koha::Database->new->schema->storage->datetime_parser;
+ my $params = {
+ itemnumber => $self->itemnumber,
+ suspend => 0,
+ -or => [
+ reservedate => { '<=' => $dtf->format_date(dt_from_string) },
+ waitingdate => { '!=' => undef },
+ ],
+ };
+ my $hold_rs = $self->_result->reserves->search( $params, $attributes );
+ return Koha::Holds->_new_from_dbic($hold_rs);
+}
+
=head3 type
=cut
use C4::Acquisition qw(GetOrdersByBiblionumber);
use Koha::AuthorisedValues;
use Koha::Biblios;
+use Koha::Items;
use Koha::Patrons;
use Koha::Virtualshelves;
$itemfields{$_} = 1 if ( $item->{$_} );
}
- # checking for holds
- my ($reservedate,$reservedfor,$expectedAt,undef,$wait) = GetReservesFromItemnumber($item->{itemnumber});
- my $ItemBorrowerReserveInfo = C4::Members::GetMember( borrowernumber => $reservedfor);
-
if (C4::Context->preference('HidePatronName')){
- $item->{'hidepatronname'} = 1;
+ $item->{'hidepatronname'} = 1;
}
- if ( defined $reservedate ) {
+
+ # checking for holds
+ my $item_object = Koha::Items->find( $item->{itemnumber} );
+ my $holds = $item_object->holds_placed_before_today;
+ if ( my $first_hold = $holds->next ) {
+ my $ItemBorrowerReserveInfo = C4::Members::GetMember( borrowernumber => $first_hold->borrowernumber); # FIXME could be improved
$item->{backgroundcolor} = 'reserved';
- $item->{reservedate} = $reservedate;
- $item->{ReservedForBorrowernumber} = $reservedfor;
+ $item->{reservedate} = $first_hold->reservedate;
+ $item->{ReservedForBorrowernumber} = $first_hold->borrowernumber;
$item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
$item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
- $item->{ExpectedAtLibrary} = $expectedAt;
+ $item->{ExpectedAtLibrary} = $first_hold->branchcode;
$item->{Reservedcardnumber} = $ItemBorrowerReserveInfo->{'cardnumber'};
# Check waiting status
- $item->{waitingdate} = $wait;
+ $item->{waitingdate} = $first_hold->waitingdate;
}
use C4::Koha;
use C4::Reserves;
+use Koha::Items;
use Koha::Libraries;
use Koha::DateUtils;
use Koha::BiblioFrameworks;
$getransf{'subtitle'} = GetRecordValue('subtitle', $record, GetFrameworkCode($gettitle->{'biblionumber'}));
# we check if we have a reserv for this transfer
- my @checkreserv = GetReservesFromItemnumber($num->{'itemnumber'});
- if ( $checkreserv[0] ) {
- my $getborrower = C4::Members::GetMember( borrowernumber => $checkreserv[1] );
+ my $item = Koha::Items->find( $num->{itemnumber} );
+ my $holds = $item->holds_placed_before_today;
+ if ( my $first_hold = $holds->next ) {
+ my $getborrower = C4::Members::GetMember( borrowernumber => $first_hold->borrowernumber );
$getransf{'borrowernum'} = $getborrower->{'borrowernumber'};
$getransf{'borrowername'} = $getborrower->{'surname'};
$getransf{'borrowerfirstname'} = $getborrower->{'firstname'};
use C4::Debug;
use Koha::AuthorisedValues;
use Koha::DateUtils;
+use Koha::Items;
use Koha::Libraries;
use Koha::Patrons;
use Date::Calc qw/Today Date_to_Days/;
}
# checking reserve
- my ($reservedate,$reservedfor,$expectedAt,undef,$wait) = GetReservesFromItemnumber($itemNum);
- my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor );
+ my $item = Koha::Items->find( $itemNum );
+ my $holds = $item->holds_placed_before_today;
# the item could be reserved for this borrower vi a host record, flag this
- $reservedfor //= '';
+ my $reservedfor = q||;
- if ( defined $reservedate ) {
+ if ( my $first_hold = $holds->next ) {
+ my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $first_hold->borrowernumber );
$itemLoopIter->{backgroundcolor} = 'reserved';
- $itemLoopIter->{reservedate} = output_pref({ dt => dt_from_string($reservedate), dateonly => 1 });
- $itemLoopIter->{ReservedForBorrowernumber} = $reservedfor;
+ $itemLoopIter->{reservedate} = output_pref({ dt => dt_from_string($first_hold->reservedate), dateonly => 1 }); # FIXME Should be formatted in the template
+ $itemLoopIter->{ReservedForBorrowernumber} = $first_hold->borrowernumber;
$itemLoopIter->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
$itemLoopIter->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
- $itemLoopIter->{ExpectedAtLibrary} = $expectedAt;
- #waiting status
- $itemLoopIter->{waitingdate} = $wait;
+ $itemLoopIter->{ExpectedAtLibrary} = $first_hold->branchcode;
+ $itemLoopIter->{waitingdate} = $first_hold->waitingdate;
}
$itemLoopIter->{notforloan} = $itemInfo->{notforloan};
use C4::Search; # enabled_staff_search_views
use Koha::DateUtils;
use Koha::Holds;
+use Koha::Items;
use Koha::Libraries;
use Koha::Patrons;
}
# checking reserve
- my ($reservedate,$reservedfor,$expectedAt,$reserve_id,$wait) = GetReservesFromItemnumber($itemnumber);
- if ( defined $reservedate ) {
- my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor );
+ my $holds = Koha::Items->find( $itemnumber )->holds_placed_before_today;
+ if ( my $first_hold = $holds->next ) {
+ my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $first_hold->borrowernumber );
$item->{backgroundcolor} = 'reserved';
- $item->{reservedate} = output_pref({ dt => dt_from_string( $reservedate ), dateonly => 1 });
- $item->{ReservedForBorrowernumber} = $reservedfor;
+ $item->{reservedate} = output_pref({ dt => dt_from_string( $first_hold->reservedate ), dateonly => 1 }); # FIXME Should be formatted in the template
+ $item->{ReservedForBorrowernumber} = $first_hold->borrowernumber;
$item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
$item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
- $item->{ExpectedAtLibrary} = $expectedAt;
- $item->{waitingdate} = $wait;
+ $item->{ExpectedAtLibrary} = $first_hold->branchcode;
+ $item->{waitingdate} = $first_hold->waitingdate;
}
# Management of the notforloan document
is( $holds->next->priority, 4, "Reserve 4 has a priority of 4" );
is( $holds->next->priority, 5, "Reserve 5 has a priority of 5" );
-my ( $reservedate, $borrowernumber, $branch_1code, $reserve_id ) = GetReservesFromItemnumber($itemnumber);
-is( $reservedate, output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), "GetReservesFromItemnumber should return a valid reserve date");
-is( $borrowernumber, $borrowernumbers[0], "GetReservesFromItemnumber should return a valid borrowernumber");
-is( $branch_1code, $branch_1, "GetReservesFromItemnumber should return a valid branchcode");
-ok($reserve_id, "Test GetReservesFromItemnumber()");
+my $item = Koha::Items->find( $itemnumber );
+$holds = $item->holds_placed_before_today;
+my $first_hold = $holds->next;
+my $reservedate = $first_hold->reservedate;
+my $borrowernumber = $first_hold->borrowernumber;
+my $branch_1code = $first_hold->branchcode;
+my $reserve_id = $first_hold->reserve_id;
+is( $reservedate, output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), "holds_placed_today should return a valid reserve date");
+is( $borrowernumber, $borrowernumbers[0], "holds_placed_today should return a valid borrowernumber");
+is( $branch_1code, $branch_1, "holds_placed_today should return a valid branchcode");
+ok($reserve_id, "Test holds_placed_today()");
my $hold = Koha::Holds->find( $reserve_id );
ok( $hold, "Koha::Holds found the hold" );
$holds = $biblio->holds;
is( $holds->count, $borrowers_count - 1, "Test CancelReserve()" );
+$holds = $item->holds_placed_before_today;
+$first_hold = $holds->next;
+$borrowernumber = $first_hold->borrowernumber;
+$branch_1code = $first_hold->branchcode;
+$reserve_id = $first_hold->reserve_id;
-( $reservedate, $borrowernumber, $branch_1code, $reserve_id ) = GetReservesFromItemnumber($itemnumber);
ModReserve({
reserve_id => $reserve_id,
rank => '4',
my $letter = ReserveSlip($branch_1, $requesters{$branch_1}, $bibnum);
ok(defined($letter), 'can successfully generate hold slip (bug 10949)');
-# Tests for bug 9788: Does GetReservesFromItemnumber return a future wait?
-# 9788a: GetReservesFromItemnumber does not return future next available hold
+# Tests for bug 9788: Does Koha::Item->holds_placed_before_today return a future wait?
+# 9788a: holds_placed_before_today does not return future next available hold
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
t::lib::Mocks::mock_preference('ConfirmFutureHolds', 2);
t::lib::Mocks::mock_preference('AllowHoldDateInFuture', 1);
AddReserve($branch_1, $requesters{$branch_1}, $bibnum,
$bibitems, 1, $resdate, $expdate, $notes,
$title, $checkitem, $found);
-my @results= GetReservesFromItemnumber($itemnumber);
-is(defined $results[3]?1:0, 0, 'GetReservesFromItemnumber does not return a future next available hold');
-# 9788b: GetReservesFromItemnumber does not return future item level hold
+my $item = Koha::Items->find( $itemnumber );
+$holds = $item->holds_placed_before_today;
+my $dtf = Koha::Database->new->schema->storage->datetime_parser;
+my $future_holds = $holds->search({ reservedate => { '>' => $dtf->format_date( dt_from_string ) } } );
+is( $future_holds->count, 0, 'holds_placed_before_today does not return a future next available hold');
+# 9788b: holds_placed_before_today does not return future item level hold
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
AddReserve($branch_1, $requesters{$branch_1}, $bibnum,
$bibitems, 1, $resdate, $expdate, $notes,
$title, $itemnumber, $found); #item level hold
-@results= GetReservesFromItemnumber($itemnumber);
-is(defined $results[3]?1:0, 0, 'GetReservesFromItemnumber does not return a future item level hold');
-# 9788c: GetReservesFromItemnumber returns future wait (confirmed future hold)
+$future_holds = $holds->search({ reservedate => { '>' => $dtf->format_date( dt_from_string ) } } );
+is( $future_holds->count, 0, 'holds_placed_before_today does not return a future item level hold' );
+# 9788c: holds_placed_before_today returns future wait (confirmed future hold)
ModReserveAffect( $itemnumber, $requesters{$branch_1} , 0); #confirm hold
-@results= GetReservesFromItemnumber($itemnumber);
-is(defined $results[3]?1:0, 1, 'GetReservesFromItemnumber returns a future wait (confirmed future hold)');
+$future_holds = $holds->search({ reservedate => { '>' => $dtf->format_date( dt_from_string ) } } );
+is( $future_holds->count, 1, 'holds_placed_before_today returns a future wait (confirmed future hold)' );
# End of tests for bug 9788
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum));
####### EO Bug 13113 <<<
####
-my $item = GetItem($itemnumber);
+$item = GetItem($itemnumber);
ok( C4::Reserves::IsAvailableForItemLevelRequest($item, $borrower), "Reserving a book on item level" );