Continuing work on the AcceptItem handler
[working/NCIPServer.git] / lib / NCIP / Handler / AcceptItem.pm
1 package NCIP::Handler::AcceptItem;
2
3 =head1
4
5   NCIP::Handler::AcceptItem
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  = $self->xpc();
28         my $itemid =
29           $xpc->findnodes( '//ns:ItemId/ItemIdentifierValue', $root );
30         my ($action)  = $xpc->findnodes( '//ns:RequestedActionType', $root );
31         my ($request) = $xpc->findnodes( '//ns:RequestId',           $root );
32         my $requestagency = $xpc->find( 'ns:AgencyId', $request );
33         my $requestid = $xpc->find( '//ns:RequestIdentifierValue', $request );
34
35         # accept the item
36         my $accepted = $self->ils->acceptitem($itemid);
37         my $output;
38         my $vars;
39         my ( $from, $to ) = $self->get_agencies($xmldoc);
40
41         # we switch these for the templates
42         # because we are responding, to becomes from, from becomes to
43         $vars->{'fromagency'} = $to;
44         $vars->{'toagency'}   = $from;
45
46         $vars->{'messagetype'} = 'AcceptItemResponse';
47         $vars->{'barcode'}     = $itemid;
48         if ( !$accepted->{success} ) {
49             $vars->{'processingerror'}        = 1;
50             $vars->{'processingerrortype'}    = $accepted->{'messages'};
51             $vars->{'processingerrorelement'} = 'UniqueItemIdentifier';
52             $output = $self->render_output( 'problem.tt', $vars );
53         }
54         else {
55             my $elements = $self->get_user_elements($xmldoc);
56             $vars->{'requestagency'} = $requestagency;
57             $vars->{'requestid'}     = $requestid;
58
59             $vars->{'elements'} = $elements;
60             $vars->{'accept'}   = $accepted;
61             $output = $self->render_output( 'response.tt', $vars );
62         }
63         return $output;
64     }
65 }
66
67 1;