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',
146 =head3 claim_returned
148 my $return_claim = $checkout->claim_returned();
150 This method sets the checkout as claimed return. It will:
152 1. Add a new row to the `return_claims` table
153 2. Set the item as lost using the 'ClaimReturnedLostValue'
154 3. Charge a fee depending on the value of ClaimReturnedChargeFee
155 3a. If set to charge, then accruing overdues will be halted
156 3b. If set to charge, then any existing transfers will be cancelled
157 and the holding branch will be set back to 'frombranch'.
158 4. The issue will be marked as returned as per the 'MarkLostItemsAsReturned' preference
163 my ( $self, $params ) = @_;
165 my $charge_lost_fee = $params->{charge_lost_fee};
168 $self->_result->result_source->schema->txn_do(
170 my $claim = Koha::Checkouts::ReturnClaim->new(
172 issue_id => $self->id,
173 itemnumber => $self->itemnumber,
174 borrowernumber => $self->borrowernumber,
175 notes => $params->{notes},
176 created_by => $params->{created_by},
177 created_on => dt_from_string,
181 my $ClaimReturnedLostValue = C4::Context->preference('ClaimReturnedLostValue');
182 $self->item->itemlost($ClaimReturnedLostValue)->store;
184 my $ClaimReturnedChargeFee = C4::Context->preference('ClaimReturnedChargeFee');
186 $ClaimReturnedChargeFee eq 'charge' ? 1
187 : $ClaimReturnedChargeFee eq 'no_charge' ? 0
188 : $charge_lost_fee; # $ClaimReturnedChargeFee eq 'ask'
190 if ( $charge_lost_fee ) {
191 C4::Circulation::LostItem( $self->itemnumber, 'claim_returned' );
193 elsif ( C4::Context->preference( 'MarkLostItemsAsReturned' ) =~ m/claim_returned/ ) {
194 C4::Circulation::MarkIssueReturned( $self->borrowernumber, $self->itemnumber, undef, $self->patron->privacy );
202 if ( $_->isa('Koha::Exceptions::Exception') ) {
207 Koha::Exceptions::Exception->throw( "Unhandled exception" );
212 =head2 Internal methods
224 Kyle M Hall <kyle@bywatersolutions.com>
226 Jonathan Druart <jonathan.druart@bugs.koha-community.org>