Show
Ignore:
Timestamp:
04/09/08 22:18:49 (5 months ago)
Author:
djfiander
Message:

Dojo-ize Picklist display. There are still problems with the grid being displayed.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/acq-experiment/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py

    r9109 r9290  
    55import oils.const, oils.utils.utils 
    66import osrf.net_obj 
     7 
     8import simplejson 
     9 
    710from osrf.ses import ClientSession 
    811from oils.event import Event 
     
    1518 
    1619class PicklistController(BaseController): 
    17  
     20     
    1821    def view(self, **kwargs): 
    1922        r = RequestMgr() 
    2023        pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id']) 
    2124        pl_manager.retrieve() 
    22         # sort by author suppresses lineitems that don't have an author 
    2325        pl_manager.retrieve_lineitems(flesh_provider=True, 
    24                                       #sort_attr="author", 
    25                                       #sort_dir="asc", 
     26                                      sort_attr="author", 
     27                                      sort_dir="asc", 
    2628                                      offset=r.ctx.acq.offset.value, 
    2729                                      limit=r.ctx.acq.limit.value) 
     
    2931        r.ctx.acq.picklist_list.value = pl_manager.retrieve_list() 
    3032        return r.render('acq/picklist/view.html') 
    31  
     33     
    3234    def create(self, **kwargs): 
    3335        r = RequestMgr() 
     
    4244            return redirect_to(controller='acq/picklist', action='view', id=picklist_id) 
    4345        return r.render('acq/picklist/create.html') 
    44  
     46     
    4547    def view_lineitem(self, **kwargs): 
    4648        r = RequestMgr() 
     
    5658        r.ctx.acq.lineitem.value = lineitem 
    5759        r.ctx.acq.lineitem_marc_html.value = oilsweb.lib.bib.marc_to_html(lineitem.marc()) 
    58  
     60         
    5961        r.ctx.acq.provider_list.value = provider_mgr.list(r) 
    6062        r.ctx.acq.fund_list.value = fmgr.retrieve_org_funds() 
    61  
     63         
    6264        return r.render('acq/picklist/view_lineitem.html') 
    63  
     65     
     66     
     67    def json(self, **kwargs): 
     68        r = RequestMgr() 
     69        pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id']) 
     70        pl_manager.retrieve() 
     71        pl_manager.retrieve_lineitems(flesh_provider=True, 
     72                                      sort_attr="author", 
     73                                      sort_dir="asc") 
     74         
     75        items = [] 
     76        for title in pl_manager.picklist.entries(): 
     77            label = ''.join(PicklistMgr.find_lineitem_attr(title, x) for x in ("title", "publisher", "pubdate", "pagination", "isbn", "price")) 
     78            item = { 
     79                'id': title.id(), 
     80                'copies': title.item_count(), 
     81                'title': PicklistMgr.find_lineitem_attr(title, "title"), 
     82                'isbn': PicklistMgr.find_lineitem_attr(title, "isbn"), 
     83                'price': PicklistMgr.find_lineitem_attr(title, "price"), 
     84                'provider': PicklistMgr.find_lineitem_attr(title, "provider"), 
     85                'label': label 
     86            } 
     87            items.append(item) 
     88         
     89        pylons.response.headers["Content-type"] = "text/x-json" 
     90        return simplejson.dumps({'identifier': 'id', 
     91                                 'label': 'label', 
     92                                 'items': items 
     93                                 }) 
     94     
     95     
    6496    def list(self): 
    6597        r = RequestMgr() 
     
    6799        r.ctx.acq.picklist_list.value = pl_manager.retrieve_list() 
    68100        return r.render('acq/picklist/view_list.html') 
    69           
     101     
    70102    def listall(self): 
    71103        r = RequestMgr() 
     
    73105        r.ctx.acq.picklist_list.value = pl_manager.retrieve_list(all=True) 
    74106        return r.render('acq/picklist/view_listall.html') 
    75  
     107     
    76108    def search(self): 
    77109        r = RequestMgr() 
    78110        r.ctx.acq.z39_sources.value = oilsweb.lib.acq.search.fetch_z39_sources(r.ctx) 
    79  
     111         
    80112        sc = {} 
    81113        for data in r.ctx.acq.z39_sources.value.values(): 
     
    86118        keys.sort() 
    87119        r.ctx.acq.search_classes_sorted.value = keys 
    88              
     120         
    89121        return r.render('acq/picklist/search.html') 
    90  
     122     
    91123    def do_search(self): 
    92124        r = RequestMgr() 
     
    94126            r, oilsweb.lib.acq.search.compile_multi_search(r)) 
    95127        return redirect_to(controller='acq/picklist', action='view', id=picklist_id) 
    96  
     128     
    97129    def delete(self, **kwargs): 
    98130        r = RequestMgr() 
     
    100132        pl_manager.delete() 
    101133        return redirect_to(controller='acq/picklist', action='list') 
    102  
    103  
     134     
     135     
    104136    def delete_lineitem(self, **kwargs): 
    105137        r = RequestMgr() 
     
    109141        pl_manager.delete_lineitem(lineitem_id) 
    110142        return redirect_to(controller='acq/picklist', action='view', id=lineitem.picklist()) 
    111  
     143     
    112144    def update(self): 
    113145        r = RequestMgr() 
     
    115147        ses.connect() 
    116148        page = None 
    117  
     149         
    118150        if r.ctx.acq.lineitem_id: 
    119151            page = self._update_lineitem_count(r, ses) 
    120152        elif r.ctx.acq.picklist_action.value == 'move_selected': 
    121153            page = self._move_selected(r, ses) 
    122  
     154         
    123155        if not page: 
    124156            page = redirect_to(controller='acq/picklist', action='list') 
    125  
     157         
    126158        ses.disconnect() 
    127159        return page 
    128  
     160     
    129161    def update_lineitem(self): 
    130162        r = RequestMgr() 
    131163        ses = ClientSession(oils.const.OILS_APP_ACQ) 
    132164        ses.connect() 
    133  
     165         
    134166        if r.ctx.acq.lineitem_detail_id.value: 
    135167            # update fund assignment, etc 
     
    138170                                 r.ctx.acq.lineitem_detail_id.value).recv().content() 
    139171            detail = Event.parse_and_raise(detail) 
    140  
     172             
    141173            # Update all the fields that are editable via the form 
    142174            detail.fund(r.ctx.acq.fund_id.value) 
    143  
     175             
    144176            detail = ses.request('open-ils.acq.lineitem_detail.update', 
    145177                                 r.ctx.core.authtoken.value, 
     
    151183                                   r.ctx.acq.lineitem_id.value).recv().content() 
    152184            lineitem = Event.parse_and_raise(lineitem) 
    153  
     185             
    154186            lineitem.provider(r.ctx.acq.provider_id.value) 
    155187            lineitem = ses.request('open-ils.acq.lineitem.update', 
     
    157189                                   lineitem).recv().content() 
    158190            Event.parse_and_raise(lineitem) 
    159              
     191         
    160192        return redirect_to(controller='acq/picklist', action='view_lineitem', 
    161193                           id=r.ctx.acq.lineitem_id.value) 
    162  
     194     
    163195    def approve_lineitem(self): 
    164196        r = RequestMgr() 
    165197        ses = ClientSession(oils.const.OILS_APP_ACQ) 
    166198        ses.connect 
    167  
     199         
    168200        li = ses.request('open-ils.acq.lineitem.retrieve', 
    169201                         r.ctx.core.authtoken.value, 
    170202                         r.ctx.acq.lineitem_id.value).Recv().content() 
    171203        li = Event.parse_and_raise(li) 
    172  
     204         
    173205        li.state("approved") 
    174  
     206         
    175207        li = ses.request('open-ils.acq.lineitem.update', 
    176208                         r.ctx.core.authtoken.value, 
    177209                         li).recv().content() 
    178210        li = Event.parse_and_raise(li) 
    179  
     211         
    180212        return redirect_to(controller='acq/picklist', action='view', 
    181213                           id=r.ctx.acq.picklist_id.value) 
    182  
     214     
    183215    def _update_lineitem_count(self, r, ses): 
    184216        ''' Updates # of copies to order for single lineitem ''' 
    185  
     217         
    186218        picklist_id = r.ctx.acq.picklist_source_id.value 
    187219        lineitem_id = r.ctx.acq.lineitem_id.value 
    188220        new_count = int(r.ctx.acq.lineitem_item_count.value) 
    189  
     221         
    190222        lineitem = ses.request('open-ils.acq.lineitem.retrieve', 
    191223                               r.ctx.core.authtoken.value, 
    192224                               lineitem_id, {'flesh_li_details':1}).recv().content() 
    193225        lineitem = Event.parse_and_raise(lineitem) 
    194  
     226         
    195227        # Make sure the lineitem count is correct. 
    196228        lineitem.item_count(len(lineitem.lineitem_details())) 
    197  
     229         
    198230        # Can't remove detail records yet 
    199231        assert (lineitem.item_count() <= new_count), "Can't delete detail records" 
    200  
     232         
    201233        for i in range(new_count - lineitem.item_count()): 
    202234            detail = osrf.net_obj.NetworkObject.acqlid() 
     
    206238                                 detail, dict()) 
    207239            Event.parse_and_raise(detail) 
    208  
     240         
    209241        if (lineitem.item_count() != new_count): 
    210242            # Update the number of detail records 
    211243            lineitem.item_count(new_count) 
    212  
     244         
    213245        lineitem = ses.request('open-ils.acq.lineitem.update', 
    214246                               r.ctx.core.authtoken.value, lineitem) 
    215247        Event.parse_and_raise(lineitem) 
    216  
     248         
    217249        # fail() 
    218250        return redirect_to(controller='acq/picklist', action='view', 
    219251                           id=picklist_id) 
    220  
     252     
    221253    def _move_selected(self, r, ses): 
    222254        ''' Moves the selected picklist lineitem's to the destination picklist ''' 
    223255        for lineitem_id in r.ctx.acq.lineitem_id_list.value: 
    224  
     256             
    225257            lineitem = ses.request( 
    226258                'open-ils.acq.lineitem.retrieve', 
    227259                r.ctx.core.authtoken.value, lineitem_id).recv().content() 
    228260            lineitem = Event.parse_and_raise(lineitem) 
    229  
     261             
    230262            lineitem.picklist(r.ctx.acq.picklist_dest_id.value) 
    231  
     263             
    232264            status = ses.request( 
    233265                'open-ils.acq.lineitem.update', 
    234266                r.ctx.core.authtoken.value, lineitem).recv().content() 
    235267            Event.parse_and_raise(status) 
    236  
     268         
    237269        return redirect_to(controller='acq/picklist', action='view', 
    238270                           id=r.ctx.acq.picklist_dest_id.value)