CAT-131 Items Out Renew Items functionality
authorKyle Huckins <khuckins@catalyte.io>
Wed, 10 May 2017 20:30:36 +0000 (13:30 -0700)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
Add a checkbox before each entry in Items Out/Renew Items
interfaces.
Add button for renewing items to Items Out/Renew Items interface.
Add count of remaining renewals to item table.

Signed-off-by: Kyle Huckins <khuckins@catalyte.io>
 Changes to be committed:
modified:   KCLS/openils/var/templates_kcls/circ/selfcheck/circ_page.tt2
modified:   Open-ILS/web/js/ui/kcls/circ/selfcheck/selfcheck.js

KCLS/openils/var/templates_kcls/circ/selfcheck/circ_page.tt2
Open-ILS/web/js/dojo/openils/circ/nls/selfcheck.js
Open-ILS/web/js/ui/kcls/circ/selfcheck/selfcheck.js

index 13e5622..f104f04 100644 (file)
@@ -1,9 +1,16 @@
 <div class="row">
   <div class="col-md-offset-4 col-xs-9 col-md-8"><label>Items Checked Out</label></div>
-  <div class="col-xs-3 pad-vert-btn">
+  </div>
+<div class="row">
+  <div class="col-md-offset-1 col-md-5 pad-vert-btn">
     <a href="javascript:;" onclick="selfCheckMgr.printList('items_out');" class="btn btn-success scko-action-btn">
       Print List</a>
   </div>
+  <div class="col-xs-3 col-md-offset-1 col-md-5 pad-vert-btn">
+    <a href="javascript:;" onclick="selfCheckMgr.renewItems();" class="btn btn-success scko-action-btn">
+      Renew Items</a>
+  </div>
+
 </div>
 
 <div class="scko-table">
       <tbody id='oils-selfck-circ-out-tbody'>
         <tr id='oils-selfck-circ-out-row'><td>
           <table>
-            <tr><td class="scko-table-label">BARCODE:</td><td name="barcode"></td></tr>
+            <tr>
+              <th rowspan="5"><input type="checkbox" name="renew_selector" class="oils-selfck-renewal-selector"></th>
+              <td class="scko-table-label">BARCODE:</td><td name="barcode"></td>
+            </tr>
             <tr><td class="scko-table-label">TITLE:</td><td name="title"></td></tr>
             <tr><td class="scko-table-label">AUTHOR:</td><td name="author"></td></tr>
             <tr><td class="scko-table-label">DUE DATE:</td><td name="due_date"></td></tr>
+            <tr><td class="scko-table-label">REMAINING RENEWALS:</td><td name="remaining_renewals"></td></tr>
             <tr><td class="scko-table-label hideMe">FORMAT:</td><td class="hideMe" name="format"></td></tr>
           </table>
         </td></tr>
index ea20601..0a9e6d4 100644 (file)
@@ -10,7 +10,7 @@
     "RENEW_SUCCESS" : "Renewal of item ${0} succeeded",
     "ALREADY_OUT" : "Item ${0} is already checked out",
     "OPEN_CIRCULATION_EXISTS" : "Item ${0} is already checked out to another user",
-    "GENERIC_CIRC_FAILURE" : "Unable to check out item ${0}.  Please see staff.",
+    "GENERIC_CIRC_FAILURE" : "Unable to process some items. Please see staff.",
     "LOGIN_FAILED" : "Login for ${0} failed",
     "LOGIN_BARCODE_DOUBLE" : "Your PIN is needed.",
     "UNKNOWN_ERROR" : "An unhandled exception occurred with error code ${0}",
index dfe36e2..61ddf18 100644 (file)
@@ -28,6 +28,7 @@ var selfCheckMgr;
 var itemsOutCirc = [];
 var itemsOutMod = [];
 var itemsOutCopy = [];
+var currentItemsOut = [];
 var readyHolds = false;
 
 const SET_BARCODE_REGEX = 'opac.barcode_regex';
