package Koha::Checkout; # Copyright ByWater Solutions 2015 # Copyright 2016 Koha Development Team # # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # Koha is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Koha; if not, see . use Modern::Perl; use Carp; use DateTime; use Try::Tiny; use C4::Circulation qw(MarkIssueReturned); use Koha::Checkouts::ReturnClaims; use Koha::Database; use Koha::DateUtils; use Koha::Items; use Koha::Libraries; use base qw(Koha::Object); =head1 NAME Koha::Checkout - Koha Checkout object class =head1 API =head2 Class methods =cut =head3 is_overdue my $is_overdue = $checkout->is_overdue( [ $reference_dt ] ); Return 1 if the checkout is overdue. A reference date can be passed, in this case it will be used, otherwise today will be the reference date. =cut sub is_overdue { my ( $self, $dt ) = @_; $dt ||= dt_from_string(); my $is_overdue = DateTime->compare( dt_from_string( $self->date_due, 'sql' ), $dt ) == -1 ? 1 : 0; return $is_overdue; } =head3 item my $item = $checkout->item; Return the checked out item =cut sub item { my ( $self ) = @_; my $item_rs = $self->_result->item; return Koha::Item->_new_from_dbic( $item_rs ); } =head3 library my $library = $checkout->library; Return the library in which the transaction took place =cut sub library { my ( $self ) = @_; my $library_rs = $self->_result->library; return Koha::Library->_new_from_dbic( $library_rs ); } =head3 patron my $patron = $checkout->patron Return the patron for who the checkout has been done =cut sub patron { my ( $self ) = @_; my $patron_rs = $self->_result->borrower; return Koha::Patron->_new_from_dbic( $patron_rs ); } =head3 issuer my $issuer = $checkout->issuer Return the patron by whom the checkout was done =cut sub issuer { my ( $self ) = @_; my $issuer_rs = $self->_result->issuer; return unless $issuer_rs; return Koha::Patron->_new_from_dbic( $issuer_rs ); } =head3 to_api_mapping This method returns the mapping for representing a Koha::Checkout object on the API. =cut sub to_api_mapping { return { issue_id => 'checkout_id', borrowernumber => 'patron_id', itemnumber => 'item_id', date_due => 'due_date', branchcode => 'library_id', returndate => 'checkin_date', lastreneweddate => 'last_renewed_date', issuedate => 'checkout_date', notedate => 'note_date', }; } =head3 claim_returned my $return_claim = $checkout->claim_returned(); This method sets the checkout as claimed return. It will: 1. Add a new row to the `return_claims` table 2. Set the item as lost using the 'ClaimReturnedLostValue' 3. Charge a fee depending on the value of ClaimReturnedChargeFee 3a. If set to charge, then accruing overdues will be halted 3b. If set to charge, then any existing transfers will be cancelled and the holding branch will be set back to 'frombranch'. 4. The issue will be marked as returned as per the 'MarkLostItemsAsReturned' preference =cut sub claim_returned { my ( $self, $params ) = @_; my $charge_lost_fee = $params->{charge_lost_fee}; try { $self->_result->result_source->schema->txn_do( sub { my $claim = Koha::Checkouts::ReturnClaim->new( { issue_id => $self->id, itemnumber => $self->itemnumber, borrowernumber => $self->borrowernumber, notes => $params->{notes}, created_by => $params->{created_by}, created_on => dt_from_string, } )->store(); my $ClaimReturnedLostValue = C4::Context->preference('ClaimReturnedLostValue'); $self->item->itemlost($ClaimReturnedLostValue)->store; my $ClaimReturnedChargeFee = C4::Context->preference('ClaimReturnedChargeFee'); $charge_lost_fee = $ClaimReturnedChargeFee eq 'charge' ? 1 : $ClaimReturnedChargeFee eq 'no_charge' ? 0 : $charge_lost_fee; # $ClaimReturnedChargeFee eq 'ask' if ( $charge_lost_fee ) { C4::Circulation::LostItem( $self->itemnumber, 'claim_returned' ); } elsif ( C4::Context->preference( 'MarkLostItemsAsReturned' ) =~ m/claim_returned/ ) { C4::Circulation::MarkIssueReturned( $self->borrowernumber, $self->itemnumber, undef, $self->patron->privacy ); } return $claim; } ); } catch { if ( $_->isa('Koha::Exceptions::Exception') ) { $_->rethrow(); } else { # ? Koha::Exceptions::Exception->throw( "Unhandled exception" ); } }; } =head2 Internal methods =head3 _type =cut sub _type { return 'Issue'; } =head1 AUTHOR Kyle M Hall Jonathan Druart =cut 1;