LP#1329920: (follow-up) set searchFormat as well
[working/Evergreen.git] / Open-ILS / web / js / ui / default / conify / global / acq / distribution_formula.js
index 69e3932..1b5b9ac 100644 (file)
@@ -12,7 +12,10 @@ var formCache = {};
 var formula, entryTbody, entryTemplate, dndSource;
 var virtualId = -1;
 var pcrud;
-
+var _collection_code_textboxes = [];
+var _collection_code_kludge_active = false;
+var fundSearchFilter = {active : 't'};
+var fundLabelFormat = ['${0} (${1})', 'code', 'year'];
 
 function gridDataLoader() {
     fListGrid.resetStore();
@@ -37,13 +40,24 @@ function gridDataLoader() {
     );
 }
 
+function setFundSearchFilter(callback) {
+    new openils.User().getPermOrgList(
+        ['ADMIN_ACQ_DISTRIB_FORMULA'],
+        function(orgs) { 
+            fundSearchFilter.org = orgs;
+            if (callback) callback();
+        },
+        true, true // descendants, id_list
+    );
+}
+
 function draw() {
 
     pcrud = new openils.PermaCrud();
 
     if(formulaId) {
         openils.Util.hide('formula-list-div');
-        drawFormulaSummary();
+        setFundSearchFilter(drawFormulaSummary);
     } else {
 
         openils.Util.hide('formula-entry-div');
@@ -145,13 +159,16 @@ function addEntry(entry) {
     };
 
     dojo.forEach(
-        ['owning_lib', 'location', 'item_count'],
+        ['owning_lib', 'location', 'fund', 'circ_modifier', 'collection_code', 'item_count'],
         function(field) {
             new openils.widget.AutoFieldWidget({
                 forceSync : true,
                 fmField : field, 
                 fmObject : entry,
                 fmClass : 'acqdfe',
+                labelFormat: (field == 'fund') ? fundLabelFormat : null,
+                searchFormat: (field == 'fund') ? fundLabelFormat : null,
+                searchFilter : (field == 'fund') ? fundSearchFilter : null,
                 parentNode : byName(row, field),
                 orgDefaultsToWs : true,
                 orgLimitPerms : ['ADMIN_ACQ_DISTRIB_FORMULA'],
@@ -159,6 +176,10 @@ function addEntry(entry) {
                 dijitArgs : (field == 'item_count') ? {min:1, places:0} : null
             }).build(
                 function(w, ww) {
+                    if (field == "collection_code") {
+                        /* kludge for glitchy textbox */
+                        _collection_code_textboxes.push(w);
+                    }
                     dojo.connect(w, 'onChange', 
                         function(newVal) {
                             entry[field]( newVal );
@@ -169,6 +190,35 @@ function addEntry(entry) {
             );
         }
     );
+
+    /* For some reason (bug) the dndSource intercepts onMouseDown events
+     * that should hit dijit textboxes in our table thingy. Other dijits
+     * (buttons, filteringselects, etc) seem not to be affected.  This
+     * workaround deals with the only textboxes we have for now: the ones
+     * for the collection_code field. */
+    if (!_collection_code_kludge_active) {
+        _collection_code_kludge_active = true;
+        var original = dojo.hitch(dndSource, dndSource.onMouseDown);
+        dndSource.onMouseDown = function(e) {
+            var hits = _collection_code_textboxes.filter(
+                function(w) {
+                    var c = dojo.coords(w.domNode);
+                    if (e.clientX >= c.x && e.clientX < c.x + c.w) {
+                        if (e.clientY >= c.y && e.clientY < c.y + c.h) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }
+            );
+
+            if (hits.length) {
+                hits[0].focus();
+            } else {
+                original(e);
+            }
+        };
+    }
 }
 
 function saveFormula() {