Functioning Picklist grid.
authordjfiander <djfiander@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 28 Apr 2008 01:32:44 +0000 (01:32 +0000)
committerdjfiander <djfiander@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 28 Apr 2008 01:32:44 +0000 (01:32 +0000)
TODO: use vendor names, not indices, and hook up line item detail display

git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@9463 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/js/dojo/openils/acq/Picklist.js
Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html

index ad31894..de6710a 100644 (file)
@@ -1,52 +1,71 @@
+/* ---------------------------------------------------------------------------
+ * 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);
 };
 }
 
index 688b93f..b3cd46c 100644 (file)
 
     <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>