if bib_id:
try:
counts = E1(OPENSRF_COPY_COUNTS, bib_id, 1, 0)
- lib = desk = avail = 0
+ lib = desk = avail = vol = 0
dueinfo = ''
callno = ''
circmod = ''
for org, callnum, loc, stats in counts:
+ callprefix = ''
+ callsuffix = ''
if len(callno) == 0:
callno = callnum
avail_here = stats.get(AVAILABLE, 0)
avail_here += stats.get(RESHELVING, 0)
anystatus_here = sum(stats.values())
+
+ """
+ volume check - based on v.1, etc. in call number
+ """
+ voltest = re.search(r'\w*v\.\s?(\d+)', callnum)
+
if loc == RESERVES_DESK_NAME:
desk += anystatus_here
avail += avail_here
- callno = callnum
+ if voltest and vol > 0:
+ if (int(voltest.group(1)) > vol):
+ callsuffix = "/" + callnum
+ else:
+ callprefix = callnum + "/"
+ else:
+ callno = callnum
dueinfo = ''
lib += anystatus_here
copyids = E1(OPENSRF_CN_CALL, bib_id, callnum, org)
if loc == RESERVES_DESK_NAME:
if len(circmod) == 0:
circmod = circinfo.get("circ_modifier")
- if avail == 0:
+ if avail == 0 or (voltest and callno.find(voltest.group(0)) == -1):
circs = circinfo.get("circulations")
if circs and len(circs) > 0:
circ = circs[0]
#remove offset info, %z is flakey for some reason
rawdate = rawdate[:-5]
duetime = time.strptime(rawdate, TIME_FORMAT)
- if len(dueinfo) == 0:
+ if len(dueinfo) == 0 or voltest:
earliestdue = duetime
- dueinfo = time.strftime(DUE_FORMAT,earliestdue)
- callno = callnum
- if duetime < earliestdue:
+ if voltest:
+ if (int(voltest.group(1)) > vol):
+ if len(dueinfo) > 0:
+ dueinfo = dueinfo + "/"
+ dueinfo = dueinfo + voltest.group(0) + ': ' + time.strftime(DUE_FORMAT,earliestdue)
+ else:
+ tmpinfo = dueinfo
+ dueinfo = voltest.group(0) + ': ' + time.strftime(DUE_FORMAT,earliestdue)
+ if len(tmpinfo) > 0:
+ dueinfo = dueinfo + "/" + dueinfo
+ callprefix = callsuffix = ''
+ else:
+ dueinfo = time.strftime(DUE_FORMAT,earliestdue)
+
+ if not voltest:
+ callno = callnum
+
+ # way too wacky to sort out vols for this
+ if duetime < earliestdue and not voltest:
earliestdue = duetime
dueinfo = time.strftime(DUE_FORMAT,earliestdue)
callno = callnum
+ if voltest:
+ callno = callprefix + callno + callsuffix
+ vol = int(voltest.group(1))
return (lib, desk, avail, callno, dueinfo, circmod)
except:
print "due date/call problem: ", bib_id
class="${_avail > 0 and 'available' or 'unavailable'}"
title="${_avail} of ${_desk} copies available at reserves desk; ${_lib} total copies in library system">
<div>${_avail and 'Available' or 'Unavailable'} (${_avail}/${_desk})</div>
- <div py:if="_dueinfo">DUE: ${_dueinfo}</div>
<div py:if="_circmod">
<span py:if="_circmod == 'RSV2'">2 Hour Loan</span>
<span py:if="_circmod == 'RSV3'">3 Day Loan</span>
<span py:if="_circmod == 'RESERVE 7 DAY'">7 Day Loan</span>
</div>
<div class="callnumber">${_callno}</div>
- </div>
- <div py:if="not valid" class="unavailable">
- Availability unknown.
- <div class="callnumber">${item.call_number()}</div>
- </div>
- </a>
+ <div py:if="_dueinfo">DUE: ${_dueinfo}</div>
+ </div>
+
+ <div py:if="not valid" class="unavailable">
+ Availability unknown.
+ <div class="callnumber">${item.call_number()}</div>
+
+ </div>
+
+ </a>
</div>
<div class="availability avail_nonphys" py:if="item.item_type != 'PHYS'">
</div>
<tr py:if="item.issue"><th>Issue</th><td>${item.issue}</td></tr>
<tr py:if="item.pages"><th>Pages</th><td>${item.pages}</td></tr>
<tr py:if="item.isbn"><th>ISBN</th><td>${item.isbn}</td></tr>
+ <!--
<tr py:if="callnum"><th>Call Number</th><td>${callnum}</td></tr>
+ -->
<tr py:if="item.item_type=='ELEC'"><th>Copyright status</th><td>${item.get_copyright_status_display()}</td></tr>
<tr><th>Type</th><td>${item.get_item_type_display()}</td></tr>
+ <?python
+ downloads_allowed = site.allows_downloads_to(user)
+ stat = callhook('item_status', item) if (item.item_type == 'PHYS') else None
+ valid = stat is not None
+ ?>
+ <tr py:if="valid" py:with="(_lib, _desk, _avail, _callno, _dueinfo, _circmod) = stat"
+ title="${_avail} of ${_desk} copies available at reserves desk; ${_lib} total copies in library system">
+ <th>Call Number (take this to the counter)</th>
+ <td>
+ <div class="${_avail > 0 and 'available' or 'unavailable'}" py:if="_dueinfo">DUE: ${_dueinfo}</div>
+ <div class="callnumber ${_avail > 0 and 'available' or 'unavailable'}">${_callno}</div>
+ <div py:if="_circmod">
+ <span py:if="_circmod == 'RSV2'">2 Hour Loan</span>
+ <span py:if="_circmod == 'RSV3'">3 Day Loan</span>
+ <span py:if="_circmod == 'RSV4'">4 Day Loan</span>
+ <span py:if="_circmod == 'RSV7'">7 Day Loan</span>
+ <span py:if="_circmod == 'RESERVE 1 DAY'">1 Day Loan</span>
+ <span py:if="_circmod == 'RESERVE 1 HOUR'">1 Hour Loan</span>
+ <span py:if="_circmod == 'RESERVE 14 DAY'">14 Day Loan</span>
+ <span py:if="_circmod == 'RESERVE 2 DAY'">2 Day Loan</span>
+ <span py:if="_circmod == 'RESERVE 2 HOUR'">2 Hour Loan</span>
+ <span py:if="_circmod == 'RESERVE 3 DAY'">3 Day Loan</span>
+ <span py:if="_circmod == 'RESERVE 4 HOUR'">4 Hour Loan</span>
+ <span py:if="_circmod == 'RESERVE 7 DAY'">7 Day Loan</span>
+ </div>
+
+ <div py:if="not valid" class="unavailable">
+ Availability unknown.
+ <div class="callnumber">${item.call_number()}</div>
+
+ </div>
+ </td>
+ </tr>
<tr py:if="item.item_type=='PHYS'"
py:with="avail, status = item.describe_physical_item_status()">
<th>Status</th><td><div class="${avail and 'available' or 'unavailable'}">${status}</div></td>