1 package Koha::Checkout;
3 # Copyright ByWater Solutions 2015
4 # Copyright 2016 Koha Development Team
6 # This file is part of Koha.
8 # Koha is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
13 # Koha is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with Koha; if not, see <http://www.gnu.org/licenses>.
24 use Try::Tiny qw( catch try );
26 use C4::Circulation qw( LostItem MarkIssueReturned );
27 use Koha::Checkouts::Renewals;
28 use Koha::Checkouts::ReturnClaims;
30 use Koha::DateUtils qw( dt_from_string );
34 use base qw(Koha::Object);
38 Koha::Checkout - Koha Checkout object class
48 my $is_overdue = $checkout->is_overdue( [ $reference_dt ] );
50 Return 1 if the checkout is overdue.
52 A reference date can be passed, in this case it will be used, otherwise today
53 will be the reference date.
58 my ( $self, $dt ) = @_;
59 $dt ||= dt_from_string();
62 DateTime->compare( dt_from_string( $self->date_due, 'sql' ), $dt ) == -1
70 my $item = $checkout->item;
72 Return the checked out item
78 my $item_rs = $self->_result->item;
79 return Koha::Item->_new_from_dbic( $item_rs );
84 my $library = $checkout->library;
86 Return the library in which the transaction took place
92 my $library_rs = $self->_result->library;
93 return Koha::Library->_new_from_dbic( $library_rs );
98 my $patron = $checkout->patron
100 Return the patron for who the checkout has been done
106 my $patron_rs = $self->_result->patron;
107 return Koha::Patron->_new_from_dbic( $patron_rs );
112 my $issuer = $checkout->issuer
114 Return the patron by whom the checkout was done
120 my $issuer_rs = $self->_result->issuer;
121 return unless $issuer_rs;
122 return Koha::Patron->_new_from_dbic( $issuer_rs );
127 my $renewals = $checkout->renewals;
129 Return a Koha::Checkouts::Renewals set attached to this checkout
135 my $renewals_rs = $self->_result->renewals;
136 return unless $renewals_rs;
137 return Koha::Checkouts::Renewals->_new_from_dbic( $renewals_rs );
140 =head3 to_api_mapping
142 This method returns the mapping for representing a Koha::Checkout object
149 issue_id => 'checkout_id',
150 borrowernumber => 'patron_id',
151 itemnumber => 'item_id',
152 date_due => 'due_date',
153 branchcode => 'library_id',
154 returndate => 'checkin_date',
155 lastreneweddate => 'last_renewed_date',
156 issuedate => 'checkout_date',
157 notedate => 'note_date',
158 noteseen => 'note_seen',
162 =head3 claim_returned
164 my $return_claim = $checkout->claim_returned();
166 This method sets the checkout as claimed return. It will:
168 1. Add a new row to the `return_claims` table
169 2. Set the item as lost using the 'ClaimReturnedLostValue'
170 3. Charge a fee depending on the value of ClaimReturnedChargeFee
171 3a. If set to charge, then accruing overdues will be halted
172 3b. If set to charge, then any existing transfers will be cancelled
173 and the holding branch will be set back to 'frombranch'.
174 4. The issue will be marked as returned as per the 'MarkLostItemsAsReturned' preference
179 my ( $self, $params ) = @_;
181 my $charge_lost_fee = $params->{charge_lost_fee};
184 $self->_result->result_source->schema->txn_do(
186 my $claim = Koha::Checkouts::ReturnClaim->new(
188 issue_id => $self->id,
189 itemnumber => $self->itemnumber,
190 borrowernumber => $self->borrowernumber,
191 notes => $params->{notes},
192 created_by => $params->{created_by},
193 created_on => dt_from_string,
197 my $ClaimReturnedLostValue = C4::Context->preference('ClaimReturnedLostValue');
198 $self->item->itemlost($ClaimReturnedLostValue)->store;
200 my $ClaimReturnedChargeFee = C4::Context->preference('ClaimReturnedChargeFee');
202 $ClaimReturnedChargeFee eq 'charge' ? 1
203 : $ClaimReturnedChargeFee eq 'no_charge' ? 0
204 : $charge_lost_fee; # $ClaimReturnedChargeFee eq 'ask'
206 if ( $charge_lost_fee ) {
207 C4::Circulation::LostItem( $self->itemnumber, 'claim_returned' );
209 elsif ( C4::Context->preference( 'MarkLostItemsAsReturned' ) =~ m/claim_returned/ ) {
210 C4::Circulation::MarkIssueReturned( $self->borrowernumber, $self->itemnumber, undef, $self->patron->privacy );
218 if ( $_->isa('Koha::Exception') ) {
223 Koha::Exception->throw( "Unhandled exception" );
228 =head2 Internal methods
240 Kyle M Hall <kyle@bywatersolutions.com>
242 Jonathan Druart <jonathan.druart@bugs.koha-community.org>