View | Details | Raw Unified | Return to bug 22600
Collapse All | Expand All

(-)a/Koha/Account.pm (+13 lines)
Lines 32-37 use Koha::Patrons; Link Here
32
use Koha::Account::Lines;
32
use Koha::Account::Lines;
33
use Koha::Account::Offsets;
33
use Koha::Account::Offsets;
34
use Koha::DateUtils qw( dt_from_string );
34
use Koha::DateUtils qw( dt_from_string );
35
use Koha::Exceptions;
35
use Koha::Exceptions::Account;
36
use Koha::Exceptions::Account;
36
37
37
=head1 NAME
38
=head1 NAME
Lines 328-333 sub add_credit { Link Here
328
    my $type         = $params->{type} || 'payment';
329
    my $type         = $params->{type} || 'payment';
329
    my $item_id      = $params->{item_id};
330
    my $item_id      = $params->{item_id};
330
331
332
    unless ( $interface ) {
333
        Koha::Exceptions::MissingParameter->throw(
334
            error => 'The interface parameter is mandatory'
335
        );
336
    }
337
331
    my $schema = Koha::Database->new->schema;
338
    my $schema = Koha::Database->new->schema;
332
339
333
    my $account_type = $Koha::Account::account_type_credit->{$type};
340
    my $account_type = $Koha::Account::account_type_credit->{$type};
Lines 452-457 sub add_debit { Link Here
452
    my $item_id      = $params->{item_id};
459
    my $item_id      = $params->{item_id};
453
    my $issue_id     = $params->{issue_id};
460
    my $issue_id     = $params->{issue_id};
454
461
462
    unless ( $interface ) {
463
        Koha::Exceptions::MissingParameter->throw(
464
            error => 'The interface parameter is mandatory'
465
        );
466
    }
467
455
    my $schema = Koha::Database->new->schema;
468
    my $schema = Koha::Database->new->schema;
456
469
457
    unless ( exists($Koha::Account::account_type_debit->{$type}) ) {
470
    unless ( exists($Koha::Account::account_type_debit->{$type}) ) {
(-)a/t/db_dependent/Koha/Account.t (-45 / +68 lines)
Lines 60-69 subtest 'outstanding_debits() tests' => sub { Link Here
60
    my $account = $patron->account;
60
    my $account = $patron->account;
61
61
62
    my @generated_lines;
62
    my @generated_lines;
63
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1, interface => 'commandline' })->store;
63
    push @generated_lines, $account->add_debit({ amount => 1, interface => 'commandline', type => 'fine' });
64
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2, interface => 'commandline' })->store;
64
    push @generated_lines, $account->add_debit({ amount => 2, interface => 'commandline', type => 'fine' });
65
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3, interface => 'commandline' })->store;
65
    push @generated_lines, $account->add_debit({ amount => 3, interface => 'commandline', type => 'fine' });
66
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 4, amountoutstanding => 4, interface => 'commandline' })->store;
66
    push @generated_lines, $account->add_debit({ amount => 4, interface => 'commandline', type => 'fine' });
67
67
68
    my $lines     = $account->outstanding_debits();
68
    my $lines     = $account->outstanding_debits();
69
    my @lines_arr = $account->outstanding_debits();
69
    my @lines_arr = $account->outstanding_debits();
