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/barcodes/static/src/js/barcode_field.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/barcodes/static/src/js/barcode_field.js')
| -rw-r--r-- | addons/barcodes/static/src/js/barcode_field.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/addons/barcodes/static/src/js/barcode_field.js b/addons/barcodes/static/src/js/barcode_field.js new file mode 100644 index 00000000..b5786f8a --- /dev/null +++ b/addons/barcodes/static/src/js/barcode_field.js @@ -0,0 +1,87 @@ +odoo.define('barcodes.field', function(require) { +"use strict"; + +var AbstractField = require('web.AbstractField'); +var basicFields = require('web.basic_fields'); +var fieldRegistry = require('web.field_registry'); +var BarcodeEvents = require('barcodes.BarcodeEvents').BarcodeEvents; + +// Field in which the user can both type normally and scan barcodes + +var FieldFloatScannable = basicFields.FieldFloat.extend({ + events: _.extend({}, basicFields.FieldFloat.prototype.events, { + // The barcode_events component intercepts keypresses and releases them when it + // appears they are not part of a barcode. But since released keypresses don't + // trigger native behaviour (like characters input), we must simulate it. + keypress: '_onKeypress', + }), + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + * @private + */ + _renderEdit: function () { + var self = this; + return Promise.resolve(this._super()).then(function () { + self.$input.data('enableBarcode', true); + }); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @private + * @param {KeyboardEvent} e + */ + _onKeypress: function (e) { + /* only simulate a keypress if it has been previously prevented */ + if (e.dispatched_by_barcode_reader !== true) { + if (!BarcodeEvents.is_special_key(e)) { + e.preventDefault(); + } + return; + } + var character = String.fromCharCode(e.which); + var current_str = e.target.value; + var str_before_carret = current_str.substring(0, e.target.selectionStart); + var str_after_carret = current_str.substring(e.target.selectionEnd); + e.target.value = str_before_carret + character + str_after_carret; + var new_carret_index = str_before_carret.length + character.length; + e.target.setSelectionRange(new_carret_index, new_carret_index); + // trigger an 'input' event to notify the widget that it's value changed + $(e.target).trigger('input'); + }, +}); + +// Field to use scan barcodes +var FormViewBarcodeHandler = AbstractField.extend({ + /** + * @override + */ + init: function() { + this._super.apply(this, arguments); + + this.trigger_up('activeBarcode', { + name: this.name, + commands: { + barcode: '_barcodeAddX2MQuantity', + } + }); + }, +}); + +fieldRegistry.add('field_float_scannable', FieldFloatScannable); +fieldRegistry.add('barcode_handler', FormViewBarcodeHandler); + +return { + FieldFloatScannable: FieldFloatScannable, + FormViewBarcodeHandler: FormViewBarcodeHandler, +}; + +}); |
