diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index 6f4bf1630f8..e823278463a 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -562,8 +562,8 @@ var FieldMonetary = InputField.extend({ this.tagName = 'div'; this.className += ' o_input'; - // use the formatFloat function in edit - this.formatType = 'float'; + // do not display currency symbol in edit + this.formatOptions.noSymbol = true; } this.formatOptions.currency = this.currency; diff --git a/addons/web/static/src/js/fields/field_utils.js b/addons/web/static/src/js/fields/field_utils.js index bca74acc088..932ea997e6a 100644 --- a/addons/web/static/src/js/fields/field_utils.js +++ b/addons/web/static/src/js/fields/field_utils.js @@ -290,7 +290,7 @@ function formatMonetary(value, field, options) { digits: (currency && currency.digits) || options.digits, }); - if (!currency) { + if (!currency || options.noSymbol) { return formatted_value; } if (currency.position === "after") { diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index 4a418c05b72..6fc104246d6 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -2420,6 +2420,63 @@ QUnit.module('basic_fields', { form.destroy(); }); + QUnit.test('monetary field with currency digits != 2', function (assert) { + assert.expect(5); + + this.data.partner.records = [{ + id: 1, + bar: false, + foo: "pouet", + int_field: 68, + qux: 99.1234, + currency_id: 1, + }]; + this.data.currency.records = [{ + id: 1, + display_name: "VEF", + symbol: "Bs.F", + position: "after", + digits: [16, 4], + }]; + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch:'
', + res_id: 1, + session: { + currencies: _.indexBy(this.data.currency.records, 'id'), + }, + }); + + // Non-breaking space between the currency and the amount + assert.strictEqual(form.$('.o_field_widget').first().text(), '99.1234\u00a0Bs.F', + 'The value should be displayed properly.'); + + form.$buttons.find('.o_form_button_edit').click(); + assert.strictEqual(form.$('input').first().val(), '99.1234', + 'The input should be rendered without the currency symbol.'); + assert.strictEqual(form.$('input').parent().children().eq(1).text(), 'Bs.F', + 'The input should be followed by a span containing the currency symbol.'); + + form.$('input').first().val('99.111111111').trigger('input'); + assert.strictEqual(form.$('input').first().val(), '99.111111111', + 'The value should not be formated yet.'); + + form.$buttons.find('.o_form_button_save').click(); + // Non-breaking space between the currency and the amount + assert.strictEqual(form.$('.o_field_widget').first().text(), '99.1111\u00a0Bs.F', + 'The new value should be rounded properly.'); + + form.destroy(); + }); + QUnit.test('monetary field in editable list view', function (assert) { assert.expect(9);