if OSRF_LIB_INSTALLED:
from conifer.libsystems.evergreen.startup import ils_startup
-
OPENSRF_AUTHENTICATE = "open-ils.auth.authenticate.complete"
OPENSRF_AUTHENTICATE_INIT = "open-ils.auth.authenticate.init"
OPENSRF_BATCH_UPDATE = "open-ils.cat.asset.copy.fleshed.batch.update"
OPENSRF_CIRC_UPDATE = "open-ils.cstore open-ils.cstore.direct.action.circulation.update"
OPENSRF_CLEANUP = "open-ils.auth.session.delete"
OPENSRF_CN_BARCODE = "open-ils.circ.copy_details.retrieve.barcode.authoritative"
+OPENSRF_BARCODE = "open-ils.search.asset.copy.fleshed2.find_by_barcode"
OPENSRF_CN_CALL = "open-ils.search.asset.copy.retrieve_by_cn_label"
OPENSRF_COPY_COUNTS = "open-ils.search.biblio.copy_counts.location.summary.retrieve"
OPENSRF_FLESHED2_CALL = "open-ils.search.asset.copy.fleshed2.retrieve"
self.RESHELVING = [id for id, name in status_decode if name == 'Reshelving'][0]
self.CHECKEDOUT = [id for id, name in status_decode if name == 'Checked out'][0]
+ def get_copydetails(barcode,copyids,reserves_loc,bcs,ids,ignore_loc):
+ copy_list = []
+
+ bcs_set, ids_set = collect_set(barcode,bcs,ids)
+
+ for copyid in copyids:
+ circinfo = E1(OPENSRF_FLESHED2_CALL, copyid)
+ circbarcode = None
+
+ if barcode is not None:
+ circbarcode = circinfo.get("barcode")
+
+ thisloc = circinfo.get("location")
+
+ if thisloc:
+ thisloc = thisloc.get("name")
+
+ #create copy object for supplied barcode - will be all barcodes if none supplied
+ if (thisloc in reserves_loc or ignore_loc) and (barcode==circbarcode or circbarcode in bcs_set):
+ circ_modifier = circinfo.get("circ_modifier")
+ circs = circinfo.get("circulations")
+ parts = circinfo.get("parts")
+ part_label = ''
+ part_sort = None
+ part = None
+ if parts:
+ part = parts[0]
+ if part:
+ part_label = part.get("label")
+ part_sort = part.get("label_sortkey")
+
+ id_ind = -1
+ if circbarcode in bcs_set:
+ id_ind = ids_set[bcs_set.index(circbarcode)]
+ copy_list.append(copy_obj(circ_modifier,circs,part_label,part_sort,id_ind))
+
+ return sorted(copy_list, key=lambda copy: copy.part_sort)
def item_status(self, item, bcs=[], ids=[]):
"""
bclist = make_obj_string(bcs)
idlist = make_obj_string(ids)
+ #print "item.barcode", item.barcode
+ #print "item.bib_id", item.bib_id
return self._item_status(item.bib_id, item.barcode, bclist, idlist)
"""
#CACHE_TIME = 300
#set low for testing
- CACHE_TIME = 5
+ CACHE_TIME = 0
@memoize(timeout=CACHE_TIME)
def _item_status(self, bib_id, barcode, bclist, idlist):
i = i+1
return bc_dups, id_dups
-
+
def get_copydetails(barcode,copyids,reserves_loc,bcs,ids):
copy_list = []
if barcode is not None:
circbarcode = circinfo.get("barcode")
-
+
thisloc = circinfo.get("location")
if thisloc:
if len(suffix) > 0:
suffix = ' ' + suffix
vol, lib, desk, avail, callno, dueid, dueinfo, circmod, allcalls, alldues = sort_out_status(barcode, vol, counts,
- version, lib, desk, avail, callno, dueid, dueinfo, circmod, allcalls, alldues, prefix, suffix, bcs,ids)
+ version, lib, desk, avail, callno, dueid, dueinfo, circmod, allcalls, alldues, prefix, suffix, bcs, ids)
else:
for org, callno, loc, stats in counts:
vol, lib, desk, avail, callno, dueid, dueinfo, circmod, allcalls, alldues = sort_out_status(barcode, vol, counts,
- version, lib, desk, avail, callno, dueid, dueinfo, circmod, allcalls, alldues, bcs,ids)
+ version, lib, desk, avail, callno, dueid, dueinfo, circmod, allcalls, alldues, bcs, ids)
if len(allcalls) > 0:
- cpname = 'volumes'
+ cpname = 'copies/parts'
return (cpname, lib, desk, avail, callno, dueid[0], dueinfo, circmod, allcalls, alldues)
def cat_search(self, query, start=1, limit=10):
barcode = ''
bibid = ''
+ partlabel = ''
+
is_barcode = re.search('\d{14}', query)
if query.startswith(self.OPAC_URL):
if bib:
bibid = bib
copy = E1('open-ils.supercat.record.object.retrieve', bib)
+ #get_copydetails(barcode,copyids,self.RESERVES_DESK_NAME,bcs,ids,False)
+ #copydetails = get_copydetails(barcode,[copy[0]['id']],self.RESERVES_DESK_NAME,[],[],True)
+ copyinfo = E1(OPENSRF_BARCODE, barcode)
+ parts = copyinfo.get("parts")
+ if parts:
+ part = parts[0]
+ if part:
+ partlabel = part['label']
+
marc = copy[0]['marc']
# In some institutions' installations, 'marc' is a string; in
# others it's unicode. Convert to unicode if necessary.
tree = M.marcxml_to_records(marc)[0]
results.append(tree)
numhits = int(superpage['count'])
- return results, numhits, bibid, barcode
+ return results, numhits, bibid, barcode, partlabel
def bib_id_to_marcxml(self, bib_id):
"""
site=site, parent_item=parent_item)
query = request.GET.get('query','').strip()
start, limit = (int(request.GET.get(k,v)) for k,v in (('start',1),('limit',10)))
- results, numhits, bibid, bc = callhook('cat_search', query, start, limit)
+ results, numhits, bibid, bc, partlabel = callhook('cat_search', query, start, limit)
return g.render('item/item_add_cat_search.xhtml',
results=results, query=query,
start=start, limit=limit, numhits=numhits,
- site=site, parent_item=parent_item, bibid=bibid, bc=bc)
+ site=site, parent_item=parent_item, bibid=bibid, bc=bc, partlabel=partlabel)
else:
# User has selected an item; add it to site.
raw_pickitem = request.POST.get('pickitem', '').strip()