+/* ---------------------------------------------------------------------------
+ * Copyright (C) 2008 Georgia Public Library Service
+ * David J. Fiander <david@fiander.info>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * ---------------------------------------------------------------------------
+ */
+
if(!dojo._hasResource['openils.acq.Picklist']) {
dojo._hasResource['openils.acq.Picklist'] = true;
dojo.provide('openils.acq.Picklist');
-dojo.require('util.Dojo');
+
+dojo.require('fieldmapper.Fieldmapper');
/** Declare the Picklist class with dojo */
dojo.declare('openils.acq.Picklist', null, {
/* add instance methods here if necessary */
});
- openils.acq.Picklist.find_attr = function(li, at_name, at_type) {
- for (var i in li.attributes()) {
- var attr = li.attributes()[i];
- if (attr.attr_type() == at_type && attr.attr_name() == at_name) {
- return attr.attr_value();
- }
+openils.acq.Picklist.cache = {};
+
+openils.acq.Picklist.createStore = function(pl_id, onComplete) {
+ // Fetches the list of titles in a picklist and builds a grid
+
+ function mkStore(r) {
+ var msg;
+ var items = [];
+ while (msg = r.recv()) {
+ var data = msg.content();
+ openils.acq.Picklist.cache[data.id()] = data;
+
+ items.push(data);
+ }
+ onComplete(jub.toStoreData(items));
+ }
+
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.lineitem.picklist.retrieve'],
+ { async: true,
+ params: [openils.User.authtoken, pl_id, {flesh_attrs:1}],
+ oncomplete: mkStore
+ });
+};
+
+openils.acq.Picklist.find_attr = function(id, at_name, at_type) {
+ var li = openils.acq.Picklist.cache[id];
+ for (var i in li.attributes()) {
+ var attr = li.attributes()[i];
+ if (attr.attr_type() == at_type && attr.attr_name() == at_name) {
+ return attr.attr_value();
}
- return '';
- };
-
-
- openils.acq.Picklist.loadGrid = function(domId, columns, pl_id) {
- /** Fetches the list of picklists and builds a grid from them */
-
- var gridRefs = util.Dojo.buildSimpleGrid(domId, columns, [], 'id', true);
- var ses = new OpenSRF.ClientSession('open-ils.acq');
- var req = ses.request('open-ils.acq.lineitem.picklist.retrieve',
- openils.User.authtoken, pl_id, {flesh_attrs:1});
-
- req.oncomplete = function(r) {
- var msg
- gridRefs.grid.setModel(gridRefs.model);
- gridRefs.model.query = {id:'*'};
- while(msg = r.recv()) {
- var jub = msg.content();
- //alert(js2JSON(jub));
- gridRefs.store.newItem({
- id:jub.id(),
- title:openils.acq.Picklist.find_attr(jub, "title", "lineitem_marc_attr_definition"),
- price:openils.acq.Picklist.find_attr(jub, "price", "lineitem_marc_attr_definition"),
- provider:jub.provider(),
- copies:jub.item_count()
- });
- }
- gridRefs.grid.update();
- };
-
- req.send();
- return gridRefs.grid;
+ }
+ return '';
+};
+
+openils.acq.Picklist.onRowClick = function(evt) {
+ var gridRefs = openils.acq.Picklist._gridRefs;
+ var row = gridRefs.grid.model.getRow(evt.rowIndex);
+
+ openils.acq.Lineitems.loadGrid('oils-acq-picklist-details-grid', row.id);
};
}
<script type="text/javascript">
dojo.require("dijit.layout.SplitContainer")
+ dojo.require('openils.acq.Picklist');
+ </script>
+ <script type='text/javascript'>
+ function getJUBTitle(rowIndex) {
+ data = pickListGrid.model.getRow(rowIndex);
+ if (!data) return '';
+ return openils.acq.Picklist.find_attr(data.id, "title", "lineitem_marc_attr_definition")
+ }
+ function getJUBPrice(rowIndex) {
+ data = pickListGrid.model.getRow(rowIndex);
+ if (!data) return;
+ return openils.acq.Picklist.find_attr(data.id, "price", "lineitem_marc_attr_definition")
+ }
</script>
</%def>
<%def name="page_title()">${_('Picklist')}</%def>
</div>
<div dojoType="dijit.layout.SplitContainer"
orientation="vertical" sizerWidth="5"
- activeSizing="0" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="20">
- <div id="oils-acq-picklist-grid"> </div>
- <script type="text/javascript" src="${c.oils.core.media_prefix.value}/js/util/Dojo.js"></script>
- <script type="text/javascript" src="${c.oils.core.media_prefix.value}/js/openils/acq/Picklist.js"></script>
+ activeSizing="1" layoutAlign="client">
+ <div id="oils-acq.picklist-container"
+ dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="20">
+ <div jsid='pickListGrid' dojoType='dojox.Grid'
+ id="oils-acq-picklist-grid"> </div>
<script type="text/javascript">
- dojo.require('openils.acq.Picklist');
-
- var cols = [
- {name: "${_('ID')}", field: 'id'},
- {name: "${_('Title')}", width: "50%", field: 'title'},
- {name: "${_('Price')}", field: 'price'},
- {name: "${_('Vendor')}", field: 'provider'},
- {name: "${_('# of Copies')}", field: 'copies'}
- ];
-
- dojo.addOnLoad(function(){openils.acq.Picklist.loadGrid('oils-acq-picklist-grid', cols, ${c.oils.acq.picklist.value.id()})});
+ dojo.require("openils.acq.Picklist");
+ dojo.require('dojo.data.ItemFileWriteStore');
+ var layout = [{
+ cells: [[
+ {name: "ID", field: 'id'},
+ {name: "Title", width: "50%", get:getJUBTitle},
+ {name: "Price", get:getJUBPrice},
+ {name: "Vendor", field: 'provider'},
+ {name: "# of Copies", field: 'item_count'}
+ ]]
+ }];
+
+ openils.acq.Picklist.createStore(${c.oils.acq.picklist.value.id()},
+ function(storeData) {
+ var store = new dojo.data.ItemFileReadStore({data:storeData});
+ var model = new dojox.grid.data.DojoData(null, store,
+ {rowsPerPage:20, clientSort:true,
+ query:{id:'*'}});
+ pickListGrid.setStructure(layout);
+ pickListGrid.setModel(model);
+ pickListGrid.update();
+ });
</script>
</div>
<div dojoType="dijit.layout.ContentPane" sizeMin="20"
sizeShare="80">
- <p>Hi!</p>
- <div id="oils-acq-picklist-details-grid"> </div>
+ <script type="text/javascript">
+ dojo.require("openils.acq.Lineitems");
+
+ var li_cols = [
+ {name: ('Fund'), field: 'fund'},
+ {name: ('Location'), field: 'location'}
+ ];
+
+ dojo.addOnLoad(function(){openils.acq.Lineitems.initGrid('oils-acq-picklist-details-grid', li_cols);});
+ </script>
+ <div id="oils-acq-picklist-details-grid">
+ <p>Copy order details go here...</p>
+ </div>
</div>
</div>
</div>