Bug 17600: Standardize our EXPORT_OK
[koha.git] / Koha / Item / Transfer.pm
1 package Koha::Item::Transfer;
2
3 # This file is part of Koha.
4 #
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18 use Modern::Perl;
19
20
21 use C4::Items qw( CartToShelf ModDateLastSeen );
22
23 use Koha::Database;
24 use Koha::DateUtils qw( dt_from_string );
25 use Koha::Exceptions::Item::Transfer;
26
27 use base qw(Koha::Object);
28
29 =head1 NAME
30
31 Koha::Item::Transfer - Koha Item Transfer Object class
32
33 =head1 API
34
35 =head2 Class Methods
36
37 =cut
38
39 =head3 item
40
41   my $item = $transfer->item;
42
43 Returns the associated item for this transfer.
44
45 =cut
46
47 sub item {
48     my ($self) = @_;
49     my $item_rs = $self->_result->itemnumber;
50     return Koha::Item->_new_from_dbic($item_rs);
51 }
52
53 =head3 from_library
54
55   my $from_library = $transfer->from_library;
56
57 Returns the associated from_library for this transfer.
58
59 =cut
60
61 sub from_library {
62     my ($self) = @_;
63     my $from_library_rs = $self->_result->frombranch;
64     return Koha::Library->_new_from_dbic($from_library_rs);
65 }
66
67 =head3 to_library
68
69   my $to_library = $transfer->to_library;
70
71 Returns the associated to_library for this transfer.
72
73 =cut
74
75 sub to_library {
76     my ($self) = @_;
77     my $to_library_rs = $self->_result->tobranch;
78     return Koha::Library->_new_from_dbic($to_library_rs);
79 }
80
81 =head3 transit
82
83 Set the transfer as in transit by updating the datesent time.
84
85 Also, update date last seen and ensure item holdingbranch is correctly set.
86
87 =cut
88
89 sub transit {
90     my ($self) = @_;
91
92     # Throw exception if item is still checked out
93     Koha::Exceptions::Item::Transfer::OnLoan->throw() if ( $self->item->checkout );
94
95     # Remove the 'shelving cart' location status if it is being used (Bug 3701)
96     CartToShelf( $self->item->itemnumber )
97       if $self->item->location
98       && $self->item->location eq 'CART'
99       && (!$self->item->permanent_location
100         || $self->item->permanent_location ne 'CART' );
101
102     # Update the transit state
103     $self->set(
104         {
105             frombranch => $self->item->holdingbranch,
106             datesent   => dt_from_string,
107         }
108     )->store;
109
110     ModDateLastSeen( $self->item->itemnumber );
111     return $self;
112
113 }
114
115 =head3 in_transit
116
117 Boolean returning whether the transfer is in transit or waiting
118
119 =cut
120
121 sub in_transit {
122     my ($self) = @_;
123
124     return ( defined( $self->datesent )
125           && !defined( $self->datearrived )
126           && !defined( $self->datecancelled ) );
127 }
128
129 =head3 receive
130
131 Receive the transfer by setting the datearrived time.
132
133 =cut
134
135 sub receive {
136     my ($self) = @_;
137
138     # Throw exception if item is checked out
139     Koha::Exceptions::Item::Transfer::OnLoan->throw() if ($self->item->checkout);
140
141     # Update the arrived date
142     $self->set({ datearrived => dt_from_string })->store;
143
144     ModDateLastSeen( $self->item->itemnumber );
145     return $self;
146 }
147
148 =head3 cancel
149
150   $transfer->cancel({ reason => $reason, [force => 1]});
151
152 Cancel the transfer by setting the datecancelled time and recording the reason.
153
154 =cut
155
156 sub cancel {
157     my ( $self, $params ) = @_;
158
159     Koha::Exceptions::MissingParameter->throw(
160         error => "The 'reason' parameter is mandatory" )
161       unless defined($params->{reason});
162
163     # Throw exception if item is in transit already
164     Koha::Exceptions::Item::Transfer::InTransit->throw() if ( !$params->{force} && $self->in_transit );
165
166     # Update the cancelled date
167     $self->set(
168         { datecancelled => dt_from_string, cancellation_reason => $params->{reason} } )
169       ->store;
170
171     return $self;
172 }
173
174 =head3 type
175
176 =cut
177
178 sub _type {
179     return 'Branchtransfer';
180 }
181
182 1;