From 316db4bfde884a49c4fb7a82ce1a1d68fdb6db84 Mon Sep 17 00:00:00 2001 From: Manuel Claeys Bouuaert Date: Mon, 4 May 2020 19:22:41 +0200 Subject: [PATCH 1/2] [FIX] pos_price_to_weight: use list_price instead of price --- pos_price_to_weight/static/src/js/models.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pos_price_to_weight/static/src/js/models.js b/pos_price_to_weight/static/src/js/models.js index 5c0777be..df883e9e 100644 --- a/pos_price_to_weight/static/src/js/models.js +++ b/pos_price_to_weight/static/src/js/models.js @@ -27,8 +27,8 @@ odoo.define('pos_price_to_weight.models', function (require) { } var quantity = 0; var price = parseFloat(parsed_code.value) || 0; - if (price !== 0 && product.price !== 0){ - quantity = price / product.price; + if (price !== 0 && product.list_price !== 0){ + quantity = price / product.list_price; } selectedOrder.add_product(product, {quantity: quantity, merge: false}); return true; From 58d9c29b56639e2551c35fc1e453d15318769eaf Mon Sep 17 00:00:00 2001 From: Manuel Claeys Bouuaert Date: Mon, 4 May 2020 19:24:05 +0200 Subject: [PATCH 2/2] [ADD] pos_price_to_weight: choose price field --- pos_price_to_weight/__manifest__.py | 1 + pos_price_to_weight/demo/product_product.xml | 2 ++ pos_price_to_weight/models/__init__.py | 1 + pos_price_to_weight/models/pos_config.py | 22 ++++++++++++++ pos_price_to_weight/readme/CONFIGURE.rst | 15 +++++++++- .../static/description/pos_config_form.png | Bin 0 -> 14941 bytes pos_price_to_weight/static/src/js/models.js | 7 +++-- pos_price_to_weight/views/view_pos_config.xml | 27 ++++++++++++++++++ 8 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 pos_price_to_weight/models/pos_config.py create mode 100644 pos_price_to_weight/static/description/pos_config_form.png create mode 100644 pos_price_to_weight/views/view_pos_config.xml diff --git a/pos_price_to_weight/__manifest__.py b/pos_price_to_weight/__manifest__.py index 869f9e82..d3a58bdd 100644 --- a/pos_price_to_weight/__manifest__.py +++ b/pos_price_to_weight/__manifest__.py @@ -17,6 +17,7 @@ 'data': [ 'data/barcode_rule.xml', 'views/assets.xml', + 'views/view_pos_config.xml', ], 'demo': [ 'demo/product_product.xml', diff --git a/pos_price_to_weight/demo/product_product.xml b/pos_price_to_weight/demo/product_product.xml index 14d56719..856bd676 100644 --- a/pos_price_to_weight/demo/product_product.xml +++ b/pos_price_to_weight/demo/product_product.xml @@ -11,6 +11,8 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). Apples (with Price To Weight Barcode) 0212345000007 1.50 + True + True diff --git a/pos_price_to_weight/models/__init__.py b/pos_price_to_weight/models/__init__.py index ba6651a1..d050eeca 100644 --- a/pos_price_to_weight/models/__init__.py +++ b/pos_price_to_weight/models/__init__.py @@ -1 +1,2 @@ from . import barcode_rule +from . import pos_config diff --git a/pos_price_to_weight/models/pos_config.py b/pos_price_to_weight/models/pos_config.py new file mode 100644 index 00000000..3c5fc938 --- /dev/null +++ b/pos_price_to_weight/models/pos_config.py @@ -0,0 +1,22 @@ +# Copyright 2020 Coop IT Easy - Manuel Claeys Bouuaert +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class PosConfig(models.Model): + _inherit = 'pos.config' + + pos_price_to_weight_price_field_id = fields.Many2one( + string="Price To Weight Field", + comodel_name="ir.model.fields", + domain=[("model", "=", "product.product"), ("ttype", "=", "float")], + required=True, + default=lambda x: x._default_pos_price_to_weight_price_field_id(), + ) + + pos_price_to_weight_price_field_name = fields.Char( + related="pos_price_to_weight_price_field_id.name") + + def _default_pos_price_to_weight_price_field_id(self): + return self.env.ref("product.field_product_product__list_price") diff --git a/pos_price_to_weight/readme/CONFIGURE.rst b/pos_price_to_weight/readme/CONFIGURE.rst index d1b66752..cfdb4b36 100644 --- a/pos_price_to_weight/readme/CONFIGURE.rst +++ b/pos_price_to_weight/readme/CONFIGURE.rst @@ -1,2 +1,15 @@ -* Go to 'Point of Sale' / 'Configuration' / 'Barcode Nomenclatures' +* Go to Point of Sale > Configuration > Barcode Nomenclatures * Edit your barcode rules, according to your barcodes settings + +* Go to Point of Sale > Configuration > Point of Sale +* Select the 'Unit Price' field that will be used to convert the price to weight. + +.. image:: ../static/description/pos_config_form.png + :width: 800 px + +**Note:** + +By default, this is the field ``list_price`` that will be used. +If you want to use a custom field, it should be loaded in the javascript file calling + +``models.load_fields("product.product", ['my_custom_field']);`` diff --git a/pos_price_to_weight/static/description/pos_config_form.png b/pos_price_to_weight/static/description/pos_config_form.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab0234a10ce4d50170cbda234559ff7b4fd9593 GIT binary patch literal 14941 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 + + + + + pos.config + + +
+
+
+
+
+
+
+
+ +