Lines 89-99 subtest 'outstanding_debits() tests' => sub { Link Here
89
    my $the_line = Koha::Account::Lines->find( $just_one->id );
89
    my $the_line = Koha::Account::Lines->find( $just_one->id );
90
    is_deeply( $the_line->unblessed, $lines->next->unblessed, "We get back the one correct line");
90
    is_deeply( $the_line->unblessed, $lines->next->unblessed, "We get back the one correct line");
91
91
92
    my $patron_3 = $builder->build_object({ class => 'Koha::Patrons' });
92
    my $patron_3  = $builder->build_object({ class => 'Koha::Patrons' });
93
    Koha::Account::Line->new({ borrowernumber => $patron_2->id, amount => -2,   amountoutstanding => -2, interface => 'commandline' })->store;
93
    my $account_3 = $patron_3->account;
94
    Koha::Account::Line->new({ borrowernumber => $patron_2->id, amount => -20,  amountoutstanding => -20, interface => 'commandline' })->store;
94
    $account_3->add_credit( { amount => 2,   interface => 'commandline' } );
95
    Koha::Account::Line->new({ borrowernumber => $patron_2->id, amount => -200, amountoutstanding => -200, interface => 'commandline' })->store;
95
    $account_3->add_credit( { amount => 20,  interface => 'commandline' } );
96
    $lines = $patron_3->account->outstanding_debits();
96
    $account_3->add_credit( { amount => 200, interface => 'commandline' } );
97
    $lines = $account_3->outstanding_debits();
97
    is( $lines->total_outstanding, 0, "Total if no outstanding debits total is 0" );
98
    is( $lines->total_outstanding, 0, "Total if no outstanding debits total is 0" );
98
    is( $lines->count, 0, "With 0 outstanding debits, we get back a Lines object with 0 lines" );
99
    is( $lines->count, 0, "With 0 outstanding debits, we get back a Lines object with 0 lines" );
99
100
Lines 157-163 subtest 'outstanding_credits() tests' => sub { Link Here
157
158
158
subtest 'add_credit() tests' => sub {
159
subtest 'add_credit() tests' => sub {
159
160
160
    plan tests => 15;
161
    plan tests => 16;
161
162
162
    $schema->storage->txn_begin;
163
    $schema->storage->txn_begin;
163
164
Lines 173-178 subtest 'add_credit() tests' => sub { Link Here
173
    # Disable logs
174
    # Disable logs
174
    t::lib::Mocks::mock_preference( 'FinesLog', 0 );
175
    t::lib::Mocks::mock_preference( 'FinesLog', 0 );
175
176
177
    throws_ok {
178
        $account->add_credit(
179
            {   amount      => 25,
180
                description => 'Payment of 25',
181
                library_id  => $patron->branchcode,
182
                note        => 'not really important',
183
                type        => 'payment',
184
                user_id     => $patron->id
185
            }
186
        );
187
    }
188
    'Koha::Exceptions::MissingParameter', 'Exception thrown if interface parameter missing';
189
176
    my $line_1 = $account->add_credit(
190
    my $line_1 = $account->add_credit(
177
        {   amount      => 25,
191
        {   amount      => 25,
178
            description => 'Payment of 25',
192
            description => 'Payment of 25',
Lines 236-242 subtest 'add_credit() tests' => sub { Link Here
236
250
237
subtest 'add_debit() tests' => sub {
251
subtest 'add_debit() tests' => sub {
238
252
239
    plan tests => 13;
253
    plan tests => 14;
240
254
241
    $schema->storage->txn_begin;
255
    $schema->storage->txn_begin;
242
256
Lines 276-281 subtest 'add_debit() tests' => sub { Link Here
276
        }
290
        }
277
    ); } 'Koha::Exceptions::Account::UnrecognisedType', 'Expected validation exception thrown (type)';
291
    ); } 'Koha::Exceptions::Account::UnrecognisedType', 'Expected validation exception thrown (type)';
278
292
293
    throws_ok {
294
    $account->add_debit(
295
        {
296
            amount      => 25,
297
            description => 'Rental charge of 25',
298
            library_id  => $patron->branchcode,
299
            note        => 'not really important',
300
            type        => 'rent',
301
            user_id     => $patron->id
302
        }
303
    ); } 'Koha::Exceptions::MissingParameter', 'Exception thrown if interface parameter missing';
304
279
    # Disable logs
305
    # Disable logs
280
    t::lib::Mocks::mock_preference( 'FinesLog', 0 );
306
    t::lib::Mocks::mock_preference( 'FinesLog', 0 );
281
307
Lines 354-379 subtest 'lines() tests' => sub { Link Here
354
    my $patron  = $builder->build_object({ class => 'Koha::Patrons' });
380
    my $patron  = $builder->build_object({ class => 'Koha::Patrons' });
355
    my $account = $patron->account;
381
    my $account = $patron->account;
356
382
357
    my @generated_lines;
358
359
    # Add Credits
383
    # Add Credits
360
    push @generated_lines, $account->add_credit({ amount => 1, interface => 'commandline' });
384
    $account->add_credit({ amount => 1, interface => 'commandline' });
361
    push @generated_lines, $account->add_credit({ amount => 2, interface => 'commandline' });
385
    $account->add_credit({ amount => 2, interface => 'commandline' });
362
    push @generated_lines, $account->add_credit({ amount => 3, interface => 'commandline' });
386
    $account->add_credit({ amount => 3, interface => 'commandline' });
363
    push @generated_lines, $account->add_credit({ amount => 4, interface => 'commandline' });
387
    $account->add_credit({ amount => 4, interface => 'commandline' });
364
388
365
    # Add Debits
389
    # Add Debits
366
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amountoutstanding => 1, interface => 'commandline' })->store;
390
    $account->add_debit({ amount => 1, interface => 'commandline', type => 'fine' });
367
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amountoutstanding => 2, interface => 'commandline' })->store;
391
    $account->add_debit({ amount => 2, interface => 'commandline', type => 'fine' });
368
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amountoutstanding => 3, interface => 'commandline' })->store;
392
    $account->add_debit({ amount => 3, interface => 'commandline', type => 'fine' });
369
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amountoutstanding => 4, interface => 'commandline' })->store;
393
    $account->add_debit({ amount => 4, interface => 'commandline', type => 'fine' });
