]> git.koha-community.org Git - koha.git/blob - C4/SIP/ILS/Transaction/Checkout.pm
SIP Holds processing on checkout
[koha.git] / C4 / SIP / ILS / Transaction / Checkout.pm
1 #
2 # An object to handle checkout status
3 #
4
5 package ILS::Transaction::Checkout;
6
7 use warnings;
8 use strict;
9
10 use POSIX qw(strftime);
11 use Sys::Syslog qw(syslog);
12 use Data::Dumper;
13 use CGI;
14
15 use ILS;
16 use ILS::Transaction;
17
18 use C4::Context;
19 use C4::Circulation;
20 use C4::Members;
21
22 use vars qw($VERSION @ISA $debug);
23
24 BEGIN {
25         $VERSION = 1.02;
26         @ISA = qw(ILS::Transaction);
27         $debug = 0;
28 }
29
30 # Most fields are handled by the Transaction superclass
31 my %fields = (
32               security_inhibit => 0,
33               due              => undef,
34               renew_ok         => 0,
35         );
36
37 sub new {
38     my $class = shift;;
39     my $self = $class->SUPER::new();
40     my $element;
41     foreach $element (keys %fields) {
42                 $self->{_permitted}->{$element} = $fields{$element};
43     }
44     @{$self}{keys %fields} = values %fields;
45 #    $self->{'due'} = time() + (60*60*24*14); # two weeks hence
46         $debug and warn "new ILS::Transaction::Checkout : " . Dumper $self;
47     return bless $self, $class;
48 }
49
50 sub do_checkout {
51         my $self = shift;
52         syslog('LOG_DEBUG', "ILS::Transaction::Checkout performing checkout...");
53         my $barcode        = $self->{item}->id;
54         my $patron_barcode = $self->{patron}->id;
55         $debug and warn "do_checkout: patron (" . $patron_barcode . ")";
56         my $borrower = GetMember( $patron_barcode, 'cardnumber' );
57         $debug and warn "do_checkout borrower: . " . Dumper $borrower;
58         my ($issuingimpossible,$needsconfirmation) = CanBookBeIssued( $borrower, $barcode );
59         my $noerror=1;
60         foreach ( keys %$issuingimpossible ) {
61                 # do something here so we pass these errors
62                 $self->screen_msg($_ . ': ' . $issuingimpossible->{$_});
63                 $noerror = 0;
64         }
65         foreach my $confirmation ( keys %$needsconfirmation ) {
66                 if ($confirmation eq 'RENEW_ISSUE'){
67                         $self->screen_msg("Item already checked out to you: renewing item.");
68                 } elsif ($confirmation eq 'RESERVED' or $confirmation eq 'RESERVE_WAITING') {
69             my $x = $self->{item}->available($patron_barcode);
70             if ($x) {
71                 $self->screen_msg("Item was reserved for you.");
72             } else {
73                 $self->screen_msg("Item is reserved for another patron.");
74                 $noerror = 0;
75             }
76                 } elsif ($confirmation eq 'ISSUED_TO_ANOTHER') {
77             $self->screen_msg("Item already checked out to another patron.  Please return item for check-in.");
78                         $noerror = 0;
79                 } elsif ($confirmation eq 'DEBT') {     # don't do anything, it's the minor debt, and alarms fire elsewhere
80         } else {
81                         $self->screen_msg($needsconfirmation->{$confirmation});
82                         $noerror = 0;
83                 }
84         }
85         unless ($noerror) {
86                 warn "cannot issue: " . Dumper($issuingimpossible) . "\n" . Dumper($needsconfirmation);
87                 $self->ok(0);
88                 return $self;
89         }
90         # can issue
91         $debug and warn "do_checkout: calling AddIssue(\$borrower,$barcode, undef, 0)\n"
92                 # . "w/ \$borrower: " . Dumper($borrower)
93                 . "w/ C4::Context->userenv: " . Dumper(C4::Context->userenv);
94         $self->{'due'} = AddIssue( $borrower, $barcode, undef, 0 );
95         $self->ok(1);
96         return $self;
97 }
98
99 1;
100 __END__