From: phasefx Date: Tue, 6 Oct 2009 17:06:33 +0000 (+0000) Subject: Support ui.circ.show_billing_tab_on_bills org setting. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=4a4b9d1f43130aa4c1108f3b3faa915894945788;p=evergreen%2Fbjwebb.git Support ui.circ.show_billing_tab_on_bills org setting. Some refactoring to eliminate a redundant network call and to have the stop sign page trump the Show Billing Tab on Bills behavior. This whole display/summary/sub-interface setup needs some TLC, and I want to redo the stop sign page so that you can spawn it quickly and just feed it asynchronous data as needed. git-svn-id: svn://svn.open-ils.org/ILS/trunk@14281 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/xul/staff_client/server/patron/display.js b/Open-ILS/xul/staff_client/server/patron/display.js index b2f1d2e93..0d16d91b1 100644 --- a/Open-ILS/xul/staff_client/server/patron/display.js +++ b/Open-ILS/xul/staff_client/server/patron/display.js @@ -8,6 +8,7 @@ patron.display = function (params) { JSAN.use('util.error'); this.error = new util.error(); JSAN.use('util.window'); this.window = new util.window(); JSAN.use('util.network'); this.network = new util.network(); + JSAN.use('util.widgets'); this.w = window; } @@ -35,49 +36,6 @@ patron.display.prototype = { obj.right_deck = new util.deck('patron_right_deck'); obj.left_deck = new util.deck('patron_left_deck'); - function spawn_checkout_interface() { - try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible( document.getElementById("PatronNavBar_checkout" ) ); } catch(E) {}; - obj.reset_nav_styling('cmd_patron_checkout',true); - var frame = obj.right_deck.set_iframe( - urls.XUL_CHECKOUT, - {}, - { - 'set_tab' : xulG.set_tab, - 'patron_id' : obj.patron.id(), - 'patron' : obj.patron, - 'check_stop_checkouts' : function() { return obj.check_stop_checkouts(); }, - 'on_list_change' : function(checkout) { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - var x = obj.summary_window.g.summary.controller.view.patron_checkouts; - var n = Number(x.getAttribute('value')); - x.setAttribute('value',n+1); - }, - 'on_list_change_old' : function(checkout) { - - /* this stops noncats from getting pushed into Items Out */ - if (!checkout.circ.id()) return; - - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - obj.summary_window.g.summary.controller.render('patron_checkouts'); - obj.summary_window.g.summary.controller.render('patron_standing_penalties'); - if (obj.items_window) { - obj.items_window.g.items.list.append( - { - 'row' : { - 'my' : { - 'circ_id' : checkout.circ.id() - } - } - } - ) - } - } - } - ); - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - obj.checkout_window = get_contentWindow(frame); - } - JSAN.use('util.controller'); obj.controller = new util.controller(); obj.controller.init( { @@ -576,115 +534,8 @@ patron.display.prototype = { 'barcode' : obj.barcode, 'id' : obj.id, 'refresh' : function() { obj.refresh_all(); }, - 'on_finished' : function(patron) { - - obj.patron = patron; obj.controller.render(); - - obj.controller.view.cmd_patron_refresh.setAttribute('disabled','false'); - obj.controller.view.cmd_patron_checkout.setAttribute('disabled','false'); - obj.controller.view.cmd_patron_items.setAttribute('disabled','false'); - obj.controller.view.cmd_patron_holds.setAttribute('disabled','false'); - obj.controller.view.cmd_patron_bills.setAttribute('disabled','false'); - obj.controller.view.cmd_patron_edit.setAttribute('disabled','false'); - - if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') { - try { - window.xulG.set_tab_name( - $("patronStrings").getString('staff.patron.display.tab_name') - + ' ' + patron.family_name() + ', ' + patron.first_given_name() + ' ' - + (patron.second_given_name() ? patron.second_given_name() : '' ) - ); - } catch(E) { - obj.error.sdump('D_ERROR',E); - } - } - - if (!obj._checkout_spawned) { - spawn_checkout_interface(); - obj._checkout_spawned = true; - } - - obj.network.simple_request( - 'FM_AHR_COUNT_RETRIEVE.authoritative', - [ ses(), patron.id() ], - function(req) { - try { - var msg = ''; obj.stop_checkouts = false; - if (patron.alert_message()) - msg += $("patronStrings").getFormattedString('staff.patron.display.init.network_request.alert_message', [patron.alert_message()]); - //alert('obj.barcode = ' + obj.barcode); - if (obj.barcode) { - if (patron.cards()) for (var i = 0; i < patron.cards().length; i++) { - //alert('card #'+i+' == ' + js2JSON(patron.cards()[i])); - if ( (patron.cards()[i].barcode()==obj.barcode) && ( ! get_bool(patron.cards()[i].active()) ) ) { - msg += $("patronStrings").getString('staff.patron.display.init.network_request.inactive_card'); - obj.stop_checkouts = true; - } - } - } - if (get_bool(patron.barred())) { - msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_barred'); - obj.stop_checkouts = true; - } - if (!get_bool(patron.active())) { - msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_inactive'); - obj.stop_checkouts = true; - } - if (patron.expire_date()) { - var now = new Date(); - now = now.getTime()/1000; - - var expire_parts = patron.expire_date().substr(0,10).split('-'); - expire_parts[1] = expire_parts[1] - 1; - - var expire = new Date(); - expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]); - expire = expire.getTime()/1000 - - if (expire < now) { - msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_expired'); - obj.stop_checkouts = true; - } - } - var penalties = obj.patron.standing_penalties(); - for (var i = 0; i < penalties.length; i++) { - if (penalties[i].standing_penalty().block_list()) { - msg += obj.OpenILS.data.hash.aou[ penalties[i].org_unit() ].shortname() + ' : ' + penalties[i].standing_penalty().label() + '
'; - } - } - var holds = req.getResultObject(); - if (holds.ready && holds.ready > 0) { - msg += $("patronStrings").getFormattedString('staff.patron.display.init.holds_ready', [holds.ready]); - } - if (msg) { - if (msg != obj.old_msg) { - //obj.error.yns_alert(msg,'Alert Message','OK',null,null,'Check here to confirm this message.'); - document.documentElement.firstChild.focus(); - var data_url = window.escape("" + '

