use C4::Reserves qw(AddReserve CancelReserve GetReservesFromBiblionumber GetReservesFromBorrowernumber CanBookBeReserved CanItemBeReserved);
use C4::Context;
use C4::AuthoritiesMarc;
-use C4::ILSDI::Utility;
use XML::Simple;
use HTML::Entities;
use CGI;
foreach my $id ( split( / /, $cgi->param('id') ) ) {
if ( $cgi->param('id_type') eq "item" ) {
- my ( $biblionumber, $status, $msg, $location ) = Availability($id);
+ my ( $biblionumber, $status, $msg, $location ) = _availability($id);
$out .= " <dlf:record>\n";
$out .= " <dlf:bibliographic id=\"" . ( $biblionumber || $id ) . "\" />\n";
# Get most of the needed data
my $biblioitemnumber = $biblioitem->{'biblioitemnumber'};
- my @reserves = GetReservesFromBiblionumber( $biblionumber, undef, undef );
+ my $reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber });
my $issues = GetBiblioIssues($biblionumber);
my $items = GetItemsByBiblioitemnumber($biblioitemnumber);
# Hashref building...
$biblioitem->{'items'}->{'item'} = $items;
- $biblioitem->{'reserves'}->{'reserve'} = $reserves[1];
+ $biblioitem->{'reserves'}->{'reserve'} = $reserves;
$biblioitem->{'issues'}->{'issue'} = $issues;
push @records, $biblioitem;
}
# Add the reserve
- # $branch, $borrowernumber, $biblionumber, $constraint, $bibitems, $priority, $notes, $title, $checkitem, $found
- AddReserve( $branch, $borrowernumber, $biblionumber, 'a', undef, 0, undef, $title, undef, undef );
+ # $branch, $borrowernumber, $biblionumber,
+ # $constraint, $bibitems, $priority, $resdate, $expdate, $notes,
+ # $title, $checkitem, $found
+ my $priority= C4::Reserves::CalculatePriority( $biblionumber );
+ AddReserve( $branch, $borrowernumber, $biblionumber, 'a', undef, $priority, undef, undef, undef, $title, undef, undef );
# Hashref building
my $out;
my $canbookbereserved = C4::Reserves::CanBookBeReserved( $borrowernumber, $biblionumber );
return { code => 'NotHoldable' } unless $canbookbereserved and $canitembereserved;
- my $branch;
-
# Pickup branch management
+ my $branch;
if ( $cgi->param('pickup_location') ) {
$branch = $cgi->param('pickup_location');
my $branches = GetBranches();
$branch = $$borrower{branchcode};
}
- my $rank;
- my $found;
-
- # Get rank and found
- $rank = '0' unless C4::Context->preference('ReservesNeedReturns');
- if ( $item->{'holdingbranch'} eq $branch ) {
- $found = 'W' unless C4::Context->preference('ReservesNeedReturns');
- }
-
# Add the reserve
- # $branch,$borrowernumber,$biblionumber,$constraint,$bibitems,$priority,$resdate,$expdate,$notes,$title,$checkitem,$found
- AddReserve( $branch, $borrowernumber, $biblionumber, 'a', undef, $rank, '', '', '', $title, $itemnumber, $found );
+ # $branch, $borrowernumber, $biblionumber,
+ # $constraint, $bibitems, $priority, $resdate, $expdate, $notes,
+ # $title, $checkitem, $found
+ my $priority= C4::Reserves::CalculatePriority( $biblionumber );
+ AddReserve( $branch, $borrowernumber, $biblionumber, 'a', undef, $priority, undef, undef, undef, $title, $itemnumber, undef );
# Hashref building
my $out;
return { code => 'Canceled' };
}
+=head2 _availability
+
+Returns, for an itemnumber, an array containing availability information.
+
+ my ($biblionumber, $status, $msg, $location) = _availability($id);
+
+=cut
+
+sub _availability {
+ my ($itemnumber) = @_;
+ my $item = GetItem( $itemnumber, undef, undef );
+
+ if ( not $item->{'itemnumber'} ) {
+ return ( undef, 'unknown', 'Error: could not retrieve availability for this ID', undef );
+ }
+
+ my $biblionumber = $item->{'biblioitemnumber'};
+ my $location = GetBranchName( $item->{'holdingbranch'} );
+
+ if ( $item->{'notforloan'} ) {
+ return ( $biblionumber, 'not available', 'Not for loan', $location );
+ } elsif ( $item->{'onloan'} ) {
+ return ( $biblionumber, 'not available', 'Checked out', $location );
+ } elsif ( $item->{'itemlost'} ) {
+ return ( $biblionumber, 'not available', 'Item lost', $location );
+ } elsif ( $item->{'wthdrawn'} ) {
+ return ( $biblionumber, 'not available', 'Item withdrawn', $location );
+ } elsif ( $item->{'damaged'} ) {
+ return ( $biblionumber, 'not available', 'Item damaged', $location );
+ } else {
+ return ( $biblionumber, 'available', undef, $location );
+ }
+}
+
1;