+++ /dev/null
-dojo.require('dojo.data.ItemFileReadStore');
-dojo.require('dijit.layout.SplitContainer');
-dojo.require('dijit.Dialog');
-dojo.require('dijit.form.FilteringSelect');
-dojo.require('dijit.form.Button');
-dojo.require('dojox.grid.Grid');
-dojo.require('dojo.date.locale');
-dojo.require('dojo.date.stamp');
-
-
-dojo.require("openils.User");
-dojo.require("openils.acq.Fund");
-dojo.require("openils.acq.Lineitem");
-dojo.require('openils.acq.Provider');
-dojo.require("openils.widget.FundSelector");
-dojo.require('openils.editors');
-dojo.require('openils.Event');
-dojo.require("openils.widget.OrgUnitFilteringSelect");
-dojo.require("fieldmapper.OrgUtils");
-
-/* put all the accessors, etc. into a local object for namespacing */
-var JUBGrid = {
- jubGrid : null,
- lineitems : [], // full list of lineitem objects to display
- getLi : function(id) {
- // given an ID, returns the lineitem object from the list
- for(var i in JUBGrid.lineitems) {
- var li = JUBGrid.lineitems[i];
- if(li.id() == id)
- return li;
- }
- },
-
- _getMARCAttr : function(rowIndex, attr) {
- var data = JUBGrid.jubGrid.model.getRow(rowIndex);
- if (!data) return '';
- return new openils.acq.Lineitem(
- {lineitem:JUBGrid.getLi(data.id)}).findAttr(attr, 'lineitem_marc_attr_definition')
- },
- getJUBTitle : function(rowIndex) {
- return JUBGrid._getMARCAttr(rowIndex, 'title');
- },
- getJUBAuthor : function(rowIndex) {
- return JUBGrid._getMARCAttr(rowIndex, 'author');
- },
- getJUBIsbn : function(rowIndex) {
- return JUBGrid._getMARCAttr(rowIndex, 'isbn');
- },
- getJUBActualPrice : function(rowIndex) {
- var data = JUBGrid.jubGrid.model.getRow(rowIndex);
- if (!data) return '';
- var price = new openils.acq.Lineitem(
- {lineitem:JUBGrid.getLi(data.id)}).getActualPrice();
- if(price) return price.price;
- return ''
- },
- getJUBEstimatedPrice : function(rowIndex) {
- var data = JUBGrid.jubGrid.model.getRow(rowIndex);
- if (!data) return '';
- var price = new openils.acq.Lineitem(
- {lineitem:JUBGrid.getLi(data.id)}).getEstimatedPrice();
- if(price) return price.price;
- return ''
- },
- getJUBPubdate : function(rowIndex) {
- return JUBGrid._getMARCAttr(rowIndex, 'pubdate');
- },
- getProvider : function(rowIndex) {
- data = JUBGrid.jubGrid.model.getRow(rowIndex);
- if(!data || !data.provider) return;
- return openils.acq.Provider.retrieve(data.provider).code();
- },
- getRecvTime : function(rowIndex) {
- var data = JUBGrid.jubDetailGrid.model.getRow(rowIndex);
- if (!(data && data.recv_time)) return '';
- var date = dojo.date.stamp.fromISOString(data.recv_time);
- return dojo.date.locale.format(date, {formatLength:'medium'});
- },
- getCopyLocation : function(rowIndex) {
- var data = JUBGrid.jubDetailGrid.model.getRow(rowIndex);
- if(!data || !data.location) return '';
- return openils.CopyLocation.retrieve(data.location).name();
- },
- getLIDFundName : function(rowIndex) {
- var data = JUBGrid.jubDetailGrid.model.getRow(rowIndex);
- if (!data || !data.fund) return;
- try {
- return openils.acq.Fund.retrieve(data.fund).name();
- } catch (evt) {
- return data.fund;
- }
- },
- getLIDFundCode : function(rowIndex) {
- var data = JUBGrid.jubDetailGrid.model.getRow(rowIndex);
- if (!data || !data.fund) return;
- try {
- return openils.acq.Fund.retrieve(data.fund).code();
- } catch (evt) {
- return data.fund;
- }
- },
- getLIDLibName : function(rowIndex) {
- var data = JUBGrid.jubDetailGrid.model.getRow(rowIndex);
- if (!data || !data.owning_lib) return;
- return fieldmapper.aou.findOrgUnit(data.owning_lib).shortname();
- },
-
- gridDataChanged : function(newVal, rowIdx, cellIdx) {
- // cellIdx == -1 if you are editing a column that
- // is not represented in the data model. Khaaaaaaan!!!
- },
-
- populate : function(gridWidget, model, lineitems) {
- for (var i in lineitems) {
- JUBGrid.lineitems[lineitems[i].id()] = lineitems[i];
- }
- JUBGrid.jubGrid = gridWidget;
- JUBGrid.jubGrid.setModel(model);
- if(JUBGrid.showDetails) {
- dojo.connect(gridWidget, "onRowClick",
- function(evt) {
- var jub = model.getRow(evt.rowIndex);
- var grid;
-
- JUBGrid.jubDetailGrid.lineitemID = jub.id;
-
- //if (jub.state == "approved") {
- if (false) { // need finer grained control here
- grid = JUBGrid.jubDetailGridLayoutReadOnly;
- } else {
- grid = JUBGrid.jubDetailGridLayout;
- }
- openils.acq.Lineitem.loadLIDGrid(
- JUBGrid.jubDetailGrid,
- JUBGrid.jubGrid.model.getRow(evt.rowIndex).id, grid);
- }
- );
- }
- // capture changes to lineitems
- dojo.connect(model.store, "onSet", JUBGrid.onJUBSet);
- gridWidget.update();
- },
-
- approveJUB: function(evt) {
- var list = [];
- var selected = JUBGrid.jubGrid.selection.getSelected();
- for (var idx = 0; idx < selected.length; idx++) {
- var rowIdx = selected[idx];
- JUBGrid.approveSingleJUB(JUBGrid.jubGrid.model.getRow(rowIdx));
- }
- },
-
- approveSingleJUB: function(jub) {
- var li = new openils.acq.Lineitem({lineitem:JUBGrid.getLi(jub.id)});
- var approveStore = function(evt) {
- if (evt) {
- // something bad happened
- console.log("jubgrid.js: approveJUB: error:");
- console.dir(evt);
- alert("Error: "+evt.desc);
- } else {
- var approveACQLI = function(jub, rq) {
- JUBGrid.jubGrid.model.store.setValue(jub, "state", "approved");
- JUBGrid.jubGrid.model.refresh();
- JUBGrid.jubGrid.update();
- // Reload lineitem details, read-only
- //openils.acq.Lineitem.loadLIDGrid(JUBGrid.jubDetailGrid, li.id(), JUBGrid.jubDetailGridLayout);
- //JUBGrid.jubDetailGridLayoutReadOnly);
- };
- JUBGrid.jubGrid.model.store.fetch({query:{id:jub.id}, onItem: approveACQLI});
- }
- };
-
- li.approve(approveStore);
- },
-
-
- removeSelectedJUBs: function(evt) {
-
- function deleteList(list, idx, oncomplete) {
- if(idx >= list.length)
- return oncomplete();
- fieldmapper.standardRequest([
- 'open-ils.acq',
- 'open-ils.acq.lineitem.delete'],
- { async: true,
- params: [openils.User.authtoken, list[idx].id()],
- oncomplete: function(r) {
- var res = r.recv().content();
- if(openils.Event.parse(res))
- alert(openils.Event.parse(res));
- deleteList(list, ++idx, oncomplete);
- }
- }
- );
- }
-
- var lineitems = JUBGrid.lineitems;
- var deleteMe = [];
- var keepMe = [];
- var selected = JUBGrid.jubGrid.selection.getSelected();
-
- for(var id in lineitems) {
- var deleted = false;
- for(var i = 0; i < selected.length; i++) {
- var rowIdx = selected[i];
- var jubid = JUBGrid.jubGrid.model.getRow(rowIdx).id;
- if(jubid == id) {
- if (lineitems[id].state() == 'new') {
- deleteMe.push(lineitems[id]);
- deleted = true;
- } else {
- alert("Can not delete line item "+id+
- ": item is "+lineitems[id].state());
- }
- }
- }
- if(!deleted)
- keepMe[id] = lineitems[id];
- }
-
- JUBGrid.lineitems = keepMe;
- deleteList(deleteMe, 0, function(){
- JUBGrid.jubGrid.model.store =
- new dojo.data.ItemFileReadStore({data:jub.toStoreData(keepMe)});
- JUBGrid.jubGrid.model.refresh();
- JUBGrid.jubGrid.update();
- });
- },
-
- deleteLID: function(evt) {
- var list =[];
- var selected = JUBGrid.jubDetailGrid.selection.getSelected();
- for (var idx = 0; idx < selected.length; idx++) {
- var rowIdx = selected[idx];
- var lid = JUBGrid.jubDetailGrid.model.getRow(rowIdx);
- var deleteFromStore = function (evt) {
-
- if (evt) {
- // something bad happened
- alert("Error: "+evt.desc);
- } else {
- var deleteItem = function(item, rq) {
- JUBGrid.jubDetailGrid.model.store.deleteItem(item);
- };
- var updateCount = function(item) {
- var newval = JUBGrid.jubGrid.model.store.getValue(item, "item_count");
- JUBGrid.jubGrid.model.store.setValue(item, "item_count", newval-1);
- JUBGrid.jubGrid.update();
- };
-
- JUBGrid.jubDetailGrid.model.store.fetch({query:{id:lid.id},
- onItem: deleteItem});
- JUBGrid.jubGrid.model.store.fetch({query:{id:JUBGrid.jubDetailGrid.lineitemID},
- onItem: updateCount});
- }
- JUBGrid.jubDetailGrid.update();
- };
-
- openils.acq.Lineitem.deleteLID(lid.id, deleteFromStore);
- }
- },
-
- createLID: function(fields) {
- fields['lineitem'] = JUBGrid.jubDetailGrid.lineitemID;
- var addToStore = function (lid) {
- JUBGrid.jubDetailGrid.model.store.newItem(acqlid.toStoreData([lid]).items[0]);
- JUBGrid.jubDetailGrid.refresh();
- JUBGrid.jubGrid.update();
- JUBGrid.jubGrid.refresh();
- }
- openils.acq.Lineitem.createLID(fields, addToStore);
- },
-
- receiveLID: function(evt) {
- var list =[];
- var selected = JUBGrid.jubDetailGrid.selection.getSelected();
- for (var idx = 0; idx < selected.length; idx++) {
- var rowIdx = selected[idx];
- var lid = JUBGrid.jubDetailGrid.model.getRow(rowIdx);
- list.push(lid.id);
- }
- if(lid != null) { // is at least one selected?
- JUBGrid._receiveLIDList(list, 0,
- function() {
- delete openils.acq.Lineitem.ModelCache[lid.lineitem];
- openils.acq.Lineitem.loadLIDGrid(
- JUBGrid.jubDetailGrid, lid.lineitem, JUBGrid.jubDetailGridLayout);
- }
- );
- }
- },
-
- // loop through the list of LIDs and mark them as received
- _receiveLIDList: function(list, idx, callback) {
- if(idx >= list.length)
- return callback();
- fieldmapper.standardRequest(
- ['open-ils.acq', 'open-ils.acq.lineitem_detail.receive'],
- { asnync: true,
- params: [openils.User.authtoken, list[idx++]],
- oncomplete: function(r) {
- var res = r.recv().content();
- if(e = openils.Event.parse(res))
- return alert(e);
- JUBGrid._receiveLIDList(list, idx, callback);
- }
- }
- );
- },
-
-
- // called when a lineitem is edited
- onJUBSet: function (griditem, attr, oldVal,newVal) {
- var item;
-
- var updateDone = function(r) {
- var stat = r.recv().content();
- if(e = openils.Event.parse(stat))
- console.dir(e);
- };
-
- // after an attribute has been updated
- var attrUpdateDone = function(r, attr) {
- var res = r.recv().content();
- if(e = openils.Event.parse(res))
- return alert(e);
-
- var oldVal = new openils.acq.Lineitem(
- {lineitem:item}).findAttr(attr, 'lineitem_local_attr_definition');
-
- if(oldVal) {
- // if this attr already exists on the object, just update the value
- for(var i = 0; i < item.attributes().length; i++) {
- var attrobj = item.attributes()[i];
- if(attrobj.attr_type() == 'lineitem_local_attr_definition' && attrobj.attr_name() == attr) {
- attrobj.attr_value(newVal);
- }
- }
- } else {
- // if this is a new attribute, create a new object to match reality
- liad = new acqlia();
- liad.attr_type('lineitem_local_attr_definition');
- liad.attr_value(newVal);
- liad.attr_name(attr);
- liad.id(res);
- item.attributes().push(liad);
- }
- }
-
- if (oldVal == newVal) {
- return;
- }
-
- item = JUBGrid.lineitems[griditem.id];
- if (attr == "provider") {
- if(newVal == '')
- newVal = null;
- item.provider(newVal);
-
- } else if(attr == 'estimated_price' || attr == 'actual_price') {
- fieldmapper.standardRequest(
- ['open-ils.acq', 'open-ils.acq.lineitem_local_attr.set'],
- { async: true,
- params: [openils.User.authtoken, item.id(), attr, newVal],
- oncomplete: function(r) {attrUpdateDone(r, attr); }
- }
- );
- } 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
- }
- );
- },
-};
-