checkin mods cont
authorBill Erickson <berick@esilibrary.com>
Tue, 24 Jun 2014 14:26:12 +0000 (10:26 -0400)
committerBill Erickson <berick@esilibrary.com>
Tue, 24 Jun 2014 14:26:12 +0000 (10:26 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/templates/staff/circ/checkin/index.tt2
Open-ILS/web/js/ui/default/staff/circ/checkin/app.js

index 77436f7..a63fb16 100644 (file)
         class="alert-danger pad-all-min">
         [% l('Auto-Print Hold and Transit Slips') %]
       </div>
+      <div ng-if="modifiers.clear_expired" class="alert-danger pad-all-min">
+        [% l('Clear Holds Shelf') %]
+      </div>
+      <div ng-if="modifiers.retarget_holds" class="alert-danger pad-all-min">
+        <div ng-if="modifiers.retarget_holds_all">
+          [% l('Always Retarget Local Holds') %]
+        </div>
+        <div ng-if="!modifiers.retarget_holds_all">
+          [% l('Retarget Local Holds') %]
+        </div>
+      </div>
+      <div ng-if="modifiers.hold_as_transit" class="alert-danger pad-all-min">
+        [% l('Capture Local Holds As Transits') %]
+      </div>
     </div>
   </div>
 </div>
             <span>[% l('Auto-Print Hold and Transit Slips') %]</span>
           </a>
         </li>
+        <li>
+          <a href dropdown-toggle 
+            ng-click="modifiers.clear_expired=!modifiers.clear_expired">
+            <span ng-if="modifiers.clear_expired" 
+              class="label label-success">&#x2713;</span>
+            <span ng-if="!modifiers.clear_expired"
+              class="label label-warning">&#x2717;</span>
+            <span>[% l('Clear Holds Shelf') %]</span>
+          </a>
+        </li>
+        <li>
+          <a href dropdown-toggle 
+            ng-click="modifiers.retarget_holds=!modifiers.retarget_holds">
+            <span ng-if="modifiers.retarget_holds" 
+              class="label label-success">&#x2713;</span>
+            <span ng-if="!modifiers.retarget_holds"
+              class="label label-warning">&#x2717;</span>
+            <span>[% l('Retarget Local Holds') %]</span>
+          </a>
+        </li>
+        <li>
+          <a href dropdown-toggle 
+            ng-click="modifiers.retarget_holds_all=!modifiers.retarget_holds_all">
+            <span ng-if="modifiers.retarget_holds_all" 
+              class="label label-success">&#x2713;</span>
+            <span ng-if="!modifiers.retarget_holds_all"
+              class="label label-warning">&#x2717;</span>
+            <span>[% l('Retarget All Statuses') %]</span>
+          </a>
+        </li>
+        <li>
+          <a href dropdown-toggle 
+            ng-click="modifiers.hold_as_transit=!modifiers.hold_as_transit">
+            <span ng-if="modifiers.hold_as_transit" 
+              class="label label-success">&#x2713;</span>
+            <span ng-if="!modifiers.hold_as_transit"
+              class="label label-warning">&#x2717;</span>
+            <span>[% l('Capture Local Holds As Transits') %]</span>
+          </a>
+        </li>
       </ul>
     </div><!-- btn grp -->
   </div><!-- col -->
index 072c245..fc2cee0 100644 (file)
@@ -53,51 +53,94 @@ function($scope , $q , egCore , checkinSvc , egGridDataProvider , egCirc)  {
         }
     });
 
