From 6815eb0ad9e63559f04281e1e7cfcc3a9e9ac0a6 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 --- 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 10db0d226a..476781a9c2 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2615,7 +2615,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 b3d73a7f76..48ad1266d1 100644 --- a/Koha/Account.pm +++ b/Koha/Account.pm @@ -362,8 +362,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} } ); } @@ -374,8 +373,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 ] } ); } @@ -619,8 +617,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 fe3e4109a0..b23b3b3b42 100644 --- a/Koha/Account/Line.pm +++ b/Koha/Account/Line.pm @@ -289,6 +289,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 = @@ -311,13 +318,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', @@ -422,12 +422,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 @@ -549,12 +544,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 { @@ -565,7 +555,7 @@ sub reduce { { credit_id => $reduction->accountlines_id, debit_id => $self->accountlines_id, - type => uc( $params->{reduction_type} ), + type => 'APPLY', amount => 0 } )->store(); @@ -583,7 +573,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. @@ -593,9 +583,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 @@ -604,7 +591,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( @@ -645,7 +631,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 c75f91a1f7..b1341cdacf 100644 --- a/Koha/REST/V1/Patrons/Account.pm +++ b/Koha/REST/V1/Patrons/Account.pm @@ -134,12 +134,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 ] }); } return $c->render( status => 200, openapi => { account_line_id => $credit->id } ); diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t index 6266d14561..fd55e5e5f3 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.20.1