From: djfiander Date: Thu, 10 Apr 2008 02:18:49 +0000 (+0000) Subject: Dojo-ize Picklist display. There are still problems with the grid being displayed. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=9dde68cc2935ab543666aac67cf6da185f8af184;p=Evergreen.git Dojo-ize Picklist display. There are still problems with the grid being displayed. git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@9290 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py index 285211036c..442ea1082d 100644 --- a/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py +++ b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py @@ -4,6 +4,9 @@ import oilsweb.lib.context, oilsweb.lib.util import oilsweb.lib.bib, oilsweb.lib.acq.search import oils.const, oils.utils.utils import osrf.net_obj + +import simplejson + from osrf.ses import ClientSession from oils.event import Event from oils.org import OrgUtil @@ -14,21 +17,20 @@ from oilsweb.lib.acq.picklist import PicklistMgr from oilsweb.lib.acq import provider_mgr class PicklistController(BaseController): - + def view(self, **kwargs): r = RequestMgr() pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id']) pl_manager.retrieve() - # sort by author suppresses lineitems that don't have an author pl_manager.retrieve_lineitems(flesh_provider=True, - #sort_attr="author", - #sort_dir="asc", + sort_attr="author", + sort_dir="asc", offset=r.ctx.acq.offset.value, limit=r.ctx.acq.limit.value) r.ctx.acq.picklist.value = pl_manager.picklist r.ctx.acq.picklist_list.value = pl_manager.retrieve_list() return r.render('acq/picklist/view.html') - + def create(self, **kwargs): r = RequestMgr() if r.ctx.acq.picklist_name.value: @@ -41,7 +43,7 @@ class PicklistController(BaseController): Event.parse_and_raise(picklist_id) return redirect_to(controller='acq/picklist', action='view', id=picklist_id) return r.render('acq/picklist/create.html') - + def view_lineitem(self, **kwargs): r = RequestMgr() pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r) @@ -55,28 +57,58 @@ class PicklistController(BaseController): r.ctx.acq.picklist.value = pl_manager.picklist r.ctx.acq.lineitem.value = lineitem r.ctx.acq.lineitem_marc_html.value = oilsweb.lib.bib.marc_to_html(lineitem.marc()) - + r.ctx.acq.provider_list.value = provider_mgr.list(r) r.ctx.acq.fund_list.value = fmgr.retrieve_org_funds() - + return r.render('acq/picklist/view_lineitem.html') - + + + def json(self, **kwargs): + r = RequestMgr() + pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id']) + pl_manager.retrieve() + pl_manager.retrieve_lineitems(flesh_provider=True, + sort_attr="author", + sort_dir="asc") + + items = [] + for title in pl_manager.picklist.entries(): + label = ''.join(PicklistMgr.find_lineitem_attr(title, x) for x in ("title", "publisher", "pubdate", "pagination", "isbn", "price")) + item = { + 'id': title.id(), + 'copies': title.item_count(), + 'title': PicklistMgr.find_lineitem_attr(title, "title"), + 'isbn': PicklistMgr.find_lineitem_attr(title, "isbn"), + 'price': PicklistMgr.find_lineitem_attr(title, "price"), + 'provider': PicklistMgr.find_lineitem_attr(title, "provider"), + 'label': label + } + items.append(item) + + pylons.response.headers["Content-type"] = "text/x-json" + return simplejson.dumps({'identifier': 'id', + 'label': 'label', + 'items': items + }) + + def list(self): r = RequestMgr() pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r) r.ctx.acq.picklist_list.value = pl_manager.retrieve_list() return r.render('acq/picklist/view_list.html') - + def listall(self): r = RequestMgr() pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r) r.ctx.acq.picklist_list.value = pl_manager.retrieve_list(all=True) return r.render('acq/picklist/view_listall.html') - + def search(self): r = RequestMgr() r.ctx.acq.z39_sources.value = oilsweb.lib.acq.search.fetch_z39_sources(r.ctx) - + sc = {} for data in r.ctx.acq.z39_sources.value.values(): for key, val in data['attrs'].iteritems(): @@ -85,22 +117,22 @@ class PicklistController(BaseController): keys = sc.keys() keys.sort() r.ctx.acq.search_classes_sorted.value = keys - + return r.render('acq/picklist/search.html') - + def do_search(self): r = RequestMgr() picklist_id = oilsweb.lib.acq.search.multi_search( r, oilsweb.lib.acq.search.compile_multi_search(r)) return redirect_to(controller='acq/picklist', action='view', id=picklist_id) - + def delete(self, **kwargs): r = RequestMgr() pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id']) pl_manager.delete() return redirect_to(controller='acq/picklist', action='list') - - + + def delete_lineitem(self, **kwargs): r = RequestMgr() pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r) @@ -108,39 +140,39 @@ class PicklistController(BaseController): lineitem = pl_manager.retrieve_lineitem(lineitem_id) pl_manager.delete_lineitem(lineitem_id) return redirect_to(controller='acq/picklist', action='view', id=lineitem.picklist()) - + def update(self): r = RequestMgr() ses = ClientSession(oils.const.OILS_APP_ACQ) ses.connect() page = None - + if r.ctx.acq.lineitem_id: page = self._update_lineitem_count(r, ses) elif r.ctx.acq.picklist_action.value == 'move_selected': page = self._move_selected(r, ses) - + if not page: page = redirect_to(controller='acq/picklist', action='list') - + ses.disconnect() return page - + def update_lineitem(self): r = RequestMgr() ses = ClientSession(oils.const.OILS_APP_ACQ) ses.connect() - + if r.ctx.acq.lineitem_detail_id.value: # update fund assignment, etc detail = ses.request('open-ils.acq.lineitem_detail.retrieve', r.ctx.core.authtoken.value, r.ctx.acq.lineitem_detail_id.value).recv().content() detail = Event.parse_and_raise(detail) - + # Update all the fields that are editable via the form detail.fund(r.ctx.acq.fund_id.value) - + detail = ses.request('open-ils.acq.lineitem_detail.update', r.ctx.core.authtoken.value, detail).recv().content() @@ -150,54 +182,54 @@ class PicklistController(BaseController): r.ctx.core.authtoken.value, r.ctx.acq.lineitem_id.value).recv().content() lineitem = Event.parse_and_raise(lineitem) - + lineitem.provider(r.ctx.acq.provider_id.value) lineitem = ses.request('open-ils.acq.lineitem.update', r.ctx.core.authtoken.value, lineitem).recv().content() Event.parse_and_raise(lineitem) - + return redirect_to(controller='acq/picklist', action='view_lineitem', id=r.ctx.acq.lineitem_id.value) - + def approve_lineitem(self): r = RequestMgr() ses = ClientSession(oils.const.OILS_APP_ACQ) ses.connect - + li = ses.request('open-ils.acq.lineitem.retrieve', r.ctx.core.authtoken.value, r.ctx.acq.lineitem_id.value).Recv().content() li = Event.parse_and_raise(li) - + li.state("approved") - + li = ses.request('open-ils.acq.lineitem.update', r.ctx.core.authtoken.value, li).recv().content() li = Event.parse_and_raise(li) - + return redirect_to(controller='acq/picklist', action='view', id=r.ctx.acq.picklist_id.value) - + def _update_lineitem_count(self, r, ses): ''' Updates # of copies to order for single lineitem ''' - + picklist_id = r.ctx.acq.picklist_source_id.value lineitem_id = r.ctx.acq.lineitem_id.value new_count = int(r.ctx.acq.lineitem_item_count.value) - + lineitem = ses.request('open-ils.acq.lineitem.retrieve', r.ctx.core.authtoken.value, lineitem_id, {'flesh_li_details':1}).recv().content() lineitem = Event.parse_and_raise(lineitem) - + # Make sure the lineitem count is correct. lineitem.item_count(len(lineitem.lineitem_details())) - + # Can't remove detail records yet assert (lineitem.item_count() <= new_count), "Can't delete detail records" - + for i in range(new_count - lineitem.item_count()): detail = osrf.net_obj.NetworkObject.acqlid() detail.lineitem(lineitem.id()) @@ -205,35 +237,35 @@ class PicklistController(BaseController): r.ctx.core.authtoken.value, detail, dict()) Event.parse_and_raise(detail) - + if (lineitem.item_count() != new_count): # Update the number of detail records lineitem.item_count(new_count) - + lineitem = ses.request('open-ils.acq.lineitem.update', r.ctx.core.authtoken.value, lineitem) Event.parse_and_raise(lineitem) - + # fail() return redirect_to(controller='acq/picklist', action='view', id=picklist_id) - + def _move_selected(self, r, ses): ''' Moves the selected picklist lineitem's to the destination picklist ''' for lineitem_id in r.ctx.acq.lineitem_id_list.value: - + lineitem = ses.request( 'open-ils.acq.lineitem.retrieve', r.ctx.core.authtoken.value, lineitem_id).recv().content() lineitem = Event.parse_and_raise(lineitem) - + lineitem.picklist(r.ctx.acq.picklist_dest_id.value) - + status = ses.request( 'open-ils.acq.lineitem.update', r.ctx.core.authtoken.value, lineitem).recv().content() Event.parse_and_raise(status) - + return redirect_to(controller='acq/picklist', action='view', id=r.ctx.acq.picklist_dest_id.value) diff --git a/Open-ILS/web/oilsweb/oilsweb/public/oils/media/js/openils/acq/Picklist.js b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/js/openils/acq/Picklist.js new file mode 100644 index 0000000000..d122c00afa --- /dev/null +++ b/Open-ILS/web/oilsweb/oilsweb/public/oils/media/js/openils/acq/Picklist.js @@ -0,0 +1,51 @@ +if(!dojo._hasResource['openils.acq.Picklist']) { +dojo._hasResource['openils.acq.Picklist'] = true; +dojo.provide('openils.acq.Picklist'); +dojo.require('util.Dojo'); + +/** 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(); + } + } + 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', + oilsAuthtoken, pl_id, {flesh_attrs:1}); + + req.oncomplete = function(r) { + var msg + gridRefs.grid.setModel(gridRefs.model); + 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; +}; +} + diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html index 9f5b3e4f3c..39af1734fc 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/view.html @@ -5,83 +5,27 @@ <%inherit file='../base.html'/> <%namespace file='../../common/widgets.html' name='widget' /> <%namespace file='picklist_summary.html' name='picklist' /> + <%def name="page_title()">${_('Picklist')} -<%def name="block_content()"> -<% - import oilsweb.lib.bib - from oilsweb.lib.acq.picklist import PicklistMgr -%> +<%def name="block_content()"> ${picklist.summary(c.oils.acq.picklist.value)} -
-
 
-
- ${widget.paging(c.oils.acq.offset.value, c.oils.acq.limit.value, - c.oils.acq.picklist.value.entry_count())} -
-
- -   -
-
 
-
-
- - - - - - - - - % for lineitem in c.oils.acq.picklist.value.entries(): - - - - - - % endfor - -
Item Description# of Copies
- - ${h.util.html_escape(PicklistMgr.find_lineitem_attr(lineitem, "title"))} - ${PicklistMgr.find_lineitem_attr(lineitem, "publisher")} - ${PicklistMgr.find_lineitem_attr(lineitem, "pubdate")} - ${PicklistMgr.find_lineitem_attr(lineitem, "pagination")} - ${PicklistMgr.find_lineitem_attr(lineitem, "isbn")} - ${PicklistMgr.find_lineitem_attr(lineitem, "price")} - - % if lineitem.state() == 'approved': - ${lineitem.item_count()} Approved - % else: -
- - - - -
- % endif -
-
+
+ + + diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/base.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/base.html index 932a8720eb..9d98b0e7ee 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/base.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/base.html @@ -2,6 +2,15 @@ <%inherit file='../base.html'/> <%def name="body_css()">tundra +<%def name="block_js()"> + ${parent.block_js()} + + + + <%def name='block_body_content()'>
diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html index d468b827e2..64177fa24e 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html @@ -1,6 +1,8 @@