diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/base_iban/static/src/js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/base_iban/static/src/js')
| -rw-r--r-- | addons/base_iban/static/src/js/iban_widget.js | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/addons/base_iban/static/src/js/iban_widget.js b/addons/base_iban/static/src/js/iban_widget.js new file mode 100644 index 00000000..e56b78b1 --- /dev/null +++ b/addons/base_iban/static/src/js/iban_widget.js @@ -0,0 +1,129 @@ +odoo.define('base_iban.iban_widget', function (require) { +"use strict"; + +var basicFields = require('web.basic_fields'); +var core = require('web.core'); +var fieldRegistry = require('web.field_registry'); + +var FieldChar = basicFields.FieldChar; + +var _t = core._t; +/** + * IbanWidget is a widget to check if the iban number is valide. + * If the bank account is correct, it will show a green check pictogram + * next to number, if the number is not complient with IBAN format, a + * red cross will be show. This pictogram is computed every time the user + * changes the field (If user is typing, there is a debouce of 400ms). + */ +var IbanWidget = FieldChar.extend({ + /** + * @constructor + */ + init: function () { + this._super.apply(this, arguments); + this.ibanIsValid; + this._isValid = true; + this._compute_debounce = _.debounce(this._compute, 400); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Compute if iban is valid + * @private + */ + _compute: function () { + var self = this; + var content = this._getValue(); + + if (content.length === 0) { + this.ibanIsValid = true; + this.$el.last().filter('.o_iban').removeClass('fa-check text-success fa-times text-danger o_iban_fail'); + this.$el.last().filter('.o_iban').attr('title', ''); + } else if (content.length < 15) { + if (this.ibanIsValid !== false) { + this.ibanIsValid = false; + this._renderValid(); + } + } else { + this._rpc({ + model: 'res.partner.bank', + method: 'check_iban', + args: [[], content], + }) + .then(function (result) { + if (result !== self.ibanIsValid) { + self.ibanIsValid = result; + self._renderValid(); + } + }); + } + }, + /** + * @private + * @override + * @returns {Promise|undefined} + */ + _renderEdit: function () { + var res = this._super.apply(this, arguments); + this._compute(); + return res; + }, + /** + * Render the pictogram next to account number. + * @private + */ + _renderValid: function () { + var warningMessage = _t("Account isn't IBAN compliant."); + + if (this.$el.filter('.o_iban').length === 0) { + var $span; + if (!this.ibanIsValid) { + $span = $('<span class="fa fa-times o_iban text-danger o_iban_fail"/>'); + $span.attr('title', warningMessage); + } else { + $span = $('<span class="fa fa-check o_iban text-success"/>'); + } + this.$el.addClass('o_iban_input_with_validator'); + $span.insertAfter(this.$el); + this.$el = this.$el.add($span); + } + + if (!this.ibanIsValid) { + this.$el.last().filter('.o_iban').removeClass('fa-check text-success').addClass('fa-times text-danger o_iban_fail'); + this.$el.last().filter('.o_iban').attr('title', warningMessage); + } else { + this.$el.last().filter('.o_iban').removeClass('fa-times text-danger o_iban_fail').addClass('fa-check text-success'); + this.$el.last().filter('.o_iban').attr('title', ''); + + } + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @override + * @private + */ + _onChange: function () { + this._super.apply(this, arguments); + this._compute(); + }, + /** + * @override + * @private + */ + _onInput: function () { + this._super.apply(this, arguments); + this._compute_debounce(); + }, +}); + +fieldRegistry.add('iban', IbanWidget); + +return IbanWidget; +}); |
