Bugzilla – Attachment 72213 Details for
Bug 12310
Decimal separators issues in patrons payments/fines
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 12310 : Modify scripts in order to convert any string to the good format
Bug-12310--Modify-scripts-in-order-to-convert-any-.patch (text/plain), 20.70 KB, created by
Victor Grousset/tuxayo
on 2018-02-26 15:05:15 UTC
(
hide
)
Description:
Bug 12310 : Modify scripts in order to convert any string to the good format
Filename:
MIME Type:
Creator:
Victor Grousset/tuxayo
Created:
2018-02-26 15:05:15 UTC
Size:
20.70 KB
patch
obsolete
>From e9e61517e980650d1c41d9b03d4934a6d8bfcc66 Mon Sep 17 00:00:00 2001 >From: Baptiste Wojtkowski <baptiste.wojtkowski@biblibre.com> >Date: Tue, 21 Feb 2017 15:47:36 +0000 >Subject: [PATCH] Bug 12310 : Modify scripts in order to convert any string to > the good format > >paxed's solution is obsolete since the form asks for a number. > >The script includes 2 function which check if it is possible to transform >properly into the format "XX.XX" and which do it. >The money symbols are ignored. >All other symbols are ignored. > >Modify the tooltips helping the users entering monrtary information in the right format. > >Fields on all those pages are now automatically formatted >- cgi-bin/koha/admin/aqbudgetperiods.tt >- cgi-bin/koha/admin/aqbudgets.tt >- cgi-bin/koha/members/mancredit.tt >- cgi-bin/koha/members/maninvoice.tt > >Test plan : >1) Check you can't enter any string except like "XX.XX" when > - you create a Budget (Administration->Budget) > - you write a fine (Circulation->[select a Borrower]->new fine ) > - you pay an existing fine >2) Apply patch >3) Check you can enter any string with > - anything you want > - a , or a . as separator (both are default) > - change the syspref DigitSeparator into the separator you with and check again > ex : XXX,XXX,XXX.XX => . > XXX XXX XXX,XX => ,. or , > XXX XXX XXX.XX => ,. or . > The string is immediately changed after you change the field >Please note that any other symbole is ignored >--- > .../atomicupdate/bug12310_added_DigitSeparator.sql | 2 + > installer/data/mysql/sysprefs.sql | 1 + > .../prog/en/includes/price-conversion-message.inc | 14 +++++++ > .../intranet-tmpl/prog/en/includes/prices.inc | 25 +++++++++++ > .../prog/en/modules/admin/aqbudgetperiods.tt | 29 ++++++++++++- > .../prog/en/modules/admin/aqbudgets.tt | 41 +++++++++++++++--- > .../en/modules/admin/preferences/i18n_l10n.pref | 4 ++ > .../prog/en/modules/members/mancredit.tt | 26 +++++++++++- > .../prog/en/modules/members/maninvoice.tt | 29 ++++++++++++- > .../prog/en/modules/members/paycollect.tt | 48 +++++++++++----------- > 10 files changed, 187 insertions(+), 32 deletions(-) > create mode 100644 installer/data/mysql/atomicupdate/bug12310_added_DigitSeparator.sql > create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/price-conversion-message.inc > create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/prices.inc > >diff --git a/installer/data/mysql/atomicupdate/bug12310_added_DigitSeparator.sql b/installer/data/mysql/atomicupdate/bug12310_added_DigitSeparator.sql >new file mode 100644 >index 0000000..5022f3c >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug12310_added_DigitSeparator.sql >@@ -0,0 +1,2 @@ >+INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES >+('DigitSeparator', ',.', NULL , 'The separator between entire and decimal part', 'Free'); >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index 8f5e94b..87fe483 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/installer/data/mysql/sysprefs.sql >@@ -138,6 +138,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` > ('DefaultToLoggedInLibraryNoticesSlips', '0', NULL , 'If enabled,slips and notices editor will default to the logged in library''s rules, rather than the ''all libraries'' rules.', 'YesNo'), > ('DefaultToLoggedInLibraryOverdueTriggers', '0', NULL , 'If enabled, overdue status triggers editor will default to the logged in library''s rules, rather than the ''default'' rules.', 'YesNo'), > ('delimiter',';',';|tabulation|,|/|\\|#||','Define the default separator character for exporting reports','Choice'), >+('DigitSeparator', '.,', NULL , 'The separator between entire and decimal part', 'Free'), > ('Display856uAsImage','OFF','OFF|Details|Results|Both','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','Choice'), > ('DisplayClearScreenButton','0','','If set to ON, a clear screen button will appear on the circulation page.','YesNo'), > ('displayFacetCount','0',NULL,NULL,'YesNo'), >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/price-conversion-message.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/price-conversion-message.inc >new file mode 100644 >index 0000000..4fcb5a0 >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/price-conversion-message.inc >@@ -0,0 +1,14 @@ >+[% USE Koha %] >+[% INCLUDE 'prices.inc' %] >+ >+ <span class="hint"> >+ [% IF Koha.Preference('DigitSeparator') %]Please use any of the following character(s) "[% Koha.Preference('DigitSeparator').substr(0,1) %]" as separator : ex "XX[% Koha.Preference('DigitSeparator').substr(0,1) %]XX".</span> >+ [% IF CAN_user_parameters %] >+ <a href="/cgi-bin/koha/admin/preferences.pl?tab=&op=search&searchfield=DigitSeparator">Edit Separator </a> >+ [% END %] >+ [% ELSE %] >+ [% IF CAN_user_parameters %] >+ No Digit separator defined <a href="/cgi-bin/koha/admin/preferences.pl?tab=&op=search&searchfield=DigitSeparator">Chose one</a> >+ [% END %] >+ [% END %] >+ </span> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/prices.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/prices.inc >new file mode 100644 >index 0000000..561ae06 >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/prices.inc >@@ -0,0 +1,25 @@ >+[% USE Koha %] >+<script type="text/javascript"> >+//<![CDATA[ >+ >+function isPrice(string){ >+ var reg ="[% Koha.Preference('DigitSeparator') %]"; >+ reg = "[0-9]{1,}(["+reg+"][0-9]{1,}|)"; >+ var prix = new RegExp(reg); >+ if (!prix.test(string)) { >+ return false; >+ } >+ return true; >+} >+ >+function Price_from_string(string){ >+ if (!isPrice(string)) { >+ return false; >+ } >+ string = string.replace(/[^0-9[% Koha.Preference('DigitSeparator') %]]/g, ''); >+ string = string.replace(/[[% Koha.Preference('DigitSeparator') %]]/g, '.'); >+ return string; >+} >+ >+//]]> >+</script> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt >index afd893f..0673f44 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt >@@ -1,6 +1,8 @@ > [% USE KohaDates %] > [% USE Price %] >+[% USE Koha %] > [% SET footerjs = 1 %] >+ > [%- BLOCK action_menu %] > <div class="dropdown"> > <a class="btn btn-default btn-xs dropdown-toggle" id="budgetmenu_[% block_budget.budget_period_id %]" role="button" data-toggle="dropdown" href="#"> >@@ -33,6 +35,7 @@ > [% END -%] > > [% INCLUDE 'doc-head-open.inc' %] >+[% INCLUDE 'prices.inc' %] > [% INCLUDE 'doc-head-close.inc' %] > <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables_[% KOHA_VERSION %].css" /> > [% IF close_form %] >@@ -221,7 +224,8 @@ > <!-- ############################## --> > <label for="budget_period_total">Total amount: </label> > <input type="text" id="budget_period_total" name="budget_period_total" >- size="10" maxlength="80" value="[% budget_period_total | $Price on_editing => 1 %]" /> >+ size="10" maxlength="80" value="[% budget_period_total | $Price on_editing => 1 %]" onchange="CheckTot(budget_period_total)" /> >+ [% INCLUDE 'price-conversion-message.inc' %] > </li> > > <li> >@@ -243,7 +247,7 @@ > <fieldset class="action"> > <!-- "save changes" button --> > <!-- ###################################### --> >- <input type="button" value="Save" onclick="Check(this.form)" /> >+ <input type="button" value="Save" onclick="Check(this.form)" /> > <!-- <input type="submit" value="Save Changes" /> --> > [% IF ( budget_period_id ) %] > <a href="/cgi-bin/koha/admin/aqbudgets.pl?budget_period_id=[% budget_period_id %]" class="cancel">Cancel</a> >@@ -528,6 +532,27 @@ > alert(alertString); > } > } >+ >+ function CheckTot(f){ >+ var ok=1; >+ var _alertString=""; >+ var alertString2; >+ if (!(isPrice(f.value))) { >+ _alertString += "\n- " + _("Amount must be a valid number, or empty"); >+ }else{ >+ f.value=Price_from_string(f.value); >+ } >+ if (_alertString.length==0) { >+ return true; >+ } else { >+ alertString2 = _("Form not submitted because of the following problem(s)"); >+ alertString2 += "\n------------------------------------------------------------------------------------\n"; >+ alertString2 += _alertString; >+ alert(alertString2); >+ return false; >+ } >+ } >+ > function Check(f) { > var ok=1; > var _alertString=""; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt >index e64c9e9..3083cfa 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt >@@ -1,6 +1,7 @@ > [% USE AuthorisedValues %] > [% USE Branches %] > [% USE Price %] >+[% USE Koha %] > [% SET footerjs = 1 %] > [% INCLUDE 'doc-head-open.inc' %] > <title>Koha › Administration › Funds[% IF op == 'add_form' %] › [% IF ( budget_id ) %]Modify fund[% IF ( budget_name ) %] '[% budget_name %]'[% END %][% ELSE %]Add fund [% END %][% END %]</title> >@@ -232,6 +233,7 @@ > <li> > <label style="white-space: nowrap;" for="budget_amount" class="required">Amount: </label> > <input type="text" name="budget_amount" id="budget_amount" value="[% budget_amount | $Price on_editing => 1 %]" size="8" /> >+ [% INCLUDE 'price-conversion-message.inc' %] > </li> > > <li> >@@ -241,9 +243,12 @@ > </li> > > <li> >- <label for="budget_expend">Warning at (amount): </label> >- <input type="text" name="budget_expend" id="budget_expend" value="[% budget_expend | $Price on_editing => 1 %]" size="10" /> >- <span class="hint">0 to disable</span> >+ <label for="budget_expend">Warning at (amount): </label> >+ <input type="text" name="budget_expend" id="budget_expend" value="[% budget_expend | $Price on_editing => 1 %]" size="10" /> >+ >+ <span class="hint">0 to disable.</span> >+ [% INCLUDE 'price-conversion-message.inc' %] >+ > </li> > > <li> >@@ -449,6 +454,7 @@ > > <script type="text/javascript" src="[% interface %]/[% theme %]/js/acq_[% KOHA_VERSION %].js"></script> > [% IF op == 'add_form' %] >+ [% INCLUDE 'prices.inc' %] > <script type="text/javascript"> > //<![CDATA[ > >@@ -563,7 +569,7 @@ > } > } > >- // else do lookup >+ // else do lookup > var budgetTotal = Math.abs(f.budget_amount.value); > var result = budgetExceedsParent (budgetTotal, budgetId, newBudgetParent, f.budget_period_id.value) > if (result) { >@@ -579,7 +585,32 @@ > alert(alertString2); > } > } >+ >+ > $(document).ready(function(){ >+ $('#budget_expend').on('change', function(){CheckAmount(this)}); >+ $('#budget_amount').on('change', function(){CheckAmount(this)}); >+ function CheckAmount(f){ >+ var ok=1; >+ var _alertString=""; >+ var alertString2; >+ if (!(isPrice(f.value))) { >+ _alertString += "\n- " + _("Amount must be a valid number, or empty"); >+ }else{ >+ f.value=Price_from_string(f.value); >+ >+ } >+ if (_alertString.length==0) { >+ return true; >+ } else { >+ alertString2 = _("Form not submitted because of the following problem(s)"); >+ alertString2 += "\n------------------------------------------------------------------------------------\n"; >+ alertString2 += _alertString; >+ alert(alertString2); >+ return false; >+ } >+ } >+ > $("#remove_owner").on("click",function(e){ > e.preventDefault(); > ownerRemove(); >@@ -692,5 +723,5 @@ > //]]> > </script> > [% END %] >-[% END %] >+[% END %][%# end of MACRO jsinclude %] > [% INCLUDE 'intranet-bottom.inc' %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref >index f7f4252..7429e16 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref >@@ -66,3 +66,7 @@ I18N/L10N: > no: "Don't allow" > - notices to be translated. > - If set, notices will be translatable from the "Notices and Slips" interface. The language used to send a notice to a patron will be the one defined for the patron. >+ - >+ - "Any of this characters can be used as separator between integer or decimal part in the price fields. It you want to format price output, please use the system preference 'CurrencyFormat'" >+ - pref: DigitSeparator >+ class: long >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt >index 5f68a4c..92334a5 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt >@@ -3,6 +3,7 @@ > [% INCLUDE 'doc-head-open.inc' %] > <title>Koha › Patrons › Create manual credit</title> > [% INCLUDE 'doc-head-close.inc' %] >+[% INCLUDE 'prices.inc' %] > </head> > > <body id="pat_mancredit" class="pat"> >@@ -40,7 +41,10 @@ > <li><label for="barcode">Barcode: </label><input type="text" name="barcode" id="barcode" /></li> > <li><label for="desc">Description: </label><input type="text" name="desc" size="50" id="desc" /></li> > <li><label for="note">Note: </label><input type="text" name="note" size="50" id="note" /></li> >- <li><label for="amount">Amount: </label><input type="number" name="amount" id="amount" required="required" value="" step="any" min="0" /> Example: 5.00</li> >+ <li><label for="amount">Amount: </label><input name="amount" id="amount" required="required" value="" step="any" min="0" /> Example: 5.00 >+ [% INCLUDE 'price-conversion-message.inc' %] >+ </li> >+ > </ol></fieldset> > > <fieldset class="action"><input type="submit" name="add" value="Add credit" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber %]">Cancel</a></fieldset> >@@ -62,6 +66,26 @@ > $(document).ready(function(){ > $('#mancredit').preventDoubleFormSubmit(); > $("fieldset.rows input, fieldset.rows select").addClass("noEnterSubmit"); >+ $('#amount').on('change', function(){Check(this)}); >+ function Check(f){ >+ var ok=1; >+ var _alertString=""; >+ var alertString2; >+ if (!(isPrice(f.value))) { >+ _alertString += "\n- " + _("Amount must be a valid number, or empty"); >+ } else { >+ f.value=Price_from_string(f.value); >+ } >+ if (_alertString.length==0) { >+ return true; >+ } else { >+ alertString2 = _("Error: "); >+ alertString2 += "\n------------------------------------------------------------------------------------\n"; >+ alertString2 += _alertString; >+ alert(alertString2); >+ return false; >+ } >+ } > }); > </script> > [% END %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt >index 71eeb78..6992756 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt >@@ -53,7 +53,9 @@ > <li><label for="barcode">Barcode: </label><input type="text" name="barcode" id="barcode" /></li> > <li><label for="desc">Description: </label><input type="text" name="desc" id="desc" size="50" /></li> > <li><label for="note">Note: </label><input type="text" name="note" size="50" id="note" /></li> >- <li><label for="amount">Amount: </label><input type="number" name="amount" id="amount" required="required" value="" step="any" min="0" /> Example: 5.00</li> >+ <li><label for="amount">Amount: </label><input type="text" name="amount" id="amount" required="required"/> >+ [% INCLUDE 'price-conversion-message.inc' %] >+ </li> > </ol></fieldset> > <fieldset class="action"><input type="submit" name="add" value="Save" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber %]">Cancel</a></fieldset> > </form> >@@ -87,4 +89,29 @@ > </script> > [% END %] > >+ >+[% INCLUDE 'prices.inc' %] >+<script type="text/javascript"> >+$('#amount').on('change', function(){Check(this)}); >+function Check(f){ >+ var ok=1; >+ var _alertString=""; >+ var alertString2; >+ if (!(isPrice(f.value))) { >+ _alertString += "\n- " + _("Amount must be a valid number, or empty"); >+ }else{ >+ f.value=Price_from_string(f.value); >+ } >+ if (_alertString.length==0) { >+ return true; >+ } else { >+ alertString2 = _("Form not submitted because of the following problem(s)"); >+ alertString2 += "\n------------------------------------------------------------------------------------\n"; >+ alertString2 += _alertString; >+ alert(alertString2); >+ return false; >+ } >+} >+</script> >+ > [% INCLUDE 'intranet-bottom.inc' %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt >index 39df143..5527637 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt >@@ -83,7 +83,7 @@ > <li> > <label for="paid">Collect from patron: </label> > <!-- default to paying all --> >- <input name="paid" id="paid" value="[% amountoutstanding %]" /> >+ <input name="paid" id="paid" value="[% amountoutstanding %]" onchange="Check(document.payindivfine.paid)"/> > </li> > </ol> > </fieldset> >@@ -150,7 +150,8 @@ > <li> > <label for="paid">Collect from patron: </label> > <!-- default to paying all --> >- <input name="paid" id="paid" value="[% total | format('%.2f') %]" /> >+ <input name="paid" id="paid" value="[% total | format('%.2f') %]" onchange="Check(document.payfine.paid)"/> >+ [% INCLUDE 'price-conversion-message.inc' %] > </li> > <li> > <label for="selected_accts_notes">Note: </label> >@@ -206,30 +207,31 @@ > decFlag = true; > } > } >- >- if (dolAmount == "") { >- dolAmount = "0"; >- } >- // Strip leading 0s >- if (dolAmount.length > 1) { >- while(dolAmount.length > 1 && dolAmount.substring(0,1) == "0") { >- dolAmount = dolAmount.substring(1,dolAmount.length); >- } >+ </script> >+ >+ [% INCLUDE 'prices.inc' %] >+ >+ <script type="text/javascript"> >+ function Check(f){ >+ var ok=1; >+ var _alertString=""; >+ var alertString2; >+ if (!(isPrice(f.value))) { >+ _alertString += "\n- " + _("Amount must be a valid number, or empty"); >+ }else{ >+ f.value=Price_from_string(f.value); > } >- if (decAmount.length > 2) { >- decAmount = decAmount.substring(0,2); >+ if (_alertString.length==0) { >+ return true; >+ } else { >+ alertString2 = _("Form not submitted because of the following problem(s)"); >+ alertString2 += "\n------------------------------------------------------------------------------------\n"; >+ alertString2 += _alertString; >+ alert(alertString2); >+ return false; > } >- // Pad right side >- if (decAmount.length == 1) { >- decAmount = decAmount + "0"; >- } >- if (decAmount.length == 0) { >- decAmount = decAmount + "00"; >- } >- >- textObj.value = dolAmount + "." + decAmount; > } >- </script> >+ </script> > [% END %] > > [% INCLUDE 'intranet-bottom.inc' %] >-- >2.7.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 12310
:
28455
|
60530
|
60563
|
61357
|
61603
|
61604
|
62655
|
64671
|
64672
|
64673
|
64674
|
64675
|
64678
|
64679
|
64696
|
72104
|
72213
|
72983
|
73055
|
73215
|
73546
|
73657
|
73784
|
73785
|
73873
|
73874
|
73880
|
74524
|
74525
|
74526
|
74527
|
74528
|
74529
|
75123
|
75127
|
75128
|
75129
|
75130
|
75947
|
75948
|
75949
|
75950
|
75951
|
75952
|
75954
|
75955
|
75956
|
75957
|
75958
|
75959
|
76896
|
76933
|
77971
|
77972
|
77973
|
77995
|
78017
|
78631
|
78632
|
78633
|
78634
|
78635
|
78636
|
78637
|
78638