Bug 24300: (QA follow-up) Enhance test and catch failures
The tests did not include testing for offset lines. This patch adds such tests and updates the function to pass them Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
c2026b6624
commit
91775dc298
2 changed files with 72 additions and 29 deletions
|
@ -489,19 +489,21 @@ sub add_credit {
|
|||
|
||||
This method allows adding debits to a patron's account
|
||||
|
||||
my $debit_line = Koha::Account->new({ patron_id => $patron_id })->add_debit(
|
||||
{
|
||||
amount => $amount,
|
||||
description => $description,
|
||||
note => $note,
|
||||
user_id => $user_id,
|
||||
interface => $interface,
|
||||
library_id => $library_id,
|
||||
type => $debit_type,
|
||||
item_id => $item_id,
|
||||
issue_id => $issue_id
|
||||
}
|
||||
);
|
||||
my $debit_line = Koha::Account->new({ patron_id => $patron_id })->add_debit(
|
||||
{
|
||||
amount => $amount,
|
||||
description => $description,
|
||||
note => $note,
|
||||
user_id => $user_id,
|
||||
interface => $interface,
|
||||
library_id => $library_id,
|
||||
type => $debit_type,
|
||||
transaction_type => $transaction_type,
|
||||
cash_register => $register_id,
|
||||
item_id => $item_id,
|
||||
issue_id => $issue_id
|
||||
}
|
||||
);
|
||||
|
||||
$debit_type can be any of:
|
||||
- ACCOUNT
|
||||
|
@ -517,6 +519,7 @@ $debit_type can be any of:
|
|||
- RENT_RENEW
|
||||
- RENT_DAILY_RENEW
|
||||
- RESERVE
|
||||
- PAYOUT
|
||||
|
||||
=cut
|
||||
|
||||
|
@ -533,6 +536,13 @@ sub add_debit {
|
|||
}
|
||||
}
|
||||
|
||||
# check for cash register if using cash
|
||||
Koha::Exceptions::Account::RegisterRequired->throw()
|
||||
if ( C4::Context->preference("UseCashRegisters")
|
||||
&& defined( $params->{transaction_type} )
|
||||
&& ( $params->{transaction_type} eq 'CASH' )
|
||||
&& !defined( $params->{cash_register} ) );
|
||||
|
||||
# amount should always be a positive value
|
||||
my $amount = $params->{amount};
|
||||
unless ( $amount > 0 ) {
|
||||
|
@ -540,15 +550,17 @@ sub add_debit {
|
|||
error => 'Debit amount passed is not positive' );
|
||||
}
|
||||
|
||||
my $description = $params->{description} // q{};
|
||||
my $note = $params->{note} // q{};
|
||||
my $user_id = $params->{user_id};
|
||||
my $interface = $params->{interface};
|
||||
my $library_id = $params->{library_id};
|
||||
my $debit_type = $params->{type};
|
||||
my $item_id = $params->{item_id};
|
||||
my $issue_id = $params->{issue_id};
|
||||
my $offset_type = $Koha::Account::offset_type->{$debit_type} // 'Manual Debit';
|
||||
my $description = $params->{description} // q{};
|
||||
my $note = $params->{note} // q{};
|
||||
my $user_id = $params->{user_id};
|
||||
my $interface = $params->{interface};
|
||||
my $library_id = $params->{library_id};
|
||||
my $cash_register = $params->{cash_register};
|
||||
my $debit_type = $params->{type};
|
||||
my $transaction_type = $params->{transaction_type};
|
||||
my $item_id = $params->{item_id};
|
||||
my $issue_id = $params->{issue_id};
|
||||
my $offset_type = $Koha::Account::offset_type->{$debit_type} // 'Manual Debit';
|
||||
|
||||
my $line;
|
||||
my $schema = Koha::Database->new->schema;
|
||||
|
@ -565,13 +577,14 @@ sub add_debit {
|
|||
description => $description,
|
||||
debit_type_code => $debit_type,
|
||||
amountoutstanding => $amount,
|
||||
payment_type => undef,
|
||||
payment_type => $transaction_type,
|
||||
note => $note,
|
||||
manager_id => $user_id,
|
||||
interface => $interface,
|
||||
itemnumber => $item_id,
|
||||
issue_id => $issue_id,
|
||||
branchcode => $library_id,
|
||||
register_id => $cash_register,
|
||||
(
|
||||
$debit_type eq 'OVERDUE'
|
||||
? ( status => 'UNRETURNED' )
|
||||
|
@ -669,7 +682,7 @@ sub payout_amount {
|
|||
my $amount = $params->{amount};
|
||||
unless ( $amount > 0 ) {
|
||||
Koha::Exceptions::Account::AmountNotPositive->throw(
|
||||
error => 'Debit amount passed is not positive' );
|
||||
error => 'Payout amount passed is not positive' );
|
||||
}
|
||||
|
||||
# Amount should always be less than or equal to outstanding credit
|
||||
|
@ -696,12 +709,12 @@ sub payout_amount {
|
|||
{
|
||||
amount => $params->{amount},
|
||||
type => 'PAYOUT',
|
||||
payment_type => $params->{payout_type},
|
||||
transaction_type => $params->{payout_type},
|
||||
amountoutstanding => $params->{amount},
|
||||
manager_id => $params->{staff_id},
|
||||
interface => $params->{interface},
|
||||
branchcode => $params->{branch},
|
||||
register_id => $params->{cash_register}
|
||||
cash_register => $params->{cash_register}
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -710,6 +723,7 @@ sub payout_amount {
|
|||
$credit->apply(
|
||||
{ debits => [$payout], offset_type => 'PAYOUT' } );
|
||||
$payout->discard_changes;
|
||||
last if $payout->amountoutstanding == 0;
|
||||
}
|
||||
|
||||
# Set payout as paid
|
||||
|
@ -884,7 +898,8 @@ our $offset_type = {
|
|||
'RENT_RENEW' => 'Rental Fee',
|
||||
'RENT_DAILY_RENEW' => 'Rental Fee',
|
||||
'OVERDUE' => 'OVERDUE',
|
||||
'RESERVE_EXPIRED' => 'Hold Expired'
|
||||
'RESERVE_EXPIRED' => 'Hold Expired',
|
||||
'PAYOUT' => 'PAYOUT',
|
||||
};
|
||||
|
||||
=head1 AUTHORS
|
||||
|
|
|
@ -1177,7 +1177,7 @@ subtest 'Koha::Account::pay() generates credit number (Koha::Account::Line->stor
|
|||
};
|
||||
|
||||
subtest 'Koha::Account::payout_amount() tests' => sub {
|
||||
plan tests => 21;
|
||||
plan tests => 39;
|
||||
|
||||
$schema->storage->txn_begin;
|
||||
|
||||
|
@ -1258,12 +1258,30 @@ subtest 'Koha::Account::payout_amount() tests' => sub {
|
|||
is($credits->count, 1, "Payout was applied against oldest outstanding credits first");
|
||||
is($credits->total_outstanding + 0, -10, "Total of 10 outstanding credit remaining");
|
||||
|
||||
my $offsets = Koha::Account::Offsets->search( { debit_id => $payout->id } );
|
||||
is( $offsets->count, 4, 'Four offsets generated' );
|
||||
my $offset = $offsets->next;
|
||||
is( $offset->type, 'PAYOUT', 'PAYOUT offset added for payout line' );
|
||||
is( $offset->amount * 1, 10, 'Correct offset amount recorded' );
|
||||
$offset = $offsets->next;
|
||||
is( $offset->credit_id, $credit_1->id, "Offset added against credit_1");
|
||||
is( $offset->type, 'PAYOUT', "PAYOUT used for offset_type" );
|
||||
is( $offset->amount * 1, -2, 'Correct amount offset against credit_1' );
|
||||
$offset = $offsets->next;
|
||||
is( $offset->credit_id, $credit_2->id, "Offset added against credit_2");
|
||||
is( $offset->type, 'PAYOUT', "PAYOUT used for offset_type" );
|
||||
is( $offset->amount * 1, -3, 'Correct amount offset against credit_2' );
|
||||
$offset = $offsets->next;
|
||||
is( $offset->credit_id, $credit_3->id, "Offset added against credit_3");
|
||||
is( $offset->type, 'PAYOUT', "PAYOUT used for offset_type" );
|
||||
is( $offset->amount * 1, -5, 'Correct amount offset against credit_3' );
|
||||
|
||||
my $credit_5 = $account->add_credit( { amount => 5, interface => 'commandline' } );
|
||||
$credits = $account->outstanding_credits();
|
||||
is($credits->count, 2, "New credit added");
|
||||
$payout_params->{amount} = 2.50;
|
||||
$payout_params->{credits} = [$credit_5];
|
||||
$account->payout_amount($payout_params);
|
||||
$payout = $account->payout_amount($payout_params);
|
||||
|
||||
$credits = $account->outstanding_credits();
|
||||
is($credits->count, 2, "Second credit not fully paid off");
|
||||
|
@ -1273,5 +1291,15 @@ subtest 'Koha::Account::payout_amount() tests' => sub {
|
|||
is($credit_4->amountoutstanding + 0, -10, "Credit 4 unaffected when credit_5 was passed to payout_amount");
|
||||
is($credit_5->amountoutstanding + 0, -2.50, "Credit 5 correctly reduced when payout_amount called with credit_5 passed");
|
||||
|
||||
$offsets = Koha::Account::Offsets->search( { debit_id => $payout->id } );
|
||||
is( $offsets->count, 2, 'Two offsets generated' );
|
||||
$offset = $offsets->next;
|
||||
is( $offset->type, 'PAYOUT', 'PAYOUT offset added for payout line' );
|
||||
is( $offset->amount * 1, 2.50, 'Correct offset amount recorded' );
|
||||
$offset = $offsets->next;
|
||||
is( $offset->credit_id, $credit_5->id, "Offset added against credit_5");
|
||||
is( $offset->type, 'PAYOUT', "PAYOUT used for offset_type" );
|
||||
is( $offset->amount * 1, -2.50, 'Correct amount offset against credit_5' );
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue