first draft of handling multi-volume sets, sync status info in full display
authorartunit <artunit@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Tue, 18 Jan 2011 02:25:43 +0000 (02:25 +0000)
committerartunit <artunit@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Tue, 18 Jan 2011 02:25:43 +0000 (02:25 +0000)
git-svn-id: svn://svn.open-ils.org/ILS-Contrib/servres/trunk@1201 6d9bc8c9-1ec2-4278-b937-99fde70a366f

conifer/integration/uwindsor.py
conifer/templates/components/site.xhtml
conifer/templates/item/item_metadata.xhtml

index 3c89bca..34c2b5a 100644 (file)
@@ -102,20 +102,34 @@ def _item_status(bib_id):
     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)
@@ -129,7 +143,7 @@ def _item_status(bib_id):
                        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]
@@ -137,15 +151,34 @@ def _item_status(bib_id):
                                                #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
index 8a5e8d7..10583f1 100644 (file)
@@ -44,7 +44,6 @@ searchtext = _('search this site...')
             class="${_avail &gt; 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>
@@ -60,12 +59,16 @@ searchtext = _('search this site...')
                 <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>
index 4bc550b..6788ded 100644 (file)
@@ -52,9 +52,44 @@ callnum = item.call_number()
       <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 &gt; 0 and 'available' or 'unavailable'}" py:if="_dueinfo">DUE: ${_dueinfo}</div>
+          <div class="callnumber ${_avail &gt; 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>