]> git.evergreen-ils.org Git - working/NCIPServer.git/blob - lib/NCIP/Handler/RequestItem.pm
Fix lookupuser problem reporting in Evergreen driver.
[working/NCIPServer.git] / lib / NCIP / Handler / RequestItem.pm
1 package NCIP::Handler::RequestItem;
2
3 =head1
4
5   NCIP::Handler::RequestItem
6
7 =head1 SYNOPSIS
8
9     Not to be called directly, NCIP::Handler will pick the appropriate Handler 
10     object, given a message type
11
12 =head1 FUNCTIONS
13
14 =cut
15
16 use Modern::Perl;
17
18 use NCIP::Handler;
19
20 our @ISA = qw(NCIP::Handler);
21
22 sub handle {
23     my $self   = shift;
24     my $xmldoc = shift;
25     if ($xmldoc) {
26         my $root = $xmldoc->documentElement();
27         my $xpc  = XML::LibXML::XPathContext->new;
28         $xpc->registerNs( 'ns', $self->namespace() );
29
30         my ($userid) = $xpc->findnodes( '//ns:UserIdentifierValue', $root );
31         $userid = $userid->textContent() if $userid;
32
33         my ($itemid) = $xpc->findnodes( '//ns:ItemIdentifierValue', $root );
34         $itemid = $itemid->textContent() if $itemid;
35         my ($biblionumber) =
36           $xpc->findnodes( '//ns:BibliographicRecordIdentifier', $root );
37         $biblionumber = $biblionumber->textContent() if $biblionumber;
38
39         # request the item
40         my $result = $self->ils->request( $userid, $itemid, $biblionumber );
41         my $vars;
42         my $output;
43         $vars->{'barcode'}     = $itemid;
44         $vars->{'messagetype'} = 'RequestItemResponse';
45         if ( !$result->{'success'} ) {
46             $vars->{'processingerror'}        = 1;
47             $vars->{'processingerrortype'}    = $result->{messages};
48             $vars->{'processingerrorelement'} = 'UniqueItemIdentifier';
49             $output = $self->render_output( 'problem.tt', $vars );
50         }
51         else {
52             my $elements = $self->get_user_elements($xmldoc);
53             $vars->{'elements'} = $elements;
54
55             $vars->{'messages'} = $result->{messages};
56             $output = $self->render_output( 'response.tt', $vars );
57         }
58         return $output;
59     }
60 }
61
62 1;