370
394
371
    # Paid Off
395
    # Paid Off
372
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amountoutstanding => 0, interface => 'commandline' })->store;
396
    $account->add_credit( { amount => 1, interface => 'commandline' } )
373
    push @generated_lines, Koha::Account::Line->new({ borrowernumber => $patron->id, amountoutstanding => 0, interface => 'commandline' })->store;
397
        ->apply( { debits => scalar $account->outstanding_debits } );
374
398
375
    my $lines = $account->lines;
399
    my $lines = $account->lines;
376
    is( $lines->_resultset->count, 10, "All accountlines (debits, credits and paid off) were fetched");
400
    is( $lines->_resultset->count, 9, "All accountlines (debits, credits and paid off) were fetched");
377
401
378
    $schema->storage->txn_rollback;
402
    $schema->storage->txn_rollback;
379
};
403
};
Lines 398-408 subtest 'reconcile_balance' => sub { Link Here
398
        $account->add_credit({ amount => 4, interface => 'commandline' });
422
        $account->add_credit({ amount => 4, interface => 'commandline' });
399
        $account->add_credit({ amount => 5, interface => 'commandline' });
423
        $account->add_credit({ amount => 5, interface => 'commandline' });
400
424
401
        # Add Debits TODO: replace for calls to add_debit when time comes
425
        # Add Debits
402
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1, interface => 'commandline' })->store;
426
        $account->add_debit({ amount => 1, interface => 'commandline', type => 'fine' });
403
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2, interface => 'commandline' })->store;
427
        $account->add_debit({ amount => 2, interface => 'commandline', type => 'fine' });
404
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3, interface => 'commandline' })->store;
428
        $account->add_debit({ amount => 3, interface => 'commandline', type => 'fine' });
405
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 4, amountoutstanding => 4, interface => 'commandline' })->store;
429
        $account->add_debit({ amount => 4, interface => 'commandline', type => 'fine' });
406
430
407
        # Paid Off
431
        # Paid Off