@@ -601,6 +602,7 @@ SelfCheckManager.prototype.drawItemsOutPage = function() {
 
     progressDialog.show(true);
     var self = this;
+    self.itemsOutArray = [];
 
     fieldmapper.standardRequest(
         ['open-ils.circ', 'open-ils.circ.actor.user.checked_out.atomic'],
@@ -621,29 +623,45 @@ SelfCheckManager.prototype.drawItemsOutPage = function() {
                 dojo.forEach(circs,
                     function(circ) {
                         self.itemsOut.push(circ.circ.id());
-                        handleCheckedItems(circ);
+                        self.itemsOutArray.push(circ);
                     }
                 );
                 progressDialog.hide();
             }
         }
     );
+    handleCheckedItems(self.itemsOutArray);
 }
 
-function handleCheckedItems(circ) {
+function handleCheckedItems(circs) {
     var self = selfCheckMgr;
     var row = self.outTemplate.cloneNode(true);
 
-    self.byName(row,'barcode').innerHTML = circ.copy.barcode();
-    self.byName(row,'title').innerHTML = circ.record.title();
-    self.byName(row,'author').innerHTML = circ.record.author();
-    if(dojo.date.stamp.fromISOString(circ.circ.due_date())<(new Date())) self.byName(row,'due_date').style.color="red";
-    self.byName(row,'due_date').innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(circ.circ.due_date()), {
-        selector: 'date', fullYear: true
-    });
-    self.byName(row,'format').innerHTML = circ.record.types_of_resource()[0];
+    if(circs.length) {
+        for(circ = 0; circ < circs.length; circ++) {
+            var row = self.outTemplate.cloneNode(true);
+            currentItemsOut.push(circs[circ]);
+            self.byName(row,'barcode').innerHTML = circs[circ].copy.barcode();
+            self.byName(row, 'title').innerHTML = circs[circ].record.title();
+            self.byName(row, 'author').innerHTML = circs[circ].record.author();
+            self.byName(row, 'remaining_renewals').innerHTML = circs[circ].circ.renewal_remaining();
+            
+            if(dojo.date.stamp.fromISOString(circs[circ].circ.due_date()) < (new Date()))
+                self.byName(row,'due_date').style.color="red";
+            
+            self.byName(row,'due_date').innerHTML = dojo.date.locale.format(
+                dojo.date.stamp.fromISOString(circs[circ].circ.due_date()),
+                {selector: 'date', fullYear: true}
+            );
+            if(circs[circ].circ.renewal_remaining() == 0) {
+                self.byName(row, 'renew_selector').checked = false;
+                self.byName(row, 'renew_selector').setAttribute('disabled', true);
+            }
+            self.byName(row,'format').innerHTML = circs[circ].record.types_of_resource()[0];
+            self.itemsOutTbody.appendChild(row);
+        }
+    }
 
-    self.itemsOutTbody.appendChild(row);
 }
 
 SelfCheckManager.prototype.goToTab = function(name) {
@@ -673,6 +691,27 @@ SelfCheckManager.prototype.goToTab = function(name) {
     }
 }
 
+/*
+ * Renew ticked checkbox items
+ */
+SelfCheckManager.prototype.renewItems = function() {
+
+    var checkboxes = document.getElementsByClassName('oils-selfck-renewal-selector');
+    var itemsToRenew = [];
+    for(var checkbox = 0; checkbox < checkboxes.length; checkbox++) {
+        if(checkboxes[checkbox].checked == true) {
+            itemsToRenew.push(currentItemsOut[checkbox]);
+        }
+        checkboxes[checkbox].checked = false;
+    }
+
+    for(var item = 0; item < itemsToRenew.length; item++) {
+        this.renew(itemsToRenew[item].copy.barcode())
+    }
+
+    this.drawCircPage();
+}
+
 
 SelfCheckManager.prototype.printList = function(which) {
     // reset timeout