initial lineitem search
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 20 May 2008 21:49:04 +0000 (21:49 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 20 May 2008 21:49:04 +0000 (21:49 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@9646 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/extras/ils_events.xml
Open-ILS/src/perlmods/OpenILS/Application/Acq/Picklist.pm
Open-ILS/web/oilsweb/oilsweb/controllers/acq/po.py
Open-ILS/web/oilsweb/oilsweb/public/oils/media/ui_js/oils/default/acq/po/li_search.js [new file with mode: 0644]
Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/li_search.html [new file with mode: 0644]

index 43bb8f7..1e7de32 100644 (file)
        <event code='1672' textcode='ACQ_LINEITEM_PROVIDER_ATTR_DEFINITION_NOT_FOUND'>
                <desc xml:lang='en-US'>The requested acq.lineitem_provider_attr_definition was not found</desc>
        </event>
+       <event code='1673' textcode='ACQ_CURRENCY_TYPE_NOT_FOUND'>
+               <desc xml:lang='en-US'>The requested acq.currency_type was not found</desc>
+       </event>
 
 
        <event code='1700' textcode='NON_CAT_TYPE_EXISTS'>
index 71e3160..3aaa95e 100644 (file)
@@ -733,11 +733,15 @@ sub lineitem_search {
     my $e = new_editor(authtoken=>$auth, xact=>1);
     return $e->event unless $e->checkauth;
     return $e->event unless $e->allowed('CREATE_PICKLIST');
-    # XXX needs serious permissions consideration!
-    my $pls = $e->search_acq_lineitem($search, {idlist=>$$options{idlist}});
-    for my $pl (@$pls) {
-        $pl->clear_marc if $$options{clear_marc};
-        $conn->respond($_) for $pl;
+    # XXX needs permissions consideration
+    my $pls = $e->search_acq_lineitem($search, {idlist=>1});
+    for my $li_id (@$pls) {
+        if($$options{idlist}) {
+            $conn->respond($li_id);
+        } else {
+            my $res = retrieve_lineitem($self, $conn, $auth, $li_id, $options);
+            $conn->respond($res) unless $U->event_code($res);
+        }
     }
     return undef;
 }
index 73f8dc5..499d0eb 100644 (file)
@@ -33,6 +33,10 @@ class PoController(BaseController):
         r.ctx.acq.po_id.value = kwargs['id']
         return r.render('acq/po/view_po.html')
 
+    def li_search(self):
+        r = RequestMgr()
+        return r.render('acq/po/li_search.html')
+
     # Create PO from contents of picklist
     def create(self, **kwargs):
         r = RequestMgr()
diff --git a/Open-ILS/web/oilsweb/oilsweb/public/oils/media/ui_js/oils/default/acq/po/li_search.js b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/ui_js/oils/default/acq/po/li_search.js
new file mode 100644 (file)
index 0000000..0e255fc
--- /dev/null
@@ -0,0 +1,97 @@
+dojo.require('fieldmapper.Fieldmapper');
+dojo.require('dijit.ProgressBar');
+dojo.require('dijit.form.Form');
+dojo.require('dijit.form.TextBox');
+dojo.require('dijit.form.FilteringSelect');
+dojo.require('openils.Event');
+dojo.require('openils.acq.Lineitems');
+dojo.require('openils.acq.Provider');
+
+var recvCount = 0;
+var user = new openils.User();
+
+var lineitems = [];
+
+function drawForm() {
+
+}
+
+var liReceived;
+function doSearch(values) {
+    search = {};
+    search = {state:'new'};
+    search = [search, {limit:searchLimit, offset:searchOffset}];
+    options = {clear_marc:1, flesh_attrs:1};
+
+    liReceived = 0;
+    dojo.style('searchProgress', 'visibility', 'visible');
+    fieldmapper.standardRequest(
+        ['open-ils.acq', 'open-ils.acq.lineitem.search'],
+        {   async: true,
+            params: [user.authtoken, search, options],
+            onresponse: handleResult,
+            oncomplete: viewList
+        }
+    );
+}
+
+function handleResult(r) {
+    var result = r.recv().content();
+    searchProgress.update({maximum: searchLimit, progress: ++liReceived});
+    lineitems.push(result);
+}
+
+function viewList() {
+    dojo.style('searchProgress', 'visibility', 'hidden');
+    var store = new dojo.data.ItemFileReadStore({data:jub.toStoreData(lineitems)});
+    var model = new dojox.grid.data.DojoData(
+        null, store, {rowsPerPage: 20, clientSort: true, query:{id:'*'}});
+    liGrid.setModel(model);
+    liGrid.update();
+}
+
+
+function getProvider(rowIndex) {
+    data = liGrid.model.getRow(rowIndex);
+    if(!data) return;
+    if(!data.provider) return '';
+    return openils.acq.Provider.retrieve(data.provider).code();
+}
+
+function getLi(id) {
+    for(var i in lineitems) {
+        var li = lineitems[i];
+        if(li.id() == id) 
+            return li;
+    }
+}
+
+function getJUBTitle(rowIndex) {
+    var data = liGrid.model.getRow(rowIndex);
+    if(!data) return '';
+    return new openils.acq.Lineitems(
+        {lineitem:getLi(data.id)}).findAttr('title', 'lineitem_marc_attr_definition')
+}
+
+function getJUBIsbn(rowIndex) {
+    var data = liGrid.model.getRow(rowIndex);
+    if(!data) return '';
+    return new openils.acq.Lineitems(
+        {lineitem:getLi(data.id)}).findAttr('isbn', 'lineitem_marc_attr_definition')
+}
+
+function getJUBPubdate(rowIndex) {
+    var data = liGrid.model.getRow(rowIndex);
+    if(!data) return '';
+    return new openils.acq.Lineitems(
+        {lineitem:getLi(data.id)}).findAttr('pubdate', 'lineitem_marc_attr_definition')
+}
+
+function getJUBPrice(rowIndex) {
+    var data = liGrid.model.getRow(rowIndex);
+    if(!data) return;
+    return new openils.acq.Lineitems(
+        {lineitem:getLi(data.id)}).findAttr('price', 'lineitem_marc_attr_definition')
+}
+
+dojo.addOnLoad(drawForm);
diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/li_search.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/po/li_search.html
new file mode 100644 (file)
index 0000000..82a0238
--- /dev/null
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+<%inherit file='base.html'/>
+<%def name="page_title()">${_('Lineitem Search')}</%def>
+
+<%def name="block_content()">
+    <script src='${c.oils.core.media_prefix.value}/ui_js/oils/default/acq/po/li_search.js'> </script>
+    <script>
+        var searchLimit = ${c.oils.acq.limit.value} || 10;
+        var searchOffset = ${c.oils.acq.offset.value} || 0;
+    </script>
+
+    <div id='oils-acq-li-search-block' class='container'>
+        <form dojoType='dijit.form.Form' action='' method=''>
+            <script type="dojo/method" event="onSubmit">
+                doSearch(this.getValues());
+                return false; /* don't redirect */
+            </script>
+            <select dojoType='dijit.form.FilteringSelect' name='state'>
+                <option value='new'>${_("New")}</option>
+            </select>
+            <div dojoType='dijit.form.Button' type='submit'>${_("Search")}</div>
+        </div>
+    </form>
+    <div id='oils-acq-li-search-progress'>
+        <div dojoType="dijit.ProgressBar" style="width:300px" jsId="searchProgress" id="searchProgress"></div>
+    </div>
+    <script>dojo.style('searchProgress', 'visibility', 'hidden');</script>
+
+    <script>
+        var liGridStructure = [{
+            cells: [[
+                {name: '${_("ID")}', field: 'id'},
+                {name: '${_("Title")}', width: 'auto', get:getJUBTitle},
+                {name: '${_("ISBN")}', get:getJUBIsbn},
+                {name: '${_("Pubdate")}', get:getJUBPubdate},
+                {name: '${_("Price")}', get:getJUBPrice},
+                {name: '${_("Vendor")}', get:getProvider},
+                {name: '${_("# of Copies")}', field: 'item_count'},
+                {name: '${_("State")}', field: 'state'}
+            ]]
+        }];
+    </script>
+    <div jsId='liGrid' dojoType="dojox.Grid" structure='liGridStructure'> </div>
+</%def>
+
+