From 2925aba5f1e338c7754dbb6be1b1bd068ae38c9a Mon Sep 17 00:00:00 2001
From: Bill Erickson <berickxx@gmail.com>
Date: Mon, 30 Apr 2018 14:27:41 -0400
Subject: [PATCH] LP#1740537 Transit dialog showing wrong branch

Always retrieve the latest copy transit from the server when displaying
the copy transit dialog.  This resolves an issue where a just-closed
transit is used instead.

Add a filter to avoid canceled transits.

Make the transit lookup call authoritative, since the transit may have
just been created.

To test (test plan courtesy of John Amundson):

1. Sign in as Library A.
2. Check in an item owned by Library B that does not have any holds
   associated with it. This will send the item in transit to its home,
   Library B.
3. Place a hold on the item to be picked up at Library C.
4. Sign in as Library B.
5. Check in the item. The transit pop-up and printout will show that
   the item needs to be transited to Library B instead of Library C.
6. Apply the patch and repeat steps 1-5 using a different item. This
   time, the transit pop-up will show that the item needs
   to be transited to Library C.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
---
 Open-ILS/web/js/ui/default/staff/circ/services/circ.js | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/Open-ILS/web/js/ui/default/staff/circ/services/circ.js b/Open-ILS/web/js/ui/default/staff/circ/services/circ.js
index ec97c306f6..2807464e64 100644
--- a/Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+++ b/Open-ILS/web/js/ui/default/staff/circ/services/circ.js
@@ -938,11 +938,12 @@ function($uibModal , $q , egCore , egAlertDialog , egConfirmDialog,  egAddCopyAl
     service.find_copy_transit = function(evt, params, options) {
         if (angular.isArray(evt)) evt = evt[0];
 
-        if (evt && evt.payload && evt.payload.transit)
-            return $q.when(evt.payload.transit);
+        // NOTE: evt.payload.transit may exist, but it's not necessarily
+        // the transit we want, since a transit close + open in the API
+        // returns the closed transit.
 
          return egCore.pcrud.search('atc',
-            {   dest_recv_time : null},
+            {   dest_recv_time : null, cancel_time : null},
             {   flesh : 1, 
                 flesh_fields : {atc : ['target_copy']},
                 join : {
@@ -955,7 +956,7 @@ function($uibModal , $q , egCore , egAlertDialog , egConfirmDialog,  egAddCopyAl
                 },
                 limit : 1,
                 order_by : {atc : 'source_send_time desc'}, 
-            }
+            }, {authoritative : true}
         ).then(function(transit) {
             transit.source(egCore.org.get(transit.source()));
             transit.dest(egCore.org.get(transit.dest()));
-- 
2.11.0