+=head3 account_lines
+
+my $account_lines = $checkout->account_lines;
+
+Return the checked out account_lines
+
+=cut
+
+sub account_lines {
+ my ( $self ) = @_;
+ my $account_lines_rs = $self->_result->account_lines;
+ return Koha::Account::Lines->_new_from_dbic( $account_lines_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->patron;
+ 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 renewals
+
+ my $renewals = $checkout->renewals;
+
+Return a Koha::Checkouts::Renewals set attached to this checkout
+
+=cut
+
+sub renewals {
+ my ( $self ) = @_;
+ my $renewals_rs = $self->_result->renewals;
+ return unless $renewals_rs;
+ return Koha::Checkouts::Renewals->_new_from_dbic( $renewals_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',
+ noteseen => 'note_seen',
+ };
+}
+
+=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::Exception') ) {
+ $_->rethrow();
+ }
+ else {
+ # ?
+ Koha::Exception->throw( "Unhandled exception" );
+ }
+ };
+}
+
+=head2 Internal methods
+
+=head3 _type