From 246357bde91e16affb93011f1eb3174e99bd9999 Mon Sep 17 00:00:00 2001 From: Kyle Hall Date: Mon, 25 Apr 2022 13:39:30 -0400 Subject: [PATCH] Bug 30612: Add accountlines method to Koha::Checkout and Koha::Old::Checkout It would be very useful to have an accountlines method on checkouts objects. In particular it would make fees related to a checkout available from the checkout objects in overdue notices. Test Plan: 1) Apply this patch 2) prove t/db_dependent/Koha/Account/Line.t 3) prove t/db_dependent/Koha/Checkouts.t --- Koha/Checkout.pm | 14 ++++++++++++ Koha/Old/Checkout.pm | 14 ++++++++++++ Koha/Schema/Result/Issue.pm | 7 ++++++ Koha/Schema/Result/OldIssue.pm | 7 ++++++ t/db_dependent/Koha/Account/Line.t | 5 ++++- t/db_dependent/Koha/Checkouts.t | 35 +++++++++++++++++++++++++++++- 6 files changed, 80 insertions(+), 2 deletions(-) diff --git a/Koha/Checkout.pm b/Koha/Checkout.pm index 34f0098d06c..3a8c2574cca 100644 --- a/Koha/Checkout.pm +++ b/Koha/Checkout.pm @@ -78,6 +78,20 @@ sub item { return Koha::Item->_new_from_dbic( $item_rs ); } +=head3 accountlines + +my $accountlines = $checkout->accountlines; + +Return the checked out accountlines + +=cut + +sub accountlines { + my ( $self ) = @_; + my $accountlines_rs = $self->_result->accountlines; + return Koha::Account::Lines->_new_from_dbic( $accountlines_rs ); +} + =head3 library my $library = $checkout->library; diff --git a/Koha/Old/Checkout.pm b/Koha/Old/Checkout.pm index e4cd9989f1e..35f9bf59ffb 100644 --- a/Koha/Old/Checkout.pm +++ b/Koha/Old/Checkout.pm @@ -45,6 +45,20 @@ sub item { return Koha::Item->_new_from_dbic( $item_rs ); } +=head3 accountlines + +my $accountlines = $checkout->accountlines; + +Return the checked out accountlines + +=cut + +sub accountlines { + my ( $self ) = @_; + my $accountlines_rs = $self->_result->accountlines; + return Koha::Account::Lines->_new_from_dbic( $accountlines_rs ); +} + =head3 library my $library = $checkout->library; diff --git a/Koha/Schema/Result/Issue.pm b/Koha/Schema/Result/Issue.pm index 5d26b5b5638..ea43957d7f7 100644 --- a/Koha/Schema/Result/Issue.pm +++ b/Koha/Schema/Result/Issue.pm @@ -388,6 +388,13 @@ __PACKAGE__->might_have( { cascade_copy => 0, cascade_delete => 0 }, ); +__PACKAGE__->has_many( + "accountlines", + "Koha::Schema::Result::Accountline", + { "foreign.issue_id" => "self.issue_id" }, + { cascade_copy => 0, cascade_delete => 0 }, +); + sub koha_object_class { 'Koha::Checkout'; } diff --git a/Koha/Schema/Result/OldIssue.pm b/Koha/Schema/Result/OldIssue.pm index d119555564a..90d6ab5d41e 100644 --- a/Koha/Schema/Result/OldIssue.pm +++ b/Koha/Schema/Result/OldIssue.pm @@ -351,6 +351,13 @@ Related object: L =cut +__PACKAGE__->has_many( + "accountlines", + "Koha::Schema::Result::Accountline", + { "foreign.issue_id" => "self.issue_id" }, + { cascade_copy => 0, cascade_delete => 0 }, +); + __PACKAGE__->might_have( "return_claim", "Koha::Schema::Result::ReturnClaim", diff --git a/t/db_dependent/Koha/Account/Line.t b/t/db_dependent/Koha/Account/Line.t index fe593ae17bc..b31b91490cb 100755 --- a/t/db_dependent/Koha/Account/Line.t +++ b/t/db_dependent/Koha/Account/Line.t @@ -203,7 +203,7 @@ subtest 'is_credit() and is_debit() tests' => sub { subtest 'apply() tests' => sub { - plan tests => 31; + plan tests => 32; $schema->storage->txn_begin; @@ -346,6 +346,9 @@ subtest 'apply() tests' => sub { } )->store(); + my $a = $checkout->accountlines->next; + is( $a->id, $accountline->id, "Koha::Checkout::accountlines returns the related acountline" ); + # Enable renewing upon fine payment t::lib::Mocks::mock_preference( 'RenewAccruingItemWhenPaid', 1 ); my $called = 0; diff --git a/t/db_dependent/Koha/Checkouts.t b/t/db_dependent/Koha/Checkouts.t index 9c4b0dbfeae..8ca855d27c3 100755 --- a/t/db_dependent/Koha/Checkouts.t +++ b/t/db_dependent/Koha/Checkouts.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 10; +use Test::More tests => 11; use C4::Circulation qw( MarkIssueReturned AddReturn ); use Koha::Checkouts; @@ -110,6 +110,39 @@ subtest 'item' => sub { 'Koha::Checkout->item should return the correct item' ); }; +subtest 'accountlines' => sub { + plan tests => 3; + + my $accountline = Koha::Account::Line->new( + { + issue_id => $retrieved_checkout_1->id, + borrowernumber => $retrieved_checkout_1->borrowernumber, + itemnumber => $retrieved_checkout_1->itemnumber, + branchcode => $retrieved_checkout_1->branchcode, + date => \'NOW()', + debit_type_code => 'OVERDUE', + status => 'UNRETURNED', + interface => 'cli', + amount => '1', + amountoutstanding => '1', + } + )->store(); + + my $accountlines = $retrieved_checkout_1->accountlines; + is( ref($accountlines), 'Koha::Account::Lines', + 'Koha::Checkout->accountlines should return a Koha::Item' ); + + my $line = $accountlines->next; + is( ref($line), 'Koha::Account::Line', + 'next returns a Koha::Account::Line' ); + + is( + $accountline->id, + $line->id, + 'Koha::Checkout->accountlines should return the correct accountlines' + ); +}; + subtest 'patron' => sub { plan tests => 3; my $patron = $builder->build_object( -- 2.30.2