From 61a156e730b0158668a95146592a922d1aebcacf Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Wed, 9 Jun 2021 14:11:07 +0100 Subject: [PATCH] Bug 28527: Add handling for cancelled in transit transfers at checkin --- C4/Circulation.pm | 47 +++++++++---------- circ/returns.pl | 28 +++++++++++ .../prog/en/modules/circ/returns.tt | 8 +++- 3 files changed, 58 insertions(+), 25 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index ed92ccf384..13356dd126 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2162,35 +2162,34 @@ sub AddReturn { } # check if we have a transfer for this document - my $transfer = $item->get_transfer; + my $transfers = $item->get_transfers; + my $transfer = $transfers->next; # if we have a transfer to complete, we update the line of transfers with the datearrived if ($transfer) { $validTransfer = 0; - if ( $transfer->in_transit ) { - if ( $transfer->tobranch eq $branch ) { - $transfer->receive; - $messages->{'TransferArrived'} = $transfer->frombranch; - # validTransfer=1 allows us returning the item back if the reserve is cancelled - $validTransfer = 1 if $transfer->reason eq 'Reserve'; - } - else { - $messages->{'WrongTransfer'} = $transfer->tobranch; - $messages->{'WrongTransferItem'} = $item->itemnumber; - $messages->{'TransferTrigger'} = $transfer->reason; - } + # Catch cancelled transfers, we've found the item now + my $reverse; + while ( $transfer && $transfer->is_cancelled ) { + $transfer->receive; + $messages->{'TransferTrigger'} = $transfer->reason; + $messages->{'WrongTransferItem'} = $item->itemnumber; + $reverse = $transfer->frombranch; + $transfer = $transfers->next; } - else { - if ( $transfer->tobranch eq $branch ) { - $transfer->receive; - $messages->{'TransferArrived'} = $transfer->frombranch; - # validTransfer=1 allows us returning the item back if the reserve is cancelled - $validTransfer = 1 if $transfer->reason eq 'Reserve'; - } - else { - $messages->{'WasTransfered'} = $transfer->tobranch; - $messages->{'TransferTrigger'} = $transfer->reason; - } + if ( $transfer && $transfer->tobranch eq $branch ) { + $transfer->receive; + $messages->{'TransferArrived'} = $transfer->frombranch; + } + elsif ( $transfer && $transfer->in_transit ) { + $messages->{'WrongTransfer'} = $transfer->tobranch; + $messages->{'WrongTransferItem'} = $item->itemnumber; + } + elsif ( $transfer ) { + $messages->{'WasTransfered'} = $transfer->tobranch; + $messages->{'TransferTrigger'} = $transfer->reason; + } else { + $messages->{'TransferCancelled'} = $reverse; } } diff --git a/circ/returns.pl b/circ/returns.pl index 6478d39bf3..cbc57f11b7 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -427,6 +427,31 @@ if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) { } } +# +# case of transfer cancelled whilst in transit +# +if ( $messages->{'TransferCancelled'} ){ + $template->param( + CancelledTransfer => 1, + TransferWaitingAt => $messages->{'CancelledTransfer'}, + trigger => $messages->{'TransferTrigger'}, + ); + + # Add reverse transfer to return the item to it's original holdingbranch + my $transfer = Koha::Items->find($messages->{'WrongTransferItem'}); + my $new_transfer = $transfer->request_transfer( + { + to => $transfer->to_library, + reason => 'TransferCancellation', + ignore_limits => 1 + } + ); + $template->param( + NewTransfer => $new_transfer->id + ); +} + + # # reserve found and item arrived at the expected branch # @@ -535,6 +560,9 @@ foreach my $code ( keys %$messages ) { elsif ( $code eq 'TransferTrigger' ) { ; # Handled alongside NeedsTransfer } + elsif ( $code eq 'TransferCancelled' ){ + ; # Handled above + } elsif ( $code eq 'TransferArrived' ) { $err{transferred} = $messages->{'TransferArrived'}; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt index e03a07d758..8d99f98852 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -421,7 +421,7 @@ [% UNLESS ( hold_auto_filled && diffbranch ) %] - [% IF WrongTransfer && !transfertodo %] + [% IF ( WrongTransfer || CancelledTransfer ) && !transfertodo %] [% IF Koha.Preference('TransfersBlockCirc') %]