Changeset 9463

Show
Ignore:
Timestamp:
04/27/08 21:32:44 (3 weeks ago)
Author:
djfiander
Message:

Functioning Picklist grid.
TODO: use vendor names, not indices, and hook up line item detail display

Location:
branches/acq-experiment/Open-ILS/web
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/acq-experiment/Open-ILS/web/js/dojo/openils/acq/Picklist.js

    r9326 r9463  
     1/* --------------------------------------------------------------------------- 
     2 * Copyright (C) 2008  Georgia Public Library Service 
     3 * David J. Fiander <david@fiander.info> 
     4 * 
     5 * This program is free software; you can redistribute it and/or 
     6 * modify it under the terms of the GNU General Public License 
     7 * as published by the Free Software Foundation; either version 2 
     8 * of the License, or (at your option) any later version. 
     9 * 
     10 * This program is distributed in the hope that it will be useful, 
     11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     13 * GNU General Public License for more details. 
     14 * --------------------------------------------------------------------------- 
     15 */ 
     16 
    117if(!dojo._hasResource['openils.acq.Picklist']) { 
    218dojo._hasResource['openils.acq.Picklist'] = true; 
    319dojo.provide('openils.acq.Picklist'); 
    4 dojo.require('util.Dojo'); 
     20 
     21dojo.require('fieldmapper.Fieldmapper'); 
    522 
    623/** Declare the Picklist class with dojo */ 
     
    926}); 
    1027 
    11     openils.acq.Picklist.find_attr = function(li, at_name, at_type) { 
    12         for (var i in li.attributes()) { 
    13             var attr = li.attributes()[i]; 
    14             if (attr.attr_type() == at_type && attr.attr_name() == at_name) { 
    15                 return attr.attr_value(); 
    16             } 
     28openils.acq.Picklist.cache = {}; 
     29 
     30openils.acq.Picklist.createStore = function(pl_id, onComplete) { 
     31    // Fetches the list of titles in a picklist and builds a grid 
     32 
     33    function mkStore(r) { 
     34        var msg; 
     35        var items = []; 
     36        while (msg = r.recv()) { 
     37            var data = msg.content(); 
     38            openils.acq.Picklist.cache[data.id()] = data; 
     39 
     40            items.push(data); 
    1741        } 
    18         return ''; 
    19     }; 
     42        onComplete(jub.toStoreData(items)); 
     43    } 
    2044 
     45    fieldmapper.standardRequest( 
     46        ['open-ils.acq', 'open-ils.acq.lineitem.picklist.retrieve'], 
     47        { async: true, 
     48          params: [openils.User.authtoken, pl_id, {flesh_attrs:1}], 
     49          oncomplete: mkStore 
     50        }); 
     51}; 
    2152 
    22     openils.acq.Picklist.loadGrid = function(domId, columns, pl_id) { 
    23     /** Fetches the list of picklists and builds a grid from them */ 
     53openils.acq.Picklist.find_attr = function(id, at_name, at_type) { 
     54    var li = openils.acq.Picklist.cache[id]; 
     55    for (var i in li.attributes()) { 
     56        var attr = li.attributes()[i]; 
     57        if (attr.attr_type() == at_type && attr.attr_name() == at_name) { 
     58            return attr.attr_value(); 
     59        } 
     60    } 
     61    return ''; 
     62}; 
    2463 
    25     var gridRefs = util.Dojo.buildSimpleGrid(domId, columns, [], 'id', true); 
    26     var ses = new OpenSRF.ClientSession('open-ils.acq'); 
    27     var req = ses.request('open-ils.acq.lineitem.picklist.retrieve',  
    28         openils.User.authtoken, pl_id, {flesh_attrs:1}); 
     64openils.acq.Picklist.onRowClick = function(evt) { 
     65    var gridRefs = openils.acq.Picklist._gridRefs; 
     66    var row = gridRefs.grid.model.getRow(evt.rowIndex); 
    2967 
    30     req.oncomplete = function(r) { 
    31         var msg 
    32         gridRefs.grid.setModel(gridRefs.model); 
    33         gridRefs.model.query = {id:'*'}; 
    34         while(msg = r.recv()) { 
    35             var jub = msg.content(); 
    36             //alert(js2JSON(jub)); 
    37             gridRefs.store.newItem({ 
    38                     id:jub.id(), 
    39                     title:openils.acq.Picklist.find_attr(jub, "title", "lineitem_marc_attr_definition"), 
    40                     price:openils.acq.Picklist.find_attr(jub, "price", "lineitem_marc_attr_definition"), 
    41                     provider:jub.provider(), 
    42                     copies:jub.item_count() 
    43                 }); 
    44         } 
    45         gridRefs.grid.update(); 
    46     }; 
    47  
    48     req.send(); 
    49     return gridRefs.grid; 
     68    openils.acq.Lineitems.loadGrid('oils-acq-picklist-details-grid', row.id); 
    5069}; 
    5170} 
  • branches/acq-experiment/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html

    r9384 r9463  
    1212    <script type="text/javascript"> 
    1313        dojo.require("dijit.layout.SplitContainer") 
     14        dojo.require('openils.acq.Picklist'); 
     15    </script> 
     16    <script type='text/javascript'> 
     17        function getJUBTitle(rowIndex) { 
     18            data = pickListGrid.model.getRow(rowIndex); 
     19            if (!data) return ''; 
     20            return openils.acq.Picklist.find_attr(data.id, "title", "lineitem_marc_attr_definition") 
     21        } 
     22        function getJUBPrice(rowIndex) { 
     23            data = pickListGrid.model.getRow(rowIndex); 
     24            if (!data) return; 
     25            return openils.acq.Picklist.find_attr(data.id, "price", "lineitem_marc_attr_definition") 
     26        } 
    1427    </script> 
    1528</%def> 
     
    2336    <div dojoType="dijit.layout.SplitContainer" 
    2437         orientation="vertical" sizerWidth="5" 
    25          activeSizing="0" layoutAlign="client"> 
    26         <div dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="20"> 
    27             <div id="oils-acq-picklist-grid"> </div> 
    28             <script type="text/javascript" src="${c.oils.core.media_prefix.value}/js/util/Dojo.js"></script> 
    29             <script type="text/javascript" src="${c.oils.core.media_prefix.value}/js/openils/acq/Picklist.js"></script> 
     38         activeSizing="1" layoutAlign="client"> 
     39        <div id="oils-acq.picklist-container" 
     40            dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="20"> 
     41            <div jsid='pickListGrid' dojoType='dojox.Grid' 
     42                 id="oils-acq-picklist-grid"> </div> 
    3043            <script type="text/javascript"> 
    31                 dojo.require('openils.acq.Picklist'); 
    32                  
    33                 var cols = [ 
    34                 {name: "${_('ID')}", field: 'id'}, 
    35                 {name: "${_('Title')}", width: "50%", field: 'title'}, 
    36                 {name: "${_('Price')}", field: 'price'}, 
    37                 {name: "${_('Vendor')}", field: 'provider'}, 
    38                 {name: "${_('# of Copies')}", field: 'copies'} 
    39                 ]; 
    40                  
    41                 dojo.addOnLoad(function(){openils.acq.Picklist.loadGrid('oils-acq-picklist-grid', cols, ${c.oils.acq.picklist.value.id()})}); 
     44                dojo.require("openils.acq.Picklist"); 
     45                dojo.require('dojo.data.ItemFileWriteStore'); 
     46                var layout = [{ 
     47                    cells: [[ 
     48                        {name: "ID", field: 'id'}, 
     49                        {name: "Title", width: "50%", get:getJUBTitle}, 
     50                        {name: "Price", get:getJUBPrice}, 
     51                        {name: "Vendor", field: 'provider'}, 
     52                        {name: "# of Copies", field: 'item_count'} 
     53                    ]] 
     54                }]; 
     55 
     56                openils.acq.Picklist.createStore(${c.oils.acq.picklist.value.id()}, 
     57                    function(storeData) { 
     58                        var store = new dojo.data.ItemFileReadStore({data:storeData}); 
     59                        var model = new dojox.grid.data.DojoData(null, store, 
     60                                         {rowsPerPage:20, clientSort:true, 
     61                                          query:{id:'*'}}); 
     62                        pickListGrid.setStructure(layout); 
     63                        pickListGrid.setModel(model); 
     64                        pickListGrid.update(); 
     65                    }); 
    4266            </script> 
    4367        </div> 
    4468        <div dojoType="dijit.layout.ContentPane" sizeMin="20" 
    4569             sizeShare="80"> 
    46             <p>Hi!</p> 
    47             <div id="oils-acq-picklist-details-grid"> </div> 
     70            <script type="text/javascript"> 
     71                dojo.require("openils.acq.Lineitems"); 
     72 
     73                var li_cols = [ 
     74                {name: ('Fund'), field: 'fund'}, 
     75                {name: ('Location'), field: 'location'} 
     76                ]; 
     77 
     78                dojo.addOnLoad(function(){openils.acq.Lineitems.initGrid('oils-acq-picklist-details-grid', li_cols);}); 
     79            </script> 
     80            <div id="oils-acq-picklist-details-grid"> 
     81                <p>Copy order details go here...</p> 
     82            </div> 
    4883        </div> 
    4984    </div>