fine tally; improved already-checked-in alert
authorBill Erickson <berick@esilibrary.com>
Wed, 25 Jun 2014 16:44:07 +0000 (12:44 -0400)
committerBill Erickson <berick@esilibrary.com>
Wed, 25 Jun 2014 16:44:07 +0000 (12:44 -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 272212b..89ce0e8 100644 (file)
 
 <!-- checkin form -->
 <div class="row">
-  <div class="col-md-6">
-      <form ng-submit="checkin(checkinArgs)" role="form" class="form-inline">
-        <div class="input-group">
+  <div class="col-md-4">
+    <form ng-submit="checkin(checkinArgs)" role="form" class="form-inline">
+      <div class="input-group">
 
-          <label class="input-group-addon" 
-            for="patron-checkin-barcode" >[% l('Barcode') %]</label>
+        <label class="input-group-addon" 
+          for="patron-checkin-barcode" >[% l('Barcode') %]</label>
 
-          <input focus-me="focusMe" blur-me="blurMe" 
-            class="form-control"
-            ng-model="checkinArgs.copy_barcode" 
-            placeholder="[% l('Barcode') %]"
-            id="patron-checkin-barcode" type="text"/> 
+        <input focus-me="focusMe" blur-me="blurMe" 
+          class="form-control"
+          ng-model="checkinArgs.copy_barcode" 
+          placeholder="[% l('Barcode') %]"
+          id="patron-checkin-barcode" type="text"/> 
 
-          <input type="submit" class="btn btn-default" value="[% l('Submit') %]"/>
-        </div>
-      </form>
+        <input type="submit" class="btn btn-default" value="[% l('Submit') %]"/>
+      </div>
+    </form>
   </div>
 
-  <div class="col-md-6">
+  <div class="col-md-4">
+    <div ng-if="alert" class="col-md-12 alert-danger pad-all-min">
+      <span ng-if="alert.already_checked_in">
+        [% l('[_1] was already checked in.', '{{alert.already_checked_in}}') %]
+      </span>
+      <span ng-if="alert.item_never_circed">
+        [% l('Item [_1] has never circulated.', '{{alert.item_never_circed}}') %]
+      </span>
+    </div>
+  </div>
+
+  <div class="col-md-4">
     <div class="flex-row">
       <div class="flex-cell"></div>
       <div class="pad-horiz">[% l('Effective Date') %]</div>
   </div>
 </div>
 
-<div ng-if="alert" class="col-md-6 alert alert-danger">
-  <span ng-if="alert.already_checked_in">
-    [% l('[_1] was already checked in.', '{{alert.already_checked_in}}') %]
-  </span>
-  <span ng-if="alert.item_never_circed">
-    [% l('Item [_1] has never circulated.', '{{alert.item_never_circed}}') %]
-  </span>
+<div class="row pad-vert" ng-if="fine_total">
+  <div class="col-md-12">
+    <span>[% l('Fine Tally:') %]</span>
+    <span class="pad-horiz alert alert-danger">{{fine_total | currency}}</span>
+    <span ng-if="billable_barcode">
+      <span>[% l('Transaction for [_1] billed:', '{{billable_barcode}}') %]</span>
+      <span class="pad-horiz alert alert-danger">{{billable_amount | currency}}</span>
+    </span>
+  </div>
 </div>
 
 <hr/>
index 00be1df..61a8078 100644 (file)
@@ -22,12 +22,12 @@ function($scope , $q , $window , $location , egCore , checkinSvc , egGridDataPro
 
     var suppress_popups = false;
     var today = new Date();
-    var seen_barcodes = {};
     $scope.focusMe = true;
     $scope.checkins = checkinSvc.checkins;
     $scope.checkinArgs = {backdate : today}
     $scope.using_hatch = egCore.hatch.usingHatch();
     $scope.modifiers = {};
+    $scope.fine_total = 0;
 
     // run egCore.startup here since it's not handled via resolver
     egCore.startup.go().then(
@@ -107,18 +107,13 @@ function($scope , $q , $window , $location , egCore , checkinSvc , egGridDataPro
         args.copy_barcode = ''; // reset UI for next scan
         $scope.focusMe = true;
         delete $scope.alert;
+        delete $scope.billable_amount;
+        delete $scope.billable_barcode;
 
         var params = compiled.params;
         var options = compiled.options;
 
         if (!params.copy_barcode) return;
-
-        if (seen_barcodes[params.copy_barcode]) {
-            $scope.alert = {already_checked_in : params.copy_barcode};
-            return;
-        }
-
-        seen_barcodes[params.copy_barcode] = true;
         delete $scope.alert;
 
         var row_item = {
@@ -159,6 +154,21 @@ function($scope , $q , $window , $location , egCore , checkinSvc , egGridDataPro
                 // TODO holds shelf, cataloging
             }
 
+            if (row_item.mbts) {
+                var amt = Number(row_item.mbts.balance_owed());
+                if (amt != 0) {
+                    $scope.billable_barcode = row_item.copy_barcode;
+                    $scope.billable_amount = amt;
+                    $scope.fine_total = 
+                        ($scope.fine_total * 100 + amt * 100) / 100;
+                }
+            }
+
+            if (final_resp.evt.textcode == 'NO_CHANGE') {
+                $scope.alert = 
+                    {already_checked_in : final_resp.evt.copy_barcode};
+            }
+
             if ($scope.trim_list && checkinSvc.checkins.length > 20)
                 checkinSvc.checkins = checkinSvc.checkins.splice(0, 20);
         },