Provider editing works
authordjfiander <djfiander@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 23 Jul 2008 00:52:27 +0000 (00:52 +0000)
committerdjfiander <djfiander@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 23 Jul 2008 00:52:27 +0000 (00:52 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@10090 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/js/dojo/openils/acq/Picklist.js
Open-ILS/web/js/dojo/openils/acq/Provider.js
Open-ILS/web/js/dojo/openils/editors.js
Open-ILS/web/js/dojo/openils/widget/ProviderSelector.js [new file with mode: 0644]
Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html
Open-ILS/web/oilsweb/oilsweb/templates/oils/default/common/jubgrid.html

index 9abc435..4d5881c 100644 (file)
@@ -95,6 +95,36 @@ dojo.declare('openils.acq.Picklist', null, {
        }
        return '';
     },
+    onJUBSet: function (griditem, attr, oldVal,newVal) {
+       var item;
+       var updateDone = function(r) {
+           var stat = r.recv().content();
+           var evt = openils.Event.parse(stat);
+
+           if (evt) {
+               alert("Error: "+evt.desc);
+               console.dir(evt);
+           }
+       };
+
+       if (oldVal == newVal) {
+           return;
+       }
+
+       item = this._data[griditem.id];
+       if (attr = "provider") {
+           item.provider(newVal);
+       } else {
+           alert("Unexpected attr in Picklist.onSet: '"+attr+"'");
+           return;
+       }
+
+       fieldmapper.standardRequest(
+           ["open-ils.acq", "open-ils.acq.lineitem.update"],
+           {params: [openils.User.authtoken, item],
+            oncomplete: updateDone
+           });
+    },
 });
 
 /** Creates a new picklist. fields.name is required */ 
index a9ec8e9..9803bd0 100644 (file)
@@ -134,4 +134,41 @@ openils.acq.Provider._lineitemProviderAttrDefDeleteList = function(list, idx, on
     );
 }
 
+openils.acq.Provider.storeCache = [];
+
+openils.acq.Provider.buildPermProviderSelector = function(perm, selector) {
+    dojo.require('dojo.data.ItemFileReadStore');
+
+    function hookupStore(store) {
+       selector.store = store;
+       selector.startup();
+    }
+
+    function buildPicker(r) {
+       var msg;
+       var providerList = [];
+       while (msg = r.recv()) {
+           var provider = msg.content();
+           providerList.push(provider);
+       }
+
+       var store = new dojo.data.ItemFileReadStore({data:acqpro.toStoreData(providerList)});
+
+       hookupStore(store);
+       openils.acq.Provider.storeCache[perm] = store;
+    }
+
+    if (openils.acq.Provider.storeCache[perm]) {
+       hookupStore(openils.acq.Provider.storeCache[perm]);
+    } else {
+       fieldmapper.standardRequest(
+           ['open-ils.acq', 'open-ils.acq.provider.org.retrieve'],
+            {   params: [openils.User.authtoken, null,
+                        {flesh_summary:1, limit_perm:perm}],
+               oncomplete: buildPicker,
+               async: true
+            }
+       )
+    }
+}
 }
index e7ecd5f..2b83304 100644 (file)
@@ -8,6 +8,7 @@ dojo.require("dijit.form.NumberSpinner");
 dojo.require('dijit.form.FilteringSelect');
 
 dojo.require("openils.widget.FundSelector");
+dojo.require("openils.widget.ProviderSelector");
 dojo.require("openils.widget.OrgUnitFilteringSelect");
 
 dojo.require("openils.acq.Fund");
@@ -40,6 +41,17 @@ dojo.declare('openils.editors.FundSelectEditor', dojox.grid.editors.Dijit, {
     },
 });
 
+dojo.declare('openils.editors.ProviderSelectEditor', dojox.grid.editors.Dijit, {
+    editorClass: "openils.widget.ProviderSelector",
+    createEditor: function(inNode, inDatum, inRowIndex) {
+       console.log("openils.widget.ProviderSelectEditor");
+       var editor = new this.editorClass(this.getEditorProps(inDatum), inNode);
+       openils.acq.Provider.buildPermProviderSelector(this.cell.perm || this.perm,
+                                                      editor);
+       return editor;
+    },
+});
+
 dojo.declare('openils.editors.OrgUnitSelectEditor', dojox.grid.editors.Dijit, {
     editorClass: "openils.widget.OrgUnitFilteringSelect",
     createEditor: function(inNode, inDatum, inRowIndex) {
diff --git a/Open-ILS/web/js/dojo/openils/widget/ProviderSelector.js b/Open-ILS/web/js/dojo/openils/widget/ProviderSelector.js
new file mode 100644 (file)
index 0000000..5b6591f
--- /dev/null
@@ -0,0 +1,18 @@
+if(!dojo._hasResource["openils.widget.ProviderSelector"]){
+    dojo._hasResource["openils.widget.ProviderSelector"] = true;
+    dojo.provide("openils.widget.ProviderSelector");
+
+    dojo.require('openils.acq.Provider');
+    dojo.require('fieldmapper.Fieldmapper');
+    dojo.require('fieldmapper.dojoData');
+
+    /**
+     * This widget provides a specific selector for selecting
+     * a provider.
+     */
+
+    dojo.declare(
+       "openils.widget.ProviderSelector", [dijit.form.FilteringSelect],
+       {
+       });
+}
index 0cb1784..5290a0a 100644 (file)
                                    dojo.byId("oils-acq-picklist-attr-cdate").innerHTML = plist.create_time();
                                    dojo.byId("oils-acq-picklist-attr-edate").innerHTML = plist.edit_time();
                                    dojo.byId("oils-acq-picklist-attr-owner").innerHTML = plist.owner();
-                                   JUBGrid.populate(pickListGrid, model, plist._items);
+                                   JUBGrid.populate(pickListGrid,
+                                                    model,
+                                                    plist._items);
+                                   dojo.connect(model.store,
+                                                "onSet",
+                                                function(griditem,
+                                                         attr,
+                                                         oldVal,
+                                                         newVal) {
+                                                    plist.onJUBSet(griditem,
+                                                                   attr,
+                                                                   oldVal,
+                                                                   newVal);
+                                                }); 
                                });
             }
            dojo.addOnLoad(loadPL);
index 0493ecf..c0b46d6 100644 (file)
@@ -59,7 +59,10 @@ pointing to the JUB model (and store) that you have created.
             {name: '${_("ISBN")}', get:JUBGrid.getJUBIsbn},
             {name: '${_("Pubdate")}', get:JUBGrid.getJUBPubdate},
             {name: '${_("Price")}', get:JUBGrid.getJUBPrice},
-            {name: '${_("Vendor")}', get:JUBGrid.getProvider},
+            {name: '${_("Vendor")}',
+            field: 'provider', width:'auto', get:JUBGrid.getProvider,
+            editor:openils.editors.ProviderSelectEditor,
+           },
             {name: '${_("No. Copies")}', field: 'item_count'},
             {name: '${_("State")}', field: 'state'},
             {name: '${_("PO")}', get:JUBGrid.getPO}
@@ -78,8 +81,7 @@ pointing to the JUB model (and store) that you have created.
                    editor: openils.editors.OrgUnitSelectEditor
                },
             {name:"Barcode", field:"barcode", width:'auto',
-                editor:dojox.grid.editors.Dijit, 
-                editorClass: "dijit.form.TextBox" 
+                editor:dojox.grid.editors.TextBox, 
                },
             {name:"Call Number", field:"cn_label", width:'auto',
                 editor:dojox.grid.editors.Dijit,