From 9b5cf75acb12be908087c1eae4ade5128ef36692 Mon Sep 17 00:00:00 2001 From: djfiander Date: Wed, 23 Jul 2008 00:52:27 +0000 Subject: [PATCH] Provider editing works 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 | 30 ++++++++++++++++++ Open-ILS/web/js/dojo/openils/acq/Provider.js | 37 ++++++++++++++++++++++ Open-ILS/web/js/dojo/openils/editors.js | 12 +++++++ .../web/js/dojo/openils/widget/ProviderSelector.js | 18 +++++++++++ .../templates/oils/default/acq/picklist/view.html | 15 ++++++++- .../templates/oils/default/common/jubgrid.html | 8 +++-- 6 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 Open-ILS/web/js/dojo/openils/widget/ProviderSelector.js diff --git a/Open-ILS/web/js/dojo/openils/acq/Picklist.js b/Open-ILS/web/js/dojo/openils/acq/Picklist.js index 9abc435461..4d5881cccc 100644 --- a/Open-ILS/web/js/dojo/openils/acq/Picklist.js +++ b/Open-ILS/web/js/dojo/openils/acq/Picklist.js @@ -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 */ diff --git a/Open-ILS/web/js/dojo/openils/acq/Provider.js b/Open-ILS/web/js/dojo/openils/acq/Provider.js index a9ec8e9c34..9803bd00e3 100644 --- a/Open-ILS/web/js/dojo/openils/acq/Provider.js +++ b/Open-ILS/web/js/dojo/openils/acq/Provider.js @@ -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 + } + ) + } +} } diff --git a/Open-ILS/web/js/dojo/openils/editors.js b/Open-ILS/web/js/dojo/openils/editors.js index e7ecd5fbfd..2b83304c66 100644 --- a/Open-ILS/web/js/dojo/openils/editors.js +++ b/Open-ILS/web/js/dojo/openils/editors.js @@ -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 index 0000000000..5b6591ff0e --- /dev/null +++ b/Open-ILS/web/js/dojo/openils/widget/ProviderSelector.js @@ -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], + { + }); +} diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html index 0cb1784515..5290a0a333 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html @@ -37,7 +37,20 @@ 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); diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/common/jubgrid.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/common/jubgrid.html index 0493ecf02a..c0b46d6653 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/common/jubgrid.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/common/jubgrid.html @@ -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, -- 2.11.0