Browse Source

On single namespace.

pull/501/head
François Kawala 5 years ago
parent
commit
d561b36417
  1. 62
      pos_barcode_tare/static/src/js/pos_barcode_tare.js

62
pos_barcode_tare/static/src/js/pos_barcode_tare.js

@ -1,26 +1,34 @@
odoo.define('pos_barcode_tare.screens', function (require) { odoo.define('pos_barcode_tare.screens', function (require) {
"use strict"; "use strict";
var screens = require('point_of_sale.screens');
var gui = require('point_of_sale.gui');
var chrome = require('point_of_sale.chrome');
var core = require('web.core'); var core = require('web.core');
var _t = core._t;
var devices = require('point_of_sale.devices');
var gui = require('point_of_sale.gui');
var models = require('point_of_sale.models');
var screens = require('point_of_sale.screens');
var QWeb = core.qweb;
// This configures read action for tare barcode. A tare barcode contains a
// fake product ID and the weight to be subtracted from the product in the
// latest order line.
screens.ScreenWidget.include( screens.ScreenWidget.include(
{ {
barcode_weight_action: function (code) { barcode_weight_action: function (code) {
var self = this; var self = this;
var order = this.pos.get_order(); var order = this.pos.get_order();
// Computes the paid weight
var last_order_line = order.get_last_orderline(); var last_order_line = order.get_last_orderline();
var total_weight = last_order_line.get_quantity(); var total_weight = last_order_line.get_quantity();
var tare = code.value; var tare = code.value;
var paid_weight = total_weight - tare; var paid_weight = total_weight - tare;
// Throws a warning popup if the price is negative
if (paid_weight <= 0) { if (paid_weight <= 0) {
self.gui.show_popup('confirm', self.gui.show_popup('confirm',
{'title': _t('Negative weight'), {'title': _t('Negative weight'),
'body': _t('The calculated weight is negative. ' + 'body': _t('The calculated weight is negative. ' +
'Did you scan the correct tare label?'), 'Did you scan the correct tare label?'),
confirm: function () { confirm: function () {
// Operator can choose to ignore the warning.
last_order_line.set_quantity(paid_weight); last_order_line.set_quantity(paid_weight);
}}); }});
} else { } else {
@ -28,6 +36,7 @@ odoo.define('pos_barcode_tare.screens', function (require) {
} }
}, },
// Setup the callback action for the "weight" barcodes.
show: function () { show: function () {
var self = this; var self = this;
this._super(); this._super();
@ -36,14 +45,9 @@ odoo.define('pos_barcode_tare.screens', function (require) {
_.bind(self.barcode_weight_action, self)); _.bind(self.barcode_weight_action, self));
}, },
}); });
});
odoo.define('tare-screen-button.button', function (require) {
"use strict";
var core = require('web.core');
var screens = require('point_of_sale.screens');
var gui = require('point_of_sale.gui');
// This create a new button on top of action widget. This button links to
// the barcode label printing screen defined below.
var TareScreenButton = screens.ActionButtonWidget.extend({ var TareScreenButton = screens.ActionButtonWidget.extend({
template: 'TareScreenButton', template: 'TareScreenButton',
@ -57,18 +61,12 @@ odoo.define('tare-screen-button.button', function (require) {
'name': 'tareScreenButton', 'name': 'tareScreenButton',
'widget': TareScreenButton, 'widget': TareScreenButton,
}); });
});
odoo.define('tare-screen.screen', function (require) {
"use strict";
var chrome = require('point_of_sale.chrome');
var core = require('web.core');
var devices = require('point_of_sale.devices');
var gui = require('point_of_sale.gui');
var models = require('point_of_sale.models');
var screens = require('point_of_sale.screens');
var QWeb = core.qweb;
// This is a new screen that reads weight from the electronic scale and
// create a barcode label encoding the weight. The screen shows a preview
// of the label. The user is expected to check if the preview matches what's
// measured on the scale. The barcode image is generated by the report
// module.
var TareScreenWidget = screens.ScreenWidget.extend({ var TareScreenWidget = screens.ScreenWidget.extend({
template: 'TareScreenWidget', template: 'TareScreenWidget',
next_screen: 'products', next_screen: 'products',
@ -79,13 +77,14 @@ odoo.define('tare-screen.screen', function (require) {
this._super(); this._super();
var self = this; var self = this;
var queue = this.pos.proxy_queue; var queue = this.pos.proxy_queue;
// The pooling of the scale starts here.
queue.schedule(function () { queue.schedule(function () {
return self.pos.proxy.scale_read().then(function (weight) { return self.pos.proxy.scale_read().then(function (weight) {
self.set_weight(weight.weight); self.set_weight(weight.weight);
}); });
}, {duration:150, repeat: true}); }, {duration:150, repeat: true});
// Shows a barcode whose weight might be zero, but this is preferred
// for UI/UX reasons.
this.render_receipt(); this.render_receipt();
this.lock_screen(true); this.lock_screen(true);
}, },
@ -115,15 +114,26 @@ odoo.define('tare-screen.screen', function (require) {
return checksum % 10; return checksum % 10;
}, },
barcode_data: function (weight) { barcode_data: function (weight) {
// We use EAN13 barcode, it looks like 21 00000 12345 x. First there
// is the prefix, here 21, that is used to decide which type of
// barcode we're dealing with. A weight barcode has then two groups
// of five digits. The first group encodes the product id. Here the
// product id is 00000. The second group encodes the weight in
// grams. Here the weight is 12.345kg. The last digit of the barcode
// is a checksum, here symbolized by x.
var padding_size = 5; var padding_size = 5;
var default_weight_prefix_id = "21"; var default_weight_prefix_id = "21";
var void_product_id = '0'.repeat(padding_size); var void_product_id = '0'.repeat(padding_size);
var weight_in_gram = weight * 10e2; var weight_in_gram = weight * 10e2;
// Weight has to be padded with zeros.
var weight_with_padding = '0'.repeat(padding_size) + weight_in_gram; var weight_with_padding = '0'.repeat(padding_size) + weight_in_gram;
var padded_weight = weight_with_padding.substr( var padded_weight = weight_with_padding.substr(
weight_with_padding.length - padding_size); weight_with_padding.length - padding_size);
// Builds the barcode data (ie. all but the checksum).
var barcode_data = default_weight_prefix_id.concat(void_product_id, var barcode_data = default_weight_prefix_id.concat(void_product_id,
padded_weight); padded_weight);
// Compute checksum and concat with barcode data to get the actual
// barcode.
var checksum = this.ean13_checksum(barcode_data); var checksum = this.ean13_checksum(barcode_data);
var barcode = barcode_data.concat(checksum); var barcode = barcode_data.concat(checksum);
@ -153,10 +163,8 @@ odoo.define('tare-screen.screen', function (require) {
this.pos.get_order()._printed = true; this.pos.get_order()._printed = true;
}, },
print: function () { print: function () {
var self = this;
// See comment in print function of ReceiptScreenWidget // See comment in print function of ReceiptScreenWidget
var self = this;
this.lock_screen(true); this.lock_screen(true);
setTimeout(function () { setTimeout(function () {

Loading…
Cancel
Save