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::ReturnClaims;
29 use Koha::DateUtils qw( dt_from_string );
33 use base qw(Koha::Object);
37 Koha::Checkout - Koha Checkout object class
47 my $is_overdue = $checkout->is_overdue( [ $reference_dt ] );
49 Return 1 if the checkout is overdue.
51 A reference date can be passed, in this case it will be used, otherwise today
52 will be the reference date.
57 my ( $self, $dt ) = @_;
58 $dt ||= dt_from_string();
61 DateTime->compare( dt_from_string( $self->date_due, 'sql' ), $dt ) == -1
69 my $item = $checkout->item;
71 Return the checked out item
77 my $item_rs = $self->_result->item;
78 return Koha::Item->_new_from_dbic( $item_rs );
83 my $library = $checkout->library;
85 Return the library in which the transaction took place
91 my $library_rs = $self->_result->library;
92 return Koha::Library->_new_from_dbic( $library_rs );
97 my $patron = $checkout->patron
99 Return the patron for who the checkout has been done
105 my $patron_rs = $self->_result->borrower;
106 return Koha::Patron->_new_from_dbic( $patron_rs );
111 my $issuer = $checkout->issuer
113 Return the patron by whom the checkout was done
119 my $issuer_rs = $self->_result->issuer;
120 return unless $issuer_rs;
121 return Koha::Patron->_new_from_dbic( $issuer_rs );
124 =head3 to_api_mapping
126 This method returns the mapping for representing a Koha::Checkout object
133 issue_id => 'checkout_id',
134 borrowernumber => 'patron_id',
135 itemnumber => 'item_id',
136 date_due => 'due_date',
137 branchcode => 'library_id',
138 returndate => 'checkin_date',
139 lastreneweddate => 'last_renewed_date',
140 issuedate => 'checkout_date',
141 notedate => 'note_date',
142 noteseen => 'note_seen',
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>