refactored renewals to be batch renewals and to run asynchronously
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 5 Jan 2007 20:02:11 +0000 (20:02 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 5 Jan 2007 20:02:11 +0000 (20:02 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_0@6730 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/skin/default/js/myopac.js
Open-ILS/web/opac/skin/default/xml/myopac/myopac_checked.xml

index 05ac65d..a881a5d 100644 (file)
@@ -118,6 +118,15 @@ var checkedRowTemplate;
 var circsCache = new Array();
 var checkedDrawn = false;
 
+function moClearCheckedTable() {
+       var tbody                       = $("myopac_checked_tbody");
+       var loading                     = $("myopac_checked_loading");
+       var none                                = $("myopac_checked_none");
+       clearNodes( tbody, [ loading, none ] );
+}
+
+var __can_renew_one = false;
+
 function myOPACDrawCheckedOutSlim(r) {
 
        var checked                     = r.getResultObject();
@@ -125,12 +134,14 @@ function myOPACDrawCheckedOutSlim(r) {
        var loading                     = $("myopac_checked_loading");
        var none                                = $("myopac_checked_none");
 
+   __can_renew_one = false;
+
        if(checkedDrawn) return;
        checkedDrawn = true;
        if(!checkedRowTemplate) 
                checkedRowTemplate = tbody.removeChild($("myopac_checked_row"));
 
-       clearNodes( tbody, [ loading, none ] );
+   moClearCheckedTable();
 
        hideMe(loading); /* remove all children and start over */
        if(!(checked && (checked.out || checked.overdue))) {
@@ -154,31 +165,55 @@ function myOPACDrawCheckedOutSlim(r) {
                req.send();
        }
 
+   appendClear($('mo_items_out_count'), 
+      text(new String( parseInt(checked.overdue.length) + parseInt(checked.out.length) )) );
+
+   if( checked.overdue.length > 0 ) {
+      addCSSClass($('mo_items_overdue_count'), 'overdue');
+      appendClear($('mo_items_overdue_count'),
+         text(new String( parseInt(checked.overdue.length) )) );
+   }
+
 }
 
+
 function myOPACDrawCheckedItem(r) {
 
        var circ = r.getResultObject();
        var tbody = r.tbody;
        var row = checkedRowTemplate.cloneNode(true);
        row.id = 'myopac_checked_row_ ' + circ.id();
+   row.setAttribute('circid', circ.id());
 
        var due = _trimTime(circ.due_date());
 
        var dlink = $n( row, "myopac_checked_due" );
        var rlink = $n( row, "myopac_checked_renewals" );
-       var rnlink = $n( row, "myopac_checked_renew_link" );
+       //var rnlink = $n( row, "myopac_checked_renew_link" );
 
-       if( r.od ) due = elem('b', {style:'color:red;font-size:110%'},due);
-       else due = text(due);
+       //if( r.od ) due = elem('b', {style:'color:red;font-size:110%'},due);
+       if( r.od ) {
+      due = elem('b', null, due);
+      addCSSClass(due, 'overdue');
+   } else {
+      due = text(due);
+   }
 
        dlink.appendChild(due);
        rlink.appendChild(text(circ.renewal_remaining()));
        unHideMe(row);
-       rnlink.setAttribute('href', 'javascript:myOPACRenewCirc("'+circ.id()+'");');
+       //rnlink.setAttribute('href', 'javascript:myOPACRenewCirc("'+circ.id()+'");');
        circsCache.push(circ);
 
-       if( circ.renewal_remaining() < 1 ) hideMe(rnlink);
+       if( circ.renewal_remaining() < 1 ) {
+      $n(row, 'selectme').disabled = true;
+      if(!__can_renew_one)
+         $('mo_renew_button').disabled = true;
+   } else {
+      __can_renew_one = true;
+      $('mo_renew_button').disabled = false;
+      $n(row, 'selectme').disabled = false;
+   }
 
        tbody.appendChild(row);
 
@@ -190,6 +225,8 @@ function myOPACDrawCheckedItem(r) {
        req.send();
 }
 
+var __circ_titles = {};
+
 function myOPACDrawCheckedTitle(r) {
        var record = r.getResultObject();
        var circid = r.circ;
@@ -207,6 +244,7 @@ function myOPACDrawCheckedTitle(r) {
        var alink = $n( row, "myopac_checked_author_link" );
        buildTitleDetailLink(record, tlink);
        buildSearchLink(STYPE_AUTHOR, record.author(), alink);
+   __circ_titles[circid] = record.title();
 }
 
 function myOPACDrawNonCatalogedItem(r) {
@@ -219,9 +257,11 @@ function myOPACDrawNonCatalogedItem(r) {
 
        tlink.parentNode.appendChild(text(copy.dummy_title()));
        alink.parentNode.appendChild(text(copy.dummy_author()));
+   __circ_titles[circid] = copy.dummy_title();
 }
 
 
+/*
 function myOPACRenewCirc(circid) {
 
        var circ;
@@ -246,6 +286,7 @@ function myOPACRenewCirc(circid) {
        checkedDrawn = false;
        myOPACShowChecked();
 }
+*/
 
 
 
@@ -1127,3 +1168,111 @@ function myOPACDrawNonCatCirc(r) {
 
 
 
+function myopacSelectAllChecked() {
+   __myopacSelectChecked(true);
+}
+
+function myopacSelectNoneChecked() {
+   __myopacSelectChecked(false);
+}
+
+function __myopacSelectChecked(value) {
+   var rows = myopacGetCheckedOutRows();
+   for( var i = 0; i < rows.length; i++ ) {
+      var row = rows[i];
+      var box = $n(row, 'selectme');
+      if( box && ! box.disabled )
+      box.checked = value;
+   }
+}
+
+function myopacGetCheckedOutRows() {
+   var rows = [];
+   var tbody = $('myopac_checked_tbody');
+   var children = tbody.childNodes;
+   for( var i = 0; i < children.length; i++ ) {
+      var child = children[i];
+      if( child.nodeName.match(/^tr$/i) ) 
+         if( $n(child, 'selectme') ) 
+            rows.push(child);
+   }
+   return rows;
+}
+
+var __renew_circs = [];
+
+/* true if 1 renewal succeeded */
+var __a_renew_success = false;
+
+/* renews all selected circulations */
+function myOPACRenewSelected() {
+   var rows = myopacGetCheckedOutRows();
+       if(!confirm($('myopac_renew_confirm').innerHTML)) return;
+   __a_renew_success = false;
+
+   for( var i = 0; i < rows.length; i++ ) {
+
+      var row = rows[i];
+      if( ! $n(row, 'selectme').checked ) continue;
+      var circ_id = row.getAttribute('circid');
+
+          var circ;
+          for( var j = 0; j != circsCache.length; j++ ) 
+                  if(circsCache[j].id() == circ_id)
+                          circ = circsCache[j];
+
+      moRenewCirc( circ.target_copy(), G.user.id(), circ );
+   }
+}
+
+
+/* renews a single circulation */
+function moRenewCirc(copy_id, user_id, circ) {
+
+   unHideMe($('my_renewing'));
+   moClearCheckedTable();
+
+   _debug('renewing circ ' + circ.id() + ' with copy ' + copy_id);
+   var req = new Request(RENEW_CIRC, G.user.session, 
+      {  patron : user_id, 
+         copyid : copy_id, opac_renewal : 1 
+      } 
+   );
+
+   __renew_circs.push(circ.id());
+   req.request.alertEvent = false;
+   req.callback(myHandleRenewResponse);
+   req.request.circ = circ;
+   req.send();
+}
+
+
+
+/* handles the circ renew results */
+function myHandleRenewResponse(r) {
+   var res = r.getResultObject();
+   var circ = r.circ;
+
+   /* remove this circ from the list of circs to renew */
+   __renew_circs = grep(__renew_circs, function(i) { return (i != circ.id()); });
+
+   _debug("handling renew result for " + circ.id());
+
+   if(checkILSEvent(res) || checkILSEvent(res[0])) 
+      alertIdText('myopac_renew_fail', __circ_titles[circ.id()]);
+   else __a_renew_success = true;
+
+   if(__renew_circs) return; /* more to come */
+
+   __renew_circs = [];
+
+       if( __a_renew_success )
+      alert($('myopac_renew_success').innerHTML);      
+
+   hideMe($('my_renewing'));
+   checkedDrawn = false;
+       myOPACShowChecked();
+}
+
+
+
index 24ad386..6d2dc02 100644 (file)
@@ -3,23 +3,46 @@
 
        <script language='javascript' src='<!--#echo var="OILS_JS_BASE"-->/Date.W3CDTF.js'/>
 
+   <table width='100%'><tbody>
+      <tr>
+         <td aligh='left' class='data_grid'>
+               <!--
+               Total items out: <b id='mo_items_out_count' style='padding-right: 20px;'>0</b>
+               -->
+               Total items out: <b id='mo_items_out_count' style='padding: 5px;'>0</b> / 
+               Total items overdue: <b id='mo_items_overdue_count' style='padding: 5px;'>0</b>
+         </td>
+         <td align='right'>
+            <button onclick='myOPACRenewSelected();' id='mo_renew_button' disabled='disabled'>Renew Selected Items</button>
+         </td>
+      </tr>
+       <tr id='my_renewing' class='hide_me'><td align='center'><b>Renewing...</b></td></tr>
+   </tbody></table>
+
        <table width='100%' class='light_border data_grid'>
 
                <thead class='color_3'>
                        <tr>
-                               <td width='50%'>Title</td>
+                               <td width='45%'>Title</td>
                                <td width='20%'>Author</td>
                                <td width='10%' nowrap='nowrap' align='center'>Due Date</td>
                                <td width='10%' nowrap='nowrap' align='center'>Renewals Remaining</td>
-                               <td width='10%' nowrap='nowrap' align='center'>Renew</td>
+            <td width='15%'>Select 
+               (<a id='myopac_select_all_checked' onclick='myopacSelectAllChecked();' 
+                  class='classic_link' href='javascript:void(0);'>All</a>/<a id='myopac_select_none_checked' 
+                  onclick='myopacSelectNoneChecked();' class='classic_link'   href='javascript:void(0);'>None</a>)
+            </td>
                        </tr>
                </thead>
 
+
                <tbody id='myopac_checked_tbody'>
 
                        <tr id='myopac_checked_none' class='hide_me'>
                                <td colspan='10' align='center'><b>You have no items checked out at this time</b></td>
                        </tr>
+
+
                        <tr id='myopac_checked_loading'><td>Loading...</td></tr>
 
                        <tr id='myopac_checked_row' class='light_border hide_me'>
                                <td align='center' name='myopac_checked_due' class='light_border'> </td>
                                <td align='center' name='myopac_checked_renewals' class='light_border'> </td>
 
+            <!--
                                <td align='center' name='myopac_checked_renew' class='light_border'>
                                        <a style='text-decoration:underline;' href='javascript:void(0);' 
                                                name='myopac_checked_renew_link' class='class_link'>Renew</a>
                                </td>
+            -->
+
+            <td align='center'><input type='checkbox' name='selectme'/></td>
 
                        </tr>
                </tbody>
                </table>
        </div>
 
-       <div id='myopac_renew_success' class='hide_me'>Item successfully renewed</div>
+       <div id='myopac_renew_success' class='hide_me'>Item(s) successfully renewed</div>
 
-       <span class='hide_me' id='myopac_renew_confirm'>Are you sure you wish to renew this item?</span>
+       <span class='hide_me' id='myopac_renew_confirm'>Are you sure you wish to renew the selected item(s)?</span>
 
        <span class='hide_me' id='myopac_renew_fail'>
-               The system was unable to renew the selected item.  Please ask a librarian for help.
+               The system is unable to renew the selected item at this time.  This usually means the item is needed to fulfill a hold.  Please see a librarian for further help.
        </span>
 
+   <span class='hide_me' id='myopac_renew_fail2'>
+      PINES policy prevents the renewal of this item at this time.  Please see a librarian for further details.
+   </span>
+
 </div>