From 7c994685515ebfea05f3361d475d0f6d17a9647a Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 14 Feb 2020 10:39:21 +0000 Subject: [PATCH] Bug 22750: (24474: (follow-up) Add LOST_FOUND logic to Koha::Account::pay) This patch adds the same updated logic as found in Koha::Account::Line->apply to handle LOST_FOUND credits being applied against their associated LOST debit. Currently a 'LOST_FOUND' credit is never created via the pay method and so the additional test will always pass, but the addition here accounts for possible future uses. Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Nick Clemens --- Koha/Account.pm | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/Koha/Account.pm b/Koha/Account.pm index 6fc464178f..6df02cf2ff 100644 --- a/Koha/Account.pm +++ b/Koha/Account.pm @@ -64,6 +64,7 @@ Koha::Account->new( { patron_id => $borrowernumber } )->pay( lines => $lines, # Arrayref of Koha::Account::Line objects to pay credit_type => $type, # credit_type_code code offset_type => $offset_type, # offset type code + item_id => $itemnumber, # pass the itemnumber if this is a credit pertianing to a specific item (i.e LOST_FOUND) } ); @@ -82,9 +83,15 @@ sub pay { my $credit_type = $params->{credit_type}; my $offset_type = $params->{offset_type} || $type eq 'WRITEOFF' ? 'Writeoff' : 'Payment'; my $cash_register = $params->{cash_register}; + my $item_id = $params->{item_id}; my $userenv = C4::Context->userenv; + $credit_type ||= + $type eq 'WRITEOFF' + ? 'WRITEOFF' + : 'PAYMENT'; + my $patron = Koha::Patrons->find( $self->{patron_id} ); my $manager_id = $userenv ? $userenv->{number} : 0; @@ -115,12 +122,16 @@ sub pay { $balance_remaining = $balance_remaining - $amount_to_pay; # Same logic exists in Koha::Account::Line::apply - if ( $new_amountoutstanding == 0 - && $fine->itemnumber + if ( C4::Context->preference('MarkLostItemsAsReturned') =~ m|onpayment| && $fine->debit_type_code - && ( $fine->debit_type_code eq 'LOST' ) ) + && $fine->debit_type_code eq 'LOST' + && $new_amountoutstanding == 0 + && $fine->itemnumber + && !( $credit_type eq 'LOST_FOUND' + && $item_id == $fine->itemnumber ) ) { - C4::Circulation::ReturnLostItem( $self->{patron_id}, $fine->itemnumber ); + C4::Circulation::ReturnLostItem( $self->{patron_id}, + $fine->itemnumber ); } my $account_offset = Koha::Account::Offset->new( @@ -174,12 +185,16 @@ sub pay { $fine->amountoutstanding( $old_amountoutstanding - $amount_to_pay ); $fine->store(); - if ( $fine->amountoutstanding == 0 - && $fine->itemnumber + if ( C4::Context->preference('MarkLostItemsAsReturned') =~ m|onpayment| && $fine->debit_type_code - && ( $fine->debit_type_code eq 'LOST' ) ) + && $fine->debit_type_code eq 'LOST' + && $fine->amountoutstanding == 0 + && $fine->itemnumber + && !( $credit_type eq 'LOST_FOUND' + && $item_id == $fine->itemnumber ) ) { - C4::Circulation::ReturnLostItem( $self->{patron_id}, $fine->itemnumber ); + C4::Circulation::ReturnLostItem( $self->{patron_id}, + $fine->itemnumber ); } my $account_offset = Koha::Account::Offset->new( @@ -216,11 +231,6 @@ sub pay { last unless $balance_remaining > 0; } - $credit_type ||= - $type eq 'WRITEOFF' - ? 'WRITEOFF' - : 'PAYMENT'; - $description ||= $type eq 'WRITEOFF' ? 'Writeoff' : q{}; my $payment = Koha::Account::Line->new( @@ -237,6 +247,7 @@ sub pay { branchcode => $library_id, register_id => $cash_register, note => $note, + itemnumber => $item_id, } )->store(); -- 2.11.0