Split out the bulk of the javascript for bill_details
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 29 Sep 2009 04:51:07 +0000 (04:51 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 29 Sep 2009 04:51:07 +0000 (04:51 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@14193 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/server/patron/bill_details.js [new file with mode: 0644]
Open-ILS/xul/staff_client/server/patron/bill_details.xul

diff --git a/Open-ILS/xul/staff_client/server/patron/bill_details.js b/Open-ILS/xul/staff_client/server/patron/bill_details.js
new file mode 100644 (file)
index 0000000..edffe1e
--- /dev/null
@@ -0,0 +1,274 @@
+function $(id) { return document.getElementById(id); }
+
+function retrieve_patron() {
+    g.patron_id = xul_param('patron_id');
+
+    if (g.patron_id) {
+        JSAN.use('patron.util'); 
+        g.au_obj = patron.util.retrieve_fleshed_au_via_id( ses(), g.patron_id );
+        
+        $('patron_name').setAttribute('value', 
+            ( g.au_obj.prefix() ? g.au_obj.prefix() + ' ' : '') + 
+            g.au_obj.family_name() + ', ' + 
+            g.au_obj.first_given_name() + ' ' +
+            ( g.au_obj.second_given_name() ? g.au_obj.second_given_name() + ' ': '' ) +
+            ( g.au_obj.suffix() ? g.au_obj.suffix() : '')
+            + ' : ' + g.au_obj.card().barcode() 
+        );
+    }
+
+}
+
+function retrieve_mbts() {
+    g.network.simple_request('FM_MBTS_RETRIEVE.authoritative',[ses(),g.mbts_id],
+        function(req) {
+            try {
+                g.mbts = req.getResultObject();
+                $('mbts_id').value = g.mbts.id();
+                $('mbts_xact_type').value = g.mbts.xact_type();
+                $('mbts_xact_start').value = g.mbts.xact_start().toString().substr(0,19);
+                $('mbts_xact_finish').value = g.mbts.xact_finish() ? g.mbts.xact_finish().toString().substr(0,19) : '';
+                $('mbts_total_owed').value = g.mbts.total_owed() ? util.money.sanitize( g.mbts.total_owed() ) : '';
+                $('mbts_total_paid').value = g.mbts.total_paid() ? util.money.sanitize( g.mbts.total_paid() ) : '';
+                $('mbts_balance_owed').value = g.mbts.balance_owed() ? util.money.sanitize( g.mbts.balance_owed() ) : '';
+
+                switch(g.mbts.xact_type()) {
+                    case 'circulation' : retrieve_circ(); break;
+                    case 'grocery' : retrieve_grocery(); $('copy_summary_vbox').hidden = true; $('copy_summary_splitter').hidden = true; break;
+                    default: $('copy_summary_vbox').hidden = true; $('copy_summary_splitter').hidden = true; break;
+                }
+
+            } catch(E) {
+                g.error.sdump('D_ERROR',E);
+            }
+        }
+    );
+}
+
+function retrieve_grocery() {
+    JSAN.use('util.widgets');
+    g.network.simple_request('FM_MG_RETRIEVE', [ ses(), g.mbts_id ],
+        function (req) {
+            var r_mg = req.getResultObject();
+            if (instanceOf(r_mg,mg)) {
+                $('billing_location').value = g.data.hash.aou[ r_mg.billing_location() ].shortname() + ' : ' + g.data.hash.aou[ r_mg.billing_location() ].name();
+            }
+        }
+    );
+}
+
+function retrieve_circ() {
+    JSAN.use('util.widgets');
+    g.network.simple_request('FM_CIRC_RETRIEVE_VIA_ID', [ ses(), g.mbts_id ],
+        function (req) {
+            var r_circ = req.getResultObject();
+            if (instanceOf(r_circ,circ)) {
+
+                $('title_label').hidden = false;
+                $('checked_out_label').hidden = false;
+                $('due_label').hidden = false;
+                $('checked_in_label').hidden = false;
+                $('checked_out').value = r_circ.xact_start() ? r_circ.xact_start().toString().substr(0,10) : '';
+                $('checked_in').value = r_circ.checkin_time() ? r_circ.checkin_time().toString().substr(0,10) : '';
+                $('due').value = r_circ.due_date() ? r_circ.due_date().toString().substr(0,10) : '';
+                $('billing_location').value = g.data.hash.aou[ r_circ.circ_lib() ].shortname() + ' : ' + g.data.hash.aou[ r_circ.circ_lib() ].name();
+                var r = '';
+                if (get_bool( r_circ.desk_renewal() ) ) r += 'DESK ';
+                if (get_bool(r_circ.opac_renewal() ) ) r += 'OPAC ';
+                if (get_bool(r_circ.phone_renewal() ) ) r += 'PHONE ';
+                $('renewal').value = r || 'No';
+
+                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+                var csb = $('copy_summary_vbox'); while (csb.firstChild) csb.removeChild(csb.lastChild);
+                var copy_summary = document.createElement('iframe'); csb.appendChild(copy_summary);
+                copy_summary.setAttribute('src',urls.XUL_COPY_SUMMARY); // + '?copy_id=' + r_circ.target_copy());
+                copy_summary.setAttribute('flex','1');
+                get_contentWindow(copy_summary).xulG = { 'copy_id' : r_circ.target_copy() };
+
+                g.network.simple_request(
+                    'MODS_SLIM_RECORD_RETRIEVE_VIA_COPY.authoritative',
+                    [ r_circ.target_copy() ],
+                    function (rreq) {
+                        var r_mvr = rreq.getResultObject();
+                        if (instanceOf(r_mvr,mvr)) {
+                            util.widgets.remove_children('title');
+                            $('title').appendChild( document.createTextNode( String(r_mvr.title()).substr(0,50) ) );
+                        } else {
+                            g.network.simple_request(
+                                'FM_ACP_RETRIEVE',
+                                [ r_circ.target_copy() ],
+                                function (rrreq) {
+                                    var r_acp = rrreq.getResultObject();
+                                    if (instanceOf(r_acp,acp)) {
+                                        util.widgets.remove_children('title');
+                                        $('title').appendChild( document.createTextNode( r_acp.dummy_title() ) );
+                                    }
+                                }
+                            );
+                        }
+                    }
+                );
+
+            }
+        }
+    );
+}
+
+function init_lists() {
+    JSAN.use('util.list'); 
+    g.bill_list = new util.list('bill_tree');
+    g.payment_list = new util.list('payment_tree');
+
+    g.bill_list.init( {
+        'columns' : patron.util.mb_columns({}),
+        'map_row_to_columns' : patron.util.std_map_row_to_columns(),
+        'on_select' : function(ev) {
+            JSAN.use('util.functional');
+            g.bill_list_selection = util.functional.map_list(
+                g.bill_list.retrieve_selection(),
+                function(o) { return o.getAttribute('retrieve_id'); }
+            );
+            $('void').disabled = g.bill_list_selection.length == 0;
+        },
+    } );
+
+    g.payment_list.init( {
+        'columns' : patron.util.mp_columns({}),
+        'map_row_to_columns' : patron.util.std_map_row_to_columns(),
+        'on_select' : function(ev) {
+            JSAN.use('util.functional');
+            g.payment_list_selection = util.functional.map_list(
+                g.payment_list.retrieve_selection(),
+                function(o) { return o.getAttribute('retrieve_id'); }
+            );
+        },
+    } );
+}
+
+function retrieve_mb() {
+    g.mb_list = g.network.simple_request( 'FM_MB_RETRIEVE_VIA_MBTS_ID.authoritative', [ ses(), g.mbts_id ] );
+    //g.error.sdump('D_DEBUG',g.error.pretty_print( js2JSON(g.mb_list) ));
+
+    var mb_funcs = [];
+
+    function gen_mb_func(i,r) {
+        return function() {
+            g.bill_list.append( { 'retrieve_id' : i, 'row' : { my : { 'mb' : r } } } );
+        }
+    }
+
+    for (var i = 0; i < g.mb_list.length; i++) {
+        mb_funcs.push( gen_mb_func(i,g.mb_list[i]) );
+    }
+
+    JSAN.use('util.exec');
+    var mb_exec = new util.exec(4); mb_exec.chain(mb_funcs);
+}
+
+function retrieve_mp() {
+    var mp_list = g.network.simple_request( 'FM_MP_RETRIEVE_VIA_MBTS_ID.authoritative', [ ses(), g.mbts_id ]);
+    //g.error.sdump('D_DEBUG',g.error.pretty_print( js2JSON(mp_list) ));
+
+    var mp_funcs = [];
+
+    function gen_mp_func(r) {
+        return function() {
+            g.payment_list.append( { 'retrieve_id' : r.id(), 'row' : { my : { 'mp' : r } } } );
+        }
+    }
+
+    for (var i = 0; i < mp_list.length; i++) {
+        mp_funcs.push( gen_mp_func(mp_list[i]) );
+    }
+
+    JSAN.use('util.exec');
+    var mp_exec = new util.exec(4); mp_exec.chain(mp_funcs);
+}
+
+function my_init() {
+    try {
+        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+        if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
+        JSAN.errorLevel = "die"; // none, warn, or die
+        JSAN.addRepository('/xul/server/');
+
+        JSAN.use('util.error'); g.error = new util.error();
+        JSAN.use('util.network'); g.network = new util.network();
+        JSAN.use('util.date');
+        JSAN.use('util.money');
+        JSAN.use('patron.util');
+        JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
+
+        g.error.sdump('D_TRACE','my_init() for bill_details.xul');
+
+        g.mbts_id = xul_param('mbts_id');
+
+        retrieve_patron();
+
+        retrieve_mbts();
+
+        init_lists();
+
+        retrieve_mb();
+        retrieve_mp();
+
+        $('void').addEventListener(
+            'command',
+            handle_void,
+            false
+        );
+
+    } catch(E) {
+        try { g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_details.my_init.error'),E); } catch(F) { alert(E); }
+    }
+}
+
+function handle_void() {
+    try {
+        var mb_list = util.functional.map_list(g.bill_list_selection, function(o){return g.mb_list[o];}); 
+        mb_list = util.functional.filter_list( mb_list, function(o) { return ! get_bool( o.voided() ) });
+
+        if (mb_list.length == 0) { alert($("patronStrings").getString('staff.patron.bill_details.handle_void.voided_billings.alert')); return; }
+
+        var sum = 0;
+        for (var i = 0; i < mb_list.length; i++) sum += util.money.dollars_float_to_cents_integer( mb_list[i].amount() );
+        sum = util.money.cents_as_dollars( sum );
+
+        var msg = $("patronStrings").getFormattedString('staff.patron.bill_details.handle_void.confirm_void_billing', sum);
+        var r = g.error.yns_alert(msg,
+            $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_title'),
+            $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_yes'),
+            $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_no'),null,
+            $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_confirm_message'));
+        if (r == 0) {
+            var robj = g.network.simple_request('FM_MB_VOID',[ses()].concat(util.functional.map_list(mb_list,function(o){return o.id();})));
+            if (robj.ilsevent) {
+                switch(Number(robj.ilsevent)) {
+                    default: 
+                        g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_details.handle_void.voiding_error'),robj); 
+                        retrieve_mbts();
+                        g.bill_list.clear();
+                        retrieve_mb();
+                        if (typeof window.xulG == 'object' && typeof window.xulG.refresh == 'function') { window.xulG.refresh(); }
+                        return; 
+                    break;
+                }
+            }
+
+            g.data.stash_retrieve(); if (! g.data.voided_billings ) g.data.voided_billings = []; 
+            for (var i = 0; i < mb_list.length; i++) {
+                    g.data.voided_billings.push( mb_list[i] );
+            }
+            g.data.stash('voided_billings');
+            alert($("patronStrings").getString('staff.patron.bill_details.handle_void.billings_voided'));
+            retrieve_mbts();
+            g.bill_list.clear();
+            retrieve_mb();
+            if (typeof window.xulG == 'object' && typeof window.xulG.refresh == 'function') { window.xulG.refresh(); }
+        }
+
+    } catch(E) {
+        try { g.error.standard_unexpected_error_alert('bill_details.xul, handle_void:',E); } catch(F) { alert(E); }
+    }
+}
+
index a4a2612..cc3d99f 100644 (file)
         <scripts id="openils_util_scripts"/>
 
        <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
-       <script>
-       <![CDATA[
-
-               function $(id) { return document.getElementById(id); }
-
-               function retrieve_patron() {
-                       g.patron_id = xul_param('patron_id');
-
-                       if (g.patron_id) {
-                               JSAN.use('patron.util'); 
-                               g.au_obj = patron.util.retrieve_fleshed_au_via_id( ses(), g.patron_id );
-                               
-                               $('patron_name').setAttribute('value', 
-                                       ( g.au_obj.prefix() ? g.au_obj.prefix() + ' ' : '') + 
-                                       g.au_obj.family_name() + ', ' + 
-                                       g.au_obj.first_given_name() + ' ' +
-                                       ( g.au_obj.second_given_name() ? g.au_obj.second_given_name() + ' ': '' ) +
-                                       ( g.au_obj.suffix() ? g.au_obj.suffix() : '')
-                                       + ' : ' + g.au_obj.card().barcode() 
-                               );
-                       }
-
-               }
-
-               function retrieve_mbts() {
-                       g.network.simple_request('FM_MBTS_RETRIEVE.authoritative',[ses(),g.mbts_id],
-                               function(req) {
-                                       try {
-                                               g.mbts = req.getResultObject();
-                                               $('mbts_id').value = g.mbts.id();
-                                               $('mbts_xact_type').value = g.mbts.xact_type();
-                                               $('mbts_xact_start').value = g.mbts.xact_start().toString().substr(0,19);
-                                               $('mbts_xact_finish').value = g.mbts.xact_finish() ? g.mbts.xact_finish().toString().substr(0,19) : '';
-                                               $('mbts_total_owed').value = g.mbts.total_owed() ? util.money.sanitize( g.mbts.total_owed() ) : '';
-                                               $('mbts_total_paid').value = g.mbts.total_paid() ? util.money.sanitize( g.mbts.total_paid() ) : '';
-                                               $('mbts_balance_owed').value = g.mbts.balance_owed() ? util.money.sanitize( g.mbts.balance_owed() ) : '';
-
-                                               switch(g.mbts.xact_type()) {
-                                                       case 'circulation' : retrieve_circ(); break;
-                                                       case 'grocery' : retrieve_grocery(); $('copy_summary_vbox').hidden = true; $('copy_summary_splitter').hidden = true; break;
-                                                       default: $('copy_summary_vbox').hidden = true; $('copy_summary_splitter').hidden = true; break;
-                                               }
-
-                                       } catch(E) {
-                                               g.error.sdump('D_ERROR',E);
-                                       }
-                               }
-                       );
-               }
-
-               function retrieve_grocery() {
-                       JSAN.use('util.widgets');
-                       g.network.simple_request('FM_MG_RETRIEVE', [ ses(), g.mbts_id ],
-                               function (req) {
-                                       var r_mg = req.getResultObject();
-                                       if (instanceOf(r_mg,mg)) {
-                                               $('billing_location').value = g.data.hash.aou[ r_mg.billing_location() ].shortname() + ' : ' + g.data.hash.aou[ r_mg.billing_location() ].name();
-                                       }
-                               }
-                       );
-               }
-
-               function retrieve_circ() {
-                       JSAN.use('util.widgets');
-                       g.network.simple_request('FM_CIRC_RETRIEVE_VIA_ID', [ ses(), g.mbts_id ],
-                               function (req) {
-                                       var r_circ = req.getResultObject();
-                                       if (instanceOf(r_circ,circ)) {
-
-                                               $('title_label').hidden = false;
-                                               $('checked_out_label').hidden = false;
-                                               $('due_label').hidden = false;
-                                               $('checked_in_label').hidden = false;
-                                               $('checked_out').value = r_circ.xact_start() ? r_circ.xact_start().toString().substr(0,10) : '';
-                                               $('checked_in').value = r_circ.checkin_time() ? r_circ.checkin_time().toString().substr(0,10) : '';
-                                               $('due').value = r_circ.due_date() ? r_circ.due_date().toString().substr(0,10) : '';
-                                               $('billing_location').value = g.data.hash.aou[ r_circ.circ_lib() ].shortname() + ' : ' + g.data.hash.aou[ r_circ.circ_lib() ].name();
-                                               var r = '';
-                                               if (get_bool( r_circ.desk_renewal() ) ) r += 'DESK ';
-                                               if (get_bool(r_circ.opac_renewal() ) ) r += 'OPAC ';
-                                               if (get_bool(r_circ.phone_renewal() ) ) r += 'PHONE ';
-                                               $('renewal').value = r || 'No';
-
-                                               netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-                        var csb = $('copy_summary_vbox'); while (csb.firstChild) csb.removeChild(csb.lastChild);
-                        var copy_summary = document.createElement('iframe'); csb.appendChild(copy_summary);
-                                               copy_summary.setAttribute('src',urls.XUL_COPY_SUMMARY); // + '?copy_id=' + r_circ.target_copy());
-                                               copy_summary.setAttribute('flex','1');
-                                               get_contentWindow(copy_summary).xulG = { 'copy_id' : r_circ.target_copy() };
-
-                                               g.network.simple_request(
-                                                       'MODS_SLIM_RECORD_RETRIEVE_VIA_COPY.authoritative',
-                                                       [ r_circ.target_copy() ],
-                                                       function (rreq) {
-                                                               var r_mvr = rreq.getResultObject();
-                                                               if (instanceOf(r_mvr,mvr)) {
-                                                                       util.widgets.remove_children('title');
-                                                                       $('title').appendChild( document.createTextNode( String(r_mvr.title()).substr(0,50) ) );
-                                                               } else {
-                                                                       g.network.simple_request(
-                                                                               'FM_ACP_RETRIEVE',
-                                                                               [ r_circ.target_copy() ],
-                                                                               function (rrreq) {
-                                                                                       var r_acp = rrreq.getResultObject();
-                                                                                       if (instanceOf(r_acp,acp)) {
-                                                                                               util.widgets.remove_children('title');
-                                                                                               $('title').appendChild( document.createTextNode( r_acp.dummy_title() ) );
-                                                                                       }
-                                                                               }
-                                                                       );
-                                                               }
-                                                       }
-                                               );
-
-                                       }
-                               }
-                       );
-               }
-
-               function init_lists() {
-                       JSAN.use('util.list'); 
-                       g.bill_list = new util.list('bill_tree');
-                       g.payment_list = new util.list('payment_tree');
-
-                       g.bill_list.init( {
-                               'columns' : patron.util.mb_columns({}),
-                               'map_row_to_columns' : patron.util.std_map_row_to_columns(),
-                               'on_select' : function(ev) {
-                                       JSAN.use('util.functional');
-                                       g.bill_list_selection = util.functional.map_list(
-                                               g.bill_list.retrieve_selection(),
-                                               function(o) { return o.getAttribute('retrieve_id'); }
-                                       );
-                                       $('void').disabled = g.bill_list_selection.length == 0;
-                               },
-                       } );
-
-                       g.payment_list.init( {
-                               'columns' : patron.util.mp_columns({}),
-                               'map_row_to_columns' : patron.util.std_map_row_to_columns(),
-                               'on_select' : function(ev) {
-                                       JSAN.use('util.functional');
-                                       g.payment_list_selection = util.functional.map_list(
-                                               g.payment_list.retrieve_selection(),
-                                               function(o) { return o.getAttribute('retrieve_id'); }
-                                       );
-                               },
-                       } );
-               }
-
-               function retrieve_mb() {
-                       g.mb_list = g.network.simple_request( 'FM_MB_RETRIEVE_VIA_MBTS_ID.authoritative', [ ses(), g.mbts_id ] );
-                       //g.error.sdump('D_DEBUG',g.error.pretty_print( js2JSON(g.mb_list) ));
-
-                       var mb_funcs = [];
-
-                       function gen_mb_func(i,r) {
-                               return function() {
-                                       g.bill_list.append( { 'retrieve_id' : i, 'row' : { my : { 'mb' : r } } } );
-                               }
-                       }
-
-                       for (var i = 0; i < g.mb_list.length; i++) {
-                               mb_funcs.push( gen_mb_func(i,g.mb_list[i]) );
-                       }
-
-                       JSAN.use('util.exec');
-                       var mb_exec = new util.exec(4); mb_exec.chain(mb_funcs);
-               }
-
-               function retrieve_mp() {
-                       var mp_list = g.network.simple_request( 'FM_MP_RETRIEVE_VIA_MBTS_ID.authoritative', [ ses(), g.mbts_id ]);
-                       //g.error.sdump('D_DEBUG',g.error.pretty_print( js2JSON(mp_list) ));
-
-                       var mp_funcs = [];
-
-                       function gen_mp_func(r) {
-                               return function() {
-                                       g.payment_list.append( { 'retrieve_id' : r.id(), 'row' : { my : { 'mp' : r } } } );
-                               }
-                       }
-
-                       for (var i = 0; i < mp_list.length; i++) {
-                               mp_funcs.push( gen_mp_func(mp_list[i]) );
-                       }
-
-                       JSAN.use('util.exec');
-                       var mp_exec = new util.exec(4); mp_exec.chain(mp_funcs);
-               }
-
-               function my_init() {
-                       try {
-                               netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-                               if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
-                               JSAN.errorLevel = "die"; // none, warn, or die
-                               JSAN.addRepository('/xul/server/');
-
-                               JSAN.use('util.error'); g.error = new util.error();
-                               JSAN.use('util.network'); g.network = new util.network();
-                               JSAN.use('util.date');
-                               JSAN.use('util.money');
-                               JSAN.use('patron.util');
-                               JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
-
-                               g.error.sdump('D_TRACE','my_init() for bill_details.xul');
-
-                               g.mbts_id = xul_param('mbts_id');
-
-                               retrieve_patron();
-
-                               retrieve_mbts();
-
-                               init_lists();
-
-                               retrieve_mb();
-                               retrieve_mp();
-
-                               $('void').addEventListener(
-                                       'command',
-                                       handle_void,
-                                       false
-                               );
-
-                       } catch(E) {
-                               try { g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_details.my_init.error'),E); } catch(F) { alert(E); }
-                       }
-               }
-
-               function handle_void() {
-                       try {
-                               var mb_list = util.functional.map_list(g.bill_list_selection, function(o){return g.mb_list[o];}); 
-                               mb_list = util.functional.filter_list( mb_list, function(o) { return ! get_bool( o.voided() ) });
-
-                               if (mb_list.length == 0) { alert($("patronStrings").getString('staff.patron.bill_details.handle_void.voided_billings.alert')); return; }
-
-                               var sum = 0;
-                               for (var i = 0; i < mb_list.length; i++) sum += util.money.dollars_float_to_cents_integer( mb_list[i].amount() );
-                               sum = util.money.cents_as_dollars( sum );
-
-                               var msg = $("patronStrings").getFormattedString('staff.patron.bill_details.handle_void.confirm_void_billing', sum);
-                               var r = g.error.yns_alert(msg,
-                                       $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_title'),
-                                       $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_yes'),
-                                       $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_no'),null,
-                                       $("patronStrings").getString('staff.patron.bill_details.handle_void.confirm_void_billing_confirm_message'));
-                               if (r == 0) {
-                                       var robj = g.network.simple_request('FM_MB_VOID',[ses()].concat(util.functional.map_list(mb_list,function(o){return o.id();})));
-                                       if (robj.ilsevent) {
-                                               switch(Number(robj.ilsevent)) {
-                                                       default: 
-                                                               g.error.standard_unexpected_error_alert($("patronStrings").getString('staff.patron.bill_details.handle_void.voiding_error'),robj); 
-                                                               retrieve_mbts();
-                                                               g.bill_list.clear();
-                                                               retrieve_mb();
-                                                               if (typeof window.xulG == 'object' && typeof window.xulG.refresh == 'function') { window.xulG.refresh(); }
-                                                               return; 
-                                                       break;
-                                               }
-                                       }
-       
-                                       g.data.stash_retrieve(); if (! g.data.voided_billings ) g.data.voided_billings = []; 
-                                       for (var i = 0; i < mb_list.length; i++) {
-                                                       g.data.voided_billings.push( mb_list[i] );
-                                       }
-                                       g.data.stash('voided_billings');
-                                       alert($("patronStrings").getString('staff.patron.bill_details.handle_void.billings_voided'));
-                                       retrieve_mbts();
-                                       g.bill_list.clear();
-                                       retrieve_mb();
-                                       if (typeof window.xulG == 'object' && typeof window.xulG.refresh == 'function') { window.xulG.refresh(); }
-                               }
-
-                       } catch(E) {
-                               try { g.error.standard_unexpected_error_alert('bill_details.xul, handle_void:',E); } catch(F) { alert(E); }
-                       }
-               }
-
-       ]]>
-       </script>
+       <script type="text/javascript" src="bill_details.js"/>
 
        <messagecatalog id="patronStrings" src="/xul/server/locale/<!--#echo var='locale'-->/patron.properties"/>