- my ($status) = CheckReserves( $item->{itemnumber} );
- my @transfers = GetTransfers( $item->{itemnumber} );
- transferbook( $colBranchcode, $item->{barcode}, my $ignore_reserves = 1 ) unless ( $status eq 'Waiting' || @transfers );
+ my $item_object = Koha::Items->find( $item->{itemnumber} );
+ try {
+ $item_object->request_transfer(
+ {
+ to => $to_library,
+ reason => 'RotatingCollection',
+ ignore_limits => 0
+ }
+ ); # Request transfer
+ }
+ catch {
+ if ( $_->isa('Koha::Exceptions::Item::Transfer::InQueue') ) {
+ my $exception = $_;
+ my $found_transfer = $_->transfer;
+ if ( $found_transfer->in_transit
+ || $found_transfer->reason eq 'Reserve' )
+ {
+ my $transfer = $item_object->request_transfer(
+ {
+ to => $to_library,
+ reason => "RotatingCollection",
+ ignore_limits => 0,
+ enqueue => 1
+ }
+ ); # Queue transfer
+ push @{$messages},
+ {
+ type => 'alert',
+ code => 'enqueued',
+ item => $item_object,
+ found_transfer => $found_transfer
+ };
+ }
+ else {
+ my $transfer = $item_object->request_transfer(
+ {
+ to => $to_library,
+ reason => "RotatingCollection",
+ ignore_limits => 0,
+ replace => 1
+ }
+ ); # Replace transfer
+ # NOTE: If we just replaced a StockRotationAdvance,
+ # it will get enqueued afresh on the next cron run
+ }
+ }
+ elsif ( $_->isa('Koha::Exceptions::Item::Transfer::Limit') ) {
+ push @{$messages},
+ {
+ type => 'error',
+ code => 'limits',
+ item => $item_object
+ };
+ }
+ else {
+ $_->rethrow();
+ }
+ };