diff --git a/Koha/Item.pm b/Koha/Item.pm index df6a4a52d9..c675d0638e 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -814,6 +814,18 @@ sub request_transfer { } } + my $matching_transfers = Koha::Item::Transfers->search( + { + tobranch => $params->{to}->branchcode, + frombranch => $self->holdingbranch, + itemnumber => $self->itemnumber, + reason => $params->{reason}, + datearrived => undef, + datecancelled => undef + } + ); + return $matching_transfers->next if $matching_transfers->count; + Koha::Exceptions::Item::Transfer::Limit->throw() unless ( $params->{ignore_limits} || $self->can_be_transferred( { to => $params->{to} } ) ); diff --git a/t/db_dependent/Koha/Item.t b/t/db_dependent/Koha/Item.t index 907aa7b60f..d0b0a16dfb 100755 --- a/t/db_dependent/Koha/Item.t +++ b/t/db_dependent/Koha/Item.t @@ -1119,7 +1119,7 @@ subtest 'pickup_locations() tests' => sub { subtest 'request_transfer() tests' => sub { - plan tests => 18; + plan tests => 20; $schema->storage->txn_begin; @@ -1174,6 +1174,17 @@ subtest 'request_transfer() tests' => sub { my $original_transfer = $transfer->get_from_storage; + # Duplicated request + $transfer = $item->request_transfer( { to => $library1, reason => 'Manual' } ); + is( + ref($transfer), 'Koha::Item::Transfer', + 'Koha::Item->request_transfer should return a Koha::Item::Transfer object' + ); + is( + $transfer->branchtransfer_id, $original_transfer->branchtransfer_id, + "When a matching transfer is requested we update the existing one" + ); + # Transfer already in progress throws_ok { $item->request_transfer( { to => $library2, reason => 'Manual' } ) } 'Koha::Exceptions::Item::Transfer::InQueue',