From 2c90fe278b5cb3255aeb115deebed2362c1c55b7 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 8 Jan 2020 11:26:55 +0100 Subject: [PATCH 01/31] [ADD][8.0] pos_tare --- pos_tare/README.rst | 72 ++++++++++++ pos_tare/__init__.py | 1 + pos_tare/__openerp__.py | 27 +++++ pos_tare/demo/pos_config.xml | 13 +++ pos_tare/i18n/fr.po | 68 +++++++++++ pos_tare/readme/CONTRIBUTORS.rst | 1 + pos_tare/readme/DESCRIPTION.rst | 8 ++ pos_tare/readme/ROADMAP.rst | 1 + pos_tare/static/description/icon.png | Bin 0 -> 3421 bytes pos_tare/static/description/pos_tare.png | Bin 0 -> 37331 bytes pos_tare/static/src/css/pos_tare.css | 31 +++++ pos_tare/static/src/js/pos_tare.js | 140 +++++++++++++++++++++++ pos_tare/static/src/xml/pos_tare.xml | 45 ++++++++ pos_tare/views/templates.xml | 23 ++++ 14 files changed, 430 insertions(+) create mode 100644 pos_tare/README.rst create mode 100644 pos_tare/__init__.py create mode 100644 pos_tare/__openerp__.py create mode 100644 pos_tare/demo/pos_config.xml create mode 100644 pos_tare/i18n/fr.po create mode 100644 pos_tare/readme/CONTRIBUTORS.rst create mode 100644 pos_tare/readme/DESCRIPTION.rst create mode 100644 pos_tare/readme/ROADMAP.rst create mode 100644 pos_tare/static/description/icon.png create mode 100644 pos_tare/static/description/pos_tare.png create mode 100644 pos_tare/static/src/css/pos_tare.css create mode 100644 pos_tare/static/src/js/pos_tare.js create mode 100644 pos_tare/static/src/xml/pos_tare.xml create mode 100644 pos_tare/views/templates.xml diff --git a/pos_tare/README.rst b/pos_tare/README.rst new file mode 100644 index 0000000000..90d9fd006b --- /dev/null +++ b/pos_tare/README.rst @@ -0,0 +1,72 @@ +==================== +Point Of Sale - Tare +==================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-grap%2Fgrap--odoo--business-lightgray.png?logo=github + :target: https://github.com/grap/grap-odoo-business/tree/8.0/pos_tare + :alt: grap/grap-odoo-business + +|badge1| |badge2| |badge3| + +Give the possibility to the user to provide Gross weight and Tare weight. +This will compute automatically net weight and set it to the current +selected order + +.. figure:: https://raw.githubusercontent.com/grap/grap-odoo-business/8.0/pos_tare/static/description/pos_tare.png + +The screen will be displayed only for 'to_weight' products and if scale is +enabled in PoS Configuration. + +**Table of contents** + +.. contents:: + :local: + +Known issues / Roadmap +====================== + +For the time being, this module disable Scale functionnality. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) + +Maintainers +~~~~~~~~~~~ + + + +This module is part of the `grap/grap-odoo-business `_ project on GitHub. + + +You are welcome to contribute. diff --git a/pos_tare/__init__.py b/pos_tare/__init__.py new file mode 100644 index 0000000000..57d631c3f0 --- /dev/null +++ b/pos_tare/__init__.py @@ -0,0 +1 @@ +# coding: utf-8 diff --git a/pos_tare/__openerp__.py b/pos_tare/__openerp__.py new file mode 100644 index 0000000000..ed8502693f --- /dev/null +++ b/pos_tare/__openerp__.py @@ -0,0 +1,27 @@ +# coding: utf-8 +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Point Of Sale - Tare', + 'summary': 'Manage Tare in Point Of Sale module', + 'version': '8.0.1.0.0', + 'category': 'Point Of Sale', + 'author': 'GRAP', + 'website': 'http://www.grap.coop', + 'license': 'AGPL-3', + 'depends': [ + 'point_of_sale', + ], + 'data': [ + 'views/templates.xml', + ], + 'demo': [ + 'demo/pos_config.xml', + ], + 'qweb': [ + 'static/src/xml/pos_tare.xml', + ], + 'installable': False, +} diff --git a/pos_tare/demo/pos_config.xml b/pos_tare/demo/pos_config.xml new file mode 100644 index 0000000000..24f196eb01 --- /dev/null +++ b/pos_tare/demo/pos_config.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/pos_tare/i18n/fr.po b/pos_tare/i18n/fr.po new file mode 100644 index 0000000000..e349010c6f --- /dev/null +++ b/pos_tare/i18n/fr.po @@ -0,0 +1,68 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_tare +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-21 10:31+0000\n" +"PO-Revision-Date: 2016-06-21 10:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/pos_tare.js:65 +#, python-format +msgid "Back" +msgstr "Retour" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:17 +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:18 +#, python-format +msgid "Gross Weight" +msgstr "Poids Brut" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:31 +#, python-format +msgid "Net Weight" +msgstr "Poids Net" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/pos_tare.js:73 +#, python-format +msgid "Order" +msgstr "Commander" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:21 +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:22 +#, python-format +msgid "Tare" +msgstr "Tare" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:35 +#, python-format +msgid "Total Price" +msgstr "Prix Total" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:26 +#, python-format +msgid "Unit Price" +msgstr "Prix Unitaire" + diff --git a/pos_tare/readme/CONTRIBUTORS.rst b/pos_tare/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..e1525ce042 --- /dev/null +++ b/pos_tare/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/pos_tare/readme/DESCRIPTION.rst b/pos_tare/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..609880d243 --- /dev/null +++ b/pos_tare/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +Give the possibility to the user to provide Gross weight and Tare weight. +This will compute automatically net weight and set it to the current +selected order + +.. figure:: ../static/description/pos_tare.png + +The screen will be displayed only for 'to_weight' products and if scale is +enabled in PoS Configuration. diff --git a/pos_tare/readme/ROADMAP.rst b/pos_tare/readme/ROADMAP.rst new file mode 100644 index 0000000000..f8cb11be29 --- /dev/null +++ b/pos_tare/readme/ROADMAP.rst @@ -0,0 +1 @@ +For the time being, this module disable Scale functionnality. diff --git a/pos_tare/static/description/icon.png b/pos_tare/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..821c4b3bab48f13906ab707db7f8dfd770110b7b GIT binary patch literal 3421 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 literal 0 HcmV?d00001 diff --git a/pos_tare/static/description/pos_tare.png b/pos_tare/static/description/pos_tare.png new file mode 100644 index 0000000000000000000000000000000000000000..c016216d2e37cc372be8e85c2c8738e74efacddf GIT binary patch literal 37331 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�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 + + + + +
+
+
+

+

