]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/SIP/Transaction/Checkout.pm
Whitespace. gah.
[working/Evergreen.git] / Open-ILS / src / perlmods / OpenILS / SIP / Transaction / Checkout.pm
1 #
2 # An object to handle checkout status
3 #
4
5 package OpenILS::SIP::Transaction::Checkout;
6
7 use warnings;
8 use strict;
9
10 use POSIX qw(strftime);
11
12 use OpenILS::SIP;
13 use OpenILS::SIP::Transaction;
14 use OpenILS::SIP::Msg qw/:const/;
15 use Sys::Syslog qw(syslog);
16
17 use OpenILS::Application::AppUtils;
18 my $U = 'OpenILS::Application::AppUtils';
19
20
21 our @ISA = qw(OpenILS::SIP::Transaction);
22
23 # Most fields are handled by the Transaction superclass
24 my %fields = (
25               security_inhibit => 0,
26               due              => undef,
27               renew_ok         => 0,
28               );
29
30 sub new {
31          my $class = shift;
32
33     my $self = $class->SUPER::new(@_);
34
35     my $element;
36
37         foreach $element (keys %fields) {
38                 $self->{_permitted}->{$element} = $fields{$element};
39         }
40
41     @{$self}{keys %fields} = values %fields;
42          
43     return bless $self, $class;
44 }
45
46
47 # if this item is already checked out to the requested patron,
48 # renew the item and set $self->renew_ok to true.  
49 # XXX if it's a renewal and the renewal is not permitted, set 
50 # $self->screen_msg("Item on Hold for Another User"); (or somesuch)
51 # XXX Set $self->ok(0) on any errors
52 sub do_checkout {
53         my $self = shift;
54         my $is_renew = shift || 0;
55
56         $self->ok(0); 
57
58         my $args = { 
59                 barcode => $self->{item}->id, 
60                 patron_barcode => $self->{patron}->id
61         };
62
63         my $resp;
64
65         if ($is_renew) {
66                 $resp = $U->simplereq(
67                         'open-ils.circ',
68                         'open-ils.circ.renew', $self->{authtoken},
69                         { barcode => $self->item->id, patron_barcode => $self->patron->id });
70         } else {
71                 $resp = $U->simplereq(
72                         'open-ils.circ',
73                         'open-ils.circ.checkout.permit', 
74                         $self->{authtoken}, $args );
75
76                 $resp = [$resp] unless ref $resp eq 'ARRAY';
77
78                 my $key;
79
80                 syslog('LOG_DEBUG', "OILS: Checkout permit returned event: " . OpenSRF::Utils::JSON->perl2JSON($resp));
81
82                 if( @$resp == 1 and ! $U->event_code($$resp[0]) ) {
83                         $key = $$resp[0]->{payload};
84                         syslog('LOG_INFO', "OILS: circ permit key => $key");
85
86                 } else {
87
88                         # We got one or more non-success events
89                         $self->screen_msg('');
90                         for my $r (@$resp) {
91
92                                 if( my $code = $U->event_code($resp) ) {
93                                         my $txt = $resp->{textcode};
94                                         syslog('LOG_INFO', "OILS: Checkout permit failed with event $code : $txt");
95
96                                         if( $txt eq 'OPEN_CIRCULATION_EXISTS' ) {
97                                                 $self->screen_msg(OILS_SIP_MSG_CIRC_EXISTS);
98                                                 return 0;
99                                         } else {
100                                                 $self->screen_msg(OILS_SIP_MSG_CIRC_PERMIT_FAILED);
101                                         }
102                                 }
103                         }
104                         return 0;
105                 }
106
107                 # --------------------------------------------------------------------
108                 # Now do the actual checkout
109                 # --------------------------------------------------------------------
110
111                 $args = { 
112                         permit_key              => $key, 
113                         patron_barcode => $self->{patron}->id, 
114                         barcode                 => $self->{item}->id
115                 };
116
117                 $resp = $U->simplereq(
118                         'open-ils.circ',
119                         'open-ils.circ.checkout', $self->{authtoken}, $args );
120         }
121
122         syslog('LOG_INFO', "OILS: Checkout returned event: " . OpenSRF::Utils::JSON->perl2JSON($resp));
123
124         # XXX Check for events
125         if( $resp ) {
126
127                 if( my $code = $U->event_code($resp) ) {
128                         my $txt = $resp->{textcode};
129                         syslog('LOG_INFO', "OILS: Checkout failed with event $code : $txt");
130                         $self->screen_msg('Checkout failed.  Please contact a librarian');
131                         return 0; 
132                 }
133
134                 syslog('LOG_INFO', "OILS: Checkout succeeded");
135
136                 my $circ = $resp->{payload}->{circ};
137                 $self->{'due'} = OpenILS::SIP->format_date($circ->due_date, 'due');
138                 $self->ok(1);
139
140                 return 1;
141         }
142
143         return 0;
144 }
145
146
147
148 1;