Fix LP#1156545 by adding YAOUS for currency symbol and formatting. user/paxed/lp1156545
authorPasi Kallinen <pasi.kallinen@pttk.fi>
Mon, 24 Jun 2013 09:05:50 +0000 (12:05 +0300)
committerPasi Kallinen <pasi.kallinen@pttk.fi>
Tue, 16 Jul 2013 08:41:08 +0000 (11:41 +0300)
Also lets staff enter monetary values with comma or full stop separators.

Signed-off-by: Pasi Kallinen <pasi.kallinen@pttk.fi>
27 files changed:
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.currency-symbol.sql [new file with mode: 0644]
Open-ILS/src/templates/acq/po/view.tt2
Open-ILS/src/templates/base.tt2
Open-ILS/src/templates/opac/parts/header.tt2
Open-ILS/web/js/ui/default/acq/po/view_po.js
Open-ILS/xul/staff_client/chrome/content/util/list.js
Open-ILS/xul/staff_client/chrome/content/util/money.js
Open-ILS/xul/staff_client/server/OpenILS/util_overlay.xul
Open-ILS/xul/staff_client/server/admin/patrons_due_refunds.js
Open-ILS/xul/staff_client/server/cat/copy_editor.js
Open-ILS/xul/staff_client/server/cat/util.js
Open-ILS/xul/staff_client/server/circ/checkin.js
Open-ILS/xul/staff_client/server/circ/checkout.js
Open-ILS/xul/staff_client/server/circ/renew.js
Open-ILS/xul/staff_client/server/circ/util.js
Open-ILS/xul/staff_client/server/locale/en-US/circ.properties
Open-ILS/xul/staff_client/server/locale/en-US/common.properties
Open-ILS/xul/staff_client/server/locale/en-US/patron.properties
Open-ILS/xul/staff_client/server/patron/bill2.js
Open-ILS/xul/staff_client/server/patron/bill_details.js
Open-ILS/xul/staff_client/server/patron/bill_history.js
Open-ILS/xul/staff_client/server/patron/bill_wizard.js
Open-ILS/xul/staff_client/server/patron/info_group.js
Open-ILS/xul/staff_client/server/patron/summary.js
Open-ILS/xul/staff_client/server/patron/util.js
Open-ILS/xul/staff_client/server/serial/editor_base.js

index 0afe779..f968d5a 100644 (file)
@@ -3786,6 +3786,15 @@ INSERT into config.org_unit_setting_type
         'coust', 'description'),
     'string', null)
 