+
+
+ Unit Price + +
+
+ Gross Weight + +
+
+ Tare + +
+
+
+
+ Net Weight + +
+
+
+ Total Price + +
+ +
+
+
+
+ +
diff --git a/pos_tare/views/templates.xml b/pos_tare/views/templates.xml new file mode 100644 index 0000000000..3cb9b166b9 --- /dev/null +++ b/pos_tare/views/templates.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + From af7360c0737ad0aa10435f724e30567d7c2bc2f7 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 8 Jan 2020 11:27:12 +0100 Subject: [PATCH 02/31] [REF] pos_tare: Black python code --- pos_tare/__openerp__.py | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/pos_tare/__openerp__.py b/pos_tare/__openerp__.py index ed8502693f..851ae5df20 100644 --- a/pos_tare/__openerp__.py +++ b/pos_tare/__openerp__.py @@ -4,24 +4,16 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Point Of Sale - Tare', - 'summary': 'Manage Tare in Point Of Sale module', - 'version': '8.0.1.0.0', - 'category': 'Point Of Sale', - 'author': 'GRAP', - 'website': 'http://www.grap.coop', - 'license': 'AGPL-3', - 'depends': [ - 'point_of_sale', - ], - 'data': [ - 'views/templates.xml', - ], - 'demo': [ - 'demo/pos_config.xml', - ], - 'qweb': [ - 'static/src/xml/pos_tare.xml', - ], - 'installable': False, + "name": "Point Of Sale - Tare", + "summary": "Manage Tare in Point Of Sale module", + "version": "8.0.1.0.0", + "category": "Point Of Sale", + "author": "GRAP", + "website": "http://www.grap.coop", + "license": "AGPL-3", + "depends": ["point_of_sale",], + "data": ["views/templates.xml",], + "demo": ["demo/pos_config.xml",], + "qweb": ["static/src/xml/pos_tare.xml",], + "installable": False, } From 87f83ee56035188d934b2b17a5824e9082389301 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 8 Jan 2020 11:27:12 +0100 Subject: [PATCH 03/31] [MIG] pos_tare: Migration to 12.0 [ADD] barcode nomenclature for tare [ADD] tare field on pos.order.line model [ADD] Tare button in PoS numpad [IMP] handle correctly different UoM [IMP] add warning at checkout if qty <=0 [IMP] display gross and tare weight for each line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: François Kawala Co-authored-by: Sylvain LE GAL --- pos_tare/README.rst | 69 +++- pos_tare/__init__.py | 2 +- pos_tare/__manifest__.py | 25 ++ pos_tare/__openerp__.py | 19 - pos_tare/data/barcode_rule.xml | 12 + pos_tare/demo/pos_config.xml | 13 - pos_tare/i18n/fr.po | 68 ---- pos_tare/models/__init__.py | 3 + pos_tare/models/barcode_rule.py | 9 + pos_tare/models/pos_config.py | 41 ++ pos_tare/models/pos_order_line.py | 15 + pos_tare/readme/CONTRIBUTORS.rst | 4 +- pos_tare/readme/DESCRIPTION.rst | 8 +- pos_tare/readme/ROADMAP.rst | 1 - pos_tare/readme/USAGE.rst | 6 + pos_tare/static/description/icon.png | Bin 3421 -> 9455 bytes pos_tare/static/description/index.html | 450 +++++++++++++++++++++ pos_tare/static/description/order.png | Bin 0 -> 23717 bytes pos_tare/static/description/pos_tare.png | Bin 37331 -> 30825 bytes pos_tare/static/description/pos_ticket.png | Bin 0 -> 24470 bytes pos_tare/static/src/css/pos_tare.css | 86 ++-- pos_tare/static/src/js/models.js | 116 ++++++ pos_tare/static/src/js/pos_tare.js | 140 ------- pos_tare/static/src/js/screens.js | 201 +++++++++ pos_tare/static/src/js/tools.js | 62 +++ pos_tare/static/src/xml/pos_tare.xml | 132 ++++-- pos_tare/views/templates.xml | 27 +- pos_tare/views/view_pos_config.xml | 54 +++ pos_tare/views/view_pos_order.xml | 16 + 29 files changed, 1239 insertions(+), 340 deletions(-) create mode 100644 pos_tare/__manifest__.py delete mode 100644 pos_tare/__openerp__.py create mode 100644 pos_tare/data/barcode_rule.xml delete mode 100644 pos_tare/demo/pos_config.xml delete mode 100644 pos_tare/i18n/fr.po create mode 100644 pos_tare/models/__init__.py create mode 100644 pos_tare/models/barcode_rule.py create mode 100644 pos_tare/models/pos_config.py create mode 100644 pos_tare/models/pos_order_line.py delete mode 100644 pos_tare/readme/ROADMAP.rst create mode 100644 pos_tare/readme/USAGE.rst create mode 100644 pos_tare/static/description/index.html create mode 100644 pos_tare/static/description/order.png create mode 100644 pos_tare/static/description/pos_ticket.png create mode 100644 pos_tare/static/src/js/models.js delete mode 100644 pos_tare/static/src/js/pos_tare.js create mode 100644 pos_tare/static/src/js/screens.js create mode 100644 pos_tare/static/src/js/tools.js create mode 100644 pos_tare/views/view_pos_config.xml create mode 100644 pos_tare/views/view_pos_order.xml diff --git a/pos_tare/README.rst b/pos_tare/README.rst index 90d9fd006b..a2abecdf46 100644 --- a/pos_tare/README.rst +++ b/pos_tare/README.rst @@ -13,38 +13,56 @@ Point Of Sale - Tare .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-grap%2Fgrap--odoo--business-lightgray.png?logo=github - :target: https://github.com/grap/grap-odoo-business/tree/8.0/pos_tare - :alt: grap/grap-odoo-business - -|badge1| |badge2| |badge3| - -Give the possibility to the user to provide Gross weight and Tare weight. +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github + :target: https://github.com/OCA/pos/tree/12.0/pos_tare + :alt: OCA/pos +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_tare + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/184/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Give the possibility to the user to enter a Tare weight, when weighting +products in the Point of Sale. This will compute automatically net weight and set it to the current selected order -.. figure:: https://raw.githubusercontent.com/grap/grap-odoo-business/8.0/pos_tare/static/description/pos_tare.png +.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/pos_tare.png + +The net weight is displayed in the order with the tare value below. -The screen will be displayed only for 'to_weight' products and if scale is -enabled in PoS Configuration. +.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/order.png **Table of contents** .. contents:: :local: +Usage +===== + +Install this add-on and configure your point of sale. To enable this addon, go to your point of sale configuration page. There, enable the electronic scale and barcode reader in the "IoT Box" section. In the same page, look up for the "Tare input method" field, and choose a tare method. There are three tare methods: +- "manual", you'll set the tare value when you weight the product; +- "barcode", you'll scan the tare value from a barcode; +- "both", you can both of the above. + +To generate a tare barcode you need to use the default barcode nomenclature. The default barcode pattern is `0700000{NNDDD}`. Using that pattern, the barcode for a tare of 0.1kg is `0700000001006`. The `pos_tare_barcode_generator` allows you to create tare labels right from the POS. + Known issues / Roadmap ====================== -For the time being, this module disable Scale functionnality. +- Print tare value on customer receipt. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -55,18 +73,37 @@ Authors ~~~~~~~ * GRAP +* Le Nid Contributors ~~~~~~~~~~~~ -* Sylvain LE GAL (https://www.twitter.com/legalsylvain) +- Sylvain LE GAL (https://www.twitter.com/legalsylvain) +- Le Nid +- CoopITEasy + Maintainers ~~~~~~~~~~~ +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-fkawala| image:: https://github.com/fkawala.png?size=40px + :target: https://github.com/fkawala + :alt: fkawala +Current `maintainer `__: -This module is part of the `grap/grap-odoo-business `_ project on GitHub. +|maintainer-fkawala| +This module is part of the `OCA/pos `_ project on GitHub. -You are welcome to contribute. +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_tare/__init__.py b/pos_tare/__init__.py index 57d631c3f0..0650744f6b 100644 --- a/pos_tare/__init__.py +++ b/pos_tare/__init__.py @@ -1 +1 @@ -# coding: utf-8 +from . import models diff --git a/pos_tare/__manifest__.py b/pos_tare/__manifest__.py new file mode 100644 index 0000000000..e5dffebb53 --- /dev/null +++ b/pos_tare/__manifest__.py @@ -0,0 +1,25 @@ +# @author: François Kawala +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Point Of Sale - Tare", + "summary": "Manage Tare in Point Of Sale module", + "version": "12.0.1.0.0", + "category": "Point of Sale", + "author": "GRAP, Le Nid, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/pos", + "license": "AGPL-3", + "maintainers": ["fkawala", "legalsylvain"], + "depends": [ + "point_of_sale", + ], + "data": [ + "views/templates.xml", + "views/view_pos_config.xml", + "views/view_pos_order.xml", + "data/barcode_rule.xml", + ], + "qweb": [ + "static/src/xml/pos_tare.xml", + ], + "installable": True, +} diff --git a/pos_tare/__openerp__.py b/pos_tare/__openerp__.py deleted file mode 100644 index 851ae5df20..0000000000 --- a/pos_tare/__openerp__.py +++ /dev/null @@ -1,19 +0,0 @@ -# coding: utf-8 -# Copyright (C) 2015-Today GRAP (http://www.grap.coop) -# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -{ - "name": "Point Of Sale - Tare", - "summary": "Manage Tare in Point Of Sale module", - "version": "8.0.1.0.0", - "category": "Point Of Sale", - "author": "GRAP", - "website": "http://www.grap.coop", - "license": "AGPL-3", - "depends": ["point_of_sale",], - "data": ["views/templates.xml",], - "demo": ["demo/pos_config.xml",], - "qweb": ["static/src/xml/pos_tare.xml",], - "installable": False, -} diff --git a/pos_tare/data/barcode_rule.xml b/pos_tare/data/barcode_rule.xml new file mode 100644 index 0000000000..a8ecb86173 --- /dev/null +++ b/pos_tare/data/barcode_rule.xml @@ -0,0 +1,12 @@ + + + + + Tare + + 81 + tare + ean13 + 0700000{NNDDD} + + diff --git a/pos_tare/demo/pos_config.xml b/pos_tare/demo/pos_config.xml deleted file mode 100644 index 24f196eb01..0000000000 --- a/pos_tare/demo/pos_config.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/pos_tare/i18n/fr.po b/pos_tare/i18n/fr.po deleted file mode 100644 index e349010c6f..0000000000 --- a/pos_tare/i18n/fr.po +++ /dev/null @@ -1,68 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * pos_tare -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-06-21 10:31+0000\n" -"PO-Revision-Date: 2016-06-21 10:31+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/js/pos_tare.js:65 -#, python-format -msgid "Back" -msgstr "Retour" - -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:17 -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:18 -#, python-format -msgid "Gross Weight" -msgstr "Poids Brut" - -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:31 -#, python-format -msgid "Net Weight" -msgstr "Poids Net" - -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/js/pos_tare.js:73 -#, python-format -msgid "Order" -msgstr "Commander" - -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:21 -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:22 -#, python-format -msgid "Tare" -msgstr "Tare" - -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:35 -#, python-format -msgid "Total Price" -msgstr "Prix Total" - -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:26 -#, python-format -msgid "Unit Price" -msgstr "Prix Unitaire" - diff --git a/pos_tare/models/__init__.py b/pos_tare/models/__init__.py new file mode 100644 index 0000000000..c6acc8970f --- /dev/null +++ b/pos_tare/models/__init__.py @@ -0,0 +1,3 @@ +from . import pos_config +from . import pos_order_line +from . import barcode_rule diff --git a/pos_tare/models/barcode_rule.py b/pos_tare/models/barcode_rule.py new file mode 100644 index 0000000000..f48c114737 --- /dev/null +++ b/pos_tare/models/barcode_rule.py @@ -0,0 +1,9 @@ +from odoo import models, fields + + +class BarcodeRule(models.Model): + _inherit = 'barcode.rule' + + type = fields.Selection(selection_add=[ + ('tare', 'Tare') + ]) diff --git a/pos_tare/models/pos_config.py b/pos_tare/models/pos_config.py new file mode 100644 index 0000000000..8a53ef75b7 --- /dev/null +++ b/pos_tare/models/pos_config.py @@ -0,0 +1,41 @@ +from odoo import api, models, fields + + +class PosConfig(models.Model): + _inherit = "pos.config" + + iface_tare_method = fields.Selection( + [ + ("manual", "Input the tare manually"), + ("barcode", "Scan a barcode to set the tare"), + ("both", "Manual input and barcode"), + ], + string="Tare Input Method", + default="both", + required=True, + help="Select tare method:\n" + "* 'manual' : the scale screen has an extra tare input field;\n" + "* 'barecode' : (scan a barcode to tare the selected order line;\n" + "* 'both' : manual input and barcode methods are enabled;", + ) + + iface_gross_weight_method = fields.Selection( + [ + ("manual", "Input the Gross Weight manually"), + ("scale", "Input Gross Weight via Scale") + ], + string="Gross Weight Input Method", + default="scale", + required=True, + ) + + iface_tare_uom_id = fields.Many2one( + string="Unit of Measure of the tare", + comodel_name="uom.uom", + default=lambda s: s._default_iface_tare_uom_id(), + required=True, + ) + + @api.model + def _default_iface_tare_uom_id(self): + return self.env.ref("uom.product_uom_kgm") diff --git a/pos_tare/models/pos_order_line.py b/pos_tare/models/pos_order_line.py new file mode 100644 index 0000000000..c86e62604e --- /dev/null +++ b/pos_tare/models/pos_order_line.py @@ -0,0 +1,15 @@ +# Copyright (C) 2020-Today: GRAP () +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields +from odoo.addons import decimal_precision as dp + + +class PosOrderLine(models.Model): + _inherit = "pos.order.line" + + tare = fields.Float( + string="Tare", + digits=dp.get_precision("Product Unit of Measure") + ) diff --git a/pos_tare/readme/CONTRIBUTORS.rst b/pos_tare/readme/CONTRIBUTORS.rst index e1525ce042..1434c95df9 100644 --- a/pos_tare/readme/CONTRIBUTORS.rst +++ b/pos_tare/readme/CONTRIBUTORS.rst @@ -1 +1,3 @@ -* Sylvain LE GAL (https://www.twitter.com/legalsylvain) +- Sylvain LE GAL (https://www.twitter.com/legalsylvain) +- Le Nid +- CoopITEasy diff --git a/pos_tare/readme/DESCRIPTION.rst b/pos_tare/readme/DESCRIPTION.rst index 609880d243..a21b3b7a74 100644 --- a/pos_tare/readme/DESCRIPTION.rst +++ b/pos_tare/readme/DESCRIPTION.rst @@ -1,8 +1,10 @@ -Give the possibility to the user to provide Gross weight and Tare weight. +Give the possibility to the user to enter a Tare weight, when weighting +products in the Point of Sale. This will compute automatically net weight and set it to the current selected order .. figure:: ../static/description/pos_tare.png -The screen will be displayed only for 'to_weight' products and if scale is -enabled in PoS Configuration. +The net weight is displayed in the order with the tare value below. + +.. figure:: ../static/description/order.png diff --git a/pos_tare/readme/ROADMAP.rst b/pos_tare/readme/ROADMAP.rst deleted file mode 100644 index f8cb11be29..0000000000 --- a/pos_tare/readme/ROADMAP.rst +++ /dev/null @@ -1 +0,0 @@ -For the time being, this module disable Scale functionnality. diff --git a/pos_tare/readme/USAGE.rst b/pos_tare/readme/USAGE.rst new file mode 100644 index 0000000000..b4393402d2 --- /dev/null +++ b/pos_tare/readme/USAGE.rst @@ -0,0 +1,6 @@ +Install this add-on and configure your point of sale. To enable this addon, go to your point of sale configuration page. There, enable the electronic scale and barcode reader in the "IoT Box" section. In the same page, look up for the "Tare input method" field, and choose a tare method. There are three tare methods: +- "manual", you'll set the tare value when you weight the product; +- "barcode", you'll scan the tare value from a barcode; +- "both", you can both of the above. + +To generate a tare barcode you need to use the default barcode nomenclature. The default barcode pattern is `0700000{NNDDD}`. Using that pattern, the barcode for a tare of 0.1kg is `0700000001006`. The `pos_tare_barcode_generator` allows you to create tare labels right from the POS. diff --git a/pos_tare/static/description/icon.png b/pos_tare/static/description/icon.png index 821c4b3bab48f13906ab707db7f8dfd770110b7b..3a0328b516c4980e8e44cdb63fd945757ddd132d 100644 GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 3421 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 diff --git a/pos_tare/static/description/index.html b/pos_tare/static/description/index.html new file mode 100644 index 0000000000..8e61f33abc --- /dev/null +++ b/pos_tare/static/description/index.html @@ -0,0 +1,450 @@ + + + + + + +Point Of Sale - Tare + + + +
+ + diff --git a/pos_tare/static/description/order.png b/pos_tare/static/description/order.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7c035ea86420eb42ce4ef6d1306c17b6885f6d GIT binary patch literal 23717 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 literal 0 HcmV?d00001 diff --git a/pos_tare/static/description/pos_tare.png b/pos_tare/static/description/pos_tare.png index c016216d2e37cc372be8e85c2c8738e74efacddf..2738e6f0b2c58ef344a732e3b2531389ee453457 100644 GIT binary patch literal 30825 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 Ub?ObiCKy3hQce0bpWsQUCw| literal 37331 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�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

