- Timestamp:
- 04/09/08 22:18:49 (5 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
branches/acq-experiment/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py
r9109 r9290 5 5 import oils.const, oils.utils.utils 6 6 import osrf.net_obj 7 8 import simplejson 9 7 10 from osrf.ses import ClientSession 8 11 from oils.event import Event … … 15 18 16 19 class PicklistController(BaseController): 17 20 18 21 def view(self, **kwargs): 19 22 r = RequestMgr() 20 23 pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(r, picklist_id=kwargs['id']) 21 24 pl_manager.retrieve() 22 # sort by author suppresses lineitems that don't have an author23 25 pl_manager.retrieve_lineitems(flesh_provider=True, 24 #sort_attr="author",25 #sort_dir="asc",26 sort_attr="author", 27 sort_dir="asc", 26 28 offset=r.ctx.acq.offset.value, 27 29 limit=r.ctx.acq.limit.value) … … 29 31 r.ctx.acq.picklist_list.value = pl_manager.retrieve_list() 30 32 return r.render('acq/picklist/view.html') 31 33 32 34 def create(self, **kwargs): 33 35 r = RequestMgr() … … 42 44 return redirect_to(controller='acq/picklist', action='view', id=picklist_id) 43 45 return r.render('acq/picklist/create.html') 44 46 45 47 def view_lineitem(self, **kwargs): 46 48 r = RequestMgr() … … 56 58 r.ctx.acq.lineitem.value = lineitem 57 59 r.ctx.acq.lineitem_marc_html.value = oilsweb.lib.bib.marc_to_html(lineitem.marc()) 58 60 59 61 r.ctx.acq.provider_list.value = provider_mgr.list(r) 60 62 r.ctx.acq.fund_list.value = fmgr.retrieve_org_funds() 61 63 62 64 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 64 96 def list(self): 65 97 r = RequestMgr() … … 67 99 r.ctx.acq.picklist_list.value = pl_manager.retrieve_list() 68 100 return r.render('acq/picklist/view_list.html') 69 101 70 102 def listall(self): 71 103 r = RequestMgr() … … 73 105 r.ctx.acq.picklist_list.value = pl_manager.retrieve_list(all=True) 74 106 return r.render('acq/picklist/view_listall.html') 75 107 76 108 def search(self): 77 109 r = RequestMgr() 78 110 r.ctx.acq.z39_sources.value = oilsweb.lib.acq.search.fetch_z39_sources(r.ctx) 79 111 80 112 sc = {} 81 113 for data in r.ctx.acq.z39_sources.value.values(): … … 86 118 keys.sort() 87 119 r.ctx.acq.search_classes_sorted.value = keys 88 120 89 121 return r.render('acq/picklist/search.html') 90 122 91 123 def do_search(self): 92 124 r = RequestMgr() … … 94 126 r, oilsweb.lib.acq.search.compile_multi_search(r)) 95 127 return redirect_to(controller='acq/picklist', action='view', id=picklist_id) 96 128 97 129 def delete(self, **kwargs): 98 130 r = RequestMgr() … … 100 132 pl_manager.delete() 101 133 return redirect_to(controller='acq/picklist', action='list') 102 103 134 135 104 136 def delete_lineitem(self, **kwargs): 105 137 r = RequestMgr() … … 109 141 pl_manager.delete_lineitem(lineitem_id) 110 142 return redirect_to(controller='acq/picklist', action='view', id=lineitem.picklist()) 111 143 112 144 def update(self): 113 145 r = RequestMgr() … … 115 147 ses.connect() 116 148 page = None 117 149 118 150 if r.ctx.acq.lineitem_id: 119 151 page = self._update_lineitem_count(r, ses) 120 152 elif r.ctx.acq.picklist_action.value == 'move_selected': 121 153 page = self._move_selected(r, ses) 122 154 123 155 if not page: 124 156 page = redirect_to(controller='acq/picklist', action='list') 125 157 126 158 ses.disconnect() 127 159 return page 128 160 129 161 def update_lineitem(self): 130 162 r = RequestMgr() 131 163 ses = ClientSession(oils.const.OILS_APP_ACQ) 132 164 ses.connect() 133 165 134 166 if r.ctx.acq.lineitem_detail_id.value: 135 167 # update fund assignment, etc … … 138 170 r.ctx.acq.lineitem_detail_id.value).recv().content() 139 171 detail = Event.parse_and_raise(detail) 140 172 141 173 # Update all the fields that are editable via the form 142 174 detail.fund(r.ctx.acq.fund_id.value) 143 175 144 176 detail = ses.request('open-ils.acq.lineitem_detail.update', 145 177 r.ctx.core.authtoken.value, … … 151 183 r.ctx.acq.lineitem_id.value).recv().content() 152 184 lineitem = Event.parse_and_raise(lineitem) 153 185 154 186 lineitem.provider(r.ctx.acq.provider_id.value) 155 187 lineitem = ses.request('open-ils.acq.lineitem.update', … … 157 189 lineitem).recv().content() 158 190 Event.parse_and_raise(lineitem) 159 191 160 192 return redirect_to(controller='acq/picklist', action='view_lineitem', 161 193 id=r.ctx.acq.lineitem_id.value) 162 194 163 195 def approve_lineitem(self): 164 196 r = RequestMgr() 165 197 ses = ClientSession(oils.const.OILS_APP_ACQ) 166 198 ses.connect 167 199 168 200 li = ses.request('open-ils.acq.lineitem.retrieve', 169 201 r.ctx.core.authtoken.value, 170 202 r.ctx.acq.lineitem_id.value).Recv().content() 171 203 li = Event.parse_and_raise(li) 172 204 173 205 li.state("approved") 174 206 175 207 li = ses.request('open-ils.acq.lineitem.update', 176 208 r.ctx.core.authtoken.value, 177 209 li).recv().content() 178 210 li = Event.parse_and_raise(li) 179 211 180 212 return redirect_to(controller='acq/picklist', action='view', 181 213 id=r.ctx.acq.picklist_id.value) 182 214 183 215 def _update_lineitem_count(self, r, ses): 184 216 ''' Updates # of copies to order for single lineitem ''' 185 217 186 218 picklist_id = r.ctx.acq.picklist_source_id.value 187 219 lineitem_id = r.ctx.acq.lineitem_id.value 188 220 new_count = int(r.ctx.acq.lineitem_item_count.value) 189 221 190 222 lineitem = ses.request('open-ils.acq.lineitem.retrieve', 191 223 r.ctx.core.authtoken.value, 192 224 lineitem_id, {'flesh_li_details':1}).recv().content() 193 225 lineitem = Event.parse_and_raise(lineitem) 194 226 195 227 # Make sure the lineitem count is correct. 196 228 lineitem.item_count(len(lineitem.lineitem_details())) 197 229 198 230 # Can't remove detail records yet 199 231 assert (lineitem.item_count() <= new_count), "Can't delete detail records" 200 232 201 233 for i in range(new_count - lineitem.item_count()): 202 234 detail = osrf.net_obj.NetworkObject.acqlid() … … 206 238 detail, dict()) 207 239 Event.parse_and_raise(detail) 208 240 209 241 if (lineitem.item_count() != new_count): 210 242 # Update the number of detail records 211 243 lineitem.item_count(new_count) 212 244 213 245 lineitem = ses.request('open-ils.acq.lineitem.update', 214 246 r.ctx.core.authtoken.value, lineitem) 215 247 Event.parse_and_raise(lineitem) 216 248 217 249 # fail() 218 250 return redirect_to(controller='acq/picklist', action='view', 219 251 id=picklist_id) 220 252 221 253 def _move_selected(self, r, ses): 222 254 ''' Moves the selected picklist lineitem's to the destination picklist ''' 223 255 for lineitem_id in r.ctx.acq.lineitem_id_list.value: 224 256 225 257 lineitem = ses.request( 226 258 'open-ils.acq.lineitem.retrieve', 227 259 r.ctx.core.authtoken.value, lineitem_id).recv().content() 228 260 lineitem = Event.parse_and_raise(lineitem) 229 261 230 262 lineitem.picklist(r.ctx.acq.picklist_dest_id.value) 231 263 232 264 status = ses.request( 233 265 'open-ils.acq.lineitem.update', 234 266 r.ctx.core.authtoken.value, lineitem).recv().content() 235 267 Event.parse_and_raise(status) 236 268 237 269 return redirect_to(controller='acq/picklist', action='view', 238 270 id=r.ctx.acq.picklist_dest_id.value)
