]> git.evergreen-ils.org Git - working/NCIPServer.git/blob - lib/NCIP/ILS/Koha.pm
Doh, typo
[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 userenv {
48     my $self    = shift;
49     my @USERENV = (
50         1,
51         'test',
52         'MASTERTEST',
53         'Test',
54         'Test',
55         'AS',    #branchcode need to set this properly
56         'Auckland',
57         0,
58     );
59
60     C4::Context->_new_userenv('DUMMY_SESSION_ID');
61     C4::Context->set_userenv(@USERENV);
62     return;
63 }
64
65 sub checkin {
66     my $self       = shift;
67     my $barcode    = shift;
68     my $branch     = shift;
69     my $exemptfine = undef;
70     my $dropbox    = undef;
71     $self->userenv();
72     my ( $success, $messages, $issue, $borrower ) =
73       AddReturn( $barcode, $branch, $exemptfine, $dropbox );
74     my $result = {
75         success         => $success,
76         messages        => $messages,
77         iteminformation => $issue,
78         borrower        => $borrower
79     };
80
81     return $result;
82 }
83
84 sub checkout {
85     my $self     = shift;
86     my $userid   = shift;
87     my $barcode  = shift;
88     my $borrower = GetMemberDetails( undef, $userid );
89     my $error;
90     my $confirm;
91     $self->userenv();
92     if ($borrower) {
93
94         ( $error, $confirm ) = CanBookBeIssued( $borrower, $barcode );
95
96   #( $issuingimpossible, $needsconfirmation ) =  CanBookBeIssued( $borrower,
97   #                      $barcode, $duedatespec, $inprocess, $ignore_reserves );
98         if (%$error) {
99
100             # Can't issue item, return error hash
101             return ( 1, $error );
102         }
103         elsif (%$confirm) {
104             return ( 1, $confirm );
105         }
106         else {
107             my $datedue = AddIssue( $borrower, $barcode );
108             return ( 0, undef, $datedue );    #successfully issued
109         }
110     }
111     else {
112         $error->{'badborrower'} = 1;
113         return ( 1, $error );
114     }
115 }
116
117 sub renew {
118     my $self     = shift;
119     my $barcode  = shift;
120     my $userid   = shift;
121     my $borrower = GetMemberDetails( undef, $userid );
122     if ($borrower) {
123         my $datedue = AddRenewal( $barcode, $borrower->{'borrowernumber'} );
124         my $result = {
125             success => 1,
126             datedue => $datedue
127         };
128         return $result;
129
130     }
131     else {
132         #handle stuff here
133     }
134 }
135
136 sub request {
137     my $self           = shift;
138     my $biblionumber   = shift;
139     my $borrowernumber = shift;
140     if ( CanBookBeReserved( $borrowernumber, $biblionumber ) ) {
141
142         # Add reserve here
143         return ( undef, "Requested" );
144     }
145     else {
146         return ( 1, "Book can not be requested" );
147     }
148 }
149
150 sub acceptitem {
151     my $self    = shift;
152     my $barcode = shift;
153     my $result;
154
155     # find hold and get branch for that, check in there
156     my $itemdata = GetItem( undef, $barcode );
157     my ( $reservedate, $borrowernumber, $branchcode, $reserve_id, $wait ) =
158       GetReservesFromItemnumber( $itemdata->{'itemnumber'} );
159     unless ($reserve_id) {
160         $result = { success => 0, messages => { NO_HOLD => 1 } };
161         return $result;
162     }
163     my ( $success, $messages, $issue, $borrower ) =
164       AddReturn( $barcode, $branchcode, undef, undef );
165     if ( $messages->{'NotIssued'} ) {
166         $success = 1
167           ; # we do this because we are only doing the return to trigger the reserve
168     }
169
170     $result = {
171         success         => $success,
172         messages        => $messages,
173         iteminformation => $issue,
174         borrower        => $borrower
175     };
176
177     return $result;
178 }
179 1;