@@ -, +, @@ --- Koha/Biblio.pm | 26 ++++++++++++++++++++++++++ t/db_dependent/Koha/Biblio.t | 25 +++++++++++++++++++------ 2 files changed, 45 insertions(+), 6 deletions(-) --- a/Koha/Biblio.pm +++ a/Koha/Biblio.pm @@ -152,6 +152,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(); --- a/t/db_dependent/Koha/Biblio.t +++ a/t/db_dependent/Koha/Biblio.t @@ -660,9 +660,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; @@ -683,8 +683,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', } } ); @@ -694,8 +695,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, } } ); @@ -707,6 +711,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; }; --