use C4::Circulation;
use C4::Accounts;
use C4::Biblio;
-use C4::Reserves qw(AddReserve GetReservesFromBiblionumber GetReservesFromBorrowernumber CanBookBeReserved CanItemBeReserved IsAvailableForItemLevelRequest);
+use C4::Reserves qw(AddReserve CanBookBeReserved CanItemBeReserved IsAvailableForItemLevelRequest);
use C4::Context;
use C4::AuthoritiesMarc;
use XML::Simple;
use DateTime;
use C4::Auth;
use C4::Members::Attributes qw(GetBorrowerAttributes);
+use Koha::DateUtils;
+use Koha::Biblios;
+use Koha::Checkouts;
use Koha::Libraries;
+use Koha::Patrons;
=head1 NAME
} else {
my $status;
my $msg;
- my $biblioitem = ( GetBiblioItemByBiblioNumber( $id, undef ) )[0];
- if ($biblioitem) {
-
+ my $items = GetItemnumbersForBiblio($id);
+ if ($items) {
+ # Open XML
+ $out .= " <dlf:record>\n";
+ $out .= " <dlf:bibliographic id=\"" .$id. "\" />\n";
+ $out .= " <dlf:items>\n";
+ # We loop over the items to clean them
+ foreach my $itemnumber (@$items) {
+ my ( $biblionumber, $status, $msg, $location ) = _availability($itemnumber);
+ $out .= " <dlf:item id=\"" . $itemnumber . "\">\n";
+ $out .= " <dlf:simpleavailability>\n";
+ $out .= " <dlf:identifier>" . $itemnumber . "</dlf:identifier>\n";
+ $out .= " <dlf:availabilitystatus>" . $status . "</dlf:availabilitystatus>\n";
+ if ($msg) { $out .= " <dlf:availabilitymsg>" . $msg . "</dlf:availabilitymsg>\n"; }
+ if ($location) { $out .= " <dlf:location>" . $location . "</dlf:location>\n"; }
+ $out .= " </dlf:simpleavailability>\n";
+ $out .= " </dlf:item>\n";
+ }
+ # Close XML
+ $out .= " </dlf:items>\n";
+ $out .= " </dlf:record>\n";
} else {
$status = "unknown";
$msg = "Error: could not retrieve availability for this ID";
}
- $out .= " <dlf:record>\n";
- $out .= " <dlf:bibliographic id=\"" . $id . "\" />\n";
- $out .= " <dlf:simpleavailability>\n";
- $out .= " <dlf:identifier>" . $id . "</dlf:identifier>\n";
- $out .= " <dlf:availabilitystatus>" . $status . "</dlf:availabilitystatus>\n";
- $out .= " <dlf:availabilitymsg>" . $msg . "</dlf:availabilitymsg>\n";
- $out .= " </dlf:simpleavailability>\n";
- $out .= " </dlf:record>\n";
}
}
$out .= "</dlf:collection>\n";
}
my $embed_items = 1;
- my $record = GetMarcBiblio($biblionumber, $embed_items);
+ my $record = GetMarcBiblio({
+ biblionumber => $biblionumber,
+ embed_items => $embed_items });
if ($record) {
$biblioitem->{marcxml} = $record->as_xml_record();
}
# Get most of the needed data
my $biblioitemnumber = $biblioitem->{'biblioitemnumber'};
- my $reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber });
+ my $biblio = Koha::Biblios->find( $biblionumber );
+ my $holds = $biblio->current_holds->unblessed;
my $issues = GetBiblioIssues($biblionumber);
my $items = GetItemsByBiblioitemnumber($biblioitemnumber);
# Hashref building...
$biblioitem->{'items'}->{'item'} = $items;
- $biblioitem->{'reserves'}->{'reserve'} = $reserves;
+ $biblioitem->{'reserves'}->{'reserve'} = $holds;
$biblioitem->{'issues'}->{'issue'} = $issues;
push @records, $biblioitem;
sub LookupPatron {
my ($cgi) = @_;
- # Get the borrower...
- my $borrower = GetMember($cgi->param('id_type') => $cgi->param('id'));
- if ( not $borrower->{'borrowernumber'} ) {
+ my $patrons = Koha::Patrons->search( { $cgi->param('id_type') => $cgi->param('id') } );
+ unless ( $patrons->count ) {
return { message => 'PatronNotFound' };
}
- # Build the hashref
- my $patron->{'id'} = $borrower->{'borrowernumber'};
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
-
- # ...and return his ID
- return $patron;
+ return { id => $patrons->next->borrowernumber };
}
=head2 AuthenticatePatron
my ($status, $cardnumber, $userid) = C4::Auth::checkpw( C4::Context->dbh, $username, $password );
if ( $status ) {
# Get the borrower
- my $borrower = GetMember( cardnumber => $cardnumber );
- my $patron->{'id'} = $borrower->{'borrowernumber'};
- return $patron;
+ my $patron = Koha::Patrons->find( { cardnumber => $cardnumber } );
+ return { id => $patron->borrowernumber };
}
else {
return { code => 'PatronNotFound' };
# Get Member details
my $borrowernumber = $cgi->param('patron_id');
- my $borrower = GetMemberDetails( $borrowernumber );
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ return { code => 'PatronNotFound' } unless $patron;
# Cleaning the borrower hashref
- $borrower->{'charges'} = $borrower->{'flags'}->{'CHARGES'}->{'amount'};
+ my $borrower = $patron->unblessed;
+ my $flags = C4::Members::patronflags( $borrower );
+ $borrower->{'charges'} = $flags->{'CHARGES'}->{'amount'};
my $library = Koha::Libraries->find( $borrower->{branchcode} );
$borrower->{'branchname'} = $library ? $library->branchname : '';
- delete $borrower->{'flags'};
delete $borrower->{'userid'};
delete $borrower->{'password'};
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 ( $item, $biblio, $biblioitem ) = ( {}, {}, {} );
# Get additional informations
- my $item = GetBiblioFromItemNumber( $reserve->{'itemnumber'}, undef );
- my $library = Koha::Libraries->find( $reserve->{branchcode} );
+ if ( $hold->itemnumber ) { # item level holds
+ $item = Koha::Items->find( $hold->itemnumber );
+ $biblio = $item->biblio;
+ $biblioitem = $biblio->biblioitem;
+
+ # Remove unwanted fields
+ $item = $item->unblessed;
+ delete $item->{more_subfields_xml};
+ $biblio = $biblio->unblessed;
+ $biblioitem = $biblioitem->unblessed;
+ }
+
+ # Add additional fields
+ my $unblessed_hold = $hold->unblessed;
+ $unblessed_hold->{item} = { %$item, %$biblio, %$biblioitem };
+ my $library = Koha::Libraries->find( $hold->branchcode );
my $branchname = $library ? $library->branchname : '';
+ $unblessed_hold->{branchname} = $branchname;
+ $biblio = Koha::Biblios->find( $hold->biblionumber ); # Should be $hold->get_biblio
+ $unblessed_hold->{title} = $biblio ? $biblio->title : ''; # Just in case, but should not be needed
- # Remove unwanted fields
- delete $item->{'marcxml'};
- delete $item->{'more_subfields_xml'};
+ push @{ $borrower->{holds}{hold} }, $unblessed_hold;
- # Add additional fields
- $reserve->{'item'} = $item;
- $reserve->{'branchname'} = $branchname;
- $reserve->{'title'} = GetBiblio( $reserve->{'biblionumber'} )->{'title'};
}
- $borrower->{'holds'}->{'hold'} = \@reserves;
}
# Issues management
# Get Member details
my $borrowernumber = $cgi->param('patron_id');
- my $borrower = GetMemberDetails( $borrowernumber );
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ return { code => 'PatronNotFound' } unless $patron;
# Return the results
return {
- type => $$borrower{categorycode},
+ type => $patron->categorycode,
status => 0, # TODO
- expiry => $$borrower{dateexpiry},
+ expiry => $patron->dateexpiry,
};
}
a borrowernumber
- item_id (Required)
an itemnumber
+
=cut
sub GetServices {
# Get the member, or return an error code if not found
my $borrowernumber = $cgi->param('patron_id');
- my $borrower = GetMemberDetails( $borrowernumber );
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ return { code => 'PatronNotFound' } unless $patron;
+ my $borrower = $patron->unblessed;
# 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';
# Get borrower infos or return an error code
my $borrowernumber = $cgi->param('patron_id');
- my $borrower = GetMemberDetails( $borrowernumber );
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ return { code => 'PatronNotFound' } unless $patron;
# Get the item, or return an error code
my $itemnumber = $cgi->param('item_id');
my @renewal = CanBookBeRenewed( $borrowernumber, $itemnumber );
if ( $renewal[0] ) { AddRenewal( $borrowernumber, $itemnumber ); }
- my $issue = GetItemIssue($itemnumber);
+ my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return; # FIXME should be handled
# Hashref building
my $out;
- $out->{'renewals'} = $issue->{'renewals'};
- $out->{date_due} = $issue->{date_due}->strftime('%Y-%m-%d %H:%S');
+ $out->{'renewals'} = $issue->renewals;
+ $out->{date_due} = dt_from_string($issue->date_due)->strftime('%Y-%m-%d %H:%S');
$out->{'success'} = $renewal[0];
$out->{'error'} = $renewal[1];
# Get the borrower or return an error code
my $borrowernumber = $cgi->param('patron_id');
- my $borrower = GetMemberDetails( $borrowernumber );
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ return { code => 'PatronNotFound' } unless $patron;
# Get the biblio record, or return an error code
my $biblionumber = $cgi->param('bib_id');
- my $biblio = GetBiblio( $biblionumber );
- return { code => 'RecordNotFound' } unless $$biblio{biblionumber};
-
- my $title = $$biblio{title};
+ my $biblio = Koha::Biblios->find( $biblionumber );
+ return { code => 'RecordNotFound' } unless $biblio;
+
+ my $title = $biblio ? $biblio->title : '';
# Check if the biblio can be reserved
return { code => 'NotHoldable' } unless CanBookBeReserved( $borrowernumber, $biblionumber ) eq 'OK';
$branch = $cgi->param('pickup_location');
return { code => 'LocationNotFound' } unless Koha::Libraries->find($branch);
} else { # if the request provide no branch, use the borrower's branch
- $branch = $$borrower{branchcode};
+ $branch = $patron->branchcode;
}
# Add the reserve
# Get the borrower or return an error code
my $borrowernumber = $cgi->param('patron_id');
- my $borrower = GetMemberDetails( $borrowernumber );
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ return { code => 'PatronNotFound' } unless $patron;
# Get the biblio or return an error code
my $biblionumber = $cgi->param('bib_id');
- my $biblio = GetBiblio($biblionumber);
- return { code => 'RecordNotFound' } unless $$biblio{biblionumber};
+ my $biblio = Koha::Biblios->find( $biblionumber );
+ return { code => 'RecordNotFound' } unless $biblio;
- my $title = $$biblio{title};
+ my $title = $biblio ? $biblio->title : '';
# Get the item or return an error code
my $itemnumber = $cgi->param('item_id');
return { code => 'RecordNotFound' } unless $$item{itemnumber};
# If the biblio does not match the item, return an error code
- return { code => 'RecordNotFound' } if $$item{biblionumber} ne $$biblio{biblionumber};
+ return { code => 'RecordNotFound' } if $$item{biblionumber} ne $biblio->biblionumber;
# Check for item disponibility
my $canitembereserved = C4::Reserves::CanItemBeReserved( $borrowernumber, $itemnumber );
$branch = $cgi->param('pickup_location');
return { code => 'LocationNotFound' } unless Koha::Libraries->find($branch);
} else { # if the request provide no branch, use the borrower's branch
- $branch = $$borrower{branchcode};
+ $branch = $patron->branchcode;
}
# Add the reserve
# Get the borrower or return an error code
my $borrowernumber = $cgi->param('patron_id');
- my $borrower = GetMemberDetails( $borrowernumber );
- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ return { code => 'PatronNotFound' } unless $patron;
# Get the reserve or return an error code
my $reserve_id = $cgi->param('item_id');
- my $reserve = C4::Reserves::GetReserve($reserve_id);
- return { code => 'RecordNotFound' } unless $reserve;
- return { code => 'RecordNotFound' } unless ($reserve->{borrowernumber} == $borrowernumber);
+ my $hold = Koha::Holds->find( $reserve_id );
+ return { code => 'RecordNotFound' } unless $hold;
+ return { code => 'RecordNotFound' } unless ($hold->borrowernumber == $borrowernumber);
- C4::Reserves::CancelReserve({reserve_id => $reserve_id});
+ $hold->cancel;
return { code => 'Canceled' };
}