@@ -, +, @@ - 'closed': that tells if the basket is closed - 'close': that closes the basket $ kshell k$ prove t/db_dependent/Koha/Acquisition/Basket.t --- Koha/Acquisition/Basket.pm | 48 +++++++++++++++++++++++++++ Koha/Exceptions/Acquisition/Basket.pm | 47 ++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 Koha/Exceptions/Acquisition/Basket.pm --- a/Koha/Acquisition/Basket.pm +++ a/Koha/Acquisition/Basket.pm @@ -23,6 +23,7 @@ use Koha::Database; use Koha::DateUtils qw( dt_from_string ); use Koha::Acquisition::BasketGroups; use Koha::Acquisition::Orders; +use Koha::Exceptions::Acquisition::Basket; use Koha::Patrons; use base qw( Koha::Object Koha::Object::Mixin::AdditionalFields ); @@ -155,6 +156,53 @@ sub authorizer { return scalar Koha::Patrons->find($self->authorisedby); } +=head3 closed + + if ( $basket->closed ) { ... } + +Returns a boolean value representing if the basket is closed. + +=cut + +sub closed { + my ($self) = @_; + + return ($self->closedate) ? 1 : 0; +} + +=head3 close + + $basket->close; + +Close the basket and mark all open orders as ordered. + +A I exception is thrown +if the basket is already closed. + +=cut + +sub close { + my ($self) = @_; + + Koha::Exceptions::Acquisition::Basket::AlreadyClosed->throw + if $self->closed; + + $self->_result->result_source->schema->txn_do( + sub { + my $open_orders = $self->orders->search( + { + orderstatus => { not_in => [ 'complete', 'cancelled' ] } + } + ); + # Mark open orders as ordered + $open_orders->update({ orderstatus => 'ordered' }, { no_triggers => 1 }); + # set as closed + $self->set({ closedate => \'NOW()' })->store; + } + ); + + return $self; +} =head3 to_api --- a/Koha/Exceptions/Acquisition/Basket.pm +++ a/Koha/Exceptions/Acquisition/Basket.pm @@ -0,0 +1,47 @@ +package Koha::Exceptions::Acquisition::Basket; + +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Exception::Class ( + + 'Koha::Exceptions::Acquisition::Basket' => { + description => 'Something went wrong!', + }, + 'Koha::Exceptions::Acquisition::Basket::AlreadyClosed' => { + isa => 'Koha::Exceptions::Acquisition::Basket', + description => 'Basket is already closed' + } +); + +=head1 NAME + +Koha::Exceptions::Acquisition::Basket - Base class for Basket exceptions + +=head1 Exceptions + +=head2 Koha::Exceptions::Acquisition::Basket + +Generic Nasket exception + +=head2 Koha::Exceptions::Acquisition::Basket::AlreadyClosed + +Exception to be used when an already closed basket is asked to be closed. + +=cut + +1; --