Bug 35087: (follow-up) Accept only values which will be saved correctly

This patch adds a regex (thanks to Katrin for the help) specific to the
range of values which will be accepted by the discount column in the
database which has the type "float(6,4)".

The patch also removes the format() filter from the template so that
values returned from the database won't be truncated:

Using "format ('%.1f')", a value in the db of '9.009' would appear in
the edit form as '9.0', a change which could be missed if the user was
editing some other field in the vendor edit form.

To test, apply the patch and clear your browser cache if necessary.

- Go to Acquisitions -> Vendors -> Edit vendor.
- Under "Ordering information," test entering various values in the
  "Discount" field. It should accept numbers with up to two digits
   before the decimal and up to three digits after the decimal:

   9, 99, -99, 99.9, 0.99, 99.99, 99.999

- In each of these cases, confirm that a value accepted by the
  client-side validation is also accepted when you submit the form and
  is correctly displayed when you edit that vendor again.

- It should not accept:

   100, 100.001, 100.00001

- The error message has been updated to read, "Please enter a decimal
  number in the format: 0.0"

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Sonia <sonia.bouis@univ-lyon3.fr>
Signed-off-by: Olivier V <olivier.vezina@inLibro.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Owen Leonard 2024-01-31 16:47:34 +00:00 committed by Martin Renvoize
parent ebc2568109
commit 584c02283e
Signed by: martin.renvoize
GPG key ID: 422B469130441A0F
3 changed files with 5 additions and 2 deletions

View file

@ -12,7 +12,6 @@
digits: _("Please enter only digits."),
equalTo: _("Please enter the same value again."),
number: _("Please add amount in valid format: 0.00"),
decimal_rate: $.validator.addMethod("decimal_rate", $.validator.methods.number, "Please add rate in valid format: 0.00"),
maxlength: $.validator.format(_("Please enter no more than {0} characters.")),
minlength: $.validator.format(_("Please enter at least {0} characters.")),
rangelength: $.validator.format(_("Please enter a value between {0} and {1} characters long.")),

View file

@ -361,7 +361,7 @@
<input type="hidden" name="tax_rate" value="0" />
[% END %]
<li><label for="discount">Discount: </label>
<input class="rate" type="text" size="6" id="discount" name="discount" value="[% discount | format ('%.1f') %]" />%</li>
<input class="rate" type="text" size="6" id="discount" name="discount" value="[% discount | html %]" />%</li>
<li>
<label for="deliverytime">Delivery time: </label>
<input type="text" size="2" id="deliverytime" name="deliverytime" value="[% deliverytime | html %]" /> days

View file

@ -139,6 +139,10 @@ $(document).ready(function () {
number: true,
});
jQuery.validator.addMethod("decimal_rate", function(value, element) {
return this.optional( element ) || /^[\-]?\d{0,2}(\.\d{0,3})*$/.test( value );
}, __('Please enter a decimal number in the format: 0.0') );
jQuery.validator.addClassRules("rate", {
decimal_rate: true
});