use C4::Circulation;
use C4::Accounts;
use C4::Biblio;
-use C4::Reserves qw(AddReserve GetReservesFromBorrowernumber CanBookBeReserved CanItemBeReserved IsAvailableForItemLevelRequest);
+use C4::Reserves qw(AddReserve CanBookBeReserved CanItemBeReserved IsAvailableForItemLevelRequest);
use C4::Context;
use C4::AuthoritiesMarc;
use XML::Simple;
use Koha::Biblios;
use Koha::Libraries;
+use Koha::Patrons;
=head1 NAME
my $borrowernumber = $cgi->param('patron_id');
my $borrower = GetMember( borrowernumber => $borrowernumber );
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
# Cleaning the borrower hashref
my $flags = C4::Members::patronflags( $borrower );
if ( $cgi->param('show_holds') && $cgi->param('show_holds') eq "1" ) {
# Get borrower's reserves
- my @reserves = GetReservesFromBorrowernumber( $borrowernumber, undef );
- foreach my $reserve (@reserves) {
+ my $holds = $patron->holds;
+ while ( my $hold = $holds->next ) {
+ my $unblessed_hold = $hold->unblessed;
# Get additional informations
- my $item = GetBiblioFromItemNumber( $reserve->{'itemnumber'}, undef );
- my $library = Koha::Libraries->find( $reserve->{branchcode} );
+ my $item = GetBiblioFromItemNumber( $hold->itemnumber, undef );
+ my $library = Koha::Libraries->find( $hold->branchcode ); # Should $hold->get_library
my $branchname = $library ? $library->branchname : '';
# Remove unwanted fields
delete $item->{'more_subfields_xml'};
# Add additional fields
- $reserve->{'item'} = $item;
- $reserve->{'branchname'} = $branchname;
- $reserve->{'title'} = GetBiblio( $reserve->{'biblionumber'} )->{'title'};
+ $unblessed_hold->{item} = $item;
+ $unblessed_hold->{branchname} = $branchname;
+ $unblessed_hold->{title} = GetBiblio( $hold->biblionumber )->{'title'}; # Should be $hold->get_biblio
+
+ push @{ $borrower->{holds}{hold} }, $unblessed_hold;
}
- $borrower->{'holds'}->{'hold'} = \@reserves;
}
# Issues management
my $borrower = GetMember( borrowernumber => $borrowernumber );
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+
# Get the item, or return an error code if not found
my $itemnumber = $cgi->param('item_id');
my $item = GetItem( $itemnumber );
}
# Reserve cancellation management
- my @reserves = GetReservesFromBorrowernumber( $borrowernumber, undef );
+ my $holds = $patron->holds;
my @reserveditems;
- foreach my $reserve (@reserves) {
- push @reserveditems, $reserve->{'itemnumber'};
+ while ( my $hold = $holds->next ) { # FIXME This could be improved
+ push @reserveditems, $hold->itemnumber;
}
if ( grep { $itemnumber eq $_ } @reserveditems ) {
push @availablefor, 'hold cancellation';
}
$flags{'ODUES'} = \%flaginfo;
}
- my @itemswaiting = C4::Reserves::GetReservesFromBorrowernumber( $patroninformation->{'borrowernumber'},'W' );
- my $nowaiting = scalar @itemswaiting;
+
+ my $patron = Koha::Patrons->find( $patroninformation->{borrowernumber} );
+ my $waiting_holds = $patron->holds->search({ found => 'W' });
+ my $nowaiting = $waiting_holds->count;
if ( $nowaiting > 0 ) {
my %flaginfo;
$flaginfo{'message'} = "Reserved items available";
- $flaginfo{'itemlist'} = \@itemswaiting;
+ $flaginfo{'itemlist'} = $waiting_holds->unblessed;
$flags{'WAITING'} = \%flaginfo;
}
return ( \%flags );
use C4::Auth qw(checkpw);
use Koha::Libraries;
+use Koha::Patrons;
our $kp; # koha patron
sub _get_outstanding_holds {
my $borrowernumber = shift;
- my @hold_array = grep { !defined $_->{found} || $_->{found} ne 'W'} GetReservesFromBorrowernumber($borrowernumber);
- foreach my $h (@hold_array) {
+
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ my $holds = $patron->holds->search( { -or => [ { found => undef }, { found => { '!=' => 'W' } } ] } );
+ my @holds;
+ while ( my $hold = $holds->next ) {
my $item;
- if ($h->{itemnumber}) {
- $item = $h->{itemnumber};
+ if ($hold->itemnumber) {
+ $item = $hold->itemnumber;
}
else {
# We need to return a barcode for the biblio so the client
# can request the biblio info
- $item = ( GetItemnumbersForBiblio($h->{biblionumber}) )->[0];
+ $item = ( GetItemnumbersForBiblio($hold->biblionumber) )->[0];
}
- $h->{barcode} = GetBarcodeFromItemnumber($item);
+ my $unblessed_hold = $hold->unblessed;
+ $unblessed_hold->{barcode} = GetBarcodeFromItemnumber($item);
+ push @holds, $unblessed_hold;
}
- return \@hold_array;
+ return \@holds;
}
1;
use C4::Templates qw ( gettemplate );
use C4::Members qw( GetPendingIssues );
-use C4::Reserves qw( GetReservesFromBorrowernumber CancelReserve );
+use C4::Reserves qw( CancelReserve );
use Koha::Database;
use Koha::DateUtils qw( dt_from_string output_pref );
return unless $borrowernumber and can_be_discharged( { borrowernumber => $borrowernumber } );
# Cancel reserves
- my @reserves = GetReservesFromBorrowernumber($borrowernumber);
- for my $reserve (@reserves) {
- CancelReserve( { reserve_id => $reserve->{reserve_id} } );
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ my $holds = $patron->holds;
+ while ( my $hold = $holds->next ) {
+ CancelReserve( { reserve_id => $hold->reserve_id } );
}
# Debar the member
use Koha::AuthorisedValues;
use Koha::DateUtils;
use Koha::Calendar;
-use Koha::Checkouts;
use Koha::BiblioFrameworks;
+use Koha::Checkouts;
+use Koha::Patrons;
my $query = new CGI;
if (C4::Context->preference("WaitingNotifyAtCheckin") ) {
#Check for waiting holds
- my @reserves = GetReservesFromBorrowernumber($borrower->{'borrowernumber'});
- my $waiting_holds = 0;
- foreach my $num_res (@reserves) {
- if ( $num_res->{'found'} eq 'W' && $num_res->{'branchcode'} eq $userenv_branch) {
- $waiting_holds++;
- }
- }
+ my $patron = Koha::Patrons->find( $borrower->{borrowernumber} );
+ my $waiting_holds = $patron->holds->search({ found => 'W', branchcode => $userenv_branch })->count;
if ($waiting_holds > 0) {
$template->param(
waiting_holds => $waiting_holds,
use C4::Letters;
use Koha::Patron::Discharge;
use Koha::Patron::Images;
+use Koha::Patrons;
use Koha::DateUtils;
});
# Getting reserves
- my @reserves = GetReservesFromBorrowernumber($borrowernumber);
- my $has_reserves = scalar(@reserves);
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ my $holds = $patron->holds;
+ my $has_reserves = $holds->count;
# Generating discharge if needed
if ( $input->param('discharge') and $can_be_discharged ) {
if ( $query->param('place_reserve') ) {
my $reserve_cnt = 0;
if ($maxreserves) {
- $reserve_cnt = GetReservesFromBorrowernumber( $borrowernumber );
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ $reserve_cnt = $patron->holds->count;
}
# List is composed of alternating biblio/item/branch
);
}
-if ( Koha::Patrons->find( $borrowernumber )->is_debarred ) {
+my $patron = Koha::Patrons->find( $borrowernumber );
+if ( $patron->is_debarred ) {
$noreserves = 1;
$template->param(
message => 1,
);
}
-my @reserves = GetReservesFromBorrowernumber( $borrowernumber );
-my $reserves_count = scalar(@reserves);
-$template->param( RESERVES => \@reserves );
+my $holds = $patron->holds;
+my $reserves_count = $holds->count;
+$template->param( RESERVES => $holds->unblessed );
if ( $maxreserves && ( $reserves_count >= $maxreserves ) ) {
$template->param( message => 1 );
$noreserves = 1;
- $template->param( too_many_reserves => scalar(@reserves));
+ $template->param( too_many_reserves => $holds->count );
}
unless ( $noreserves ) {
use Koha::DateUtils qw( dt_from_string output_pref );
use Koha::Biblios;
use Koha::Holds;
+use Koha::Patrons;
BEGIN {
use FindBin;
$hold->set({ found => 'W'})->store();
is( Koha::Holds->waiting()->count(), 1, "Koha::Holds->waiting returns waiting holds" );
-my ( $reserve ) = GetReservesFromBorrowernumber($borrowernumbers[0]);
-ok( $reserve->{'borrowernumber'} eq $borrowernumbers[0], "Test GetReservesFromBorrowernumber()");
+my $patron = Koha::Patrons->find( $borrowernumbers[0] );
+$holds = $patron->holds;
+is( $holds->next->borrowernumber, $borrowernumbers[0], "Test Koha::Patron->holds");
ok( GetReserveCount( $borrowernumbers[0] ), "Test GetReserveCount()" );
suspend_until => output_pref( { dt => dt_from_string( "2013-01-01", "iso" ), dateonly => 1 } ),
});
-$reserve = GetReserve( $reserve_id );
+my $reserve = GetReserve( $reserve_id );
ok( $reserve->{'priority'} eq '4', "Test GetReserve(), priority changed correctly" );
ok( $reserve->{'suspend'}, "Test GetReserve(), suspend hold" );
is( $reserve->{'suspend_until'}, '2013-01-01 00:00:00', "Test GetReserve(), suspend until date" );
my $checkitem,
my $found,
);
-( $reserve ) = GetReservesFromBorrowernumber($borrowernumber);
+$patron = Koha::Patrons->find( $borrowernumber );
+$holds = $patron->holds;
my $reserveid = C4::Reserves::GetReserveId(
{
biblionumber => $biblionumber,
borrowernumber => $borrowernumber
}
);
-is( $reserveid, $reserve->{reserve_id}, "Test GetReserveId" );
+is( $reserveid, $holds->next->reserve_id, "Test GetReserveId" );
ModReserveMinusPriority( $itemnumber, $reserve->{'reserve_id'} );
-( $reserve ) = GetReservesFromBorrowernumber($borrowernumber);
-ok( $reserve->{'itemnumber'} eq $itemnumber, "Test ModReserveMinusPriority()" );
+$holds = $patron->holds;
+is( $holds->next->itemnumber, $itemnumber, "Test ModReserveMinusPriority()" );
my $reserve2 = GetReserveInfo( $reserve->{'reserve_id'} );