diff --git a/pos_tare/static/src/css/pos_tare.css b/pos_tare/static/src/css/pos_tare.css index ff7af4bd..53e16c9f 100644 --- a/pos_tare/static/src/css/pos_tare.css +++ b/pos_tare/static/src/css/pos_tare.css @@ -47,3 +47,11 @@ outline: none; box-shadow: 0px 0px 0px 3px #6EC89B; } + +.pos .actionpad .button.pay { + height: 216px; +} + +.pos .numpad button.input-button.numpad-backspace { + width: 216px; +} diff --git a/pos_tare/static/src/js/models.js b/pos_tare/static/src/js/models.js index 1a839967..58e05234 100644 --- a/pos_tare/static/src/js/models.js +++ b/pos_tare/static/src/js/models.js @@ -7,6 +7,32 @@ odoo.define('pos_tare.models', function (require) { var _t = core._t; + class ValidationError extends Error { + constructor(message, gui) { + super(message); // (1) + this.name = "ValidationError"; // (2) + this.gui = gui; + } + } + + var _NumpadState_ = models.NumpadState.prototype; + var NumpadState = models.NumpadState.extend({ + appendNewChar: function(newChar) { + try { + _NumpadState_.appendNewChar.call(this, newChar); + } catch (error) { + + if (error instanceof ValidationError) { + + var title = _t("We can not apply this numpad action"); + var popup = {title: title, body: error.message}; + error.gui.show_popup('error', popup); + _NumpadState_.deleteLastChar.call(this); + } + } + }, + }); + var _super_ = models.Orderline.prototype; var OrderLineWithTare = models.Orderline.extend({ @@ -38,22 +64,23 @@ odoo.define('pos_tare.models', function (require) { export_for_printing: function () { var result = _super_.export_for_printing.call(this); result.tare_quantity = this.get_tare(); + result.gross_quantity = this.get_gross_weight(); return result; }, // ///////////////////////////// // Custom Section // ///////////////////////////// + set_tare: function (quantity, update_net_weight) { this.order.assert_editable(); // Prevent to apply multiple times a tare to the same product. + if (this.get_tare() > 0) { - throw new RangeError(_.str.sprintf( - _t("The tare (%s) is already set for the " + - "product \"%s\". We can not re-apply a tare to this " + - "product."), - this.get_tare_str_with_unit(), this.product.display_name)); + // This is valid because the tare is stored using product UOM. + this.set_quantity(this.get_quantity() + this.get_tare()); + this.reset_tare(); } // We convert the tare that is always measured in the same UoM into @@ -68,11 +95,11 @@ odoo.define('pos_tare.models', function (require) { var net_quantity = this.get_quantity() - tare_in_product_uom; // This method fails when the net weight is negative. if (net_quantity <= 0) { - throw new RangeError(_.str.sprintf( + throw new ValidationError(_.str.sprintf( _t("The tare weight is %s %s, it's greater or equal to " + "the product weight %s. We can not apply this tare."), tare_in_product_uom_string, line_unit.name, - this.get_quantity_str_with_unit())); + this.get_quantity_str_with_unit()), this.pos.gui); } // Update the quantity with the new weight net of tare quantity. this.set_quantity(net_quantity); @@ -83,10 +110,18 @@ odoo.define('pos_tare.models', function (require) { }, + reset_tare: function () { + this.tare = 0; + }, + get_tare: function () { return this.tare; }, + get_gross_weight: function () { + return this.get_tare() + this.get_quantity(); + }, + get_tare_str_with_unit: function () { var unit = this.get_unit(); var tare_str = pos_tare_tools.format_tare( @@ -101,7 +136,7 @@ odoo.define('pos_tare.models', function (require) { var unit = this.get_unit(); var gross_weight_str = pos_tare_tools.format_tare( this.pos, - this.get_tare() + this.get_quantity(), + this.get_gross_weight(), this.get_unit(), ); return gross_weight_str + ' ' + unit.name; @@ -109,6 +144,8 @@ odoo.define('pos_tare.models', function (require) { }); - models.Orderline = OrderLineWithTare; + + models.NumpadState = NumpadState + models.Orderline = OrderLineWithTare;; }); diff --git a/pos_tare/static/src/js/screens.js b/pos_tare/static/src/js/screens.js index e948c14b..64e59866 100644 --- a/pos_tare/static/src/js/screens.js +++ b/pos_tare/static/src/js/screens.js @@ -134,4 +134,35 @@ odoo.define('pos_tare.screens', function (require) { }); + screens.OrderWidget.include( + { + set_value: function(val) { + var order = this.pos.get_order(); + if (order.get_selected_orderline()) { + var mode = this.numpad_state.get('mode'); + if( mode === 'quantity'){ + order.get_selected_orderline().set_quantity(val); + }else if( mode === 'discount'){ + order.get_selected_orderline().set_discount(val); + }else if( mode === 'price'){ + var selected_orderline = order.get_selected_orderline(); + selected_orderline.price_manually_set = true; + selected_orderline.set_unit_price(val); + }else if( mode === 'tare'){ + if (this.pos.config.iface_tare_method !== 'barcode') { + order.get_selected_orderline().set_tare(val, true); + } else { + this.gui.show_popup('error', { + 'title': _t('Incorrect Tare Value'), + 'body': _t('You can not set the tare' + + ' manually. To be able to set the tare manually' + + ' you have to change the tare input method' + + ' in the POS configuration.'), + }); + } + } + } + },}); + + }); diff --git a/pos_tare/static/src/xml/pos_tare.xml b/pos_tare/static/src/xml/pos_tare.xml index 49436af9..be6f7834 100644 --- a/pos_tare/static/src/xml/pos_tare.xml +++ b/pos_tare/static/src/xml/pos_tare.xml @@ -1,7 +1,6 @@ - @@ -9,8 +8,7 @@ Gross Weight -
+
@@ -33,27 +31,98 @@
  • - - Tare : + + Tare : +
  • - - + +
    - Gross Weight :
    - Tare :
    + Gross Weight : +
    + Tare : +
    -
    +
    +
    +
    + + + + + + + + + + + + + + + + + Discount: % + + + + + + - + = + + + + + + + x + + + + + + + + + + - - + +
    + + + + +
    + + + + + +
    + + + + + +
    + + + + + + +
    +