--- /dev/null
+package NCIP::Handler::AccpetItem;
+
+=head1
+
+ NCIP::Handler::AcceptItem
+
+=head1 SYNOPSIS
+
+ Not to be called directly, NCIP::Handler will pick the appropriate Handler
+ object, given a message type
+
+=head1 FUNCTIONS
+
+=cut
+
+use Modern::Perl;
+
+use NCIP::Handler;
+
+our @ISA = qw(NCIP::Handler);
+
+sub handle {
+ my $self = shift;
+ my $xmldoc = shift;
+ if ($xmldoc) {
+ my $root = $xmldoc->documentElement();
+ my $xpc = XML::LibXML::XPathContext->new;
+ $xpc->registerNs( 'ns', $self->namespace() );
+ my $itemid =
+ $xpc->findnodes( 'ns:AcceptItem/UniqueItemId/ItemIdentifierValue',
+ $root );
+
+ # checkin the item
+ my $accepted = $self->ils->acceptitem($itemid);
+ my $output;
+ my $vars;
+ my ( $from, $to ) = $self->get_agencies($xmldoc);
+
+ # we switch these for the templates
+ # because we are responding, to becomes from, from becomes to
+ $vars->{'fromagency'} = $to;
+ $vars->{'toagency'} = $from;
+
+ $vars->{'messagetype'} = 'AcceptItemResponse';
+ $vars->{'barcode'} = $itemid;
+ if ( !$accepted->{success} ) {
+ $vars->{'processingerror'} = 1;
+ $vars->{'processingerrortype'} = $accepted->{'messages'};
+ $vars->{'processingerrorelement'} = 'UniqueItemIdentifier';
+ $output = $self->render_output( 'problem.tt', $vars );
+ }
+ else {
+ my $elements = $self->get_user_elements($xmldoc);
+ $vars->{'elements'} = $elements;
+ $vars->{'checkin'} = $checkin;
+ $output = $self->render_output( 'response.tt', $vars );
+ }
+ return $output;
+ }
+}
+
+1;
use C4::Circulation qw { AddReturn CanBookBeIssued AddIssue };
use C4::Context;
use C4::Items qw { GetItem };
-use C4::Reserves qw {CanBookBeReserved AddReserve };
+use C4::Reserves qw {CanBookBeReserved AddReserve GetReservesFromItemnumber};
sub itemdata {
my $self = shift;
return ( 1, "Book can not be requested" );
}
}
+
+sub acceptitem {
+ my $self = shift;
+ my $barcode = shift;
+ my $result;
+
+ # find hold and get branch for that, check in there
+ my $itemdata = GetItem( undef, $barcode );
+ my ( $reservedate, $borrowernumber, $branchcode, $reserve_id, $wait ) =
+ GetReservesFromItemnumber( $itemdata->{'itemnumber'} );
+ unless ($reserve_id) {
+ $result = { success => 0, messages => 'No hold found for that item' };
+ return $result;
+ }
+ $result = $self->checkin( $barcode, $branch );
+ return $result;
+}
1;