Converted the provider list page to a JS/dojo grid version to start out with somethin...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 5 Apr 2008 13:04:16 +0000 (13:04 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 5 Apr 2008 13:04:16 +0000 (13:04 +0000)
Moved the Dojo CSS imports into the default skin css
Added the opensrf and ILS JS imports into base.html.  As noted in the source, some/many of
those will also be dojo-ized over time.
Added the configured prefix to all JS imports in the HTML files

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

Open-ILS/web/oilsweb/oilsweb/controllers/acq/provider.py
Open-ILS/web/oilsweb/oilsweb/public/oils/media/css/skin/default.css
Open-ILS/web/oilsweb/oilsweb/public/oils/media/js/openils/acq/Provider.js [new file with mode: 0644]
Open-ILS/web/oilsweb/oilsweb/templates/oils/base.html
Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/financial/list_providers.html

index 6bdd951..ac16702 100644 (file)
@@ -50,6 +50,7 @@ class ProviderController(BaseController):
 
         return r.render('acq/financial/create_provider.html')
 
+    ''' Pure Python version
     def list(self):
         r = RequestMgr()
         providers = provider_mgr.list(r)
@@ -57,4 +58,10 @@ class ProviderController(BaseController):
             f.owner(OrgUtil.get_org_unit(f.owner()))
         r.ctx.acq.provider_list.value = providers
         return r.render('acq/financial/list_providers.html')
+    '''
+
+
+    def list(self):
+        return RequestMgr().render('acq/financial/list_providers.html')
+
 
index 8eab61e..51e41c0 100644 (file)
@@ -1,6 +1,13 @@
 /* import the default css for the install applications */
 @import "default/acq.css";
 @import "default/admin.css";
+/* import the dojo CSS */
+@import "../../js/dojo/dojox/grid/_grid/Grid.css";
+@import "../../js/dojo/dijit/themes/tundra/tundra.css";
+@import "../../js/dojo/dojo/resources/dojo.css";
+
+
+
 
 /* base default style */
 
@@ -39,3 +46,9 @@ html, body, #oils-base-body-block {
 
 .label { margin: 1px; }
 
+
+/* local dojo style enhancements ----------------------------------- */
+.dojoxGrid {border: 1px solid #333; height: 90%;}
+.dojoxGrid-cell {padding: 8px;}
+/* ----------------------------------------------------------------- */
+
diff --git a/Open-ILS/web/oilsweb/oilsweb/public/oils/media/js/openils/acq/Provider.js b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/js/openils/acq/Provider.js
new file mode 100644 (file)
index 0000000..bc23948
--- /dev/null
@@ -0,0 +1,58 @@
+if(!dojo._hasResource['openils.acq.Provider']) {
+dojo._hasResource['openils.acq.Provider'] = true;
+dojo.provide('openils.acq.Provider');
+
+/** Declare the Provider class with dojo */
+dojo.declare('openils.acq.Provider', null, {
+    /* add instance methods here if necessary */
+});
+
+/* define some static provider methods ------- */
+
+openils.acq.Provider.createProviderGrid = function(domId, structure) {
+    /** Fetches the list of providers and builds a grid from them */
+    openils.acq.Provider.fetchList(
+        function(providers) {
+            items = [];
+            for(var p in providers) {
+                var prov = providers[p];
+                items.push({
+                    id:prov.id(),
+                    name:prov.name(), 
+                    owner: findOrgUnit(prov.owner()).name(),
+                    currency_type:prov.currency_type()
+                });
+            }
+            openils.acq.Provider.buildGrid(domId, structure, items);
+        }
+    );
+}
+
+openils.acq.Provider.fetchList = function(callback) {
+    /** Retrieves the list of provider objects that I have permission to view */
+    var ses = new OpenSRF.ClientSession('open-ils.acq');
+    var req = ses.request('open-ils.acq.provider.org.retrieve', oilsAuthtoken); /* XXX make this a streaming call */
+    req.oncomplete = function(r) {
+        callback(r.recv().content());
+    };
+    req.send();
+};
+
+openils.acq.Provider.buildGrid = function(domId, structure, dataList, identifier) {
+    /** Builds a dojo grid based on the provided data.  
+     * @param domId The DOM node where the grid lives 
+     * @param structure The layout of the grid. i.e. colums.
+     * @param dataList List of objects (hashes) to be inserted into the grid.
+     * @paramd identifier The ID field for objects in the grid.  Defaults to 'id'
+     */
+    identifier = (identifier) ? identifier : 'id';
+    var store = new dojo.data.ItemFileWriteStore({data:{identifier:identifier,items:dataList}});
+    var model = new dojox.grid.data.DojoData(null, store, {rowsPerPage: 20, clientSort: true});
+    var grid = new dojox.Grid({structure: structure, model: model}, dojo.byId(domId));
+    grid.setModel(model);
+    grid.setStructure(structure);
+    grid.startup();
+    return {grid:grid, store:store, model:model};
+};
+}
+
index cb35708..4a2b426 100644 (file)
         <%def name="page_title()">${_('Evergreen Acquisitions')}</%def>
         <title>${self.page_title()}</title>
         ${self.block_css()}
-       ${self.block_js()}
+        ${self.block_js()}
     </head>
 </%def>
 
 <%def name='block_body()'>
-<body>${self.block_body_content()}</body>
+    <body>${self.block_body_content()}</body>
 </%def>
 <%def name='block_body_content()'/>
 
 <%def name='block_css()'>
-    <style type="text/css">
-        @import "/js/dijit/themes/tundra/tundra.css";
-        @import "/js/dojo/resources/dojo.css";
-    </style>
-    <link rel='stylesheet' type='text/css' href='${c.oils.core.media_prefix.value}/css/skin/${c.oils.core.skin.value}.css'/>
-    <link rel='stylesheet' type='text/css' href='${c.oils.core.media_prefix.value}/css/theme/${c.oils.core.theme.value}.css'/>
+    <link rel='stylesheet' type='text/css' 
+        href='${c.oils.core.media_prefix.value}/css/skin/${c.oils.core.skin.value}.css'/>
+    <link rel='stylesheet' type='text/css' 
+        href='${c.oils.core.media_prefix.value}/css/theme/${c.oils.core.theme.value}.css'/>
 </%def>
 
 <%def name='block_js()'>
-    <script type="text/javascript" src="/js/dojo/dojo.js"
-            djConfig="parseOnLoad: true"></script>
-    <script type="text/javascript">
-        dojo.require("dojo.parser");
 
-       dojo.require("dijit.layout.LayoutContainer")
-       dojo.require("dijit.layout.ContentPane")
+    <!-- set up some global JS variables -->
+    <script type='text/javascript'>
+        var oilsAuthtoken = '${c.oils.core.authtoken.value}';
+    </script>
+
+    <!-- some of these will dojo-ized ... -->
+    <script src='${c.oils.core.media_prefix.value}/js/opensrf/JSON_v1.js'> </script>
+    <script src='${c.oils.core.media_prefix.value}/js/opensrf/opensrf.js'> </script>
+    <script src='${c.oils.core.media_prefix.value}/js/opensrf/opensrf_xhr.js'> </script>
+    <script src='${c.oils.core.media_prefix.value}/js/openils/fmall.js'> </script>
+    <script src='${c.oils.core.media_prefix.value}/js/openils/fmgen.js'> </script>
+    <script src='${c.oils.core.media_prefix.value}/js/openils/OrgTree.js'> </script>
+    <script src='${c.oils.core.media_prefix.value}/js/openils/org_utils.js'> </script>
 
-       dojo.require("dijit.form.Form")
-       dojo.require("dijit.form.Button");
-       dojo.require("dijit.form.TextBox");
-       dojo.require("dijit.form.NumberTextBox");
-       dojo.require("dijit.form.NumberSpinner");
-       dojo.require("dijit.form.FilteringSelect");
+    <script type="text/javascript" src="${c.oils.core.media_prefix.value}/js/dojo/dojo/dojo.js"
+        djConfig="parseOnLoad: true"></script>
+
+    <script type="text/javascript">
+        dojo.require("dojo.parser");
+        dojo.require("dijit.layout.LayoutContainer")
+        dojo.require("dijit.layout.ContentPane")
+        dojo.require("dijit.form.Form")
+        dojo.require("dijit.form.Button");
+        dojo.require("dijit.form.TextBox");
+        dojo.require("dijit.form.NumberTextBox");
+        dojo.require("dijit.form.NumberSpinner");
+        dojo.require("dijit.form.FilteringSelect");
+        dojo.require("dojo.data.ItemFileWriteStore");
+        dojo.require("dojox.grid.Grid");
+        dojo.require("dojox.grid._data.model");
+        dojo.require("fieldmapper.dojoData");
     </script>
 </%def>
+
index e28816b..800e567 100644 (file)
         <a href='${c.oils.acq.prefix.value}/provider/create'>${_('New Provider')}</a>
     </div>
 </div>
+<div id='oils-acq-provider-grid'> </div>
+<script>
+    dojo.require('openils.acq.Provider');
 
+    /* define the layout columns */
+    var cols = [{   
+        cells : [[
+            {name: '${_("ID")}', field: 'id'},
+            {name: '${_("Name")}', field: "name"}, 
+            {name: '${_("Owner")}', field: "owner"}, 
+            {name: '${_("Currency Type")}', field: "currency_type"}
+        ]]
+    }];
 
-<table class='oils-admin-table'>
-    <thead>
-        <tr>
-            <td>${_('Name')}</td>
-            <td>${_('Owner')}</td>
-            <td>${_('Currency Type')}</td>
-        </tr>
-    </thead>
-    <tbody>
-        % for provider in c.oils.acq.provider_list.value:
-        <tr>
-            <td><a href='${c.oils.acq.prefix.value}/provider/view/${provider.id()}'>${provider.name()}</a></td>
-            <td>${provider.owner().name()}</td> 
-            <td>${provider.currency_type()}</td> 
-        </tr>
-        %endfor
-    </tbody>
-</table>
+    /* build the provider grid on page load */
+    dojo.addOnLoad(function(){
+        openils.acq.Provider.createProviderGrid('oils-acq-provider-grid', cols)});
+</script>
 </%def>