[open-ils-commits] r19709 - trunk/Open-ILS/web/js/ui/default/acq/financial (senator)

svn at svn.open-ils.org svn at svn.open-ils.org
Fri Mar 11 15:44:38 EST 2011


Author: senator
Date: 2011-03-11 15:44:33 -0500 (Fri, 11 Mar 2011)
New Revision: 19709

Modified:
   trunk/Open-ILS/web/js/ui/default/acq/financial/claim_eligible.js
Log:
Acq: The "Claim-Ready Items" interface did not render correctly for > 1 item

The problem was racy async rendering logic. Now we look at our whole result
set and build our table accordingly at the end.

This interface should probably learn about paging one day in order to
handle large result sets.


Modified: trunk/Open-ILS/web/js/ui/default/acq/financial/claim_eligible.js
===================================================================
--- trunk/Open-ILS/web/js/ui/default/acq/financial/claim_eligible.js	2011-03-11 20:40:47 UTC (rev 19708)
+++ trunk/Open-ILS/web/js/ui/default/acq/financial/claim_eligible.js	2011-03-11 20:44:33 UTC (rev 19709)
@@ -81,21 +81,24 @@
         var count = 0;
         this.reset();
         fieldmapper.standardRequest(
-            ["open-ils.acq", "open-ils.acq.claim.eligible.lineitem_detail"], {
+            ["open-ils.acq", "open-ils.acq.claim.eligible.lineitem_detail.atomic"], {
                 "params": [openils.User.authtoken, this.filter],
                 "async": true,
-                "onresponse": function(r) {
-                    if (r = openils.Util.readResponse(r)) {
-                        if (!count++)
-                            openils.Util.show("acq-eligible-claim-controls");
-                        self.addIfMissing(r.lineitem());
-                    } else {
-                        progressDialog.hide();
+                "oncomplete": function(r) {
+                    progressDialog.hide();
+                    var rset = openils.Util.readResponse(r);
+                    if (rset.length < 1) self.showEmpty();
+                    else {
+                        var byLi = {};
+                        rset.forEach(
+                            function(r) {
+                                byLi[r.lineitem()] =
+                                    (byLi[r.lineitem()] || 0) + 1;
+                            }
+                        );
+                        for (var key in byLi)
+                            self.addIfMissing(key, byLi[key]);
                     }
-                },
-                "oncomplete": function() {
-                    if (count < 1) self.showEmpty();
-                    progressDialog.hide();
                 }
             }
         );
@@ -113,7 +116,7 @@
             nodeByName("lid_link", "eligible-li-" + liId).onclick =
                 function() {
                     location.href = oilsBasePath + "/acq/po/view/" +
-                        self.liCache[liId].purchase_order().id() + "," +
+                        self.liCache[liId].purchase_order().id() + "/" +
                         liId;
                 };
             openils.Util.show(
@@ -124,10 +127,7 @@
 
     /* Despite being called with an argument that's a lineitem ID, this method
      * is actually called once per lineitem _detail_. */
-    this.addIfMissing = function(liId) {
-        this._updateLidLink(liId);
-        if (this.liCache[liId]) return;
-
+    this.addIfMissing = function(liId, number_of_appearances) {
         var row = dojo.clone(this.rowTemplate);
 
         var checkbox = nodeByName("selector", row);
@@ -141,6 +141,9 @@
                 dojo.attr(row, "id", "eligible-li-" + liId);
                 dojo.attr(checkbox, "value", liId);
                 dojo.place(row, self.tBody, "last");
+
+                for (var i = 0; i < number_of_appearances; i++)
+                    self._updateLidLink(liId);
             }
         );
     };



More information about the open-ils-commits mailing list