Abstraction layer implementation for Transactions.
[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.01;
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                         my ($renewokay,$renewerror)= CanBookBeRenewed($borrower->{borrowernumber},$self->{item}->{itemnumber});
68                         if (! $renewokay){
69                                 $noerror = 0;
70                                 warn "cannot renew $borrower->{borrowernumber} $self->{item}->{itemnumber} $renewerror";
71                         }
72                 } else {
73                         $self->screen_msg($needsconfirmation->{$confirmation});
74                         $noerror = 0;
75                 }
76         }
77         unless ($noerror) {
78                 warn "cannot issue: " . Dumper $issuingimpossible . "\n" . $needsconfirmation;
79                 $self->ok(0);
80                 return $self;
81         }
82         # can issue
83         $debug and warn "do_checkout: calling AddIssue(\$borrower,$barcode, undef, 0)\n"
84                 # . "w/ \$borrower: " . Dumper($borrower)
85                 . "w/ C4::Context->userenv: " . Dumper(C4::Context->userenv);
86         $self->{'due'} = AddIssue( $borrower, $barcode, undef, 0 );
87         $self->ok(1);
88         return $self;
89 }
90
91 1;
92 __END__