KMIG49 - KCLSUPGRAD19 - Uncancel Hold Feature - Not Observing Hold Polices
authorBill Erickson <berickxx@gmail.com>
Wed, 29 Oct 2014 21:05:35 +0000 (17:05 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
    Cross-port: 2f9c839

Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
Open-ILS/xul/staff_client/server/patron/holds.js

index a120204..33ef6b9 100644 (file)
@@ -66,7 +66,6 @@ __PACKAGE__->register_method(
     }
 );
 
-
 sub test_and_create_hold_batch {
     my( $self, $conn, $auth, $params, $target_list, $oargs ) = @_;
 
@@ -121,15 +120,19 @@ sub test_and_create_hold_batch {
             )->run($auth, $ahr, $oargs);
             $res2 = {
                 'target' => $$params{$target_field},
-                'result' => $res2
+                'result' => $res2,
+                'type' => $$params{'hold_type'}
             };
             $conn->respond($res2);
+            $$conn{'res'} =$res2;
         } else {
             $res = {
                 'target' => $$params{$target_field},
-                'result' => $res
+                'result' => $res,
+                'type' => $$params{'hold_type'}
             };
             $conn->respond($res);
+            $$conn{'res'} =$res;
         }
     }
     return undef;
@@ -750,12 +753,19 @@ sub uncancel_hold {
     $hold->clear_prev_check_time;
     $hold->clear_shelf_expire_time;
     $hold->clear_current_shelf_lib;
+    $hold->clear_id;
 
-    $e->update_action_hold_request($hold) or return $e->die_event;
-    $e->commit;
+    my $rtarget_list = [$hold->target];
+    my $params = {};
+    $$params{'requestor'} = $hold->requestor;
+    $$params{'hold_type'} = $hold->hold_type;
+    $$params{'pickup_lib'} = $hold->pickup_lib;
+    $$params{'patronid'} = $hold->usr;
 
-    $U->simplereq('open-ils.hold-targeter',
-        'open-ils.hold-targeter.target', {hold => $hold_id});
+
+    # KCLS custom.  Uncancel leaves the canceled hold in place
+    # and creates a new hold.
+    test_and_create_hold_batch($self, $client, $auth, $params, $rtarget_list);
 
     return 1;
 }
index fdc6095..35bf91a 100644 (file)
@@ -1271,10 +1271,47 @@ patron.holds.prototype = {
                         function() {
                             try {
                                 JSAN.use('util.functional');
+                                var result_message = "";
+                                var fail_count = 0;
+                                var success_count = 0;
                                 for (var i = 0; i < obj.retrieve_ids.length; i++) {
                                     var robj = obj.network.simple_request('FM_AHR_UNCANCEL',[ ses(), obj.retrieve_ids[i].id]);
-                                    if (typeof robj.ilsevent != 'undefined') throw(robj);
+                                    if (typeof robj[0].result === "number") {
+                                        //success
+                                        result_message += "\nHold Type: " + robj[0].type + "  Target: " + robj[0].target + "  Un-cancel was successful.\n" + 
+                                                                         "     Hold request Id: " + robj[0].result + " created.\n";
+                                        success_count++;
+                                    }
+                                    else {
+                                        if(robj[0].result instanceof Array) {
+                                            //failure hold exists
+                                            if (typeof robj[0].result[0].ilsevent != 'undefined') {
+                                                result_message += "\nHold Type: " + robj[0].type + "  Target: " + robj[0].target + "  Un-cancel was unsuccessful.\n" + 
+                                                                                "     " + robj[0].result[0].desc + ".\n";
+                                                fail_count++;
+                                            }
+                                        }
+                                        else if (robj[0].result.success == 0){
+                                            //failure max holds
+                                           result_message += "\nHold Type: " + robj[0].type + "  Target: " + robj[0].target + "  Un-cancel was unsuccessful.\n" + 
+                                                                            "     " + robj[0].result.last_event.desc + ".\n";
+                                           fail_count++;
+                                        }
+                                        else {
+                                            //failure
+                                            result_message += "\nUn-cancel was unsuccessful.\n";
+                                            fail_count++;
+                                        }
+                                    }
+                                }
+                                if (0 < fail_count) {
+                                    result_message = fail_count + " hold(s) were unsuccessfully un-cancelled.\n" + result_message;
+                                }
+                                if (0 < success_count) {
+                                    result_message = success_count + " hold(s) were successfully un-cancelled.\n" + result_message;
                                 }
+                                result_message = "\n" + result_message;
+                                window.alert(result_message);
                                 obj.clear_and_retrieve();
                             } catch(E) {
                                 obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.holds.holds_uncancel.hold_not_uncancelled'),E);