Bug 26582: Add Koha::Acquisition::Basket->close
This patch adds two methods to Koha::Acquisition::Basket: - 'closed': that tells if the basket is closed - 'close': that closes the basket It inherits the behaviour from CloseBasket (as it actually makes sense). It improves CloseBasket by wrapping the action inside a transaction. It uses the $orders->update call with no_trigger as there's no trigger to trigger and the update can be done on a single DB call. A new exceptions file is added for basket-related exceptions. The only specific exception that gets added is Koha::Exceptions::Acquisition::Basket::AlreadyClosed To test: 1. Apply this patches 2. Run: $ kshell k$ prove t/db_dependent/Koha/Acquisition/Basket.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
bea89005ca
commit
ddf8dfcad0
2 changed files with 95 additions and 0 deletions
|
@ -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<Koha::Exceptions::Acquisition::Basket::AlreadyClosed> 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
|
||||
|
||||
|
|
47
Koha/Exceptions/Acquisition/Basket.pm
Normal file
47
Koha/Exceptions/Acquisition/Basket.pm
Normal file
|
@ -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 <http://www.gnu.org/licenses>.
|
||||
|
||||
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;
|
Loading…
Reference in a new issue