-    $scope.checkin = function(args) {
-
-        if (args && args.copy_barcode) {
-            var params = angular.copy(args);
+    // turns the various inputs (form args, modifiers, etc.) into
+    // checkin params and options.
+    function compile_checkin_args(args) {
+        var params = angular.copy(args);
+
+        if (params.backdate) {
+            params.backdate = 
+                params.backdate.toISOString().replace(/T.*/,'');
+
+            // a backdate of 'today' is not really a backdate
+            if (params.backdate == $scope.max_backdate)
+                delete params.backdate;
+        }
 
-            if (params.backdate) {
-                params.backdate = 
-                    params.backdate.toISOString().replace(/T.*/,'');
+        angular.forEach(['noop','void_overdues',
+                'clear_expired','hold_as_transit','manual_float'],
+            function(opt) {
+                if ($scope.modifiers[opt]) params[opt] = true;
+            }
+        );
 
-                // a backdate of 'today' is not really a backdate
-                if (params.backdate == $scope.max_backdate)
-                    delete params.backdate;
+        if ($scope.modifiers.retarget_holds) {
+            if ($scope.modifiers.retarget_holds_all) {
+                params.retarget_mode = 'retarget.all';
+            } else {
+                params.retarget_mode = 'retarget';
             }
+        }
 
-            if ($scope.modifiers.noop) 
-                params.noop = true;
-            if ($scope.modifiers.void_overdues) 
-                params.void_overdues = true;
+        var options = {
+            check_barcode : $scope.strict_barcode,
+            no_precat_alert : $scope.modifiers.no_precat_alert,
+            auto_print_holds_transits : 
+                $scope.modifiers.auto_print_holds_transits
+        };
 
-            var options = {
-                check_barcode : $scope.strict_barcode,
-                no_precat_alert : $scope.modifiers.no_precat_alert,
-                auto_print_holds_transits : 
-                    $scope.modifiers.auto_print_holds_transits
-            };
+        return {params : params, options: options};
+    }
+
+    $scope.checkin = function(args) {
 
-            egCirc.checkin(params, options)
-            .then(function(final_resp) {
-                final_resp.evt.index = checkinSvc.checkins.length;
-                final_resp.evt.copy_barcode = params.copy_barcode;
+        var compiled = compile_checkin_args(args);
+        args.copy_barcode = ''; // reset UI for next scan
+        $scope.focusMe = true;
 
-                checkinSvc.checkins.unshift(final_resp.evt);
-                if (checkinSvc.checkins.length > 20)
-                    checkinSvc.checkins = checkinSvc.checkins.splice(0, 20);
+        var params = compiled.params;
+        var options = compiled.options;
 
-                checkinGrid.refresh();
+        if (!params.copy_barcode) return;
 
-                // in case we lost focus to a dialog
-                $scope.focusMe = true;
+        var row_item = {
+            index : checkinSvc.checkins.length,
+            copy_barcode : params.copy_barcode
+        };
+
+        // track the item in the grid before sending the request
+        checkinSvc.checkins.unshift(row_item);
+        checkinGrid.refresh();
+
+        egCirc.checkin(params, options).then(
+        function(final_resp) {
+
+            // copy the response event into the original grid row item
+            // note: angular.copy clobbers the destination
+            angular.forEach(final_resp.evt, function(v, k) {
+                row_item[k] = v;
+            });
+
+            if (checkinSvc.checkins.length > 20)
+                checkinSvc.checkins = checkinSvc.checkins.splice(0, 20);
+        },
+        function() {
+            // Circ was rejected somewhere along the way.
+            // Remove the copy from the grid since there was no action.
+            // note: since checkouts are unshifted onto the array, the
+            // index value does not (generally) match the array position.
+            var pos = -1;
+            angular.forEach($scope.checkouts, function(ci, idx) {
+                if (ci.index == row_item.index) pos = idx;
             });
+            checkinSvc.checkin.splice(pos, 1);
 
-            args.copy_barcode = ''; // reset UI for next scan
-        } 
+        })['finally'](function() {
 
-        $scope.focusMe = true;
+            // when all is said and done, refresh the grid and refocus
+            checkinGrid.refresh();
+            $scope.focusMe = true;
+        });
     }
 
     $scope.print_receipt = function() {