From b5a09e46546dff342d6bf248d3561fc2c37956bc Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Wed, 17 Mar 2021 14:11:20 +0000 Subject: [PATCH] Bug 22435: ->apply() should always use 'APPLY' for offset_type Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Nick Clemens Signed-off-by: Tomas Cohen Arazi Signed-off-by: Jonathan Druart --- C4/Circulation.pm | 2 +- Koha/Account.pm | 9 +++----- Koha/Account/Line.pm | 40 +++++++++++---------------------- Koha/REST/V1/Patrons/Account.pm | 4 ++-- t/db_dependent/Circulation.t | 11 ++++----- 5 files changed, 23 insertions(+), 43 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 10e17c045d..dd9e7bc5d8 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2608,7 +2608,7 @@ sub _FixOverduesOnReturn { } ); - $credit->apply({ debits => [ $accountline ], offset_type => 'Forgiven' }); + $credit->apply({ debits => [ $accountline ] }); if (C4::Context->preference("FinesLog")) { &logaction("FINES", 'MODIFY',$borrowernumber,"Overdue forgiven: item $item"); diff --git a/Koha/Account.pm b/Koha/Account.pm index f175d53ef9..962f6e14fa 100644 --- a/Koha/Account.pm +++ b/Koha/Account.pm @@ -360,8 +360,7 @@ sub payin_amount { if ( exists( $params->{debits} ) ) { $credit = $credit->apply( { - debits => $params->{debits}, - offset_type => $Koha::Account::offset_type->{$params->{type}} + debits => $params->{debits} } ); } @@ -372,8 +371,7 @@ sub payin_amount { { $credit = $credit->apply( { - debits => [ $self->outstanding_debits->as_list ], - offset_type => $Koha::Account::offset_type->{$params->{type}} + debits => [ $self->outstanding_debits->as_list ] } ); } @@ -617,8 +615,7 @@ sub payout_amount { # Offset against credits for my $credit ( @{$outstanding_credits} ) { - $credit->apply( - { debits => [$payout], offset_type => 'PAYOUT' } ); + $credit->apply( { debits => [$payout] } ); $payout->discard_changes; last if $payout->amountoutstanding == 0; } diff --git a/Koha/Account/Line.pm b/Koha/Account/Line.pm index 23b2cc869e..222dcc60df 100644 --- a/Koha/Account/Line.pm +++ b/Koha/Account/Line.pm @@ -288,6 +288,13 @@ sub void { } )->store(); + # Link void to payment + $self->set({ + amountoutstanding => $self->amount, + status => 'VOID' + })->store(); + $self->apply( { debits => [$void] } ); + # Reverse any applied payments foreach my $account_offset (@account_offsets) { my $fee_paid = @@ -310,13 +317,6 @@ sub void { )->store(); } - # Link void to payment - $self->set({ - amountoutstanding => $self->amount, - status => 'VOID' - })->store(); - $self->apply({ debits => [$void]}); - if ( C4::Context->preference("FinesLog") ) { logaction( "FINES", 'VOID', @@ -421,12 +421,7 @@ sub cancel { )->store(); # Link cancellation to charge - $cancellation->apply( - { - debits => [$self], - offset_type => 'CANCELLATION' - } - ); + $cancellation->apply( { debits => [$self] } ); $cancellation->status('APPLIED')->store(); # Update status of original debit @@ -548,12 +543,7 @@ sub reduce { my $debit_outstanding = $self->amountoutstanding; if ( $debit_outstanding >= $params->{amount} ) { - $reduction->apply( - { - debits => [$self], - offset_type => uc( $params->{reduction_type} ) - } - ); + $reduction->apply( { debits => [$self] } ); $reduction->status('APPLIED')->store(); } else { @@ -564,7 +554,7 @@ sub reduce { { credit_id => $reduction->accountlines_id, debit_id => $self->accountlines_id, - type => uc( $params->{reduction_type} ), + type => 'APPLY', amount => 0 } )->store(); @@ -582,7 +572,7 @@ sub reduce { =head3 apply my $debits = $account->outstanding_debits; - my $credit = $credit->apply( { debits => $debits, [ offset_type => $offset_type ] } ); + my $credit = $credit->apply( { debits => $debits } ); Applies the credit to a given debits array reference. @@ -592,9 +582,6 @@ Applies the credit to a given debits array reference. =item debits - Koha::Account::Lines object set of debits -=item offset_type (optional) - a string indicating the offset type (valid values are those from -the 'account_offset_types' table) - =back =cut @@ -603,7 +590,6 @@ sub apply { my ( $self, $params ) = @_; my $debits = $params->{debits}; - my $offset_type = $params->{offset_type} // 'Credit Applied'; unless ( $self->is_credit ) { Koha::Exceptions::Account::IsNotCredit->throw( @@ -644,7 +630,7 @@ sub apply { { credit_id => $self->id, debit_id => $debit->id, amount => $amount_to_cancel * -1, - type => $offset_type, + type => 'APPLY' } )->store(); @@ -777,7 +763,7 @@ sub payout { } )->store(); - $self->apply( { debits => [$payout], offset_type => 'PAYOUT' } ); + $self->apply( { debits => [$payout] } ); $self->status('PAID')->store; } ); diff --git a/Koha/REST/V1/Patrons/Account.pm b/Koha/REST/V1/Patrons/Account.pm index 1c932c07f7..cf9bc9a416 100644 --- a/Koha/REST/V1/Patrons/Account.pm +++ b/Koha/REST/V1/Patrons/Account.pm @@ -133,12 +133,12 @@ sub add_credit { if ($debits) { # pay them! - $credit = $credit->apply({ debits => [ $debits->as_list ], offset_type => 'payment' }); + $credit = $credit->apply({ debits => [ $debits->as_list ] }); } if ($credit->amountoutstanding != 0) { my $outstanding_debits = $account->outstanding_debits; - $credit->apply({ debits => [ $outstanding_debits->as_list ], offset_type => 'payment' }); + $credit->apply({ debits => [ $outstanding_debits->as_list ] }); } $credit->discard_changes; diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t index 8aa5d4c970..c450d7e99f 100755 --- a/t/db_dependent/Circulation.t +++ b/t/db_dependent/Circulation.t @@ -2729,8 +2729,7 @@ subtest 'AddReturn | is_overdue' => sub { interface => 'test', } ); - $credit->apply( - { debits => [ $debit ], offset_type => 'Payment' } ); + $credit->apply( { debits => [$debit] } ); is( int( $patron->account->balance() ), 0, "Overdue fine should be paid off" ); @@ -2856,7 +2855,7 @@ subtest 'AddReturn | is_overdue' => sub { interface => 'test', } ); - $credit->apply( { debits => [$debit], offset_type => 'Payment' } ); + $credit->apply( { debits => [$debit] } ); is( $patron->account->balance(), .05, 'Overdue fine reduced to $0.05' ); @@ -3193,8 +3192,7 @@ subtest 'AddReturn | is_overdue' => sub { item_id => $item->itemnumber } ); - $overdue_forgive->apply( - { debits => [$overdue_fee], offset_type => 'Forgiven' } ); + $overdue_forgive->apply( { debits => [$overdue_fee] } ); $overdue_fee->discard_changes; is($overdue_fee->amountoutstanding + 0, 0, 'Overdue fee forgiven'); @@ -3291,8 +3289,7 @@ subtest 'AddReturn | is_overdue' => sub { item_id => $item->itemnumber } ); - $overdue_forgive->apply( - { debits => [$overdue_fee], offset_type => 'Forgiven' } ); + $overdue_forgive->apply( { debits => [$overdue_fee] } ); $overdue_fee->discard_changes; is($overdue_fee->amountoutstanding + 0, 0, 'Overdue fee forgiven'); -- 2.39.5