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>.
27 use C4::Circulation qw(MarkIssueReturned);
28 use Koha::Checkouts::ReturnClaims;
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->borrower;
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 );
125 =head3 to_api_mapping
127 This method returns the mapping for representing a Koha::Checkout object
134 issue_id => 'checkout_id',
135 borrowernumber => 'patron_id',
136 itemnumber => 'item_id',
137 date_due => 'due_date',
138 branchcode => 'library_id',
139 returndate => 'checkin_date',
140 lastreneweddate => 'last_renewed_date',
141 issuedate => 'checkout_date',
142 notedate => 'note_date',
143 noteseen => 'note_seen',
147 =head3 claim_returned
149 my $return_claim = $checkout->claim_returned();
151 This method sets the checkout as claimed return. It will:
153 1. Add a new row to the `return_claims` table
154 2. Set the item as lost using the 'ClaimReturnedLostValue'
155 3. Charge a fee depending on the value of ClaimReturnedChargeFee
156 3a. If set to charge, then accruing overdues will be halted
157 3b. If set to charge, then any existing transfers will be cancelled
158 and the holding branch will be set back to 'frombranch'.
159 4. The issue will be marked as returned as per the 'MarkLostItemsAsReturned' preference
164 my ( $self, $params ) = @_;
166 my $charge_lost_fee = $params->{charge_lost_fee};
169 $self->_result->result_source->schema->txn_do(
171 my $claim = Koha::Checkouts::ReturnClaim->new(
173 issue_id => $self->id,
174 itemnumber => $self->itemnumber,
175 borrowernumber => $self->borrowernumber,
176 notes => $params->{notes},
177 created_by => $params->{created_by},
178 created_on => dt_from_string,
182 my $ClaimReturnedLostValue = C4::Context->preference('ClaimReturnedLostValue');
183 $self->item->itemlost($ClaimReturnedLostValue)->store;
185 my $ClaimReturnedChargeFee = C4::Context->preference('ClaimReturnedChargeFee');
187 $ClaimReturnedChargeFee eq 'charge' ? 1
188 : $ClaimReturnedChargeFee eq 'no_charge' ? 0
189 : $charge_lost_fee; # $ClaimReturnedChargeFee eq 'ask'
191 if ( $charge_lost_fee ) {
192 C4::Circulation::LostItem( $self->itemnumber, 'claim_returned' );
194 elsif ( C4::Context->preference( 'MarkLostItemsAsReturned' ) =~ m/claim_returned/ ) {
195 C4::Circulation::MarkIssueReturned( $self->borrowernumber, $self->itemnumber, undef, $self->patron->privacy );
203 if ( $_->isa('Koha::Exceptions::Exception') ) {
208 Koha::Exceptions::Exception->throw( "Unhandled exception" );
213 =head2 Internal methods
225 Kyle M Hall <kyle@bywatersolutions.com>
227 Jonathan Druart <jonathan.druart@bugs.koha-community.org>