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