|
Lines 1983-1989
subtest 'AddReturn | is_overdue' => sub {
Link Here
|
| 1983 |
|
1983 |
|
| 1984 |
subtest '_FixAccountForLostAndReturned' => sub { |
1984 |
subtest '_FixAccountForLostAndReturned' => sub { |
| 1985 |
|
1985 |
|
| 1986 |
plan tests => 5; |
1986 |
plan tests => 6; |
| 1987 |
|
1987 |
|
| 1988 |
t::lib::Mocks::mock_preference( 'WhenLostChargeReplacementFee', 1 ); |
1988 |
t::lib::Mocks::mock_preference( 'WhenLostChargeReplacementFee', 1 ); |
| 1989 |
t::lib::Mocks::mock_preference( 'WhenLostForgiveFine', 0 ); |
1989 |
t::lib::Mocks::mock_preference( 'WhenLostForgiveFine', 0 ); |
|
Lines 2367-2372
subtest '_FixAccountForLostAndReturned' => sub {
Link Here
|
| 2367 |
my $manual_debit = Koha::Account::Lines->search({ borrowernumber => $patron->id, accounttype => 'OVERDUE', status => 'UNRETURNED' })->next; |
2367 |
my $manual_debit = Koha::Account::Lines->search({ borrowernumber => $patron->id, accounttype => 'OVERDUE', status => 'UNRETURNED' })->next; |
| 2368 |
is( $manual_debit->amountoutstanding + 0, $manual_debit_amount - $payment_amount, 'reconcile_balance was called' ); |
2368 |
is( $manual_debit->amountoutstanding + 0, $manual_debit_amount - $payment_amount, 'reconcile_balance was called' ); |
| 2369 |
}; |
2369 |
}; |
|
|
2370 |
|
| 2371 |
subtest 'Test that refund is applied to the correct debt' => sub { |
| 2372 |
|
| 2373 |
plan tests => 13; |
| 2374 |
|
| 2375 |
my $patron1 = $builder->build_object( { class => 'Koha::Patrons' } ); |
| 2376 |
my $patron2 = $builder->build_object( { class => 'Koha::Patrons' } ); |
| 2377 |
my $manager = $builder->build_object({ class => "Koha::Patrons" }); |
| 2378 |
t::lib::Mocks::mock_userenv({ patron => $manager, branchcode => $manager->branchcode }); |
| 2379 |
|
| 2380 |
my $item = $builder->build_sample_item( |
| 2381 |
{ |
| 2382 |
biblionumber => $biblio->biblionumber, |
| 2383 |
library => $library->branchcode, |
| 2384 |
replacementprice => 23.00, |
| 2385 |
replacementprice => $replacement_amount, |
| 2386 |
itype => $item_type->itemtype |
| 2387 |
} |
| 2388 |
); |
| 2389 |
|
| 2390 |
# Add overdue fine for patron2 (order of these actions is meaningful) |
| 2391 |
my $account2 = $patron2->account; |
| 2392 |
my $fine2 = $account2->add_debit( |
| 2393 |
{ |
| 2394 |
type => 'overdue', |
| 2395 |
amount => '4.00', |
| 2396 |
item_id => $item->itemnumber, |
| 2397 |
user_id => $manager->borrowernumber, |
| 2398 |
interface => 'commandline', |
| 2399 |
library_id => $manager->branchcode |
| 2400 |
} |
| 2401 |
)->status('RETURNED')->store; |
| 2402 |
|
| 2403 |
my $overdue_fee_lines = Koha::Account::Lines->search( |
| 2404 |
{ borrowernumber => $patron2->id, itemnumber => $item->itemnumber, accounttype => 'OVERDUE' } ); |
| 2405 |
is( $overdue_fee_lines->count, 1, 'Only one overdue item fee produced for patron 2' ); |
| 2406 |
my $overdue_fee_line = $overdue_fee_lines->next; |
| 2407 |
is( $overdue_fee_line->amount + 0, '4', 'The right OVERDUE amount is generated for patron 2' ); |
| 2408 |
is( $overdue_fee_line->amountoutstanding + 0, |
| 2409 |
'4', 'The right OVERDUE amountountstanding is generated for patron 2' ); |
| 2410 |
|
| 2411 |
# Issue and mark as lost for patron1 (order of these actions is meaningful) |
| 2412 |
AddIssue( $patron1->unblessed, $item->barcode ); |
| 2413 |
ModItem( { itemlost => 3 }, $biblio->biblionumber, $item->itemnumber ); |
| 2414 |
LostItem( $item->itemnumber, 1 ); |
| 2415 |
|
| 2416 |
# Writeoff overdue fine for patron2 (order of these actions is meaningful) |
| 2417 |
my $writeoff2 = $account2->pay( |
| 2418 |
{ |
| 2419 |
amount => '4.00', |
| 2420 |
library_id => $manager->branchcode, |
| 2421 |
lines => [$fine2], |
| 2422 |
type => 'writeoff' |
| 2423 |
} |
| 2424 |
); |
| 2425 |
|
| 2426 |
my $processing_fee_lines = Koha::Account::Lines->search( |
| 2427 |
{ borrowernumber => $patron1->id, itemnumber => $item->itemnumber, accounttype => 'PF' } ); |
| 2428 |
is( $processing_fee_lines->count, 1, 'Only one processing fee produced for patron 1' ); |
| 2429 |
my $processing_fee_line = $processing_fee_lines->next; |
| 2430 |
is( $processing_fee_line->amount + 0, |
| 2431 |
$processfee_amount, 'The right PF amount is generated for patron 1' ); |
| 2432 |
is( $processing_fee_line->amountoutstanding + 0, |
| 2433 |
$processfee_amount, 'The right PF amountoutstanding is generated for patron 1' ); |
| 2434 |
|
| 2435 |
my $lost_fee_lines = Koha::Account::Lines->search( |
| 2436 |
{ borrowernumber => $patron1->id, itemnumber => $item->itemnumber, accounttype => 'LOST' } ); |
| 2437 |
is( $lost_fee_lines->count, 1, 'Only one lost item fee produced for patron 1' ); |
| 2438 |
my $lost_fee_line = $lost_fee_lines->next; |
| 2439 |
is( $lost_fee_line->amount + 0, $replacement_amount, 'The right LOST amount is generated for patron 1' ); |
| 2440 |
is( $lost_fee_line->amountoutstanding + 0, |
| 2441 |
$replacement_amount, 'The right LOST amountountstanding is generated for patron 1' ); |
| 2442 |
|
| 2443 |
my $overdue_writeoff_lines = Koha::Account::Lines->search( |
| 2444 |
{ borrowernumber => $patron2->id, itemnumber => $item->itemnumber, accounttype => 'W' } ); |
| 2445 |
is( $overdue_writeoff_lines->count, 1, 'Only one overdue item writeoff produced for patron 2' ); |
| 2446 |
my $overdue_writeoff_line = $overdue_writeoff_lines->next; |
| 2447 |
is( $overdue_writeoff_line->amount + 0, '-4', 'The right W amount is generated for patron 2' ); |
| 2448 |
is( $overdue_writeoff_line->amountoutstanding + 0, |
| 2449 |
'0', 'The right W amountountstanding is generated for patron 2' ); |
| 2450 |
is( $overdue_fee_line->discard_changes->amountoutstanding + 0, 0, 'The OVERDUE fine amountoutstanding has been reduced to zero for patron 2'); |
| 2451 |
|
| 2452 |
is ( DateTime->compare($overdue_fee_line->date, $lost_fee_line->date), -1, 'The overdue fine for patron 2 was added before the lost fee for patron 1'); |
| 2453 |
is ( DateTime->compare($lost_fee_line->date, $overdue_writeoff_line->date), -1, 'The lost item fee for patron 1 was added before the overdue fine writeoff for patron 2'); |
| 2454 |
|
| 2455 |
my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item->itemnumber, undef ); |
| 2456 |
my $credit_return = Koha::Account::Lines->find($credit_return_id); |
| 2457 |
|
| 2458 |
is( $credit_return->accounttype, 'CR', 'An account line of type CR is added' ); |
| 2459 |
is( $credit_return->borrowernumber, $patron1->borrowernumber, 'The account line of type CR is associated with patron 1' ); |
| 2460 |
is( $credit_return->amount + 0, -99.00, 'The account line of type CR has an amount of -99' ); |
| 2461 |
is( $credit_return->amountoutstanding + 0, 0, 'The account line of type CR has an amountoutstanding of 0' ); |
| 2462 |
|
| 2463 |
$lost_fee_line->discard_changes; |
| 2464 |
is( $lost_fee_line->amountoutstanding + 0, 0, 'Lost fee has no outstanding amount' ); |
| 2465 |
is( $lost_fee_line->accounttype, |
| 2466 |
'LOST', 'Lost fee now still has account type of LOST' ); |
| 2467 |
is( $lost_fee_line->status, 'RETURNED', "Lost fee now has account status of RETURNED"); |
| 2468 |
|
| 2469 |
is( $patron1->account->balance, 20, 'The patron balance is 20, still owes the processing fee' ); |
| 2470 |
}; |
| 2471 |
|
| 2370 |
}; |
2472 |
}; |
| 2371 |
|
2473 |
|
| 2372 |
subtest '_FixOverduesOnReturn' => sub { |
2474 |
subtest '_FixOverduesOnReturn' => sub { |
| 2373 |
- |
|
|