' - + $("patronStrings").getString('staff.patron.display.init.network_request.window_title') + '

' + msg + '

\r\n\r\n
'
-												+ $("patronStrings").getString('staff.patron.display.init.network_request.window_message') + '
'); - obj.right_deck.set_iframe('data:text/html,'+data_url,{},{}); - obj.old_msg = msg; - obj.msg_url = data_url; - } else { - obj.error.sdump('D_TRACE',$("patronStrings").getFormattedString('staff.patron.display.init.network_request.dump_error_message', [msg])); - } - } - if (obj.stop_checkouts && obj.checkout_window) { - setTimeout( function() { - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - obj.checkout_window.g.checkout.check_disable(); - } catch(E) { } - }, 1000); - } - } catch(E) { - obj.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.display.init.network_request.error_showing_alert'),E); - } - } - ); - - }, + 'on_finished' : obj.gen_patron_summary_finish_func(), + 'stop_sign_page' : obj.gen_patron_stop_sign_page_func(), 'on_error' : function(E) { try { var error; @@ -843,6 +694,167 @@ patron.display.prototype = { try { obj.summary_window.refresh(); } catch(E) { obj.error.sdump('D_ERROR', E + '\n'); } try { obj.refresh_deck(); } catch(E) { obj.error.sdump('D_ERROR', E + '\n'); } }, + + 'gen_patron_summary_finish_func' : function() { + var obj = this; + + function spawn_checkout_interface() { + try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible( document.getElementById("PatronNavBar_checkout" ) ); } catch(E) {}; + obj.reset_nav_styling('cmd_patron_checkout',true); + var frame = obj.right_deck.set_iframe( + urls.XUL_CHECKOUT, + {}, + { + 'set_tab' : xulG.set_tab, + 'patron_id' : obj.patron.id(), + 'patron' : obj.patron, + 'check_stop_checkouts' : function() { return obj.check_stop_checkouts(); }, + 'on_list_change' : function(checkout) { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + var x = obj.summary_window.g.summary.controller.view.patron_checkouts; + var n = Number(x.getAttribute('value')); + x.setAttribute('value',n+1); + }, + 'on_list_change_old' : function(checkout) { + + /* this stops noncats from getting pushed into Items Out */ + if (!checkout.circ.id()) return; + + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + obj.summary_window.g.summary.controller.render('patron_checkouts'); + obj.summary_window.g.summary.controller.render('patron_standing_penalties'); + if (obj.items_window) { + obj.items_window.g.items.list.append( + { + 'row' : { + 'my' : { + 'circ_id' : checkout.circ.id() + } + } + } + ) + } + } + } + ); + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + obj.checkout_window = get_contentWindow(frame); + } + + return function(patron,params) { + try { + obj.patron = patron; obj.controller.render(); + + obj.controller.view.cmd_patron_refresh.setAttribute('disabled','false'); + obj.controller.view.cmd_patron_checkout.setAttribute('disabled','false'); + obj.controller.view.cmd_patron_items.setAttribute('disabled','false'); + obj.controller.view.cmd_patron_holds.setAttribute('disabled','false'); + obj.controller.view.cmd_patron_bills.setAttribute('disabled','false'); + obj.controller.view.cmd_patron_edit.setAttribute('disabled','false'); + + if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') { + try { + window.xulG.set_tab_name( + $("patronStrings").getString('staff.patron.display.tab_name') + + ' ' + patron.family_name() + ', ' + patron.first_given_name() + ' ' + + (patron.second_given_name() ? patron.second_given_name() : '' ) + ); + } catch(E) { + obj.error.sdump('D_ERROR',E); + } + } + + if (!obj._checkout_spawned) { + spawn_checkout_interface(); + obj._checkout_spawned = true; + } + + if (obj.stop_checkouts && obj.checkout_window) { + setTimeout( function() { + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + obj.checkout_window.g.checkout.check_disable(); + } catch(E) { } + }, 1000); + } + + } catch(E) { + alert('Error in patron_summary_finish_func(): ' + E); + } + }; + }, + + 'gen_patron_stop_sign_page_func' : function() { + var obj = this; + // FIXME - replace this generated "stop sign" page with a dedicated XUL file or template + return function(patron,params) { + try { + var msg = ''; obj.stop_checkouts = false; + if (patron.alert_message()) + msg += $("patronStrings").getFormattedString('staff.patron.display.init.network_request.alert_message', [patron.alert_message()]); + //alert('obj.barcode = ' + obj.barcode); + if (obj.barcode) { + if (patron.cards()) for (var i = 0; i < patron.cards().length; i++) { + //alert('card #'+i+' == ' + js2JSON(patron.cards()[i])); + if ( (patron.cards()[i].barcode()==obj.barcode) && ( ! get_bool(patron.cards()[i].active()) ) ) { + msg += $("patronStrings").getString('staff.patron.display.init.network_request.inactive_card'); + obj.stop_checkouts = true; + } + } + } + if (get_bool(patron.barred())) { + msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_barred'); + obj.stop_checkouts = true; + } + if (!get_bool(patron.active())) { + msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_inactive'); + obj.stop_checkouts = true; + } + if (patron.expire_date()) { + var now = new Date(); + now = now.getTime()/1000; + + var expire_parts = patron.expire_date().substr(0,10).split('-'); + expire_parts[1] = expire_parts[1] - 1; + + var expire = new Date(); + expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]); + expire = expire.getTime()/1000 + + if (expire < now) { + msg += $("patronStrings").getString('staff.patron.display.init.network_request.account_expired'); + obj.stop_checkouts = true; + } + } + var penalties = obj.patron.standing_penalties(); + for (var i = 0; i < penalties.length; i++) { + if (penalties[i].standing_penalty().block_list()) { + msg += obj.OpenILS.data.hash.aou[ penalties[i].org_unit() ].shortname() + ' : ' + penalties[i].standing_penalty().label() + '
'; + } + } + var holds = params.holds_summary; + if (holds.ready && holds.ready > 0) { + msg += $("patronStrings").getFormattedString('staff.patron.display.init.holds_ready', [holds.ready]); + } + if (msg) { + if (msg != obj.old_msg) { + //obj.error.yns_alert(msg,'Alert Message','OK',null,null,'Check here to confirm this message.'); + document.documentElement.firstChild.focus(); + var data_url = window.escape("" + '

' + + $("patronStrings").getString('staff.patron.display.init.network_request.window_title') + '

' + msg + '

\r\n\r\n
'
+                            + $("patronStrings").getString('staff.patron.display.init.network_request.window_message') + '
'); + obj.right_deck.set_iframe('data:text/html,'+data_url,{},{}); + obj.old_msg = msg; + obj.msg_url = data_url; + } else { + obj.error.sdump('D_TRACE',$("patronStrings").getFormattedString('staff.patron.display.init.network_request.dump_error_message', [msg])); + } + } + } catch(E) { + alert('Error in patron_stop_sign_page_func(): ' + E); + } + }; + } } dump('exiting patron/display.js\n'); diff --git a/Open-ILS/xul/staff_client/server/patron/summary.js b/Open-ILS/xul/staff_client/server/patron/summary.js index ae8c6db9c..b0a54dab9 100644 --- a/Open-ILS/xul/staff_client/server/patron/summary.js +++ b/Open-ILS/xul/staff_client/server/patron/summary.js @@ -114,35 +114,29 @@ patron.summary.prototype = { 'FM_MOUS_RETRIEVE.authoritative', [ ses(), obj.patron.id() ], function(req) { - JSAN.use('util.money'); - var robj = req.getResultObject(); - util.widgets.set_text(e, patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( robj.balance_owed() )])); - if (under_btn) util.widgets.set_text(under_btn, - patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( robj.balance_owed() )])); - } - ); - /* - obj.network.simple_request( - 'FM_MBTS_IDS_RETRIEVE_ALL_HAVING_BALANCE.authoritative', - [ ses(), obj.patron.id() ], - function(req) { - JSAN.use('util.money'); - var list = req.getResultObject(); - if (typeof list.ilsevent != 'undefined') { - util.widgets.set_text(e, '??? See Bills'); - return; - } - var sum = 0; - for (var i = 0; i < list.length; i++) { - var robj = typeof list[i] == 'object' ? list[i] : obj.network.simple_request('FM_MBTS_RETRIEVE.authoritative',[ses(),list[i]]); - sum += util.money.dollars_float_to_cents_integer( robj.balance_owed() ); - } - if (sum > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS'); - JSAN.use('util.money'); - util.widgets.set_text(e, '$' + util.money.sanitize( util.money.cents_as_dollars( sum ) )); + try { + JSAN.use('util.money'); + var robj = req.getResultObject(); + util.widgets.set_text(e, patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( robj.balance_owed() )])); + if (under_btn) util.widgets.set_text(under_btn, + patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( robj.balance_owed() )])); + var show_billing_tab_on_bills = String( obj.OpenILS.data.hash.aous['ui.circ.show_billing_tab_on_bills'] ) == 'true'; + if (show_billing_tab_on_bills && Number(robj.balance_owed()) > 0) { + if (xulG) { + if (xulG.display_window) { + xulG.display_window.util.widgets.dispatch('command','cmd_patron_bills'); + } + } + } + obj.bills_summary = robj; + if (obj.holds_summary && obj.bills_summary) + if (typeof window.xulG == 'object' && typeof window.xulG.stop_sign_page == 'function') + window.xulG.stop_sign_page( obj.patron, { 'holds_summary' : obj.holds_summary, 'bills_summary' : obj.bills_summary } ); + } catch(E) { + alert('Error in summary.js, patron_bill callback: ' + E); + } } ); - */ }; } ], @@ -220,13 +214,18 @@ patron.summary.prototype = { 'FM_AHR_COUNT_RETRIEVE.authoritative', [ ses(), obj.patron.id() ], function(req) { + var robj = req.getResultObject(); util.widgets.set_text(e, - req.getResultObject().total + robj.total ); if (e2) util.widgets.set_text(e2, - req.getResultObject().ready + robj.ready ); if (under_btn) util.widgets.set_text(under_btn, req.getResultObject().ready + '/' + req.getResultObject().total ); + obj.holds_summary = robj; + if (obj.holds_summary && obj.bills_summary) + if (typeof window.xulG == 'object' && typeof window.xulG.stop_sign_page == 'function') + window.xulG.stop_sign_page( obj.patron, { 'holds_summary' : obj.holds_summary, 'bills_summary' : obj.bills_summary } ); } ); };