user_request is now optionally async'able. Aggressive async of patron select in...
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 19 Jul 2005 04:38:12 +0000 (04:38 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 19 Jul 2005 04:38:12 +0000 (04:38 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@1275 dcc99617-32d9-48b4-a31d-7c20da2025e4

Evergreen/staff_client/chrome/content/evergreen/circ/circ_utils.js
Evergreen/staff_client/chrome/content/evergreen/patron/patron_display.js
Evergreen/staff_client/chrome/content/evergreen/patron/patron_holds.js
Evergreen/staff_client/chrome/content/evergreen/patron/patron_search.js
Evergreen/staff_client/chrome/content/evergreen/patron/patron_utils.js
Evergreen/staff_client/chrome/content/evergreen/util/ses.js
Evergreen/staff_client/chrome/locale/en-US/evergreen/OpenILS.properties

index 83fd050..e5b9c99 100644 (file)
@@ -7,15 +7,27 @@ function is_barcode_valid( barcode ) {
        return check_checkdigit( barcode );
 }
 
-function checkout_permit(barcode, patron_id, num_of_open_async_checkout_requests) {
+function cancel_hold( hold ) {
+       sdump('D_CIRC_UTILS',arg_dump(arguments,{0:true}));
+       var result = user_request(
+               'open-ils.circ',
+               'open-ils.circ.hold.cancel',
+               [ mw.G.auth_ses[0], hold.id() ]
+       )[0];
+       sdump('D_CIRC_UTILS','result = ' + result + '\n');
+       return result;
+}
+
+function checkout_permit(barcode, patron_id, num_of_open_async_checkout_requests, f) {
        sdump('D_CIRC_UTILS',arg_dump(arguments,{0:true,1:true,2:true}));
        try {
                var check = user_request(
                        'open-ils.circ',
                        'open-ils.circ.permit_checkout',
-                       [ mw.G.auth_ses[0], barcode, patron_id, num_of_open_async_checkout_requests ]
+                       [ mw.G.auth_ses[0], barcode, patron_id, num_of_open_async_checkout_requests ],
+                       f
                )[0];
-               sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
+               if (!f) sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
                return check;   
        } catch(E) {
                handle_error(E);
@@ -23,15 +35,16 @@ function checkout_permit(barcode, patron_id, num_of_open_async_checkout_requests
        }       
 }
 
-function checkout_by_copy_barcode(barcode, patron_id) {
+function checkout_by_copy_barcode(barcode, patron_id, f) {
        sdump('D_CIRC_UTILS',arg_dump(arguments,{0:true,1:true}));
        try {
                var check = user_request(
                        'open-ils.circ',
                        'open-ils.circ.checkout.barcode',
-                       [ mw.G.auth_ses[0], barcode, patron_id ]
+                       [ mw.G.auth_ses[0], barcode, patron_id ],
+                       f
                )[0];
-               sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
+               if (!f) sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
                return check;
        } catch(E) {
                sdump('D_ERROR',E);
@@ -39,15 +52,16 @@ function checkout_by_copy_barcode(barcode, patron_id) {
        }
 }
 
-function checkin_by_copy_barcode(barcode) {
+function checkin_by_copy_barcode(barcode, f) {
        sdump('D_CIRC_UTILS',arg_dump(arguments,{0:true}));
        try {
                var check = user_request(
                        'open-ils.circ',
                        'open-ils.circ.checkin.barcode',
-                       [ mw.G.auth_ses[0], barcode ]
+                       [ mw.G.auth_ses[0], barcode ],
+                       f
                )[0];
-               sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
+               if (!f) sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
                return check;
        } catch(E) {
                sdump('D_ERROR',E);
@@ -55,15 +69,16 @@ function checkin_by_copy_barcode(barcode) {
        }
 }
 
-function renew_by_circ_id(id) {
+function renew_by_circ_id(id, f) {
        sdump('D_CIRC_UTILS',arg_dump(arguments,{0:true}));
        try {
                var check = user_request(
                        'open-ils.circ',
                        'open-ils.circ.renew',
-                       [ mw.G.auth_ses[0], id ]
+                       [ mw.G.auth_ses[0], id ],
+                       f
                )[0];
-               sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
+               if (!f) sdump('D_CIRC_UTILS','check = ' + js2JSON(check) + '\n');
                return check;
        } catch(E) {
                sdump('D_ERROR',E);
@@ -74,8 +89,39 @@ function renew_by_circ_id(id) {
 function hold_cols() {
        var cols = [
 {
+       'id' : 'request_time', 'label' : getString('ahr_request_time_label'), 'flex' : 0,
+       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 
+       'fm_field_render' : '.request_time().toString().substr(0,10)'
+},
+{
+       'id' : 'status', 'label' : getString('ahr_status_label'), 'flex' : 1,
+       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 'fm_field_render' : '.status()'
+},
+{
+       'id' : 'hold_type', 'label' : getString('ahr_hold_type_label'), 'flex' : 0,
+       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 'fm_field_render' : '.hold_type()'
+},
+{
+       'id' : 'pickup_lib', 'label' : getString('ahr_pickup_lib_label'), 'flex' : 1,
+       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 
+       'fm_field_render' : 'mw.G.org_tree_hash[ $$.pickup_lib() ].name()'
+},
+{
+       'id' : 'pickup_lib_shortname', 'label' : getString('ahr_pickup_lib_label'), 'flex' : 0,
+       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 
+       'fm_field_render' : 'mw.G.org_tree_hash[ $$.pickup_lib() ].shortname()'
+},
+               {
+                       'id' : 'title', 'label' : getString('mvr_label_title'), 'flex' : 1,
+                       'primary' : false, 'hidden' : false, 'fm_class' : 'mvr', 'fm_field_render' : '.title()'
+               },
+               {
+                       'id' : 'author', 'label' : getString('mvr_label_author'), 'flex' : 1,
+                       'primary' : false, 'hidden' : false, 'fm_class' : 'mvr', 'fm_field_render' : '.author()'
+               },
+{
        'id' : 'capture_time', 'label' : getString('ahr_capture_time_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 'fm_field_render' : '.capture_time()'
+       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.capture_time()'
 },
 {
        'id' : 'current_copy', 'label' : getString('ahr_current_copy_label'), 'flex' : 1,
@@ -83,19 +129,15 @@ function hold_cols() {
 },
 {
        'id' : 'email_notify', 'label' : getString('ahr_email_notify_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 'fm_field_render' : '.email_notify()'
+       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.email_notify()'
 },
 {
        'id' : 'expire_time', 'label' : getString('ahr_expire_time_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 'fm_field_render' : '.expire_time()'
+       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.expire_time()'
 },
 {
        'id' : 'fulfillment_time', 'label' : getString('ahr_fulfillment_time_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 'fm_field_render' : '.fulfillment_time()'
-},
-{
-       'id' : 'hold_type', 'label' : getString('ahr_hold_type_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : false, 'fm_class' : 'ahr', 'fm_field_render' : '.hold_type()'
+       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.fulfillment_time()'
 },
 {
        'id' : 'holdable_formats', 'label' : getString('ahr_holdable_formats_label'), 'flex' : 1,
@@ -106,34 +148,14 @@ function hold_cols() {
        'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.id()'
 },
 {
-       'id' : 'ischanged', 'label' : getString('ahr_ischanged_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.ischanged()'
-},
-{
-       'id' : 'isdeleted', 'label' : getString('ahr_isdeleted_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.isdeleted()'
-},
-{
-       'id' : 'isnew', 'label' : getString('ahr_isnew_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.isnew()'
-},
-{
        'id' : 'phone_notify', 'label' : getString('ahr_phone_notify_label'), 'flex' : 1,
        'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.phone_notify()'
 },
 {
-       'id' : 'pickup_lib', 'label' : getString('ahr_pickup_lib_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.pickup_lib()'
-},
-{
        'id' : 'prev_check_time', 'label' : getString('ahr_prev_check_time_label'), 'flex' : 1,
        'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.prev_check_time()'
 },
 {
-       'id' : 'request_time', 'label' : getString('ahr_request_time_label'), 'flex' : 1,
-       'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.request_time()'
-},
-{
        'id' : 'requestor', 'label' : getString('ahr_requestor_label'), 'flex' : 1,
        'primary' : false, 'hidden' : true, 'fm_class' : 'ahr', 'fm_field_render' : '.requestor()'
 },
index 9af6df9..760918f 100755 (executable)
@@ -396,7 +396,15 @@ function patron_display_patron_holds_init(p) {
                function (treeitem) {
                        sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
                        var record_id = treeitem.getAttribute('record_id'); 
-                       p.patron_holds.map_patron_holds_to_cols( p._patron.hold_requests()[ record_id ], treeitem );
+                       var hold = p._patron.hold_requests()[ record_id ];
+                       patron_get_hold_status(
+                               hold,
+                               function (request) {
+                                       var result = request.getResultObject();
+                                       hold.status( hold_status_as_text( result ) );
+                                       p.patron_holds.map_patron_holds_to_cols( hold, treeitem );
+                               }
+                       );
                }
        );
        p.patron_holds.register_item_context_builder(
@@ -407,11 +415,34 @@ function patron_display_patron_holds_init(p) {
                        var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
                        sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
 
+                       /*** CANCEL HOLD ***/
+                       var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
+                       p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
+                       menuitem_ph_ce.setAttribute('label',getString('circ.context_cancel_hold'));
+                       menuitem_ph_ce.addEventListener(
+                               'command',
+                               function (ev) {
+                                       sdump('D_PATRON_DISPLAY','Firing cancel hold context for patron_holds\n');
+                                       for (var i = 0; i < patron_holds.length; i++) {
+                                               sdump('D_PATRON_DISPLAY','Firing cancel edit context\n');
+                                               var record_id = patron_holds[i].getAttribute('record_id');
+                                               var hold = p._patron.hold_requests()[ record_id ];
+                                               cancel_hold( hold );
+                                       }
+                                       p.refresh();
+                               },
+                               false
+                       );
+
+                       /* separator */
+                       var menuitem_ph_s = p.patron_holds.paged_tree.w.document.createElement('menuseparator');
+                       p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_s );
+                       
                        /*** COPY EDITOR ***/
-                       var menuitem_pi_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
-                       p.patron_holds.paged_tree.popup.appendChild( menuitem_pi_ce );
-                       menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
-                       menuitem_pi_ce.addEventListener(
+                       var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
+                       p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
+                       menuitem_ph_ce.setAttribute('label',getString('circ.context_edit'));
+                       menuitem_ph_ce.addEventListener(
                                'command',
                                function (ev) {
                                        sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
@@ -423,10 +454,10 @@ function patron_display_patron_holds_init(p) {
                        );
 
                        /*** OPAC ***/
-                       var menuitem_pi_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
-                       p.patron_holds.paged_tree.popup.appendChild( menuitem_pi_o );
-                       menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
-                       menuitem_pi_o.addEventListener(
+                       var menuitem_ph_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
+                       p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_o );
+                       menuitem_ph_o.setAttribute('label',getString('circ.context_opac'));
+                       menuitem_ph_o.addEventListener(
                                'command',
                                function (ev) {
                                        sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
index 880087c..c6b84ee 100644 (file)
@@ -34,31 +34,44 @@ function patron_holds_init(p) {
        return p;
 }
 
-function patron_holds_tree_map_patron_holds_to_cols(p, patron_holds, treeitem) {
+function patron_holds_tree_map_patron_holds_to_cols(p, patron_hold, treeitem) {
        sdump('D_PATRON_HOLDS',arg_dump(arguments,{1:true}));
        sdump('D_TRACE_ENTER',arg_dump(arguments));
-       var cols = new Array();
-       for (var i = 0; i < p.patron_holds_cols.length; i++) {
-               var hash = p.patron_holds_cols[i];
-               sdump('D_PATRON_HOLDS','Considering ' + js2JSON(hash) + '\n');
-               var obj_string = 'patron_holds';
-               switch( hash.fm_class ) {
-                       case 'acp' : obj_string = 'patron_holds.copy'; break;
-                       case 'circ' : obj_string = 'patron_holds.circ'; break;
-                       case 'mvr' : obj_string = 'patron_holds.record'; break;
-               }
-               var cmd = parse_render_string( obj_string, hash.fm_field_render );
-               sdump('D_PATRON_HOLDS','cmd = ' + cmd + '\n');
-               var col = '';
-               try {
-                       col = eval( cmd );
-                       sdump('D_PATRON_HOLDS','eval = ' + col + '\n');
-               } catch(E) {
-                       sdump('D_ERROR',js2JSON(E) + '\n');
-               }
-               cols.push( col );
+
+       var app; var method;
+       switch(patron_hold.hold_type()) {
+               case 'M': app = 'open-ils.search'; method = 'open-ils.search.biblio.metarecord.mods_slim.retrieve'; break;
+               default : app = 'open-ils.search'; method = 'open-ils.search.biblio.record.mods_slim.retrieve'; break;
        }
-       sdump('D_PATRON_HOLDS','cols = ' + js2JSON(cols) + '\n');
-       p.paged_tree.map_cols_to_treeitem( cols, treeitem );
+
+       user_request(
+               app,
+               method,
+               [ patron_hold.target() ],
+               function (request) {                    
+                       var mvr = request.getResultObject();
+                       var cols = new Array();
+                       for (var i = 0; i < p.patron_holds_cols.length; i++) {
+                               var hash = p.patron_holds_cols[i];
+                               sdump('D_PATRON_HOLDS','Considering ' + js2JSON(hash) + '\n');
+                               var obj_string = 'patron_hold';
+                               switch( hash.fm_class ) {
+                                       case 'mvr' : obj_string = 'mvr'; break;
+                               }
+                               var cmd = parse_render_string( obj_string, hash.fm_field_render );
+                               sdump('D_PATRON_HOLDS','cmd = ' + cmd + '\n');
+                               var col = '';
+                               try {
+                                       col = eval( cmd );
+                                       sdump('D_PATRON_HOLDS','eval = ' + col + '\n');
+                               } catch(E) {
+                                       sdump('D_ERROR',js2JSON(E) + '\n');
+                               }
+                               cols.push( col );
+                       }
+                       sdump('D_PATRON_HOLDS','cols = ' + js2JSON(cols) + '\n');
+                       p.paged_tree.map_cols_to_treeitem( cols, treeitem );
+               }
+       );
        sdump('D_TRACE_EXIT',arg_dump(arguments));
 }
index 1146ee5..362ebd0 100644 (file)
@@ -79,11 +79,36 @@ function patron_search_patron_search_results_init(p) {
                return function (request) {
                        /* Set new patron */
                        if (count == patron_select_async_count) {
+
                                p._patron = request.getResultObject();
-                               render_fm( p.w.document, { 'au' : p._patron } );
-                               p.retrieve_button.disabled = false;
+
+                               patron_get_checkouts( p._patron, function(req) {
+       
+                                       if (count == patron_select_async_count) {
+
+                                               p._patron.checkouts( req.getResultObject() );
+
+                                               patron_get_holds( p._patron, function(req) {
+
+                                                       if (count == patron_select_async_count) {
+
+                                                               p._patron.hold_requests( req.getResultObject() );
+                                                               
+                                                               patron_get_bills( p._patron, function(req) {
+
+                                                                       if (count == patron_select_async_count) {
+
+                                                                               p._patron.bills = req.getResultObject();
+                                                                               render_fm(p.w.document,{'au':p._patron});
+                                                                               p.retrieve_button.disabled = false;
+                                                                       }
+                                                               });
+                                                       }
+                                               });
+                                       }
+                               });     
                        };
-               }
+               };
        }
 
        p.search_results.register_patron_select_callback(
index ffa4cb6..cb9bcd7 100755 (executable)
@@ -1,6 +1,7 @@
 sdump('D_TRACE','Loading patron_utils.js\n');
 
 function fake_patron() {
+       sdump('D_PATRON_UTILS',arg_dump(arguments));
        var p = new au(); 
        p.family_name( 'Retrieving' ); 
        p.checkouts( [] ); 
@@ -10,6 +11,20 @@ function fake_patron() {
        return p;
 }
 
+function hold_status_as_text( status ) {
+       sdump('D_PATRON_UTILS',arg_dump(arguments));
+       if (typeof(status) == 'object') status = status.status();
+       var text;
+       switch(status) {
+               case "1" : text = getString('holds_status_waiting_for_copy'); break;
+               case "2" : text = getString('holds_status_waiting_for_capture'); break;
+               case "3" : text = getString('holds_status_in_transit'); break;
+               case "4" : text = getString('holds_status_available'); break;
+               default : text = "Eh?"; break;
+       }
+       return text;
+}
+
 function patron_get_full_name( au ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        var name = '';
@@ -37,16 +52,21 @@ function patron_get_barcode( au ) {
        return '???';
 }
 
-function patron_get_bills( au ) {
+function patron_get_bills( au, f ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        try {
-               au.bills = ( user_request(   // FIXME: make bills a virtual field of au
+               var bills = user_request(
                        'open-ils.actor',
                        'open-ils.actor.user.transactions',
-                       [ mw.G.auth_ses[0], au.id() ]
-               )[0] );
-               sdump('D_PATRON_UTILS','bills = ' + js2JSON(au.bills) + '\n');
-               return au.bills
+                       [ mw.G.auth_ses[0], au.id() ],
+                       f
+               )[0];
+
+               if (!f) {
+                       sdump('D_PATRON_UTILS','bills = ' + js2JSON(bills) + '\n');
+                       au.bills = bills;   // FIXME: make bills a virtual field of au
+                       return bills;
+               }
        } catch(E) {
                sdump('D_ERROR',js2JSON(E) + '\n');
                return null;
@@ -56,8 +76,7 @@ function patron_get_bills( au ) {
 
 function patron_get_bills_total( au ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
-       if (! au.bills ) patron_get_bills( au );
-       if (au.bills == null)
+       if (au.bills == null || au.bills == undefined)
                return '???';
        else {
                var total = 0;
@@ -76,16 +95,21 @@ function patron_get_credit_total( au ) {
        return '$' + au.credit_forward_balance();
 }
 
-function patron_get_checkouts( au ) {
+function patron_get_checkouts( au, f ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        try {
-               au.checkouts( user_request(
+               var checkouts = user_request(
                        'open-ils.circ',
                        'open-ils.circ.actor.user.checked_out',
-                       [ mw.G.auth_ses[0], au.id() ]
-               )[0] );
-               sdump('D_PATRON_UTILS','checkouts = ' + js2JSON(au.checkouts()) + '\n');
-               return au.checkouts();
+                       [ mw.G.auth_ses[0], au.id() ],
+                       f
+               )[0];
+
+               if (!f) {
+                       sdump('D_PATRON_UTILS','checkouts = ' + js2JSON(au.checkouts()) + '\n');
+                       au.checkouts( checkouts );
+                       return checkouts;
+               }
        } catch(E) {
                sdump('D_ERROR',js2JSON(E) + '\n');
                return null;
@@ -94,13 +118,13 @@ function patron_get_checkouts( au ) {
 
 function patron_get_checkouts_total( au ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
-       if (! au.checkouts()) patron_get_checkouts( au );
        if (au.checkouts() == null)
                return '???';
        else
                return au.checkouts().length;
 }
 
+// Need an API call or virtual field to determine this
 function patron_get_checkouts_overdue_total( au ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        if (! au.checkouts()) patron_get_checkouts( au );
@@ -118,16 +142,21 @@ function patron_get_checkouts_overdue_total( au ) {
        return total;
 }
 
-function patron_get_holds( au ) {
+function patron_get_holds( au, f ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        try {
-               au.hold_requests( user_request(
+               var hold_requests = user_request(
                        'open-ils.circ',
                        'open-ils.circ.holds.retrieve',
-                       [ mw.G.auth_ses[0], au.id() ]
-               )[0] );
-               sdump('D_PATRON_UTILS','holds = ' + js2JSON(au.hold_requests()) + '\n');
-               return au.hold_requests();
+                       [ mw.G.auth_ses[0], au.id() ],
+                       f
+               )[0];
+
+               if (!f) {
+                       sdump('D_PATRON_UTILS','holds = ' + js2JSON(au.hold_requests()) + '\n');
+                       au.hold_requests( hold_requests );
+                       return hold_requests;
+               }
        } catch(E) {
                sdump('D_ERROR',js2JSON(E) + '\n');
                return null;
@@ -136,16 +165,35 @@ function patron_get_holds( au ) {
 
 function patron_get_holds_total( au ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
-       if (! au.hold_requests()) patron_get_holds( au );
        if (au.hold_requests() == null)
                return '???';
        else
                return au.hold_requests().length;
 }
 
+function patron_get_hold_status( hold, f ) {
+       sdump('D_PATRON_UTILS',arg_dump(arguments));
+       try {
+               var status = user_request(
+                       'open-ils.circ',
+                       'open-ils.circ.hold.status.retrieve',
+                       [ mw.G.auth_ses[0], hold.id() ],
+                       f
+               )[0];
+
+               if (!f) {
+                       sdump('D_PATRON_UTILS','status = ' + status + '\n');
+                       hold.status( status );
+                       return status;
+               }
+       } catch(E) {
+               sdump('D_ERROR',js2JSON(E) + '\n');
+               return null;
+       }
+}
+
 function patron_get_holds_available_total( au ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
-       if (! au.hold_requests()) patron_get_holds( au );
        var total = 0;
        if ( (au.hold_requests() != null) && (typeof(au.hold_requests()) == 'object') ) {
                for (var i = 0; i < au.hold_requests().length; i++) {
@@ -180,10 +228,10 @@ function patron_get_ident1_type_as_text( au ) {
                au.ident_type() && 
                mw.G.cit_hash &&
                mw.G.cit_hash[ au.ident_type() ] && 
-               mw.G.cit_hash[ au.ident_type() ].value &&
-               mw.G.cit_hash[ au.ident_type() ].value()
+               mw.G.cit_hash[ au.ident_type() ].name &&
+               mw.G.cit_hash[ au.ident_type() ].name()
        ) {
-               return mw.G.cit_hash[ au.ident_type() ].value();
+               return mw.G.cit_hash[ au.ident_type() ].name();
        } else {
                return null;
        }
@@ -196,10 +244,10 @@ function patron_get_ident2_type_as_text( au ) {
                au.ident_type2() && 
                mw.G.cit_hash &&
                mw.G.cit_hash[ au.ident_type2() ] && 
-               mw.G.cit_hash[ au.ident_type2() ].value &&
-               mw.G.cit_hash[ au.ident_type2() ].value()
+               mw.G.cit_hash[ au.ident_type2() ].name &&
+               mw.G.cit_hash[ au.ident_type2() ].name()
        ) {
-               return mw.G.cit_hash[ au.ident_type2() ].value();
+               return mw.G.cit_hash[ au.ident_type2() ].name();
        } else {
                return null;
        }
@@ -250,52 +298,25 @@ function patron_get_standing_css_style( value ) {
 function retrieve_patron_by_barcode( barcode, f ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        if (!barcode) return null;
-       return retrieve_patron_by_method( barcode, 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode', f );
+       return user_request( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode', [ mw.G.auth_ses[0], barcode ], f )[0];
 }
 
 function retrieve_patron_by_id( id, f ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        if (!id) return null;
-       return retrieve_patron_by_method( id, 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', f );
-}
-
-function retrieve_patron_by_method( id, app, method, f ) {
-       sdump('D_PATRON_UTILS',arg_dump(arguments));
-       if (!id) return null;
-       if (f) {
-               try {
-                       user_async_request(
-                               app,
-                               method,
-                               [ mw.G.auth_ses[0], id ],
-                               f
-                       );
-               } catch(E) {
-                       sdump('D_ERROR',E);
-               }
-       } else {
-               try {
-                       var au = user_request(
-                               app,
-                               method,
-                               [ mw.G.auth_ses[0], id ]
-                       )[0];
-                       return au;
-               } catch(E) {
-                       sdump('D_ERROR',E);
-                       return null;
-               }
-       }
+       return user_request( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', [ mw.G.auth_ses[0], id ], f )[0];
 }
 
-function save_patron( au ) {
+function save_patron( au, f ) {
        sdump('D_PATRON_UTILS',arg_dump(arguments));
        try {
                var result = user_request(
                        'open-ils.actor',
                        'open-ils.actor.patron.update',
-                       [ mw.G.auth_ses[0], au ]
+                       [ mw.G.auth_ses[0], au ],
+                       f
                )[0];
+               if (!f) sdump('D_PATRON_UTILS','result = ' + js2JSON(result) + '\n');
                return result;
        } catch(E) {
                handle_error(E);
index 300cd8f..e03bede 100644 (file)
@@ -5,17 +5,24 @@ sdump('D_TRACE','Loading ses.js\n');
 
 // These wrap Bill's RemoteRequest.js
 
-function user_request(app,name,params) {
-       sdump('D_SES','=-=-=-=-= user_request("'+app+'","'+name+'",'+js2JSON(params)+')\n');
-       var request = new RemoteRequest( app, name );
-       for(var index in params) {
-               request.addParam(params[index]);
+function user_request(app,name,params,f) {
+       if (f) {
+
+               user_async_request(app,name,params,f);
+               return [];
+
+       } else {
+               sdump('D_SES','=-=-=-=-= user_request("'+app+'","'+name+'",'+js2JSON(params)+')\n');
+               var request = new RemoteRequest( app, name );
+               for(var index in params) {
+                       request.addParam(params[index]);
+               }
+               request.send(true);
+               var result = [];
+               result.push( request.getResultObject() );
+               sdump('D_SES_RESULT','=-=-= result = ' + js2JSON(result[0]) + '\n');
+               return result;
        }
-       request.send(true);
-       var result = [];
-       result.push( request.getResultObject() );
-       //sdump('D_SES','=-=-= result = ' + js2JSON(result[0]) + '\n');
-       return result;
 }
 
 function user_async_request(app,name,params,func) {
index 2fc3ed8..cf51ab2 100644 (file)
@@ -23,6 +23,7 @@ filter_console_label=FCONSOLE
 fieldmapper_label=FIELDMAPPER
 
 retrieving.record=Retrieving...
+circ.context_cancel_hold=Cancel Hold
 circ.context_checkin=Check In
 circ.context_renew=Renew
 circ.context_opac=Show Title in OPAC
@@ -60,12 +61,18 @@ circ_label_due_date=Due Date
 mvr_label_title=Title
 mvr_label_author=Author
 
+holds_status_waiting_for_copy=Waiting for available copy
+holds_status_waiting_for_capture=Copy found, waiting for capture
+holds_status_in_transit=In Transit
+holds_status_available=Available
+
+ahr_status_label=Status
 ahr_capture_time_label=Capture Time
 ahr_current_copy_label=Current Copy
 ahr_email_notify_label=Email Notify
 ahr_expire_time_label=Expire Time
 ahr_fulfillment_time_label=Fulfillment Time
-ahr_hold_type_label=Hold Type
+ahr_hold_type_label=Type
 ahr_holdable_formats_label=Holdable Formats
 ahr_id_label=Id
 ahr_ischanged_label=Ischanged