+,( 'global.currency_symbol_fmt', 'glob',
+   oils_i18n_gettext('global.currency_symbol_fmt',
+       'Currency symbol and formatting',
+       'coust', 'label'),
+   oils_i18n_gettext('global.currency_symbol_fmt',
+       'How OPAC and staff client show currency. For example: "$%.2f" or "%.2f€"',
+       'coust', 'description'),
+  'string', null)
+
 ,( 'global.default_locale', 'glob',
     oils_i18n_gettext('global.default_locale',
         'Global Default Locale',
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.currency-symbol.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.currency-symbol.sql
new file mode 100644 (file)
index 0000000..3078eda
--- /dev/null
@@ -0,0 +1,15 @@
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+INSERT INTO config.org_unit_setting_type (
+    name, label, description, grp, datatype
+) VALUES (
+    'global.currency_symbol_fmt',
+    'Currency symbol and formatting',
+    'How OPAC and staff client show currency. For example: "$%.2f" or "%.2f€"',
+    'glob',
+    'string'
+);
+
+COMMIT;
index ab1ba88..8863bd9 100644 (file)
@@ -52,7 +52,7 @@
                 </tr>
                 <tr>
                     <th>[% l('Total Estimated') %]</th>
-                    <td>[% l('$[_1]', '<span id="acq-po-view-total-estimated"></span>') %]</td>
+                    <td><span id="acq-po-view-total-estimated"></span></td>
                     <th>[% l('History') %]</th>
                     <td>
                         <a class="hidden" href="javascript:void(0);"
@@ -61,7 +61,7 @@
                 </tr>
                 <tr>
                     <th>[% l('Total Encumbered') %]</th>
-                    <td>[% l('$[_1]', '<span id="acq-po-view-total-enc"></span>') %]</td>
+                    <td><span id="acq-po-view-total-enc"></span></td>
                     <th id="acq-po-invoice-label" class="hidden">[% l('Invoicing') %]</th>
                     <td id="acq-po-invoice-stuff" class="hidden">
                         <button dojoType="dijit.form.Button"
@@ -93,7 +93,7 @@
                 </tr>
                 <tr>
                     <th>[% l('Total Spent') %]</th>
-                    <td>[% l('$[_1]', '<span id="acq-po-view-total-spent"></span>') %]</td>
+                    <td><span id="acq-po-view-total-spent"></span></td>
                     <th id="acq-po-cancel-label"></th>
                     <td>
                         <span id="acq-po-view-cancel-reason"></span>
index efdee63..2026391 100644 (file)
         <script type="text/javascript" src="[% ctx.media_prefix %]/js/dojo/opensrf/md5.js"></script>
         <script type="text/javascript">var oilsBasePath = [% IF ctx.base_path.substr(0,1) == '/' %]location.href.replace(RegExp(location.pathname + '.*'),'') +[% END %] '[% ctx.base_path %]'</script>
         <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/base.js"></script>
+       <script type="text/javascript" src="/xul/server/util/error.js"></script>
+       <script type="text/javascript" src="/xul/server/util/network.js"></script>
+       <script type="text/javascript" src="/xul/server/util/sound.js"></script>
+       <script type="text/javascript" src="/xul/server/OpenILS/data.js"></script>
+       <script type="text/javascript" src="/xul/server/main/JSAN.js"></script>
+       <script type="text/javascript" src="/opac/common/js/sprintf.js"></script>
+       <script type="text/javascript" src="/xul/server/util/money.js"></script>
         <script type="text/javascript">
             dojo.require("dijit.layout.LayoutContainer");
             dojo.require("dijit.layout.ContentPane");
index daa26e5..7d39896 100644 (file)
@@ -1,4 +1,5 @@
-[%- USE money = format(l('$%.2f'));
+[%- money_fmt = ctx.get_org_setting(ctx.user.home_ou.id || 1, 'global.currency_symbol_fmt') || l('$%.2f');
+    USE money = format(money_fmt);
     USE date;
     USE CGI = CGI_utf8;
     USE POSIX;
index f1ef20c..a290c05 100644 (file)
@@ -2,6 +2,8 @@ dojo.require("dijit.form.Button");
 dojo.require("dojo.string");
 dojo.require('dijit.layout.ContentPane');
 dojo.require('openils.PermaCrud');
+dojo.require('openils.User');
+dojo.require('fieldmapper.OrgUtils');
 
 var pcrud = new openils.PermaCrud();
 var PO = null;
@@ -311,8 +313,8 @@ function renderPo() {
         PO.provider()
     );
     dojo.byId("acq-po-view-total-li").innerHTML = PO.lineitem_count();
-    dojo.byId("acq-po-view-total-enc").innerHTML = PO.amount_encumbered().toFixed(2);
-    dojo.byId("acq-po-view-total-spent").innerHTML = PO.amount_spent().toFixed(2);
+    dojo.byId("acq-po-view-total-enc").innerHTML = util.money.format(PO.amount_encumbered());
+    dojo.byId("acq-po-view-total-spent").innerHTML = util.money.format(PO.amount_spent());
     dojo.byId("acq-po-view-state").innerHTML = po_state; // TODO i18n
 
     if(PO.order_date()) {
@@ -468,7 +470,7 @@ function init2() {
             },
 
             oncomplete : function() {
-                dojo.byId("acq-po-view-total-estimated").innerHTML = totalEstimated.toFixed(2);
+                dojo.byId("acq-po-view-total-estimated").innerHTML = util.money.format(totalEstimated);
                 if (liFocus) liTable.drawCopies(liFocus);
                 if(zeroLi) openils.Util.show('acq-po-no-lineitems');
             }
index 1ddfb0f..9eb4ecf 100644 (file)
@@ -2134,7 +2134,7 @@ util.list.prototype = {
                 if (my_field.datatype == 'money') {
                     JSAN.use('util.money');
                     def.render = function(my) {
-                        return util.money.sanitize( my[dataobj][datafield]() );
+                        return util.money.format( my[dataobj][datafield]() );
                     }
                     def.sort_value = function(my) {
                         return util.money.dollars_float_to_cents_integer( my[dataobj][datafield]() );
index c673ac9..0b786c1 100644 (file)
@@ -4,7 +4,7 @@ if (typeof util == 'undefined') var util = {};
 util.money = {};
 
 util.money.EXPORT_OK    = [ 
-    'sanitize', 'dollars_float_to_cents_integer', 'cents_as_dollars'
+    'sanitize', 'dollars_float_to_cents_integer', 'cents_as_dollars', 'format'
 ];
 util.money.EXPORT_TAGS    = { ':all' : util.money.EXPORT_OK };
 
@@ -13,10 +13,15 @@ util.money.dollars_float_to_cents_integer = function( money ) {
         if (money == '' || money == null || money == undefined) money = 0;
         // careful to avoid fractions of pennies
         var negative; negative = money.toString().match(/-/) ? -1 : 1;
-        var money_s = money.toString().replace(/[^\.\d]/g, '');
-        var marray = money_s.split(".");
+        var money_s = money.toString().replace(/[^\.,\d]/g, '');
+        var marray = money_s.split(/[\.,]/);
         var dollars = marray[0];
         var cents = marray[1];
+       if (marray.length > 2) {
+           cents = marray[marray.length-1];
+           marray.splice(-1, 1);
+           dollars = marray.join("").toString();
+       }
         try {
             if (cents.length < 2) {
                 cents = cents + '0';
@@ -49,8 +54,8 @@ util.money.cents_as_dollars = function( cents ) {
     try {
         if (cents == '' || cents == null || cents == undefined) cents = 0;
         var negative; negative = cents.toString().match(/-/) ? '-' : '';
-        cents = cents.toString().replace(/[^\.\d]/g, ''); 
-        if (cents.match(/\./)) cents = util.money.dollars_float_to_cents_integer( cents ).toString();
+        cents = cents.toString().replace(/[^\.,\d]/g, '');
+        if (cents.match(/\.,/)) cents = util.money.dollars_float_to_cents_integer( cents ).toString();
         try {
             switch( cents.length ) {
                 case 0: cents = '000'; break;
@@ -68,5 +73,32 @@ util.money.sanitize = function( money ) {
     return util.money.cents_as_dollars( util.money.dollars_float_to_cents_integer( money ) );
 }
 
+util.money.currency_fmt = undefined;
+
+util.money.format = function( money ) {
+    if (!util.money.currency_fmt) {
+       var fmt_aou = 'global.currency_symbol_fmt';
+       if (typeof JSAN != 'undefined' && typeof api != 'undefined') {
+           JSAN.use('OpenILS.data');
+           var data = new OpenILS.data();
+           data.stash_retrieve();
+           if (data.hash.aous[fmt_aou]) util.money.currency_fmt = data.hash.aous[fmt_aou];
+       } else if (typeof fieldmapper != 'undefined') {
+           var ouSettings = fieldmapper.aou.fetchOrgSettingBatch(1, [fmt_aou]);
+           if (ouSettings[fmt_aou] && ouSettings[fmt_aou].value) util.money.currency_fmt = ouSettings[fmt_aou].value;
+       } else {
+           dump("Could not get currency format from org settings.\n");
+       }
+       if (!util.money.currency_fmt) {
+           if (document.getElementById('commonStrings'))
+               util.money.currency_fmt = document.getElementById('commonStrings').getString('common.currency_format');
+           if (!util.money.currency_fmt) {
+               dump('No currency format, using fallback.\n');
+               util.money.currency_fmt = "$%.2f";
+           }
+       }
+    }
+    return util.money.currency_fmt.sprintf(util.money.sanitize(money));
+}
 
 dump('exiting util/money.js\n');
index 84de362..407a927 100644 (file)
@@ -66,6 +66,7 @@
         <script type="text/javascript" src="/xul/server/circ/util.js" />
         <script type="text/javascript" src="/xul/server/cat/util.js" />
         <script type="text/javascript" src="/xul/server/patron/util.js" />
+        <script type='text/javascript' src='/opac/common/js/sprintf.js'/>
         <script type="text/javascript" src="/opac/common/js/utils.js" />
         <script type="text/javascript" src="/opac/common/js/CGI.js" />
         <script type="text/javascript" src="/opac/common/js/md5.js" />
index 6bbaaef..519a7b2 100644 (file)
@@ -85,7 +85,7 @@ function init_list() {
                 ).concat([
                     {
                         'id' : 'balance_owed', 'label' : 'Balance Owed', 'sort_type' : 'money', 'render' : function(my) { 
-                            return util.money.sanitize( my.balance_owed ); 
+                            return util.money.format( my.balance_owed );
                         }
                     },
                     {
index 1e826c2..37b6e8f 100644 (file)
@@ -570,7 +570,7 @@ g.apply = function(field,value) {
         if (value == '') {
             value = null;
         } else {
-            JSAN.use('util.money'); value = util.money.sanitize( value );
+            JSAN.use('util.money'); value = util.money.format( value );
         }
     }
     for (var i = 0; i < g.copies.length; i++) {
@@ -1125,14 +1125,14 @@ g.panes_and_field_names = {
     [
         $('catStrings').getString('staff.cat.copy_editor.field.deposit_amount.label'),
         { 
-            render: 'if (fm.deposit_amount() == null) { $("catStrings").getString("staff.cat.copy_editor.field.unset_or_null"); } else { util.money.sanitize( fm.deposit_amount() ); }',
+            render: 'if (fm.deposit_amount() == null) { $("catStrings").getString("staff.cat.copy_editor.field.unset_or_null"); } else { util.money.format( fm.deposit_amount() ); }',
             input: 'c = function(v){ g.apply("deposit_amount",v); if (typeof post_c == "function") post_c(v); }; x = document.createElement("textbox"); x.addEventListener("apply",function(f){ return function(ev) { f(ev.target.value); } }(c), false);',
         }
     ],
     [
         $('catStrings').getString('staff.cat.copy_editor.field.price.label'),
         { 
-            render: 'if (fm.price() == null) { $("catStrings").getString("staff.cat.copy_editor.field.unset_or_null"); } else { util.money.sanitize( fm.price() ); }', 
+            render: 'if (fm.price() == null) { $("catStrings").getString("staff.cat.copy_editor.field.unset_or_null"); } else { util.money.format( fm.price() ); }',
             input: 'c = function(v){ g.apply("price",v); if (typeof post_c == "function") post_c(v); }; x = document.createElement("textbox"); x.addEventListener("apply",function(f){ return function(ev) { f(ev.target.value); } }(c), false);',
         }
     ],
index 2f47f67..35b6301 100644 (file)
@@ -463,7 +463,7 @@ cat.util.mark_item_damaged = function(copy_ids) {
                                             copies[i].barcode(),  
                                             patron_name,  
                                             util.date.formatted_date( circ_obj.checkin_time(), '%{localized}' ),
-                                            util.money.sanitize(robj.payload.charge) ]), 
+                                            util.money.format(robj.payload.charge) ]),
                                         $("catStrings").getString('staff.cat.util.mark_item_damaged.charge_patron_prompt.title'), 
                                         $("catStrings").getString('staff.cat.util.mark_item_damaged.charge_patron_prompt.ok_label'), 
                                         $("catStrings").getString('staff.cat.util.mark_item_damaged.charge_patron_prompt.change_amount_label'), 
@@ -484,7 +484,7 @@ cat.util.mark_item_damaged = function(copy_ids) {
                                                 'xact_id' : circ_obj.id(), 
                                                 'do_not_process_bill' : true,
                                                 /* 'override_default_billing_type' : 7, FIXME: maybe reintroduce this with an org setting for the specific btype? */
-                                                'override_default_price' : util.money.sanitize( robj.payload.charge ) 
+                                                'override_default_price' : util.money.format( robj.payload.charge )
                                             }
                                         );
 
index 3f1d976..7d0e3e8 100644 (file)
@@ -494,7 +494,7 @@ circ.checkin.prototype = {
                 var new_msg = document.getElementById('circStrings').getFormattedString(
                     'staff.circ.utils.billable.amount', [
                         row.my.acp.barcode(),
-                        util.money.sanitize(bill.balance_owed())
+                        util.money.format(bill.balance_owed())
                     ]
                 );
                 no_change_label.setAttribute(
@@ -528,7 +528,7 @@ circ.checkin.prototype = {
                     document.getElementById('fine_tally').setAttribute('amount',amount);
                     document.getElementById('fine_tally').setAttribute(
                         'value',
-                        document.getElementById('circStrings').getFormattedString('staff.circ.utils.fine_tally_text', [ util.money.sanitize( amount ) ])
+                        document.getElementById('circStrings').getFormattedString('staff.circ.utils.fine_tally_text', [ util.money.format( amount ) ])
                     );
                     document.getElementById('fine_tally').setAttribute('hidden','false');
                 }
index 56d5ef8..0ef0224 100644 (file)
@@ -314,7 +314,7 @@ circ.checkout.prototype = {
                 'lib' : obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ],
                 'staff' : obj.data.list.au[0],
                 'data' : {
-                    'balance_owed' : util.money.sanitize( obj.most_recent_balance_owed ),
+                    'balance_owed' : util.money.format( obj.most_recent_balance_owed ),
                 },
                 'printer_context' : 'receipt',
                 'template' : 'checkout',
index cf538a1..86e08d0 100644 (file)
@@ -381,7 +381,7 @@ circ.renew.prototype = {
                         var m = document.getElementById('no_change_label').getAttribute('value');
                         document.getElementById('no_change_label').setAttribute(
                             'value', 
-                            m + document.getElementById('circStrings').getFormattedString('staff.circ.utils.billable.amount', [params.row.my.acp.barcode(), util.money.sanitize(bill.balance_owed())]) + '  '
+                            m + document.getElementById('circStrings').getFormattedString('staff.circ.utils.billable.amount', [params.row.my.acp.barcode(), util.money.format(bill.balance_owed())]) + '  '
                         );
                         document.getElementById('no_change_label').setAttribute('hidden','false');
                     }
@@ -390,7 +390,7 @@ circ.renew.prototype = {
                         document.getElementById('fine_tally').setAttribute('amount',amount);
                         document.getElementById('fine_tally').setAttribute(
                             'value',
-                            document.getElementById('circStrings').getFormattedString('staff.circ.utils.fine_tally_text', [ util.money.sanitize( amount ) ])
+                            document.getElementById('circStrings').getFormattedString('staff.circ.utils.fine_tally_text', [ util.money.format( amount ) ])
                         );
                         document.getElementById('fine_tally').setAttribute('hidden','false');
                     }
index 4c8a080..db70cd7 100644 (file)
@@ -1056,7 +1056,7 @@ circ.util.columns = function(modify,params) {
                 if (my.acp.price() == null) {
                     return document.getElementById('circStrings').getString('staff.circ.utils.unset');
                 } else {
-                    return util.money.sanitize(my.acp.deposit_amount());
+                    return util.money.format(my.acp.deposit_amount());
                 }
             },
             'sort_type' : 'money'
@@ -1073,7 +1073,7 @@ circ.util.columns = function(modify,params) {
                 if (my.acp.price() == null) {
                     return document.getElementById('circStrings').getString('staff.circ.utils.unset');
                 } else {
-                    return util.money.sanitize(my.acp.price());
+                    return util.money.format(my.acp.price());
                 }
             },
             'sort_type' : 'money'
index cf4ae70..644e320 100644 (file)
@@ -349,8 +349,8 @@ staff.circ.utils.patron_family_name=Patron Last Name
 staff.circ.utils.patron_first_given_name=Patron First Name
 staff.circ.utils.checkin.override=Override Checkin Failure?
 staff.circ.utils.checkin.override.item_deposit_paid.warning=A paid deposit will be owed to this patron if this action is overrided.
-staff.circ.utils.billable.amount=Transaction for %1$s billable $%2$s
-staff.circ.utils.fine_tally_text=Fine Tally: $%1$s
+staff.circ.utils.billable.amount=Transaction for %1$s billable %2$s
+staff.circ.utils.fine_tally_text=Fine Tally: %1$s
 staff.circ.utils.transit_hold_cancelled=Original hold for transit cancelled.
 staff.circ.utils.item_checked_in=%1$s was already checked in.
 staff.circ.utils.item_not_cataloged=ITEM_NOT_CATALOGED event but copy status is %1$s
index e30c5aa..ce2fa8c 100644 (file)
@@ -21,6 +21,7 @@ common.yes=Yes
 common.no=No
 common.check_to_confirm=Check here to confirm this message
 common.processing=Processing
+common.currency_format=$%.2f
 lang.version=remote v1
 openils.global_util.clear_cache.error=Problem clearing the cache: %1$s
 openils.global_util.clipboard.error=Clipboard action failed: %1$s
index cee408d..817e0fd 100644 (file)
@@ -22,7 +22,7 @@ staff.patron.bill_details.handle_edit_payment_note.note_dialog.title=Replacement
 staff.patron.bill_details.handle_edit_payment_note.note_dialog.prompt=Enter new note:
 staff.patron.bill_details.handle_edit_payment_note.failure=Note for selected payments not likely updated.
 staff.patron.bill_details.handle_void.voided_billings.alert=All selected billings have already voided.
-staff.patron.bill_details.handle_void.confirm_void_billing=Are you sure you would like to void $%1$s worth of line-item billings?
+staff.patron.bill_details.handle_void.confirm_void_billing=Are you sure you would like to void %1$s worth of line-item billings?
 staff.patron.bill_details.handle_void.confirm_void_billing_title=Voiding Bills
 staff.patron.bill_details.handle_void.confirm_void_billing_yes=Yes
 staff.patron.bill_details.handle_void.confirm_void_billing_no=No
@@ -74,7 +74,7 @@ staff.patron.bills.info_box.label_value.refund=Refund
 staff.patron.bills.info_box.label_value.void_all_billings=Void All Billings
 staff.patron.bills.info_box.label_value.full_details=Full Details
 staff.patron.bills.void_all_billings.all_voided=All billings already voided on this bill.
-staff.patron.bills.void_all_billings.void.message=Are you sure you would like to void $%1$s worth of line-item billings?
+staff.patron.bills.void_all_billings.void.message=Are you sure you would like to void %1$s worth of line-item billings?
 staff.patron.bills.void_all_billings.void.title=Voiding Bills
 staff.patron.bills.void_all_billings.void.yes=Yes
 staff.patron.bills.void_all_billings.void.no=No
@@ -366,7 +366,6 @@ staff.patron.search_result.init.search_clipboard=patron search clipboard
 staff.patron.search_result.init.search_saving_columns=patron search saving columns
 staff.patron.search_result.mailing_address_column_label_prefix=Mailing Addr: 
 staff.patron.search_result.billing_address_column_label_prefix=Billing Addr: 
-staff.patron.summary.patron_bill.money=$ %1$s
 staff.patron.summary.retrieve.no_barcode=summary: No barcode or ID
 staff.patron.summary.patron_net_access=Internet
 staff.patron.summary.create_date=Account created on
index a9af71d..96bff84 100644 (file)
@@ -34,11 +34,16 @@ function my_init() {
         exec.on_error = function(E) { alert(E); return true; }
         exec.timer(g.funcs,100);
 
+       $('currently_voided').setAttribute('value', util.money.format( 0 ));
+       $('change_due').setAttribute('value', util.money.format( 0 ));
+       $('pending_payment').setAttribute('value', util.money.format( 0 ));
+       $('pending_change').setAttribute('value', util.money.format( 0 ));
+
         $('credit_forward').setAttribute('value','???');
         if (!g.patron) {
             refresh_patron();
         } else {
-            $('credit_forward').setAttribute('value',util.money.sanitize( g.patron.credit_forward_balance() ));
+            $('credit_forward').setAttribute('value',util.money.format( g.patron.credit_forward_balance() ));
         }
 
         if (g.data.hash.aous['ui.circ.billing.uncheck_bills_and_unfocus_payment_box']) {
@@ -239,9 +244,9 @@ function tally_pending() {
             }
         }
         var change_pending = payment_tendered - payment_pending;
-        $('pending_payment').value = util.money.cents_as_dollars( payment_pending );
-        $('pending_change').value = util.money.cents_as_dollars( change_pending );
-        $('change_due').value = util.money.cents_as_dollars( change_pending );
+        $('pending_payment').value = util.money.format( payment_pending );
+        $('pending_change').value = util.money.format( change_pending );
+        $('change_due').value = util.money.format( change_pending );
         return { 'payments' : payments, 'change' : util.money.cents_as_dollars( change_pending ) };
     } catch(E) {
         alert('Error in bill2.js, tally_pending(): ' + E);
@@ -290,7 +295,7 @@ function tally_voided() {
             var bv = util.money.dollars_float_to_cents_integer( billing.amount() );
             voided_total += bv;
         }
-        $('currently_voided').setAttribute('value', util.money.cents_as_dollars( voided_total ) );
+        $('currently_voided').setAttribute('value', util.money.format( voided_total ) );
     } catch(E) {
         alert('Error in bill2.js, tally_voided(): ' + E);
     }
@@ -335,15 +340,15 @@ function tally_all() {
                 checked_balance += bo;
             }
         }
-        $('checked_billed').value = util.money.cents_as_dollars( checked_billed );
-        $('checked_paid').value = util.money.cents_as_dollars( checked_paid );
-        $('checked_owed').value = util.money.cents_as_dollars( checked_balance );
-        $('checked_owed2').setAttribute('value', util.money.cents_as_dollars( checked_balance ) );
-        $('total_billed').value = util.money.cents_as_dollars( total_billed );
-        $('tb_total_paid').value = util.money.cents_as_dollars( total_paid );
-        $('tb_total_owed').value = util.money.cents_as_dollars( total_balance );
-        $('total_owed2').setAttribute('value', util.money.cents_as_dollars( total_balance ) );
-        $('refunds_owed').setAttribute('value', util.money.cents_as_dollars( Math.abs( refunds_owed ) ) );
+        $('checked_billed').value = util.money.format( checked_billed / 100 );
+        $('checked_paid').value = util.money.format( checked_paid / 100 );
+        $('checked_owed').value = util.money.format( checked_balance / 100 );
+        $('checked_owed2').setAttribute('value', util.money.format( checked_balance / 100 ) );
+        $('total_billed').value = util.money.format( total_billed / 100 );
+        $('tb_total_paid').value = util.money.format( total_paid / 100 );
+        $('tb_total_owed').value = util.money.format( total_balance / 100 );
+        $('total_owed2').setAttribute('value', util.money.format( total_balance / 100 ) );
+        $('refunds_owed').setAttribute('value', util.money.format( Math.abs( refunds_owed ) ) );
         // tally_selected();
     } catch(E) {
         alert('Error in bill2.js, tally_all(): ' + E);
@@ -479,6 +484,7 @@ function retrieve_mbts_for_list() {
 
 function init_lists() {
     JSAN.use('util.list'); JSAN.use('circ.util'); 
+    JSAN.use('util.money');
 
     g.bill_list_selection = [];
 
@@ -504,7 +510,7 @@ function init_lists() {
                     {
                         'id' : 'payment_pending', 'editable' : false, 'sort_type' : 'money', 
                         'label' : $('patronStrings').getString('staff.patron.bill_interface.payment_pending.column_header'),
-                        'render' : function(my) { return my.payment_pending || '0.00'; }, 
+                        'render' : function(my) { return util.money.format(my.payment_pending || '0.00'); },
                     }
                 ]
             ))),
@@ -1008,7 +1014,7 @@ function void_all_billings(mobts_id) {
         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.bills.void_all_billings.void.message', [sum]);
+        var msg = $("patronStrings").getFormattedString('staff.patron.bills.void_all_billings.void.message', [util.money.format(sum)]);
         var r = g.error.yns_alert(msg,
             $("patronStrings").getString('staff.patron.bills.void_all_billings.void.title'),
             $("patronStrings").getString('staff.patron.bills.void_all_billings.void.yes'),
@@ -1045,7 +1051,7 @@ function refresh_patron() {
         var au_obj = req.getResultObject();
         if (typeof au_obj.ilsevent == 'undefined') {
             g.patron = au_obj;
-            $('credit_forward').setAttribute('value',util.money.sanitize( g.patron.credit_forward_balance() ));
+            $('credit_forward').setAttribute('value',util.money.format( g.patron.credit_forward_balance() ));
         }
     });
 }
index cb5f3c2..e685c20 100644 (file)
@@ -23,9 +23,9 @@ function retrieve_mbts() {
                 $('mbts_xact_type').value = g.mbts.xact_type();
                 $('mbts_xact_start').value = util.date.formatted_date( g.mbts.xact_start(), '%{localized}' );
                 $('mbts_xact_finish').value = g.mbts.xact_finish() ? util.date.formatted_date( g.mbts.xact_finish(), '%{localized}' ) : '';
-                $('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() ) : '';
+                $('mbts_total_owed').value = g.mbts.total_owed() ? util.money.format( g.mbts.total_owed() ) : '';
+                $('mbts_total_paid').value = g.mbts.total_paid() ? util.money.format( g.mbts.total_paid() ) : '';
+                $('mbts_balance_owed').value = g.mbts.balance_owed() ? util.money.format( g.mbts.balance_owed() ) : '';
 
                 switch(g.mbts.xact_type()) {
                     case 'circulation' : retrieve_circ(); break;
@@ -322,7 +322,7 @@ function handle_void() {
         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 msg = $("patronStrings").getFormattedString('staff.patron.bill_details.handle_void.confirm_void_billing', util.money.format(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'),
index d897f6f..8b6e198 100644 (file)
@@ -19,8 +19,8 @@ function tally_selected() {
             selected_billed += to;
             selected_paid += tp;
         }
-        $('billed_tally').setAttribute('value', util.money.cents_as_dollars( selected_billed ) );
-        $('paid_tally').setAttribute('value', util.money.cents_as_dollars( selected_paid ) );
+        $('billed_tally').setAttribute('value', util.money.format( selected_billed / 100 ) );
+        $('paid_tally').setAttribute('value', util.money.format( selected_paid / 100 ) );
     } catch(E) {
         alert('Error in bill_history.js, tally_selected(): ' + E);
     }
@@ -40,7 +40,7 @@ function payments_tally_selected() {
             var amount = util.money.dollars_float_to_cents_integer( payment.amount() );
             selected_paid += amount;
         }
-        $('payments_paid_tally').setAttribute('value', util.money.cents_as_dollars( selected_paid ) );
+        $('payments_paid_tally').setAttribute('value', util.money.format( selected_paid / 100 ) );
     } catch(E) {
         alert('Error in bill_history.js, payments_tally_selected(): ' + E);
     }
index 25ef0a9..2d91a80 100644 (file)
@@ -9,9 +9,9 @@ function retrieve_mbts() {
                 $('mbts_xact_type').value = g.mbts.xact_type();
                 $('mbts_xact_start').value = util.date.formatted_date( g.mbts.xact_start(), '%{localized}' );
                 $('mbts_xact_finish').value = g.mbts.xact_finish() ? util.date.formatted_date( g.mbts.xact_finish(), '%{localized}' ) : '';
-                $('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() ) : '';
+                $('mbts_total_owed').value = g.mbts.total_owed() ? util.money.format( g.mbts.total_owed() ) : '';
+                $('mbts_total_paid').value = g.mbts.total_paid() ? util.money.format( g.mbts.total_paid() ) : '';
+                $('mbts_balance_owed').value = g.mbts.balance_owed() ? util.money.format( g.mbts.balance_owed() ) : '';
                 $('xact_type').value = g.mbts.xact_type(); $('xact_type').disabled = true;
             } catch(E) {
                 g.error.sdump('D_ERROR',E);
@@ -176,7 +176,7 @@ function patron_bill_finish() {
 
             xulG.proceed = true;
             xulG.cbt_id = $('billing_type').value;
-            xulG.amount = $('bill_amount').value;
+            xulG.amount = util.money.sanitize( $('bill_amount').value );
             xulG.note = $('bill_note').value;
 
         } else {
index d27db59..f7b4ff3 100644 (file)
@@ -56,7 +56,7 @@ function retrieve_money_summaries() {
 
         $('total_owed').setAttribute(
             'value',
-            $('patronStrings').getFormattedString( 'staff.patron.info_group.total_owed.label', [ util.money.cents_as_dollars(sum) ] )
+            $('patronStrings').getFormattedString( 'staff.patron.info_group.total_owed.label', [ util.money.format(sum / 100) ] )
         );
 
     } catch(E) {
index c6e8543..f1d68d7 100644 (file)
@@ -262,8 +262,7 @@ patron.summary.prototype = {
                             return function() { 
                                 JSAN.use('util.money');
                                 util.widgets.set_text(e,
-                                    '$' + 
-                                    util.money.sanitize(
+                                    util.money.format(
                                         obj.patron.credit_forward_balance()
                                     )
                                 );
@@ -298,12 +297,12 @@ patron.summary.prototype = {
                                                 try {
                                                     util.widgets.set_text(
                                                         e, 
-                                                        patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( bs.balance_owed )])
+                                                        util.money.format( bs.balance_owed )
                                                     );
                                                     if (under_btn) {
                                                         util.widgets.set_text(
                                                             under_btn, 
-                                                            patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( bs.balance_owed )])
+                                                            util.money.format( bs.balance_owed )
                                                         );
                                                     }
                                                     var show_billing_tab_on_bills = String( obj.OpenILS.data.hash.aous['ui.circ.show_billing_tab_on_bills'] ) == 'true';
@@ -351,7 +350,7 @@ patron.summary.prototype = {
                                                 }
                                                 tab.setAttribute(
                                                     'label',
-                                                    patronStrings.getFormattedString('staff.patron.summary.tab.group_list_with_total_owed.label',[ util.money.cents_as_dollars( sum ) ])
+                                                    patronStrings.getFormattedString('staff.patron.summary.tab.group_list_with_total_owed.label',[ util.money.format( sum / 100 ) ])
                                                 );
                                             }
                                         } catch(E) {
index 6849c34..24614d6 100644 (file)
@@ -32,17 +32,17 @@ patron.util.mbts_columns = function(modify,params) {
         },
         {
             'persist' : 'hidden width ordinal', 'id' : 'balance_owed', 'label' : commonStrings.getString('staff.mbts_balance_owed_label'), 'flex' : 1,
-            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.balance_owed() ); },
+            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.format( my.mbts.balance_owed() ); },
             'sort_type' : 'money'
         },
         {
             'persist' : 'hidden width ordinal', 'id' : 'total_owed', 'label' : commonStrings.getString('staff.mbts_total_owed_label'), 'flex' : 1,
-            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.total_owed() ); },
+            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.format( my.mbts.total_owed() ); },
             'sort_type' : 'money'
         },
         {
             'persist' : 'hidden width ordinal', 'id' : 'total_paid', 'label' : commonStrings.getString('staff.mbts_total_paid_label'), 'flex' : 1,
-            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.total_paid() ); },
+            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.format( my.mbts.total_paid() ); },
             'sort_type' : 'money'
         },
         {
@@ -170,7 +170,7 @@ patron.util.mb_columns = function(modify,params) {
         },
         {
             'persist' : 'hidden width ordinal', 'id' : 'amount', 'label' : commonStrings.getString('staff.mb_amount_label'), 'flex' : 1,
-            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mb.amount() ); },
+            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.format( my.mb.amount() ); },
             'sort_type' : 'money'
         },
         {
@@ -242,7 +242,7 @@ patron.util.mp_columns = function(modify,params) {
         },
         {
             'persist' : 'hidden width ordinal', 'id' : 'mp_amount', 'label' : commonStrings.getString('staff.mp_amount_label'), 'flex' : 1,
-            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mp.amount() ); },
+            'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.format( my.mp.amount() ); },
             'sort_type' : 'money'
         },
         {
index 57a2236..5724737 100644 (file)
@@ -219,7 +219,7 @@ serial.editor_base = {
 
     /******************************************************************************************************/
     /* Apply a value to a specific field on all the copies being edited */
-    /* Don't forget to use util.money.sanitize if dealing with money values */
+    /* Don't forget to use util.money.{format,sanitize} if dealing with money values */
 
     'editor_base_apply' : function(field, value, loop_func) {
         var obj = this;