From 9f8186eaa1749415d84a4fa0ea3d8202ea4437fa Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 22 Feb 2024 12:48:55 +0000 Subject: [PATCH] Bug 35994: Add $biblio->acq_status This allows you to see quickly if a biblio has linked orders or not. And if they are all cancelled, or some still in processing, or some are complete (and the rest cancelled). Test plan: Run t/db_dependent/Koha/Biblio.t Signed-off-by: Marcel de Rooy Signed-off-by: Emily Lamancusa Signed-off-by: Martin Renvoize Signed-off-by: Katrin Fischer --- Koha/Biblio.pm | 26 ++++++++++++++++++++++++++ t/db_dependent/Koha/Biblio.t | 25 +++++++++++++++++++------ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index 2cdd629d8b..ad1807eef1 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -158,6 +158,32 @@ sub uncancelled_orders { return $self->orders->filter_out_cancelled; } +=head3 acq_status + + print $biblio->acq_status; + + This status can be: + - unlinked: not any linked order found in the system + - acquired: some lines are complete, rest is cancelled + - cancelled: all lines are cancelled + - processing: some lines are active or new + +=cut + +sub acq_status { + my ($self) = @_; + my $orders = $self->orders; + unless ( $orders->count ) { + return 'unlinked'; + } elsif ( !$self->uncancelled_orders->count ) { + return 'cancelled'; + } elsif ( $orders->search( { orderstatus => [ 'new', 'ordered', 'partial' ] } )->count ) { + return 'processing'; + } else { + return 'acquired'; # some lines must be complete here + } +} + =head3 tickets my $tickets = $biblio->tickets(); diff --git a/t/db_dependent/Koha/Biblio.t b/t/db_dependent/Koha/Biblio.t index acb130f54a..56c58f1535 100755 --- a/t/db_dependent/Koha/Biblio.t +++ b/t/db_dependent/Koha/Biblio.t @@ -942,9 +942,9 @@ subtest 'get_volumes_query' => sub { ); }; -subtest 'orders() and uncancelled_orders() tests' => sub { +subtest '->orders, ->uncancelled_orders and ->acq_status tests' => sub { - plan tests => 5; + plan tests => 9; $schema->storage->txn_begin; @@ -965,8 +965,9 @@ subtest 'orders() and uncancelled_orders() tests' => sub { { class => 'Koha::Acquisition::Orders', value => { - biblionumber => $biblio->biblionumber, - datecancellationprinted => '2019-12-31' + biblionumber => $biblio->biblionumber, + datecancellationprinted => '2019-12-31', + orderstatus => 'cancelled', } } ); @@ -976,8 +977,11 @@ subtest 'orders() and uncancelled_orders() tests' => sub { { class => 'Koha::Acquisition::Orders', value => { - biblionumber => $biblio->biblionumber, - datecancellationprinted => undef + biblionumber => $biblio->biblionumber, + datecancellationprinted => undef, + orderstatus => 'ordered', + quantity => 1, + quantityreceived => 0, } } ); @@ -989,6 +993,15 @@ subtest 'orders() and uncancelled_orders() tests' => sub { is( ref($uncancelled_orders), 'Koha::Acquisition::Orders', 'Result type is correct' ); is( $orders->count, $uncancelled_orders->count + 2, '->uncancelled_orders->count returns the right count' ); + # Check acq status + is( $biblio->acq_status, 'processing', 'Processing for presence of ordered lines' ); + $orders->filter_by_active->update( { orderstatus => 'new' } ); + is( $biblio->acq_status, 'processing', 'Still processing for presence of new lines' ); + $orders->filter_out_cancelled->update( { orderstatus => 'complete' } ); + is( $biblio->acq_status, 'acquired', 'Acquired: some complete, rest cancelled' ); + $orders->cancel; + is( $biblio->acq_status, 'cancelled', 'Cancelled for only cancelled lines' ); + $schema->storage->txn_rollback; }; -- 2.39.5