408
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0, interface => 'commandline' })->store;
432
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0, interface => 'commandline' })->store;
Lines 436-446 subtest 'reconcile_balance' => sub { Link Here
436
        $account->add_credit({ amount => 3, interface => 'commandline' });
460
        $account->add_credit({ amount => 3, interface => 'commandline' });
437
        $account->add_credit({ amount => 4, interface => 'commandline' });
461
        $account->add_credit({ amount => 4, interface => 'commandline' });
438
462
439
        # Add Debits TODO: replace for calls to add_debit when time comes
463
        # Add Debits
440
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1, interface => 'commandline' })->store;
464
        $account->add_debit({ amount => 1, interface => 'commandline', type => 'fine' });
441
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2, interface => 'commandline' })->store;
465
        $account->add_debit({ amount => 2, interface => 'commandline', type => 'fine' });
442
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3, interface => 'commandline' })->store;
466
        $account->add_debit({ amount => 3, interface => 'commandline', type => 'fine' });
443
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 4, amountoutstanding => 4, interface => 'commandline' })->store;
467
        $account->add_debit({ amount => 4, interface => 'commandline', type => 'fine' });
444
468
445
        # Paid Off
469
        # Paid Off
446
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0, interface => 'commandline' })->store;
470
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0, interface => 'commandline' })->store;
Lines 474-485 subtest 'reconcile_balance' => sub { Link Here
474
        $account->add_credit({ amount => 3, interface => 'commandline' });
498
        $account->add_credit({ amount => 3, interface => 'commandline' });
475
        $account->add_credit({ amount => 4, interface => 'commandline' });
499
        $account->add_credit({ amount => 4, interface => 'commandline' });
476
500
477
        # Add Debits TODO: replace for calls to add_debit when time comes
501
        # Add Debits
478
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1, interface => 'commandline' })->store;
502
        $account->add_debit({ amount => 1, interface => 'commandline', type => 'fine' });
479
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2, interface => 'commandline' })->store;
503
        $account->add_debit({ amount => 2, interface => 'commandline', type => 'fine' });
480
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3, interface => 'commandline' })->store;
504
        $account->add_debit({ amount => 3, interface => 'commandline', type => 'fine' });
481
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 4, amountoutstanding => 4, interface => 'commandline' })->store;
505
        $account->add_debit({ amount => 4, interface => 'commandline', type => 'fine' });
482
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 5, amountoutstanding => 5, interface => 'commandline' })->store;
506
        $account->add_debit({ amount => 5, interface => 'commandline', type => 'fine' });
483
507
484
        # Paid Off
508
        # Paid Off
485
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0, interface => 'commandline' })->store;
509
        Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 0, interface => 'commandline' })->store;
Lines 511-520 subtest 'reconcile_balance' => sub { Link Here
511
        $account->add_credit({ amount => 1, interface => 'commandline' });
535
        $account->add_credit({ amount => 1, interface => 'commandline' });
512
        $account->add_credit({ amount => 3, interface => 'commandline' });
536
        $account->add_credit({ amount => 3, interface => 'commandline' });
513
537
514
        # Add Debits TODO: replace for calls to add_debit when time comes
538
        # Add Debits
515
        my $debit_1 = Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 1, amountoutstanding => 1, interface => 'commandline' })->store;
539
        my $debit_1 = $account->add_debit({ amount => 1, interface => 'commandline', type => 'fine' });
516
        my $debit_2 = Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 2, amountoutstanding => 2, interface => 'commandline' })->store;
540
        my $debit_2 = $account->add_debit({ amount => 2, interface => 'commandline', type => 'fine' });
517
        my $debit_3 = Koha::Account::Line->new({ borrowernumber => $patron->id, amount => 3, amountoutstanding => 3, interface => 'commandline' })->store;
541
        my $debit_3 = $account->add_debit({ amount => 3, interface => 'commandline', type => 'fine' });
518
542
519
        is( $account->balance(), 2, "Account balance is 2" );
543
        is( $account->balance(), 2, "Account balance is 2" );
520
        is( $account->outstanding_debits->total_outstanding, 6, 'Outstanding debits sum 6' );
544
        is( $account->outstanding_debits->total_outstanding, 6, 'Outstanding debits sum 6' );
521
- 

Return to bug 22600