return Koha::Account::DebitType->_new_from_dbic( $rs );
}
+=head3 credit_offsets
+
+Return the credit_offsets linked to this account line if some exist
+
+=cut
+
+sub credit_offsets {
+ my ( $self ) = @_;
+ my $rs = $self->_result->account_offsets_credits;
+ return unless $rs;
+ return Koha::Account::Offsets->_new_from_dbic($rs);
+}
+
+=head3 debit_offsets
+
+Return the debit_offsets linked to this account line if some exist
+
+=cut
+
+sub debit_offsets {
+ my ( $self ) = @_;
+ my $rs = $self->_result->account_offsets_debits;
+ return unless $rs;
+ return Koha::Account::Offsets->_new_from_dbic($rs);
+}
+
+
+=head3 credits
+
+ my $credits = $accountline->credits;
+ my $credits = $accountline->credits( $cond, $attr );
+
+Return the credits linked to this account line if some exist.
+Search conditions and attributes may be passed if you wish to filter
+the resultant resultant resultset.
+
+=cut
+
+sub credits {
+ my ( $self, $cond, $attr ) = @_;
+
+ unless ( $self->is_debit ) {
+ Koha::Exceptions::Account::IsNotCredit->throw(
+ error => 'Account line ' . $self->id . ' is not a debit'
+ );
+ }
+
+ my $rs =
+ $self->_result->search_related('account_offsets_debits')
+ ->search_related( 'credit', $cond, $attr );
+ return unless $rs;
+ return Koha::Account::Lines->_new_from_dbic($rs);
+}
+
+=head3 debits
+
+ my $debits = $accountline->debits;
+ my $debits = $accountline->debits( $cond, $attr );
+
+Return the debits linked to this account line if some exist.
+Search conditions and attributes may be passed if you wish to filter
+the resultant resultant resultset.
+
+=cut
+
+sub debits {
+ my ( $self, $cond, $attr ) = @_;
+
+ unless ( $self->is_credit ) {
+ Koha::Exceptions::Account::IsNotCredit->throw(
+ error => 'Account line ' . $self->id . ' is not a credit'
+ );
+ }
+
+ my $rs =
+ $self->_result->search_related('account_offsets_credits')
+ ->search_related( 'debit', $cond, $attr );
+ return unless $rs;
+ return Koha::Account::Lines->_new_from_dbic($rs);
+}
+
=head3 void
$payment_accountline->void();
use Modern::Perl;
-use Test::More tests => 10;
+use Test::More tests => 11;
use Test::Exception;
use C4::Circulation qw/AddIssue AddReturn/;
$schema->storage->txn_rollback;
};
+subtest 'credits() and debits() tests' => sub {
+ plan tests => 10;
+
+ $schema->storage->txn_begin;
+
+ my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+ my $account = $patron->account;
+
+ my $debit1 = $account->add_debit({
+ amount => 8,
+ interface => 'commandline',
+ type => 'ACCOUNT',
+ });
+ my $debit2 = $account->add_debit({
+ amount => 12,
+ interface => 'commandline',
+ type => 'ACCOUNT',
+ });
+ my $credit1 = $account->add_credit({
+ amount => 5,
+ interface => 'commandline',
+ type => 'CREDIT',
+ });
+ my $credit2 = $account->add_credit({
+ amount => 10,
+ interface => 'commandline',
+ type => 'CREDIT',
+ });
+
+ $credit1->apply({ debits => [ $debit1 ] });
+ $credit2->apply({ debits => [ $debit1, $debit2 ] });
+
+ my $credits = $debit1->credits;
+ is($credits->count, 2, '2 Credits applied to debit 1');
+ my $credit = $credits->next;
+ is($credit->amount + 0, -5, 'Correct first credit');
+ $credit = $credits->next;
+ is($credit->amount + 0, -10, 'Correct second credit');
+
+ $credits = $debit2->credits;
+ is($credits->count, 1, '1 Credits applied to debit 2');
+ $credit = $credits->next;
+ is($credit->amount + 0, -10, 'Correct first credit');
+
+ my $debits = $credit1->debits;
+ is($debits->count, 1, 'Credit 1 applied to 1 debit');
+ my $debit = $debits->next;
+ is($debit->amount + 0, 8, 'Correct first debit');
+
+ $debits = $credit2->debits;
+ is($debits->count, 2, 'Credit 2 applied to 2 debits');
+ $debit = $debits->next;
+ is($debit->amount + 0, 8, 'Correct first debit');
+ $debit = $debits->next;
+ is($debit->amount + 0, 12, 'Correct second debit');
+
+ $schema->storage->txn_rollback;
+};
+
subtest "void() tests" => sub {
plan tests => 16;