async renewals with feedback
authorpines <pines@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 6 Feb 2007 17:41:57 +0000 (17:41 +0000)
committerpines <pines@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 6 Feb 2007 17:41:57 +0000 (17:41 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6903 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/server/circ/util.js
Open-ILS/xul/staff_client/server/patron/items.js
Open-ILS/xul/staff_client/server/patron/items_overlay.xul

index 1b0e129..77eced6 100644 (file)
@@ -1288,7 +1288,7 @@ circ.util.checkin_via_barcode2 = function(session,params,backdate,auto_print,che
        }
 }
 
-circ.util.renew_via_barcode = function ( barcode, patron_id ) {
+circ.util.renew_via_barcode = function ( barcode, patron_id, async ) {
        try {
                var obj = {};
                JSAN.use('util.network'); obj.network = new util.network();
@@ -1297,10 +1297,44 @@ circ.util.renew_via_barcode = function ( barcode, patron_id ) {
                var params = { barcode: barcode };
                if (patron_id) params.patron = patron_id;
 
+               function renew_callback(req) {
+                       try {
+                               var renew = req.getResultObject();
+                               if (typeof renew.ilsevent != 'undefined') renew = [ renew ];
+                               for (var j = 0; j < renew.length; j++) { 
+                                       switch(renew[j].ilsevent) {
+                                               case 0 /* SUCCESS */ : break;
+                                               case 5000 /* PERM_FAILURE */: break;
+                                               case 1212 /* PATRON_EXCEEDS_OVERDUE_COUNT */ : break;
+                                               case 1213 /* PATRON_BARRED */ : break;
+                                               case 1215 /* CIRC_EXCEEDS_COPY_RANGE */ : break;
+                                               case 7002 /* PATRON_EXCEEDS_CHECKOUT_COUNT */ : break;
+                                               case 7003 /* COPY_CIRC_NOT_ALLOWED */ : break;
+                                               case 7004 /* COPY_NOT_AVAILABLE */ : break;
+                                               case 7006 /* COPY_IS_REFERENCE */ : break;
+                                               case 7007 /* COPY_NEEDED_FOR_HOLD */ : break;
+                                               case 7008 /* MAX_RENEWALS_REACHED */ : break; 
+                                               case 7009 /* CIRC_CLAIMS_RETURNED */ : break; 
+                                               case 7010 /* COPY_ALERT_MESSAGE */ : break;
+                                               case 7013 /* PATRON_EXCEEDS_FINES */ : break;
+                                               default:
+                                                       throw(renew);
+                                               break;
+                                       }
+                               }
+                               if (typeof async == 'function') async(renew);
+                               return renew;
+                       } catch(E) {
+                               JSAN.use('util.error'); var error = new util.error();
+                               error.standard_unexpected_error_alert('Renew Failed for ' + barcode,E);
+                               return null;
+                       }
+               }
+
                var renew = obj.network.simple_request(
                        'CHECKOUT_RENEW', 
                        [ ses(), params ],
-                       null,
+                       async ? renew_callback : null,
                        {
                                'title' : 'Override Renew Failure?',
                                'overridable_events' : [ 
@@ -1337,29 +1371,7 @@ circ.util.renew_via_barcode = function ( barcode, patron_id ) {
                                }
                        }
                );
-               if (typeof renew.ilsevent != 'undefined') renew = [ renew ];
-               for (var j = 0; j < renew.length; j++) { 
-                       switch(renew[j].ilsevent) {
-                               case 0 /* SUCCESS */ : break;
-                               case 5000 /* PERM_FAILURE */: break;
-                               case 1212 /* PATRON_EXCEEDS_OVERDUE_COUNT */ : break;
-                               case 1213 /* PATRON_BARRED */ : break;
-                               case 1215 /* CIRC_EXCEEDS_COPY_RANGE */ : break;
-                               case 7002 /* PATRON_EXCEEDS_CHECKOUT_COUNT */ : break;
-                               case 7003 /* COPY_CIRC_NOT_ALLOWED */ : break;
-                               case 7004 /* COPY_NOT_AVAILABLE */ : break;
-                               case 7006 /* COPY_IS_REFERENCE */ : break;
-                               case 7007 /* COPY_NEEDED_FOR_HOLD */ : break;
-                               case 7008 /* MAX_RENEWALS_REACHED */ : break; 
-                               case 7009 /* CIRC_CLAIMS_RETURNED */ : break; 
-                               case 7010 /* COPY_ALERT_MESSAGE */ : break;
-                               case 7013 /* PATRON_EXCEEDS_FINES */ : break;
-                               default:
-                                       throw(renew);
-                               break;
-                       }
-               }
-               return renew;
+               if (! async ) return renew_callback( { 'getResultObject' : function() { return renew; } } );
 
        } catch(E) {
                JSAN.use('util.error'); var error = new util.error();
index a554325..be6b769 100644 (file)
@@ -87,9 +87,9 @@ patron.items.prototype = {
                                        'cmd_items_print2' : [ ['command'], function() { obj.items_print(2); } ],
                                        'cmd_items_export' : [ ['command'], function() { obj.items_export(1); } ],
                                        'cmd_items_export2' : [ ['command'], function() { obj.items_export(2); } ],
-                                       'cmd_items_renew' : [ ['command'], function() { obj.items_renew(1); alert('Action complete.'); obj.retrieve(); } ],
+                                       'cmd_items_renew' : [ ['command'], function() { obj.items_renew(1); /*alert('Action complete.'); obj.retrieve();*/ } ],
                                        'cmd_items_renew_all' : [ ['command'], function() { obj.items_renew_all(); } ],
-                                       'cmd_items_renew2' : [ ['command'], function() { obj.items_renew(2); alert('Action complete.'); obj.retrieve(); } ],
+                                       'cmd_items_renew2' : [ ['command'], function() { obj.items_renew(2); /*alert('Action complete.'); obj.retrieve();*/ } ],
                                        'cmd_items_edit' : [ ['command'], function() { obj.items_edit(1); alert('Action complete.'); obj.retrieve(); } ],
                                        'cmd_items_edit2' : [ ['command'], function() { obj.items_edit(2); alert('Action complete.'); obj.retrieve(); } ],
                                        'cmd_items_mark_lost' : [ ['command'], function() { obj.items_mark_lost(1); alert('Action complete.'); obj.retrieve(); } ],
@@ -259,7 +259,7 @@ patron.items.prototype = {
                                try {
                                        obj.list.select_all();
                                        obj.items_renew(1,true);        
-                                       setTimeout(function(){list.on_all_fleshed = null; alert('Action complete.'); obj.retrieve(); },0);
+                                       setTimeout(function(){list.on_all_fleshed = null; /*alert('Action complete.'); obj.retrieve();*/ },0);
                                } catch(E) {
                                        obj.error.standard_unexpected_error_alert('2 All items were not likely renewed',E);
                                }
@@ -283,11 +283,37 @@ patron.items.prototype = {
                                var r = window.confirm(msg);
                                if (!r) { return; }
                        }
+
+                       var count = 0;
+
+                       function gen_renew(bc) {
+                               var x = document.getElementById('renew_msgs');
+                               if (x) {
+                                       var l = document.createElement('label');
+                                       l.setAttribute('value','Renewing ' + bc);
+                                       x.appendChild(l);
+                               }
+                               var renew = circ.util.renew_via_barcode( barcode, obj.patron_id, 
+                                       function(r) {
+                                               if ( instanceOf( r[0], 'circ' ) || (typeof r[0].ilsevent != 'undefined' && r[0].ilsevent == 0) ) {
+                                                       l.setAttribute('value', bc + ' renewed.');
+                                               } else {
+                                                       l.setAttribute('value', bc + ' not renewed.  ' + r[0].desc);
+                                               }
+                                               count--;
+                                               if (count == 0) {
+                                                       if (window.confirm('Action completed. Refresh list?')) obj.retrieve();
+                                                       JSAN.use('util.widgets'); util.widgets.remove_children(x);
+                                               }
+                                       } 
+                               );
+                       }
+
                        for (var i = 0; i < retrieve_ids.length; i++) {
                                try {
+                                       count++;
                                        var barcode = retrieve_ids[i].barcode;
-                                       //alert('Renew barcode = ' + barcode);
-                                       var renew = circ.util.renew_via_barcode( barcode, obj.patron_id );
+                                       gen_renew(barcode);
 
                                } catch(E) {
                                        obj.error.standard_unexpected_error_alert('Renew probably did not happen for barcode ' + barcode,E);
index a178503..81fa90c 100644 (file)
@@ -57,6 +57,7 @@
                <vbox flex="0">
                        <hbox id="items_top_ui" />
                </vbox>
+               <vbox id="renew_msgs" />
                <tree id="items_list" flex="1" enableColumnDrag="true" context="items_actions"/>
                <vbox flex="0">
                        <hbox id="items_bottom_ui" />