]> git.evergreen-ils.org Git - working/NCIPServer.git/blob - lib/NCIP/ILS/Koha.pm
Continuing on with the AcceptItem handler
[working/NCIPServer.git] / lib / NCIP / ILS / Koha.pm
1 #
2 #===============================================================================
3 #
4 #         FILE: Koha.pm
5 #
6 #  DESCRIPTION:
7 #
8 #        FILES: ---
9 #         BUGS: ---
10 #        NOTES: ---
11 #       AUTHOR: Chris Cormack (rangi), chrisc@catalyst.net.nz
12 # ORGANIZATION: Koha Development Team
13 #      VERSION: 1.0
14 #      CREATED: 05/11/13 11:14:09
15 #     REVISION: ---
16 #===============================================================================
17 package NCIP::ILS::Koha;
18
19 use Modern::Perl;
20 use Object::Tiny qw{ name };
21
22 use C4::Members qw{ GetMemberDetails };
23 use C4::Circulation qw { AddReturn CanBookBeIssued AddIssue };
24 use C4::Context;
25 use C4::Items qw { GetItem };
26 use C4::Reserves qw {CanBookBeReserved AddReserve GetReservesFromItemnumber};
27
28 sub itemdata {
29     my $self     = shift;
30     my $barcode  = shift;
31     my $itemdata = GetItem( undef, $barcode );
32     if ($itemdata) {
33         return ( $itemdata, undef );
34     }
35     else {
36         return ( undef, 1 );    # item not found error
37     }
38 }
39
40 sub userdata {
41     my $self     = shift;
42     my $userid   = shift;
43     my $userdata = GetMemberDetails( undef, $userid );
44     return $userdata;
45 }
46
47 sub checkin {
48     my $self       = shift;
49     my $barcode    = shift;
50     my $branch     = shift;
51     my $exemptfine = undef;
52     my $dropbox    = undef;
53     my ( $success, $messages, $issue, $borrower ) =
54       AddReturn( $barcode, $branch, $exemptfine, $dropbox );
55     my $result = {
56         success         => $success,
57         messages        => $messages,
58         iteminformation => $issue,
59         borrower        => $borrower
60     };
61     return $result;
62 }
63
64 sub checkout {
65     my $self     = shift;
66     my $userid   = shift;
67     my $barcode  = shift;
68     my $borrower = GetMemberDetails( undef, $userid );
69     my $error;
70     my $confirm;
71     my @USERENV = (
72         1,
73         'test',
74         'MASTERTEST',
75         'Test',
76         'Test',
77         'AS',    #branchcode need to set this properly
78         'Auckland',
79         0,
80     );
81
82     C4::Context->_new_userenv('DUMMY_SESSION_ID');
83     C4::Context->set_userenv(@USERENV);
84
85     if ($borrower) {
86
87         ( $error, $confirm ) = CanBookBeIssued( $borrower, $barcode );
88
89   #( $issuingimpossible, $needsconfirmation ) =  CanBookBeIssued( $borrower,
90   #                      $barcode, $duedatespec, $inprocess, $ignore_reserves );
91         if (%$error) {
92
93             # Can't issue item, return error hash
94             return ( 1, $error );
95         }
96         elsif (%$confirm) {
97             return ( 1, $confirm );
98         }
99         else {
100             my $datedue = AddIssue( $borrower, $barcode );
101             return ( 0, undef, $datedue );    #successfully issued
102         }
103     }
104     else {
105         $error->{'badborrower'} = 1;
106         return ( 1, $error );
107     }
108 }
109
110 sub renew {
111     my $self     = shift;
112     my $barcode  = shift;
113     my $userid   = shift;
114     my $borrower = GetMemberDetails( undef, $userid );
115     if ($borrower) {
116         my $datedue = AddRenewal( $barcode, $borrower->{'borrowernumber'} );
117         my $result = {
118             success => 1,
119             datedue => $datedue
120         };
121         return $result;
122
123     }
124     else {
125         #handle stuff here
126     }
127 }
128
129 sub request {
130     my $self           = shift;
131     my $biblionumber   = shift;
132     my $borrowernumber = shift;
133     if ( CanBookBeReserved( $borrowernumber, $biblionumber ) ) {
134
135         # Add reserve here
136         return ( undef, "Requested" );
137     }
138     else {
139         return ( 1, "Book can not be requested" );
140     }
141 }
142
143 sub acceptitem {
144     my $self    = shift;
145     my $barcode = shift;
146     my $result;
147
148     # find hold and get branch for that, check in there
149     my $itemdata = GetItem( undef, $barcode );
150     my ( $reservedate, $borrowernumber, $branchcode, $reserve_id, $wait ) =
151       GetReservesFromItemnumber( $itemdata->{'itemnumber'} );
152     unless ($reserve_id) {
153         $result = { success => 0, messages => { NO_HOLD => 1 } };
154         return $result;
155     }
156     $result = $self->checkin( $barcode, $branchcode );
157     return $result;
158 }
159 1;