vv5bSc*)%5r^BUH4vLVajW?r3%h9H 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 literal 0 HcmV?d00001 diff --git a/pos_tare/static/src/css/pos_tare.css b/pos_tare/static/src/css/pos_tare.css index 7837203dec..6d746d98a2 100644 --- a/pos_tare/static/src/css/pos_tare.css +++ b/pos_tare/static/src/css/pos_tare.css @@ -1,31 +1,71 @@ -.pos .pos-tare-container .left-block{ +/*************************************************************** +Overloading existing PoS objects +****************************************************************/ + +/*Change the design of the numpad in the product-screen*/ +.pos .product-screen .actionpad .button.pay { + height: 216px; +} + +.pos .product-screen .numpad button.input-button.numpad-backspace { + width: 216px; +} + +/*Fix the receipt in the non proxy mode as the order lines can now +content multiple lines*/ +.pos .pos-right-align{ + vertical-align: top; +} + +/*************************************************************** +New style for new scale objects +****************************************************************/ + +.pos .scale-screen .weight-label { + font-size: 25px; + margin: 16px; + text-align: center; display: inline-block; - width:45%; - margin:0; - padding:0; - text-align:left; - font-size: 16px; - color: #555; - font-weight: bold; + width: 40%; + margin-bottom: 0px; } -.pos .pos-tare-container .right-block, .pos .pos-tare-container .right-block-readonly{ +.pos .scale-screen .weight-value { + font-size: 25px; display: inline-block; - width:45%; - text-align:right; - height: 40px; - font-size: 20px; - font-family: Lato; - -moz-box-sizing: border-box; - outline: none; - border: none; - padding: 6px 8px; - color: #484848; - border-radius: 3px; - margin-top: 5px; + margin: 16px; + margin-top: 0px; + padding: 16px; + width: 40%; + font-family: Inconsolata; + font-weight: bold; + text-shadow: 0px 2px 0px rgb(210,210,210); + margin-bottom: 0px; } -.pos .pos-tare-container .right-block{ +.pos .scale-screen .weight-value-fixed { + border-radius: 3px; + box-shadow: 0px 2px 0px rgb(225,225,225) inset; + text-align: right; background: white; - box-shadow: 0px 2px rgba(143, 143, 143, 0.3) inset; +} + +.pos .scale-screen .weight-value-alterable { + text-align: left; + padding-bottom: 0px; + padding-left: 0px; +} +.pos .scale-screen .input-weight { + border: 1px solid #cecbcb; + border-radius: 20px; + padding: 15px 20px; + width: 50%; + font-family: Inconsolata; + font-weight: bold; + font-size: 25px; +} + +.pos .scale-screen .input-weight:focus { + outline: none; + box-shadow: 0px 0px 0px 3px #6EC89B; } diff --git a/pos_tare/static/src/js/models.js b/pos_tare/static/src/js/models.js new file mode 100644 index 0000000000..923ec87889 --- /dev/null +++ b/pos_tare/static/src/js/models.js @@ -0,0 +1,116 @@ +odoo.define('pos_tare.models', function (require) { + + "use strict"; + var core = require('web.core'); + var models = require('point_of_sale.models'); + var pos_tare_tools = require('pos_tare.tools'); + var _t = core._t; + + var _super_ = models.Orderline.prototype; + var OrderLineWithTare = models.Orderline.extend({ + + // ///////////////////////////// + // Overload Section + // ///////////////////////////// + initialize: function (session, attributes) { + this.tare = 0; + return _super_.initialize.call(this, session, attributes); + }, + + init_from_JSON: function (json) { + _super_.init_from_JSON.call(this, json); + this.tare = json.tare ||0; + }, + + clone: function () { + var orderline = _super_.clone.call(this); + orderline.tare = this.tare; + return orderline; + }, + + export_as_JSON: function () { + var json = _super_.export_as_JSON.call(this); + json.tare = this.get_tare(); + return json; + }, + + 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) { + // 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 + // the unit of measure for this order line. + var tare_uom = this.pos.config.iface_tare_uom_id[0]; + var tare_unit = this.pos.units_by_id[tare_uom]; + var tare = parseFloat(quantity) || 0; + var line_unit = this.get_unit(); + var tare_in_product_uom = pos_tare_tools.convert_mass( + tare, tare_unit, line_unit); + var tare_in_product_uom_string = pos_tare_tools.format_tare( + this.pos, tare_in_product_uom, line_unit); + if (update_net_weight) { + var net_quantity = this.get_quantity() - tare_in_product_uom; + // Update the quantity with the new weight net of tare quantity. + this.set_quantity(net_quantity); + } + // Update tare value. + this.tare = tare_in_product_uom; + this.trigger('change', this); + + }, + + 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( + this.pos, + this.tare, + this.get_unit() + ); + return tare_str + ' ' + unit.name; + }, + + get_gross_weight_str_with_unit: function () { + var unit = this.get_unit(); + var gross_weight_str = pos_tare_tools.format_tare( + this.pos, + this.get_gross_weight(), + this.get_unit() + ); + return gross_weight_str + ' ' + unit.name; + }, + + }); + + models.Orderline = OrderLineWithTare; + +}); diff --git a/pos_tare/static/src/js/pos_tare.js b/pos_tare/static/src/js/pos_tare.js deleted file mode 100644 index 2f512f8dbd..0000000000 --- a/pos_tare/static/src/js/pos_tare.js +++ /dev/null @@ -1,140 +0,0 @@ -/* -Copyright (C) 2015-Today GRAP (http://www.grap.coop) -@author: Sylvain LE GAL (https://twitter.com/legalsylvain) - License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -*/ - -"use strict"; - -openerp.pos_tare = function(instance){ - var module = instance.point_of_sale; - var _t = instance.web._t; - - /************************************************************************* - Extend : Widget 'PosWidget' - */ - module.PosWidget = module.PosWidget.extend({ - build_widgets: function(){ - this._super(); - - // Add a new screen 'TareScreenWidget' - this.tare_screen = new module.TareScreenWidget(this,{}); - this.tare_screen.appendTo(this.$('.screens')); - this.screen_selector.add_screen('tare', this.tare_screen); - }, - }); - - /************************************************************************* - Extend : Widget 'ScaleScreenWidget' - */ - module.ScaleScreenWidget = module.ScaleScreenWidget.extend({ - next_screen: 'tare', - - // Overwrite 'show' function to display TareScreenWidget - show: function(){ - this.pos_widget.screen_selector.set_current_screen(this.next_screen,{product: this.get_product()}); - }, - }); - - /************************************************************************* - Define : New Widget 'TareScreenWidget' - */ - module.TareScreenWidget = module.ScreenWidget.extend({ - template:'TareScreenWidget', - next_screen: 'products', - previous_screen: 'products', - show_leftpane: false, - - show: function(){ - this._super(); - this.renderElement(); - var self = this; - - // Initialize values - this.net_weight = 0; - this.current_product = this.get_product(); - this.$('#product-name').html(this.get_product().display_name); - this.$('#unit-price').html(this.format_currency(this.get_product().price)); - - // Add a 'next' Button - this.add_action_button({ - label: _t('Back'), - icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png', - click: function(){ - self.pos_widget.screen_selector.set_current_screen(self.previous_screen); - }, - }); - this.order_button = this.add_action_button({ - label: _t('Order'), - icon: '/point_of_sale/static/src/img/icons/png48/go-next.png', - click: function() { self.order_product_click(); }, - }); - - // Initialize Display - this.onChangeGrossWeightTareWeight(); - - this.$('#gross-weight').keyup(function(event){ - self.onChangeGrossWeightTareWeight(event); - }); - this.$('#tare-weight').keyup(function(event){ - self.onChangeGrossWeightTareWeight(event); - }); - - // Focus on Gross Weight - this.$('#gross-weight').focus(); - - }, - - sanitize_value: function (input_name){ - var res = this.$(input_name)[0].value.replace(',', '.').trim(); - if (isNaN(res)){ - this.$(input_name).css("background-color", "#F66"); - } - else{ - this.$(input_name).css("background-color", "#FFF"); - } - return res; - }, - - onChangeGrossWeightTareWeight: function(event){ - var gross_weight = this.sanitize_value('#gross-weight'); - var tare_weight = this.sanitize_value('#tare-weight'); - var ok = false; - - if (!isNaN(gross_weight) && (gross_weight !== '') && (parseFloat(gross_weight) !== 0) && !isNaN(tare_weight)){ - this.net_weight = gross_weight - tare_weight; - var price = this.get_product().price * this.net_weight; - this.current_net_weight_text = this.net_weight.toFixed(3); - this.current_total_price_text = this.format_currency(price); - ok = true; - } - else{ - this.current_net_weight_text = '/'; - this.current_total_price_text = '/'; - } - this.$('#net-weight').html(this.current_net_weight_text); - this.$('#total-price').html(this.current_total_price_text); - this.order_button.set_disabled(!ok); - }, - - get_product: function(){ - var ss = this.pos_widget.screen_selector; - if(ss){ - return ss.get_current_screen_param('product'); - }else{ - return undefined; - } - }, - - order_product_click: function(){ - this.pos.get('selectedOrder').addProduct(this.current_product,{ quantity:this.net_weight }); - this.pos_widget.screen_selector.set_current_screen(this.next_screen); - }, - - }); -}; - - - - - diff --git a/pos_tare/static/src/js/screens.js b/pos_tare/static/src/js/screens.js new file mode 100644 index 0000000000..ff7a4ed64b --- /dev/null +++ b/pos_tare/static/src/js/screens.js @@ -0,0 +1,201 @@ +odoo.define('pos_tare.screens', function (require) { + + "use strict"; + var core = require('web.core'); + var screens = require('point_of_sale.screens'); + var utils = require('web.utils'); + + var _t = core._t; + var round_pr = utils.round_precision; + var leq_zero_qty = (ol) => ol.get_quantity() <= 0; + + // 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({ + barcode_tare_action: function (code) { + try { + var order = this.pos.get_order(); + var selected_order_line = order.get_selected_orderline(); + var tare_weight = code.value; + selected_order_line.set_tare(tare_weight, true); + } catch (error) { + var title = _t("We can not apply this tare barcode."); + var popup = {title: title, body: error.message}; + this.gui.show_popup('error', popup); + } + }, + // Setup the callback action for the "weight" barcodes. + show: function () { + this._super(); + if (this.pos.config.iface_tare_method !== 'manual') { + this.pos.barcode_reader.set_action_callback( + 'tare', + _.bind(this.barcode_tare_action, this)); + } + }, + }); + + screens.ScaleScreenWidget.include({ + + // ///////////////////////////// + // Overload Section + // ///////////////////////////// + + show: function () { + this.tare = 0.0; + this.gross_weight = 0.0; + this._super(); + var self = this; + this.$('#input_weight_tare').keyup(function (event) { + self.onchange_tare(event); + }); + this.$('#input_gross_weight').keyup(function (event) { + self.onchange_gross_weight(event); + }); + if (this.pos.config.iface_gross_weight_method === 'scale') { + this.$('#input_weight_tare').focus(); + } else { + this.pos.proxy_queue.clear(); + this.$('#input_gross_weight').focus(); + } + }, + + // Overload set_weight function + // We assume that the argument is now the gross weight + // we compute the net weight, depending on the tare and the gross weight + // then we call super, with the net weight + set_weight: function (gross_weight) { + this.gross_weight = gross_weight; + var net_weight = gross_weight - (this.tare || 0); + this.$('#container_weight_gross').text( + this.get_product_gross_weight_string()); + this._super(net_weight); + }, + + order_product: function () { + if (this.tare === undefined) { + this.gui.show_popup('error', { + 'title': _t('Incorrect Tare Value'), + 'body': _t('Please set a numeric value' + + ' in the tare field, or let empty.'), + }); + } else { + this._super(); + if (this.tare > 0.0) { + var order = this.pos.get_order(); + var orderline = order.get_last_orderline(); + orderline.set_tare(this.tare, false); + } + } + }, + + // ///////////////////////////// + // Custom Section + // ///////////////////////////// + get_product_gross_weight_string: function () { + var product = this.get_product(); + var defaultstr = (this.gross_weight || 0).toFixed(3) + ' Kg'; + if (!product || !this.pos) { + return defaultstr; + } + var unit_id = product.uom_id; + if (!unit_id) { + return defaultstr; + } + var unit = this.pos.units_by_id[unit_id[0]]; + var weight = round_pr(this.gross_weight || 0, unit.rounding); + var weightstr = weight.toFixed( + Math.ceil(Math.log(1.0/unit.rounding) / Math.log(10) )); + weightstr += ' ' + unit.name; + return weightstr; + }, + + onchange_tare: function () { + this.tare = this.check_sanitize_value('#input_weight_tare'); + this.set_weight(this.gross_weight); + }, + + onchange_gross_weight: function () { + var gross_weight = this.check_sanitize_value('#input_gross_weight'); + this.set_weight(gross_weight); + }, + + check_sanitize_value: function (input_name) { + var res = this.$(input_name)[0].value.replace(',', '.').trim(); + if (isNaN(res)) { + this.$(input_name).css("background-color", "#F66"); + return undefined; + } + this.$(input_name).css("background-color", "#FFF"); + return parseFloat(res, 10); + }, + + }); + + screens.PaymentScreenWidget.include({ + validate_order: function(options) { + var order = this.pos.get_order(); + var orderlines = Array.from(order.get_orderlines()); + + if (orderlines.some(leq_zero_qty)) { + var _super_validate_order = this._super.bind(this); + var wrong_orderline = orderlines.find(leq_zero_qty); + var wrong_product = wrong_orderline.get_product().display_name; + this.gui.show_popup('confirm', { + title: _t('Quantity lower or equal to zero'), + body: _.str.sprintf( + _t("The quantity for \"%s\" is lower or equal to" + + " zero. Call for help unless you're perfectly" + + " sure you are doing right."), wrong_product), + confirm: function() { + _super_validate_order(); + }, + }); + return; + } + return this._super(options); + }, + }); + + 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') { + var orderline = order.get_selected_orderline(); + var tare = orderline.get_tare(); + orderline.reset_tare(); + orderline.set_quantity(val); + if (tare > 0) { + orderline.set_tare(tare, true); + } + } 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') { + this.gui.show_popup('error', + {'title': _t('Incorrect Tare Value'), + 'body': _t('You can not set the tare.' + + ' To be able to set the tare manually' + + ' you have to change the tare input method' + + ' in the POS configuration.')}); + } else { + try { + order.get_selected_orderline().set_tare(val, true); + } catch (error) { + var title = _t("We can not apply this tare."); + var popup = {title: title, body: error.message}; + this.gui.show_popup('error', popup); + } + } + } + } + }, + }); +}); diff --git a/pos_tare/static/src/js/tools.js b/pos_tare/static/src/js/tools.js new file mode 100644 index 0000000000..e1c349d9e9 --- /dev/null +++ b/pos_tare/static/src/js/tools.js @@ -0,0 +1,62 @@ +odoo.define('pos_tare.tools', function (require) { + + "use strict"; + var core = require('web.core'); + var utils = require('web.utils'); + var field_utils = require('web.field_utils'); + + var _t = core._t; + var round_pr = utils.round_precision; + var round_di = utils.round_decimals; + + // Convert mass using the reference UOM as pivot unit. + var convert_mass = function (mass, from_unit, to_unit) { + // There is no conversion from one category to another. + if (from_unit.category_id[0] !== to_unit.category_id[0]) { + throw new Error(_.str.sprintf( + _t("We can not cast a weight in %s into %s."), + from_unit.name, to_unit.name)); + } + // No need to convert as weights are measured in same unit. + if (from_unit.id === to_unit.id) { + return mass; + } + // Converts "from_unit" to reference unit of measure. + var result = mass; + if (from_unit.uom_type === "bigger") { + result /= from_unit.factor; + } else { + result *= from_unit.factor_inv; + } + // Converts reference unit of measure to "to_unit". + if (to_unit.uom_type === "bigger") { + result *= to_unit.factor; + } else { + result /= to_unit.factor_inv; + } + + if (to_unit.rounding) { + // Return the rounded result if needed. + return round_pr(result || 0, to_unit.rounding); + } + + return result || 0; + }; + + // Format the tare value. + var format_tare = function (pos, qty, unit) { + if (unit.rounding) { + var q = round_pr(qty, unit.rounding); + var decimals = pos.dp['Product Unit of Measure']; + return field_utils.format.float( + round_di(q, decimals), + {type: 'float', digits: [69, decimals]}); + } + return qty.toFixed(0); + }; + + return { + convert_mass: convert_mass, + format_tare: format_tare, + }; +}); diff --git a/pos_tare/static/src/xml/pos_tare.xml b/pos_tare/static/src/xml/pos_tare.xml index 03376d1569..d311512310 100644 --- a/pos_tare/static/src/xml/pos_tare.xml +++ b/pos_tare/static/src/xml/pos_tare.xml @@ -1,45 +1,107 @@ - - -

-
-
-

+ + + +
+ Gross Weight
-
-
- Unit Price - -
-
- Gross Weight - -
-
- Tare - -
-
-
-
- Net Weight - -
-
-
- Total Price - + +
+ + +
+ +
+
+
+ Tare +
+
+ + +
+ + + + + + + +
  • + + (Gross Weight: + + - Tare: + ) + +
  • +
    +
    +
    + + + +
    + Gross Weight : +
    + Tare : +
    -
    -
    + + + + + + + + + + ( + + + - + + + + ) + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    + + + + + + +
    +
    diff --git a/pos_tare/views/templates.xml b/pos_tare/views/templates.xml index 3cb9b166b9..a8e0bc73b6 100644 --- a/pos_tare/views/templates.xml +++ b/pos_tare/views/templates.xml @@ -1,23 +1,10 @@ - - - - - - diff --git a/pos_tare/views/view_product_template.xml b/pos_tare/views/view_product_template.xml new file mode 100644 index 0000000000..e37f0c7da5 --- /dev/null +++ b/pos_tare/views/view_product_template.xml @@ -0,0 +1,19 @@ + + + + + + product.template + + + + + + + + + From 1750fa1b30f822602bc2e2db0c4aa77604527b64 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sat, 12 Jun 2021 21:37:37 +0000 Subject: [PATCH 19/31] [UPD] Update pos_tare.pot --- pos_tare/i18n/pos_tare.pot | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/pos_tare/i18n/pos_tare.pot b/pos_tare/i18n/pos_tare.pot index a63f7188f7..c9543cc074 100644 --- a/pos_tare/i18n/pos_tare.pot +++ b/pos_tare/i18n/pos_tare.pot @@ -1,13 +1,11 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * pos_tare +# * pos_tare # msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-10 20:29+0000\n" -"PO-Revision-Date: 2021-06-10 20:29+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -19,7 +17,7 @@ msgstr "" #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 #, python-format -msgid "Gross Weight:" +msgid "(Gross Weight:" msgstr "" #. module: pos_tare @@ -86,6 +84,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:182 #: code:addons/pos_tare/static/src/js/screens.js:185 #, python-format msgid "Feature Disabled" @@ -113,6 +112,14 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 +#, python-format +msgid "Gross Weight:" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:88 #: code:addons/pos_tare/static/src/js/screens.js:91 #, python-format msgid "Incorrect Gross Weight Value" @@ -120,6 +127,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:82 #: code:addons/pos_tare/static/src/js/screens.js:85 #, python-format msgid "Incorrect Tare Value" @@ -155,6 +163,11 @@ msgstr "" msgid "Manual input and barcode" msgstr "" +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Meal Voucher Payment" +msgstr "" + #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Package" @@ -162,6 +175,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:89 #: code:addons/pos_tare/static/src/js/screens.js:92 #, python-format msgid "Please set a numeric value in the gross weight field." @@ -169,6 +183,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:83 #: code:addons/pos_tare/static/src/js/screens.js:86 #, python-format msgid "Please set a numeric value in the tare field, or let empty." @@ -196,6 +211,11 @@ msgstr "" msgid "Priced Product" msgstr "" +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Priced Product (Computed Weight)" +msgstr "" + #. module: pos_tare #: model:ir.model,name:pos_tare.model_product_template msgid "Product Template" @@ -210,6 +230,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:94 #: code:addons/pos_tare/static/src/js/screens.js:97 #, python-format msgid "Quantity lower or equal to zero" @@ -270,6 +291,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:95 #: code:addons/pos_tare/static/src/js/screens.js:98 #, python-format msgid "The quantity is lower or equal to zero. Are you sure you want to continue ?" @@ -304,6 +326,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:191 #: code:addons/pos_tare/static/src/js/screens.js:194 #, python-format msgid "We can not apply this tare." @@ -323,6 +346,7 @@ msgstr "" #. module: pos_tare #. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:183 #: code:addons/pos_tare/static/src/js/screens.js:186 #, python-format msgid "You can not set the tare. To be able to set the tare manually you have to change the tare input method in the POS configuration." From 7ab44899a1841c0c433f58c21c37f7edfe16003b Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 12 Jun 2021 21:48:20 +0000 Subject: [PATCH 20/31] [UPD] README.rst --- pos_tare/README.rst | 9 +++++++++ pos_tare/static/description/index.html | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/pos_tare/README.rst b/pos_tare/README.rst index 8087b56c35..c20c70a296 100644 --- a/pos_tare/README.rst +++ b/pos_tare/README.rst @@ -36,6 +36,11 @@ The net weight is displayed in the order with the tare value below. .. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/order.png + +All informations will be available on the ticket. + +.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/pos_ticket.png + **Table of contents** .. contents:: @@ -51,6 +56,10 @@ Install this add-on and configure your point of sale. To enable this addon, go t To generate a tare barcode you need to use the default barcode nomenclature. The default barcode pattern is `0700000{NNDDD}`. Using that pattern, the barcode for a tare of 0.1kg is `0700000001006`. The `pos_tare_barcode_generator` allows you to create tare labels right from the POS. +you can define a default tare on the product form view, if you always use the same type of packaging (or container) for a given product. + +.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/product_template.png + Bug Tracker =========== diff --git a/pos_tare/static/description/index.html b/pos_tare/static/description/index.html index bb5931ccc2..33c89b2717 100644 --- a/pos_tare/static/description/index.html +++ b/pos_tare/static/description/index.html @@ -379,6 +379,10 @@

    Point Of Sale - Tare

    https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/order.png
    +

    All informations will be available on the ticket.

    +
    +https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/pos_ticket.png +

    Table of contents

    Bug Tracker

    From c04c3d2daceaaec51a0b733d1acee0b6260e4bf9 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 12 Jun 2021 21:48:21 +0000 Subject: [PATCH 21/31] pos_tare 12.0.1.0.3 --- pos_tare/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pos_tare/__manifest__.py b/pos_tare/__manifest__.py index a5b71c04f4..890d7fff21 100644 --- a/pos_tare/__manifest__.py +++ b/pos_tare/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Point Of Sale - Tare", "summary": "Manage Tare in Point Of Sale module", - "version": "12.0.1.0.2", + "version": "12.0.1.0.3", "category": "Point of Sale", "author": "GRAP, Le Nid, Odoo Community Association (OCA)", "website": "https://github.com/OCA/pos", From 3d9f788733ab0b06065ca29c4d6420e2aef5413c Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 12 Jun 2021 21:48:31 +0000 Subject: [PATCH 22/31] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: pos-12.0/pos-12.0-pos_tare Translate-URL: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_tare/ --- pos_tare/i18n/es.po | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/pos_tare/i18n/es.po b/pos_tare/i18n/es.po index a7a1ab047e..6bb2c7d54a 100644 --- a/pos_tare/i18n/es.po +++ b/pos_tare/i18n/es.po @@ -52,6 +52,12 @@ msgstr "Regla de código de barras" msgid "Cashier" msgstr "Cajero" +#. module: pos_tare +#: model:product.product,name:pos_tare.cheese +#: model:product.template,name:pos_tare.cheese_product_template +msgid "Cheese by the Slice" +msgstr "" + #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Client" @@ -82,6 +88,7 @@ msgstr "Producto con descuento" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:182 +#: code:addons/pos_tare/static/src/js/screens.js:185 #, python-format msgid "Feature Disabled" msgstr "" @@ -106,9 +113,17 @@ msgstr "Peso bruto :" msgid "Gross Weight Input Method" msgstr "Método de ingreso del peso bruto" +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 +#, python-format +msgid "Gross Weight:" +msgstr "" + #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:88 +#: code:addons/pos_tare/static/src/js/screens.js:91 #, python-format msgid "Incorrect Gross Weight Value" msgstr "" @@ -116,6 +131,7 @@ msgstr "" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:82 +#: code:addons/pos_tare/static/src/js/screens.js:85 #, python-format msgid "Incorrect Tare Value" msgstr "Valor de tara incorrecto" @@ -163,6 +179,7 @@ msgstr "Paquete" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:89 +#: code:addons/pos_tare/static/src/js/screens.js:92 #, python-format msgid "Please set a numeric value in the gross weight field." msgstr "" @@ -170,6 +187,7 @@ msgstr "" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:83 +#: code:addons/pos_tare/static/src/js/screens.js:86 #, python-format msgid "Please set a numeric value in the tare field, or let empty." msgstr "Establezca un valor numérico en el campo de tara o déjelo vacío." @@ -201,6 +219,11 @@ msgstr "Producto con precio" msgid "Priced Product (Computed Weight)" msgstr "Producto con precio (precio calculado)" +#. module: pos_tare +#: model:ir.model,name:pos_tare.model_product_template +msgid "Product Template" +msgstr "" + #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:82 @@ -211,6 +234,7 @@ msgstr "Cantidad" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:94 +#: code:addons/pos_tare/static/src/js/screens.js:97 #, python-format msgid "Quantity lower or equal to zero" msgstr "Cantidad menor o igual a cero" @@ -236,6 +260,14 @@ msgstr "" "* 'both': los métodos de entrada manual y de código de barras están " "habilitados;" +#. module: pos_tare +#: model:ir.model.fields,help:pos_tare.field_product_product__tare_weight +#: model:ir.model.fields,help:pos_tare.field_product_template__tare_weight +msgid "" +"Set here Constant tare weight for the given product. This tare will be " +"substracted when the product is weighted" +msgstr "" + #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:19 @@ -264,9 +296,16 @@ msgstr "Método de entrada de tara" msgid "Tare UoM" msgstr "Tara UdM" +#. module: pos_tare +#: model:ir.model.fields,field_description:pos_tare.field_product_product__tare_weight +#: model:ir.model.fields,field_description:pos_tare.field_product_template__tare_weight +msgid "Tare Weight" +msgstr "" + #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:95 +#: code:addons/pos_tare/static/src/js/screens.js:98 #, python-format msgid "" "The quantity is lower or equal to zero. Are you sure you want to continue ?" @@ -302,6 +341,7 @@ msgstr "No podemos aplicar este código de barras de tara." #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:191 +#: code:addons/pos_tare/static/src/js/screens.js:194 #, python-format msgid "We can not apply this tare." msgstr "No podemos aplicar esta tara." @@ -321,6 +361,7 @@ msgstr "Producto ponderado" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:183 +#: code:addons/pos_tare/static/src/js/screens.js:186 #, python-format msgid "" "You can not set the tare. To be able to set the tare manually you have to " @@ -329,6 +370,14 @@ msgstr "" "No se puede establecer la tara. Para poder establecer la tara manualmente, " "debe cambiar el método de entrada de tara en la configuración de PdV." +#. module: pos_tare +#: model:product.product,uom_name:pos_tare.cheese +#: model:product.product,weight_uom_name:pos_tare.cheese +#: model:product.template,uom_name:pos_tare.cheese_product_template +#: model:product.template,weight_uom_name:pos_tare.cheese_product_template +msgid "kg" +msgstr "" + #~ msgid "" #~ "The quantity for \"%s\" is lower or equal to zero. Call for help unless " #~ "you're perfectly sure you are doing right." From 773e80d6ec162982e60f5480d353afa4e1f0d652 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sat, 12 Jun 2021 21:58:52 +0000 Subject: [PATCH 23/31] [UPD] Update pos_tare.pot --- pos_tare/i18n/pos_tare.pot | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/pos_tare/i18n/pos_tare.pot b/pos_tare/i18n/pos_tare.pot index c9543cc074..c7d4ae2ef6 100644 --- a/pos_tare/i18n/pos_tare.pot +++ b/pos_tare/i18n/pos_tare.pot @@ -13,13 +13,6 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 -#, python-format -msgid "(Gross Weight:" -msgstr "" - #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:36 @@ -84,7 +77,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:182 #: code:addons/pos_tare/static/src/js/screens.js:185 #, python-format msgid "Feature Disabled" @@ -119,7 +111,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:88 #: code:addons/pos_tare/static/src/js/screens.js:91 #, python-format msgid "Incorrect Gross Weight Value" @@ -127,7 +118,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:82 #: code:addons/pos_tare/static/src/js/screens.js:85 #, python-format msgid "Incorrect Tare Value" @@ -175,7 +165,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:89 #: code:addons/pos_tare/static/src/js/screens.js:92 #, python-format msgid "Please set a numeric value in the gross weight field." @@ -183,7 +172,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:83 #: code:addons/pos_tare/static/src/js/screens.js:86 #, python-format msgid "Please set a numeric value in the tare field, or let empty." @@ -230,7 +218,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:94 #: code:addons/pos_tare/static/src/js/screens.js:97 #, python-format msgid "Quantity lower or equal to zero" @@ -291,7 +278,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:95 #: code:addons/pos_tare/static/src/js/screens.js:98 #, python-format msgid "The quantity is lower or equal to zero. Are you sure you want to continue ?" @@ -326,7 +312,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:191 #: code:addons/pos_tare/static/src/js/screens.js:194 #, python-format msgid "We can not apply this tare." @@ -346,7 +331,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:183 #: code:addons/pos_tare/static/src/js/screens.js:186 #, python-format msgid "You can not set the tare. To be able to set the tare manually you have to change the tare input method in the POS configuration." From 83df3151e4010dea60c4d944c2f5949af5b2b6ca Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 12 Jun 2021 21:59:20 +0000 Subject: [PATCH 24/31] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: pos-12.0/pos-12.0-pos_tare Translate-URL: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_tare/ --- pos_tare/i18n/es.po | 19 +++------------- pos_tare/i18n/fr.po | 55 ++++++++++++++++++++++++++++++++------------- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/pos_tare/i18n/es.po b/pos_tare/i18n/es.po index 6bb2c7d54a..73744d3c8e 100644 --- a/pos_tare/i18n/es.po +++ b/pos_tare/i18n/es.po @@ -16,13 +16,6 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.10\n" -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 -#, python-format -msgid "(Gross Weight:" -msgstr "(Peso bruto:" - #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:36 @@ -87,7 +80,6 @@ msgstr "Producto con descuento" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:182 #: code:addons/pos_tare/static/src/js/screens.js:185 #, python-format msgid "Feature Disabled" @@ -122,7 +114,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:88 #: code:addons/pos_tare/static/src/js/screens.js:91 #, python-format msgid "Incorrect Gross Weight Value" @@ -130,7 +121,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:82 #: code:addons/pos_tare/static/src/js/screens.js:85 #, python-format msgid "Incorrect Tare Value" @@ -178,7 +168,6 @@ msgstr "Paquete" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:89 #: code:addons/pos_tare/static/src/js/screens.js:92 #, python-format msgid "Please set a numeric value in the gross weight field." @@ -186,7 +175,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:83 #: code:addons/pos_tare/static/src/js/screens.js:86 #, python-format msgid "Please set a numeric value in the tare field, or let empty." @@ -233,7 +221,6 @@ msgstr "Cantidad" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:94 #: code:addons/pos_tare/static/src/js/screens.js:97 #, python-format msgid "Quantity lower or equal to zero" @@ -304,7 +291,6 @@ msgstr "" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:95 #: code:addons/pos_tare/static/src/js/screens.js:98 #, python-format msgid "" @@ -340,7 +326,6 @@ msgstr "No podemos aplicar este código de barras de tara." #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:191 #: code:addons/pos_tare/static/src/js/screens.js:194 #, python-format msgid "We can not apply this tare." @@ -360,7 +345,6 @@ msgstr "Producto ponderado" #. module: pos_tare #. openerp-web -#: code:addons/pos_tare/static/src/js/screens.js:183 #: code:addons/pos_tare/static/src/js/screens.js:186 #, python-format msgid "" @@ -378,6 +362,9 @@ msgstr "" msgid "kg" msgstr "" +#~ msgid "(Gross Weight:" +#~ msgstr "(Peso bruto:" + #~ msgid "" #~ "The quantity for \"%s\" is lower or equal to zero. Call for help unless " #~ "you're perfectly sure you are doing right." diff --git a/pos_tare/i18n/fr.po b/pos_tare/i18n/fr.po index f116002509..54f4939e28 100644 --- a/pos_tare/i18n/fr.po +++ b/pos_tare/i18n/fr.po @@ -10,18 +10,12 @@ msgstr "" "PO-Revision-Date: 2021-06-10 20:27+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: pos_tare -#. openerp-web -#: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 -#, python-format -msgid "Gross Weight:" -msgstr "Poid brut :" - #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:36 @@ -111,6 +105,13 @@ msgstr "Poid brut :" msgid "Gross Weight Input Method" msgstr "Méthode de saisie du poid brut" +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 +#, python-format +msgid "Gross Weight:" +msgstr "Poid brut :" + #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:91 @@ -155,6 +156,11 @@ msgstr "" msgid "Manual input and barcode" msgstr "Saisie manuelle et par code barre" +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Meal Voucher Payment" +msgstr "" + #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Package" @@ -196,6 +202,11 @@ msgstr "Prix" msgid "Priced Product" msgstr "Article à prix fixe" +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Priced Product (Computed Weight)" +msgstr "" + #. module: pos_tare #: model:ir.model,name:pos_tare.model_product_template msgid "Product Template" @@ -222,11 +233,13 @@ msgstr "Scanner un code barre pour appliquer une tare" #. module: pos_tare #: model:ir.model.fields,help:pos_tare.field_pos_config__iface_tare_method -msgid "Select tare method:\n" +msgid "" +"Select tare method:\n" "* 'manual' : the scale screen has an extra tare input field;\n" "* 'barecode' : (scan a barcode to tare the selected order line;\n" "* 'both' : manual input and barcode methods are enabled;" -msgstr "Selection la méthode de tare : \n" +msgstr "" +"Selection la méthode de tare : \n" " * 'manuelle' : l'écran de pesée à un nouveau champ de saisie pour la tare;\n" " * 'barcode' : scanner un code bare pour tarer la ligne sélectionnée;\n" "* 'both : Saisie manuelle ou par code barre" @@ -234,8 +247,12 @@ msgstr "Selection la méthode de tare : \n" #. module: pos_tare #: model:ir.model.fields,help:pos_tare.field_product_product__tare_weight #: model:ir.model.fields,help:pos_tare.field_product_template__tare_weight -msgid "Set here Constant tare weight for the given product. This tare will be substracted when the product is weighted" -msgstr "Saisir une valeur de tare par défaut pour ce produit. Cette tare sera soustraite quand le produit est pesée." +msgid "" +"Set here Constant tare weight for the given product. This tare will be " +"substracted when the product is weighted" +msgstr "" +"Saisir une valeur de tare par défaut pour ce produit. Cette tare sera " +"soustraite quand le produit est pesée." #. module: pos_tare #. openerp-web @@ -275,8 +292,11 @@ msgstr "Poid de la tare" #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:98 #, python-format -msgid "The quantity is lower or equal to zero. Are you sure you want to continue ?" -msgstr "La quantité est inférieure ou égale à zéro. Etes-vous sûr de vouloir continuer ?" +msgid "" +"The quantity is lower or equal to zero. Are you sure you want to continue ?" +msgstr "" +"La quantité est inférieure ou égale à zéro. Etes-vous sûr de vouloir " +"continuer ?" #. module: pos_tare #: model:ir.model.fields,field_description:pos_tare.field_barcode_rule__type @@ -328,8 +348,12 @@ msgstr "Article pesé" #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:186 #, python-format -msgid "You can not set the tare. To be able to set the tare manually you have to change the tare input method in the POS configuration." -msgstr "Vous ne pouvez pas saisir manuellement la tare. pour le faire, veuillez changer la configuration de votre point de vente." +msgid "" +"You can not set the tare. To be able to set the tare manually you have to " +"change the tare input method in the POS configuration." +msgstr "" +"Vous ne pouvez pas saisir manuellement la tare. pour le faire, veuillez " +"changer la configuration de votre point de vente." #. module: pos_tare #: model:product.product,uom_name:pos_tare.cheese @@ -338,4 +362,3 @@ msgstr "Vous ne pouvez pas saisir manuellement la tare. pour le faire, veuillez #: model:product.template,weight_uom_name:pos_tare.cheese_product_template msgid "kg" msgstr "" - From 6ca8067b4455d5fd7151501e04fb53214dc73028 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 17 Mar 2023 14:20:31 +0000 Subject: [PATCH 25/31] Added translation using Weblate (Italian) --- pos_tare/i18n/it.po | 346 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 pos_tare/i18n/it.po diff --git a/pos_tare/i18n/it.po b/pos_tare/i18n/it.po new file mode 100644 index 0000000000..5095de41c1 --- /dev/null +++ b/pos_tare/i18n/it.po @@ -0,0 +1,346 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_tare +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:36 +#, python-format +msgid "- Tare:" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Alias" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:103 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: pos_tare +#: model:ir.model,name:pos_tare.model_barcode_rule +msgid "Barcode Rule" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Cashier" +msgstr "" + +#. module: pos_tare +#: model:product.product,name:pos_tare.cheese +#: model:product.template,name:pos_tare.cheese_product_template +msgid "Cheese by the Slice" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Client" +msgstr "" + +#. module: pos_tare +#: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form +msgid "Configure how to input Gross Weight." +msgstr "" + +#. module: pos_tare +#: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form +msgid "Configure how to tare products to weight with a scale." +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:94 +#, python-format +msgid "Disc" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Discounted Product" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:185 +#, python-format +msgid "Feature Disabled" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:7 +#, python-format +msgid "Gross Weight" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:48 +#, python-format +msgid "Gross Weight :" +msgstr "" + +#. module: pos_tare +#: model:ir.model.fields,field_description:pos_tare.field_pos_config__iface_gross_weight_method +#: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form +msgid "Gross Weight Input Method" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 +#, python-format +msgid "Gross Weight:" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:91 +#, python-format +msgid "Incorrect Gross Weight Value" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:85 +#, python-format +msgid "Incorrect Tare Value" +msgstr "" + +#. module: pos_tare +#: selection:pos.config,iface_gross_weight_method:0 +msgid "Input Gross Weight via Scale" +msgstr "" + +#. module: pos_tare +#: selection:pos.config,iface_gross_weight_method:0 +msgid "Input the Gross Weight manually" +msgstr "" + +#. module: pos_tare +#: selection:pos.config,iface_tare_method:0 +msgid "Input the tare manually" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Location" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Lot" +msgstr "" + +#. module: pos_tare +#: selection:pos.config,iface_tare_method:0 +msgid "Manual input and barcode" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Meal Voucher Payment" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Package" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:92 +#, python-format +msgid "Please set a numeric value in the gross weight field." +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:86 +#, python-format +msgid "Please set a numeric value in the tare field, or let empty." +msgstr "" + +#. module: pos_tare +#: model:ir.model,name:pos_tare.model_pos_config +msgid "Point of Sale Configuration" +msgstr "" + +#. module: pos_tare +#: model:ir.model,name:pos_tare.model_pos_order_line +msgid "Point of Sale Order Lines" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:100 +#, python-format +msgid "Price" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Priced Product" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Priced Product (Computed Weight)" +msgstr "" + +#. module: pos_tare +#: model:ir.model,name:pos_tare.model_product_template +msgid "Product Template" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:82 +#, python-format +msgid "Qty" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:97 +#, python-format +msgid "Quantity lower or equal to zero" +msgstr "" + +#. module: pos_tare +#: selection:pos.config,iface_tare_method:0 +msgid "Scan a barcode to set the tare" +msgstr "" + +#. module: pos_tare +#: model:ir.model.fields,help:pos_tare.field_pos_config__iface_tare_method +msgid "Select tare method:\n" +"* 'manual' : the scale screen has an extra tare input field;\n" +"* 'barecode' : (scan a barcode to tare the selected order line;\n" +"* 'both' : manual input and barcode methods are enabled;" +msgstr "" + +#. module: pos_tare +#: model:ir.model.fields,help:pos_tare.field_product_product__tare_weight +#: model:ir.model.fields,help:pos_tare.field_product_template__tare_weight +msgid "Set here Constant tare weight for the given product. This tare will be substracted when the product is weighted" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:19 +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:88 +#: selection:barcode.rule,type:0 +#: model:ir.model.fields,field_description:pos_tare.field_pos_order_line__tare +#, python-format +msgid "Tare" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/xml/pos_tare.xml:50 +#, python-format +msgid "Tare :" +msgstr "" + +#. module: pos_tare +#: model:ir.model.fields,field_description:pos_tare.field_pos_config__iface_tare_method +#: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form +msgid "Tare Input Method" +msgstr "" + +#. module: pos_tare +#: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form +msgid "Tare UoM" +msgstr "" + +#. module: pos_tare +#: model:ir.model.fields,field_description:pos_tare.field_product_product__tare_weight +#: model:ir.model.fields,field_description:pos_tare.field_product_template__tare_weight +msgid "Tare Weight" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:98 +#, python-format +msgid "The quantity is lower or equal to zero. Are you sure you want to continue ?" +msgstr "" + +#. module: pos_tare +#: model:ir.model.fields,field_description:pos_tare.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Unit Product" +msgstr "" + +#. module: pos_tare +#: model:ir.model.fields,field_description:pos_tare.field_pos_config__iface_tare_uom_id +msgid "Unit of Measure of the tare" +msgstr "" + +#. module: pos_tare +#: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form +msgid "Unit of Measure of the tares." +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:23 +#, python-format +msgid "We can not apply this tare barcode." +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:194 +#, python-format +msgid "We can not apply this tare." +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/tools.js:17 +#, python-format +msgid "We can not cast a weight in %s into %s." +msgstr "" + +#. module: pos_tare +#: selection:barcode.rule,type:0 +msgid "Weighted Product" +msgstr "" + +#. module: pos_tare +#. openerp-web +#: code:addons/pos_tare/static/src/js/screens.js:186 +#, python-format +msgid "You can not set the tare. To be able to set the tare manually you have to change the tare input method in the POS configuration." +msgstr "" + +#. module: pos_tare +#: model:product.product,uom_name:pos_tare.cheese +#: model:product.product,weight_uom_name:pos_tare.cheese +#: model:product.template,uom_name:pos_tare.cheese_product_template +#: model:product.template,weight_uom_name:pos_tare.cheese_product_template +msgid "kg" +msgstr "" From 4fc90636ae97d93225d6732713e6af1e1a823b45 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 17 Mar 2023 14:20:53 +0000 Subject: [PATCH 26/31] Translated using Weblate (Italian) Currently translated at 100.0% (55 of 55 strings) Translation: pos-12.0/pos-12.0-pos_tare Translate-URL: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_tare/it/ --- pos_tare/i18n/it.po | 117 ++++++++++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 52 deletions(-) diff --git a/pos_tare/i18n/it.po b/pos_tare/i18n/it.po index 5095de41c1..2de260e110 100644 --- a/pos_tare/i18n/it.po +++ b/pos_tare/i18n/it.po @@ -6,228 +6,231 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-03-17 16:10+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:36 #, python-format msgid "- Tare:" -msgstr "" +msgstr "- Tara:" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Alias" -msgstr "" +msgstr "Alias" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:103 #, python-format msgid "Backspace" -msgstr "" +msgstr "Backspace" #. module: pos_tare #: model:ir.model,name:pos_tare.model_barcode_rule msgid "Barcode Rule" -msgstr "" +msgstr "Regola codice a barre" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Cashier" -msgstr "" +msgstr "Cassiere" #. module: pos_tare #: model:product.product,name:pos_tare.cheese #: model:product.template,name:pos_tare.cheese_product_template msgid "Cheese by the Slice" -msgstr "" +msgstr "Formaggio a fette" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Client" -msgstr "" +msgstr "Client" #. module: pos_tare #: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form msgid "Configure how to input Gross Weight." -msgstr "" +msgstr "Configura come inserire il peso lordo." #. module: pos_tare #: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form msgid "Configure how to tare products to weight with a scale." msgstr "" +"Configura come usare la tara per prodotti che si pesano con una bilancia." #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:94 #, python-format msgid "Disc" -msgstr "" +msgstr "Sconto" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Discounted Product" -msgstr "" +msgstr "Prodotto scontato" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:185 #, python-format msgid "Feature Disabled" -msgstr "" +msgstr "Opzione disabilitata" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:7 #, python-format msgid "Gross Weight" -msgstr "" +msgstr "Peso lordo" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:48 #, python-format msgid "Gross Weight :" -msgstr "" +msgstr "Peso lordo:" #. module: pos_tare #: model:ir.model.fields,field_description:pos_tare.field_pos_config__iface_gross_weight_method #: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form msgid "Gross Weight Input Method" -msgstr "" +msgstr "Metodo inserimento peso lordo" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:34 #, python-format msgid "Gross Weight:" -msgstr "" +msgstr "Peso lordo:" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:91 #, python-format msgid "Incorrect Gross Weight Value" -msgstr "" +msgstr "Valore peso lordo errato" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:85 #, python-format msgid "Incorrect Tare Value" -msgstr "" +msgstr "Valore tara errato" #. module: pos_tare #: selection:pos.config,iface_gross_weight_method:0 msgid "Input Gross Weight via Scale" -msgstr "" +msgstr "Inserimento peso lordo con bilancia" #. module: pos_tare #: selection:pos.config,iface_gross_weight_method:0 msgid "Input the Gross Weight manually" -msgstr "" +msgstr "Inserimento peso lordo a mano" #. module: pos_tare #: selection:pos.config,iface_tare_method:0 msgid "Input the tare manually" -msgstr "" +msgstr "Inserimento manuale tara" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Location" -msgstr "" +msgstr "Ubicazione" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Lot" -msgstr "" +msgstr "Lotto" #. module: pos_tare #: selection:pos.config,iface_tare_method:0 msgid "Manual input and barcode" -msgstr "" +msgstr "Inserimento manuale e codice a barre" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Meal Voucher Payment" -msgstr "" +msgstr "Pagamento bon buoni pasto" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Package" -msgstr "" +msgstr "Imballaggio" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:92 #, python-format msgid "Please set a numeric value in the gross weight field." -msgstr "" +msgstr "Impostare un valore numerico nel campo peso lordo." #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:86 #, python-format msgid "Please set a numeric value in the tare field, or let empty." -msgstr "" +msgstr "Impostare un valore numerico nel campo tara, o lasciarlo vuoto." #. module: pos_tare #: model:ir.model,name:pos_tare.model_pos_config msgid "Point of Sale Configuration" -msgstr "" +msgstr "Configurazione punto vendita" #. module: pos_tare #: model:ir.model,name:pos_tare.model_pos_order_line msgid "Point of Sale Order Lines" -msgstr "" +msgstr "Righe ordine punto vendita" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:100 #, python-format msgid "Price" -msgstr "" +msgstr "Prezzo" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Priced Product" -msgstr "" +msgstr "Prodotto prezzato" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Priced Product (Computed Weight)" -msgstr "" +msgstr "Prodotto prezzato (peso calcolato)" #. module: pos_tare #: model:ir.model,name:pos_tare.model_product_template msgid "Product Template" -msgstr "" +msgstr "Modello prodotto" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:82 #, python-format msgid "Qty" -msgstr "" +msgstr "Qta." #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:97 #, python-format msgid "Quantity lower or equal to zero" -msgstr "" +msgstr "Quantità inferiore o uguale a zero" #. module: pos_tare #: selection:pos.config,iface_tare_method:0 msgid "Scan a barcode to set the tare" -msgstr "" +msgstr "Leggere un codice a barre per impostare la tara" #. module: pos_tare #: model:ir.model.fields,help:pos_tare.field_pos_config__iface_tare_method @@ -236,12 +239,19 @@ msgid "Select tare method:\n" "* 'barecode' : (scan a barcode to tare the selected order line;\n" "* 'both' : manual input and barcode methods are enabled;" msgstr "" +"Selezoinare il metodo tara:\n" +"* 'manuale' : lo schermo della bilancia ha un campo aggiuntivo per la tara;\n" +"* 'codice a barre' : leggere un codice a barre per inserie la tara nella " +"riga ordine selezionata;\n" +"* 'entranbi' : inserimento manuale e da codce a barre abilitati;" #. module: pos_tare #: model:ir.model.fields,help:pos_tare.field_product_product__tare_weight #: model:ir.model.fields,help:pos_tare.field_product_template__tare_weight msgid "Set here Constant tare weight for the given product. This tare will be substracted when the product is weighted" msgstr "" +"Impostare qui il peso tara costante per un certo prodotto. Questa tara verrà " +"sottratta quando il prodotto viene pesato" #. module: pos_tare #. openerp-web @@ -251,84 +261,84 @@ msgstr "" #: model:ir.model.fields,field_description:pos_tare.field_pos_order_line__tare #, python-format msgid "Tare" -msgstr "" +msgstr "Tara" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/xml/pos_tare.xml:50 #, python-format msgid "Tare :" -msgstr "" +msgstr "Tara :" #. module: pos_tare #: model:ir.model.fields,field_description:pos_tare.field_pos_config__iface_tare_method #: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form msgid "Tare Input Method" -msgstr "" +msgstr "Metodo inserimento tara" #. module: pos_tare #: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form msgid "Tare UoM" -msgstr "" +msgstr "UdM tara" #. module: pos_tare #: model:ir.model.fields,field_description:pos_tare.field_product_product__tare_weight #: model:ir.model.fields,field_description:pos_tare.field_product_template__tare_weight msgid "Tare Weight" -msgstr "" +msgstr "Peso tara" #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:98 #, python-format msgid "The quantity is lower or equal to zero. Are you sure you want to continue ?" -msgstr "" +msgstr "La quantità è inferiore o uguale a zero. Sicuri di voler continuare?" #. module: pos_tare #: model:ir.model.fields,field_description:pos_tare.field_barcode_rule__type msgid "Type" -msgstr "" +msgstr "Tipo" #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Unit Product" -msgstr "" +msgstr "Prodotto unitario" #. module: pos_tare #: model:ir.model.fields,field_description:pos_tare.field_pos_config__iface_tare_uom_id msgid "Unit of Measure of the tare" -msgstr "" +msgstr "Unità di misura della tara" #. module: pos_tare #: model_terms:ir.ui.view,arch_db:pos_tare.view_pos_config_form msgid "Unit of Measure of the tares." -msgstr "" +msgstr "Unità di misura delle tare." #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:23 #, python-format msgid "We can not apply this tare barcode." -msgstr "" +msgstr "Non si può utilizzare questo codice a barre tara." #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/screens.js:194 #, python-format msgid "We can not apply this tare." -msgstr "" +msgstr "Non si può utilizzare questa tara." #. module: pos_tare #. openerp-web #: code:addons/pos_tare/static/src/js/tools.js:17 #, python-format msgid "We can not cast a weight in %s into %s." -msgstr "" +msgstr "Non si può trasformare un peso da %s in %s." #. module: pos_tare #: selection:barcode.rule,type:0 msgid "Weighted Product" -msgstr "" +msgstr "Prodotto pesato" #. module: pos_tare #. openerp-web @@ -336,6 +346,9 @@ msgstr "" #, python-format msgid "You can not set the tare. To be able to set the tare manually you have to change the tare input method in the POS configuration." msgstr "" +"Non si può impostare qui la tara. Per abilitare l'inserimento manuale della " +"tara serve modificare il metodo di inserimento della tara nella " +"configurazione POS." #. module: pos_tare #: model:product.product,uom_name:pos_tare.cheese @@ -343,4 +356,4 @@ msgstr "" #: model:product.template,uom_name:pos_tare.cheese_product_template #: model:product.template,weight_uom_name:pos_tare.cheese_product_template msgid "kg" -msgstr "" +msgstr "kg" From 3e0dd0b1d500c3bded7277ddee8f6019d8169a87 Mon Sep 17 00:00:00 2001 From: Benoit Aimont Date: Fri, 7 Apr 2023 13:43:51 +0200 Subject: [PATCH 27/31] [IMP] pos_tare: black, isort, prettier --- pos_tare/README.rst | 31 ++++--- pos_tare/data/barcode_rule.xml | 8 +- pos_tare/demo/product_product.xml | 11 +-- pos_tare/models/__init__.py | 5 +- pos_tare/models/barcode_rule.py | 8 +- pos_tare/models/pos_config.py | 4 +- pos_tare/models/pos_order_line.py | 6 +- pos_tare/models/product_template.py | 4 +- pos_tare/static/description/index.html | 51 ++++++----- pos_tare/static/src/css/pos_tare.css | 8 +- pos_tare/static/src/js/db.js | 6 +- pos_tare/static/src/js/models.js | 31 ++++--- pos_tare/static/src/js/screens.js | 112 ++++++++++++----------- pos_tare/static/src/js/tools.js | 28 +++--- pos_tare/static/src/xml/pos_tare.xml | 55 ++++++++--- pos_tare/views/templates.xml | 10 +- pos_tare/views/view_pos_config.xml | 34 ++++--- pos_tare/views/view_pos_order.xml | 8 +- pos_tare/views/view_product_template.xml | 7 +- 19 files changed, 238 insertions(+), 189 deletions(-) diff --git a/pos_tare/README.rst b/pos_tare/README.rst index c20c70a296..8265283a1c 100644 --- a/pos_tare/README.rst +++ b/pos_tare/README.rst @@ -2,10 +2,13 @@ Point Of Sale - Tare ==================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:308df37ca0d8288a8593ab10beebb59eb7922a9029c1f976084a2ac5c3d14d12 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -14,32 +17,32 @@ Point Of Sale - Tare :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github - :target: https://github.com/OCA/pos/tree/12.0/pos_tare + :target: https://github.com/OCA/pos/tree/14.0/pos_tare :alt: OCA/pos .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_tare + :target: https://translation.odoo-community.org/projects/pos-14-0/pos-14-0-pos_tare :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/184/12.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=14.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| Give the possibility to the user to enter a Tare weight, when weighting products in the Point of Sale. This will compute automatically net weight and set it to the current selected order -.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/pos_tare.png +.. figure:: https://raw.githubusercontent.com/OCA/pos/14.0/pos_tare/static/description/pos_tare.png The net weight is displayed in the order with the tare value below. -.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/order.png +.. figure:: https://raw.githubusercontent.com/OCA/pos/14.0/pos_tare/static/description/order.png All informations will be available on the ticket. -.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/pos_ticket.png +.. figure:: https://raw.githubusercontent.com/OCA/pos/14.0/pos_tare/static/description/pos_ticket.png **Table of contents** @@ -58,15 +61,15 @@ To generate a tare barcode you need to use the default barcode nomenclature. The you can define a default tare on the product form view, if you always use the same type of packaging (or container) for a given product. -.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/product_template.png +.. figure:: https://raw.githubusercontent.com/OCA/pos/14.0/pos_tare/static/description/product_template.png Bug Tracker =========== Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -110,6 +113,6 @@ Current `maintainers `__: |maintainer-fkawala| |maintainer-legalsylvain| -This module is part of the `OCA/pos `_ project on GitHub. +This module is part of the `OCA/pos `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_tare/data/barcode_rule.xml b/pos_tare/data/barcode_rule.xml index a8ecb86173..8704253fae 100644 --- a/pos_tare/data/barcode_rule.xml +++ b/pos_tare/data/barcode_rule.xml @@ -1,9 +1,11 @@ - - + Tare - + 81 tare ean13 diff --git a/pos_tare/demo/product_product.xml b/pos_tare/demo/product_product.xml index 081c565cca..5dc6606448 100644 --- a/pos_tare/demo/product_product.xml +++ b/pos_tare/demo/product_product.xml @@ -1,18 +1,17 @@ - + - Cheese by the Slice - - + + 18 - - + + 0.006 diff --git a/pos_tare/models/__init__.py b/pos_tare/models/__init__.py index fd94f5789f..818af1b929 100644 --- a/pos_tare/models/__init__.py +++ b/pos_tare/models/__init__.py @@ -1,4 +1 @@ -from . import pos_config -from . import pos_order_line -from . import product_template -from . import barcode_rule +from . import barcode_rule, pos_config, pos_order_line, product_template diff --git a/pos_tare/models/barcode_rule.py b/pos_tare/models/barcode_rule.py index f48c114737..92b661e3af 100644 --- a/pos_tare/models/barcode_rule.py +++ b/pos_tare/models/barcode_rule.py @@ -1,9 +1,7 @@ -from odoo import models, fields +from odoo import fields, models class BarcodeRule(models.Model): - _inherit = 'barcode.rule' + _inherit = "barcode.rule" - type = fields.Selection(selection_add=[ - ('tare', 'Tare') - ]) + type = fields.Selection(selection_add=[("tare", "Tare")]) diff --git a/pos_tare/models/pos_config.py b/pos_tare/models/pos_config.py index 8a53ef75b7..3fda958112 100644 --- a/pos_tare/models/pos_config.py +++ b/pos_tare/models/pos_config.py @@ -1,4 +1,4 @@ -from odoo import api, models, fields +from odoo import api, fields, models class PosConfig(models.Model): @@ -22,7 +22,7 @@ class PosConfig(models.Model): iface_gross_weight_method = fields.Selection( [ ("manual", "Input the Gross Weight manually"), - ("scale", "Input Gross Weight via Scale") + ("scale", "Input Gross Weight via Scale"), ], string="Gross Weight Input Method", default="scale", diff --git a/pos_tare/models/pos_order_line.py b/pos_tare/models/pos_order_line.py index c86e62604e..0e423d8234 100644 --- a/pos_tare/models/pos_order_line.py +++ b/pos_tare/models/pos_order_line.py @@ -2,7 +2,8 @@ # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import fields, models + from odoo.addons import decimal_precision as dp @@ -10,6 +11,5 @@ class PosOrderLine(models.Model): _inherit = "pos.order.line" tare = fields.Float( - string="Tare", - digits=dp.get_precision("Product Unit of Measure") + string="Tare", digits=dp.get_precision("Product Unit of Measure") ) diff --git a/pos_tare/models/product_template.py b/pos_tare/models/product_template.py index c297c51bbb..c1d8a39c77 100644 --- a/pos_tare/models/product_template.py +++ b/pos_tare/models/product_template.py @@ -2,13 +2,13 @@ # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import fields, models import odoo.addons.decimal_precision as dp class ProductTemplate(models.Model): - _inherit = 'product.template' + _inherit = "product.template" tare_weight = fields.Float( digits=dp.get_precision("Product Unit of Measure"), diff --git a/pos_tare/static/description/index.html b/pos_tare/static/description/index.html index 33c89b2717..c1926d9bd8 100644 --- a/pos_tare/static/description/index.html +++ b/pos_tare/static/description/index.html @@ -1,20 +1,19 @@ - - + Point Of Sale - Tare

    +

    Point Of Sale - Tare

    + + +

    Beta License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runbot

    +

    Give the possibility to the user to enter a Tare weight, when weighting +products in the Point of Sale. +This will compute automatically net weight and set it to the current +selected order

    +
    +https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/pos_tare.png +
    +

    The net weight is displayed in the order with the tare value below.

    +
    +https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare/static/description/order.png +
    +

    Table of contents

    + +
    +

    Usage

    +

    Install this add-on and configure your point of sale. To enable this addon, go to your point of sale configuration page. There, enable the electronic scale and barcode reader in the “IoT Box” section. In the same page, look up for the “Tare input method” field, and choose a tare method. There are three tare methods: +- “manual”, you’ll set the tare value when you weight the product; +- “barcode”, you’ll scan the tare value from a barcode; +- “both”, you can both of the above.

    +

    To generate a tare barcode you need to use the default barcode nomenclature. The default barcode pattern is 0700000{NNDDD}. Using that pattern, the barcode for a tare of 0.1kg is 0700000001006. The pos_tare_barcode_generator allows you to create tare labels right from the POS.

    +
    +
    +

    Known issues / Roadmap

    +
      +
    • Print tare value on customer receipt.
    • +
    +
    +
    +

    Bug Tracker

    +

    Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

    +

    Do not contact contributors directly about support or help with technical issues.

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • GRAP
    • +
    • Le Nid
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    +Odoo Community Association +

    OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

    +

    Current maintainer:

    +

    fkawala

    +

    This module is part of the OCA/pos project on GitHub.

    +

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    +
    +
    +