From ae9a56254b9fe29be4988d025b12f676418e0f4d Mon Sep 17 00:00:00 2001
From: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Date: Mon, 17 May 2021 17:14:16 +0100
Subject: [PATCH] Bug 28294: Convert updateWrongTransfer to use
 request_transfer

This patch is an interim patch to prove that the updated
request_transfer method achieves the same as updateWrongTransfer.

Test plan
1/ Run t/db_dependant/Circulation.t before and after applying this
patch.

Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
---
 C4/Circulation.pm     | 14 ++++----------
 Koha/Item/Transfer.pm | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+), 10 deletions(-)

diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index 7a28b100c3..b497fceebd 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -3591,19 +3591,13 @@ This function validate the line of brachtransfer but with the wrong destination
 sub updateWrongTransfer {
 	my ( $itemNumber,$waitingAtLibrary,$FromLibrary ) = @_;
 
-    # first step: cancel the original transfer
-    my $item = Koha::Items->find($itemNumber);
-    my $transfer = $item->get_transfer;
-    $transfer->set({ datecancelled => dt_from_string, cancellation_reason => 'WrongTransfer' })->store();
-
-    # second step: create a new transfer to the right location
-    my $new_transfer = $item->request_transfer(
+    my $transfer = Koha::Items->find($itemNumber)->get_transfer;
+    my $new_transfer = $transfer->replace(
         {
             to            => $transfer->to_library,
-            reason        => $transfer->reason,
-            comment       => $transfer->comments,
+            reason        => 'WrongTransfer',
             ignore_limits => 1,
-            enqueue       => 1
+            force         => 1
         }
     );
 
diff --git a/Koha/Item/Transfer.pm b/Koha/Item/Transfer.pm
index 59387d4415..8aa70fa67c 100644
--- a/Koha/Item/Transfer.pm
+++ b/Koha/Item/Transfer.pm
@@ -186,6 +186,45 @@ sub cancel {
     return $self;
 }
 
+=head3 replace
+
+  my $new_transfer = $transfer->replace(
+    {
+        to     => $to_library,
+        reason => $reason,
+        [ ignore_limits => 0, force => 0 ]
+    }
+  );
+
+Replace this transfer by cancelling it and setting up a new transfer request.
+
+=cut
+
+sub replace {
+    my ( $self, $params ) = @_;
+
+    Koha::Exceptions::MissingParameter->throw(
+        error => "The 'reason' parameter is mandatory" )
+      unless defined($params->{reason});
+
+    my $in_transit = $self->in_transit;
+
+    # Throw exception if item is in transit already
+    Koha::Exceptions::Item::Transfer::InTransit->throw() if ( !$params->{force} && $in_transit );
+
+    my $new_transfer = $self->item->request_transfer(
+        {
+            to            => $self->to_library,
+            reason        => $params->{'reason'},
+            ignore_limits => $params->{'ignore_limits'},
+            force         => $params->{'force'},
+            replace       => 1
+        }
+    );
+
+    return $new_transfer;
+}
+
 =head3 type
 
 =cut
-- 
2.20.1