2 # An object to handle checkout status
5 package OpenILS::SIP::Transaction::Checkout;
10 use POSIX qw(strftime);
13 use OpenILS::SIP::Transaction;
14 use OpenILS::SIP::Msg qw/:const/;
15 use Sys::Syslog qw(syslog);
17 use OpenILS::Application::AppUtils;
18 my $U = 'OpenILS::Application::AppUtils';
21 our @ISA = qw(OpenILS::SIP::Transaction);
23 # Most fields are handled by the Transaction superclass
25 security_inhibit => 0,
33 my $self = $class->SUPER::new(@_);
37 foreach $element (keys %fields) {
38 $self->{_permitted}->{$element} = $fields{$element};
41 @{$self}{keys %fields} = values %fields;
43 return bless $self, $class;
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
54 my $is_renew = shift || 0;
59 barcode => $self->{item}->id,
60 patron_barcode => $self->{patron}->id
66 $resp = $U->simplereq(
68 'open-ils.circ.renew', $self->{authtoken},
69 { barcode => $self->item->id, patron_barcode => $self->patron->id });
71 $resp = $U->simplereq(
73 'open-ils.circ.checkout.permit',
74 $self->{authtoken}, $args );
76 $resp = [$resp] unless ref $resp eq 'ARRAY';
80 syslog('LOG_DEBUG', "OILS: Checkout permit returned event: " . OpenSRF::Utils::JSON->perl2JSON($resp));
82 if( @$resp == 1 and ! $U->event_code($$resp[0]) ) {
83 $key = $$resp[0]->{payload};
84 syslog('LOG_INFO', "OILS: circ permit key => $key");
88 # We got one or more non-success events
89 $self->screen_msg('');
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");
96 if( $txt eq 'OPEN_CIRCULATION_EXISTS' ) {
97 $self->screen_msg(OILS_SIP_MSG_CIRC_EXISTS);
100 $self->screen_msg(OILS_SIP_MSG_CIRC_PERMIT_FAILED);
107 # --------------------------------------------------------------------
108 # Now do the actual checkout
109 # --------------------------------------------------------------------
113 patron_barcode => $self->{patron}->id,
114 barcode => $self->{item}->id
117 $resp = $U->simplereq(
119 'open-ils.circ.checkout', $self->{authtoken}, $args );
122 syslog('LOG_INFO', "OILS: Checkout returned event: " . OpenSRF::Utils::JSON->perl2JSON($resp));
124 # XXX Check for events
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');
134 syslog('LOG_INFO', "OILS: Checkout succeeded");
136 my $circ = $resp->{payload}->{circ};
137 $self->{'due'} = OpenILS::SIP->format_date($circ->due_date, 'due');