diff --git a/pos_tare_generate_barcode/README.rst b/pos_tare_generate_barcode/README.rst new file mode 100644 index 00000000..2ddb405f --- /dev/null +++ b/pos_tare_generate_barcode/README.rst @@ -0,0 +1,117 @@ +===================================== +Point of Sale - Tare generate barcode +===================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-OCA%2Fpos-lightgray.png?logo=github + :target: https://github.com/OCA/pos/tree/12.0/pos_tare_generate_barcode + :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_generate_barcode + :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| + +This add-on enables POS to print tare barcodes. + +This add-on adds a news screen to POS to web print tare barcode labels. + +The tare barcode reading is done by the `pos_tare` addon. + +POS home screen becomes: + +.. image:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare_generate_barcode/static/description/POS_with_button.png + +The label screen is: + +.. image:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare_generate_barcode/static/description/null_weight.png + +When we read a weight the impression button is enabled + +.. image:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare_generate_barcode/static/description/ready_to_print.png + +A barcode label looks like: + +.. image:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare_generate_barcode/static/description/label.png + +Zoom on the updated action widget: + +.. image:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_tare_generate_barcode/static/description/zoom_action_widget.png + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Install this add-on and configure the point of sale where you want to be able to use the tare barecode. The label printing is done using web print. To streamline the label printing it is advised to use the silent printing mode (firefox) or the kiosk printing (chrome). + +The command line to start a chrome base browser in kiosk mode with silent printing looks like: + +``chromium-browser --use-system-default-printer --kiosk --kiosk-printing http://localhost:8069/`` + +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 +~~~~~~~ + +* Le Nid + +Contributors +~~~~~~~~~~~~ + +- Le Nid +- Sylvain LE GAL +- 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 `__: + +|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. diff --git a/pos_tare_generate_barcode/__init__.py b/pos_tare_generate_barcode/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/pos_tare_generate_barcode/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/pos_tare_generate_barcode/__manifest__.py b/pos_tare_generate_barcode/__manifest__.py new file mode 100644 index 00000000..aa4fa9ed --- /dev/null +++ b/pos_tare_generate_barcode/__manifest__.py @@ -0,0 +1,22 @@ +# @author: François Kawala +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': "Point of Sale - Tare generate barcode", + 'version': '12.0.1.0.0', + 'category': 'Point of Sale', + 'summary': """Point of Sale - print tare \ + barecodes labels.""", + 'author': "Le Nid, Odoo Community Association (OCA)", + 'website': "https://github.com/OCA/pos", + 'license': 'AGPL-3', + 'maintainers': ['fkawala'], + 'depends': ['point_of_sale', 'pos_tare'], + 'data': [ + 'pos_tare_generate_barcode.xml', + 'views/pos_config_view.xml' + ], + 'qweb': [ + 'static/src/xml/pos_tare_generate_barcode.xml', + ], + 'installable': True, +} diff --git a/pos_tare_generate_barcode/i18n/fr_CH.po b/pos_tare_generate_barcode/i18n/fr_CH.po new file mode 100644 index 00000000..c254f606 --- /dev/null +++ b/pos_tare_generate_barcode/i18n/fr_CH.po @@ -0,0 +1,101 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_tare_generate_barcode +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-27 12:55+0000\n" +"PO-Revision-Date: 2020-08-27 12:55+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_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml:8 +#, python-format +msgid "Back" +msgstr "" + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/js/screens.js:55 +#, python-format +msgid "Failed to read weight from scale." +msgstr "La mesure envoyée par la balance ne peut pas être lu." + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/js/screens.js:127 +#, python-format +msgid "Maximum tare weight is 99.999kg" +msgstr "La masse maximum d'une tare est de 99.999kg" + +#. module: pos_tare_generate_barcode +#: model:ir.model,name:pos_tare_generate_barcode.model_pos_config +msgid "Point of Sale Configuration" +msgstr "Paramétrage du point de vente" + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml:18 +#, python-format +msgid "Print" +msgstr "" + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml:11 +#: code:addons/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml:41 +#, python-format +msgid "Print a tare label" +msgstr "Imprimer un code barre de tare" + +#. module: pos_tare_generate_barcode +#: model:ir.model.fields,help:pos_tare_generate_barcode.field_pos_config__iface_tare_label +msgid "Print tare labels with this POS" +msgstr "Utiliser ce POS pour imprimer des codes barres de tare" + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml:15 +#, python-format +msgid "Set the pot on the scale and check the weight above" +msgstr "Placez le contenant sur la balance puis vérifiez le poids affiché ci-dessus" + +#. module: pos_tare_generate_barcode +#: model_terms:ir.ui.view,arch_db:pos_tare_generate_barcode.view_pos_config_form +msgid "Show tare barcode printer button on top of the num pad." +msgstr "Affichez le bouton pour l'impression des codes barres de tare." + +#. module: pos_tare_generate_barcode +#: model:ir.model.fields,field_description:pos_tare_generate_barcode.field_pos_config__iface_tare_label +msgid "Show tare label button" +msgstr "Afficher le bouton pour imprimer des codes barres de tare" + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/js/screens.js:92 +#, python-format +msgid "The scale sent a measure in %s unit. This unit of measure (UOM) in not found in the point of sale. You may need to create a new UOM named %s. The UOM name is case sensitive." +msgstr "La balance a envoyé un mesure avec l'unité %s. Cette unité de mesure (UOM) n'est pas trouvé parmis les UOMs. Il est probable qu'il soit nécessaire de créer une nouvelle UOM nommée %s. Le nom des UOM est sensible à la case." + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml:32 +#, python-format +msgid "kg" +msgstr "" + +#. module: pos_tare_generate_barcode +#. openerp-web +#: code:addons/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml:32 +#, python-format +msgid "tare =" +msgstr "tare = " + diff --git a/pos_tare_generate_barcode/i18n/pos_barcode_tare.pot b/pos_tare_generate_barcode/i18n/pos_barcode_tare.pot new file mode 100644 index 00000000..5247ad25 --- /dev/null +++ b/pos_tare_generate_barcode/i18n/pos_barcode_tare.pot @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_barcode_tare +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \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_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:8 +#, python-format +msgid "Back" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/js/pos_barcode_tare.js:130 +#, python-format +msgid "Failed to read weight from scale." +msgstr "" + +#. module: pos_barcode_tare +#: model:product.uom,name:pos_barcode_tare.product_uom_kgm_dbg +msgid "Kg" +msgstr "" + +#. module: pos_barcode_tare +#: model:ir.ui.view,arch_db:pos_barcode_tare.view_pos_config_form +msgid "Loose good options" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/js/pos_barcode_tare.js:196 +#, python-format +msgid "Maximum tare weight is 99.999kg" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:18 +#, python-format +msgid "Print" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:11 +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:41 +#, python-format +msgid "Print a tare label" +msgstr "" + +#. module: pos_barcode_tare +#: model:ir.model.fields,help:pos_barcode_tare.field_pos_config_iface_tare_label +msgid "Print tare labels with this POS" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:15 +#, python-format +msgid "Set the pot on the scale and check the weight above" +msgstr "" + +#. module: pos_barcode_tare +#: model:ir.model.fields,field_description:pos_barcode_tare.field_pos_config_iface_tare_label +msgid "Show tare label button" +msgstr "" + +#. module: pos_barcode_tare +#: code:addons/pos_barcode_tare/models/barcode_rule.py:13 +#, python-format +msgid "Tare" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/js/pos_barcode_tare.js:164 +#, python-format +msgid "The scale sent a measure in %s unit. This unit of measure (UOM) in not found in the point of sale. You may need to create a new UOM named %s. The UOM name is case sensitive." +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/js/pos_barcode_tare.js:288 +#, python-format +msgid "The tare (%s) is already set for the product \"%s\". We can not re-apply a tare to this product." +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/js/pos_barcode_tare.js:319 +#, python-format +msgid "The tare weight is %s %s, it's greater or equal to the product weight %s. We can not apply this tare." +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/js/pos_barcode_tare.js:74 +#, python-format +msgid "We can not apply this tare barcode." +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/js/pos_barcode_tare.js:33 +#, python-format +msgid "We can not cast a weight in %s into %s." +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:69 +#, python-format +msgid "With a" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:61 +#, python-format +msgid "at" +msgstr "" + +#. module: pos_barcode_tare +#: model:ir.model,name:pos_barcode_tare.model_barcode_rule +msgid "barcode.rule" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:71 +#, python-format +msgid "discount" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:32 +#, python-format +msgid "kg" +msgstr "" + +#. module: pos_barcode_tare +#: model:ir.model,name:pos_barcode_tare.model_pos_config +msgid "pos.config" +msgstr "" + +#. module: pos_barcode_tare +#. openerp-web +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:32 +#: code:addons/pos_barcode_tare/static/src/xml/pos_barcode_tare.xml:78 +#, python-format +msgid "tare =" +msgstr "" + diff --git a/pos_tare_generate_barcode/models/__init__.py b/pos_tare_generate_barcode/models/__init__.py new file mode 100644 index 00000000..db8634ad --- /dev/null +++ b/pos_tare_generate_barcode/models/__init__.py @@ -0,0 +1 @@ +from . import pos_config diff --git a/pos_tare_generate_barcode/models/pos_config.py b/pos_tare_generate_barcode/models/pos_config.py new file mode 100644 index 00000000..9cd6cd62 --- /dev/null +++ b/pos_tare_generate_barcode/models/pos_config.py @@ -0,0 +1,9 @@ +from odoo import models, fields + + +class PosConfig(models.Model): + _inherit = 'pos.config' + iface_tare_label = fields.Boolean( + 'Show tare label button', + help="Print tare labels with this POS" + ) diff --git a/pos_tare_generate_barcode/pos_tare_generate_barcode.xml b/pos_tare_generate_barcode/pos_tare_generate_barcode.xml new file mode 100644 index 00000000..6f81a386 --- /dev/null +++ b/pos_tare_generate_barcode/pos_tare_generate_barcode.xml @@ -0,0 +1,8 @@ + + + diff --git a/pos_tare_generate_barcode/readme/CONTRIBUTORS.rst b/pos_tare_generate_barcode/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..2c281d6d --- /dev/null +++ b/pos_tare_generate_barcode/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +- Le Nid +- Sylvain LE GAL +- CoopITEasy + diff --git a/pos_tare_generate_barcode/readme/DESCRIPTION.rst b/pos_tare_generate_barcode/readme/DESCRIPTION.rst new file mode 100644 index 00000000..8143d8db --- /dev/null +++ b/pos_tare_generate_barcode/readme/DESCRIPTION.rst @@ -0,0 +1,25 @@ +This add-on enables POS to print tare barcodes. + +This add-on adds a news screen to POS to web print tare barcode labels. + +The tare barcode reading is done by the `pos_tare` addon. + +POS home screen becomes: + +.. image:: ../static/description/POS_with_button.png + +The label screen is: + +.. image:: ../static/description/null_weight.png + +When we read a weight the impression button is enabled + +.. image:: ../static/description/ready_to_print.png + +A barcode label looks like: + +.. image:: ../static/description/label.png + +Zoom on the updated action widget: + +.. image:: ../static/description/zoom_action_widget.png diff --git a/pos_tare_generate_barcode/readme/ROADMAP.rst b/pos_tare_generate_barcode/readme/ROADMAP.rst new file mode 100644 index 00000000..e69de29b diff --git a/pos_tare_generate_barcode/readme/USAGE.rst b/pos_tare_generate_barcode/readme/USAGE.rst new file mode 100644 index 00000000..f50bb306 --- /dev/null +++ b/pos_tare_generate_barcode/readme/USAGE.rst @@ -0,0 +1,5 @@ +Install this add-on and configure the point of sale where you want to be able to use the tare barecode. The label printing is done using web print. To streamline the label printing it is advised to use the silent printing mode (firefox) or the kiosk printing (chrome). + +The command line to start a chrome base browser in kiosk mode with silent printing looks like: + +``chromium-browser --use-system-default-printer --kiosk --kiosk-printing http://localhost:8069/`` diff --git a/pos_tare_generate_barcode/static/description/POS_with_button.png b/pos_tare_generate_barcode/static/description/POS_with_button.png new file mode 100644 index 00000000..58c7396d Binary files /dev/null and b/pos_tare_generate_barcode/static/description/POS_with_button.png differ diff --git a/pos_tare_generate_barcode/static/description/icon.png b/pos_tare_generate_barcode/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/pos_tare_generate_barcode/static/description/icon.png differ diff --git a/pos_tare_generate_barcode/static/description/index.html b/pos_tare_generate_barcode/static/description/index.html new file mode 100644 index 00000000..afeac703 --- /dev/null +++ b/pos_tare_generate_barcode/static/description/index.html @@ -0,0 +1,442 @@ + + + + + + +Point of Sale - Tare generate barcode + + + +
+

Point of Sale - Tare generate barcode

+ + +

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

+

This add-on enables POS to print tare barcodes.

+

This add-on adds a news screen to POS to web print tare barcode labels.

+

The tare barcode reading is done by the pos_tare addon.

+

POS home screen becomes:

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

The label screen is:

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

When we read a weight the impression button is enabled

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

A barcode label looks like:

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

Zoom on the updated action widget:

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

Table of contents

+ +
+

Usage

+

Install this add-on and configure the point of sale where you want to be able to use the tare barecode. The label printing is done using web print. To streamline the label printing it is advised to use the silent printing mode (firefox) or the kiosk printing (chrome).

+

The command line to start a chrome base browser in kiosk mode with silent printing looks like:

+

chromium-browser --use-system-default-printer --kiosk --kiosk-printing http://localhost:8069/

+
+
+

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

+
    +
  • Le Nid
  • +
+
+
+

Contributors

+
    +
  • Le Nid
  • +
  • Sylvain LE GAL
  • +
  • CoopITEasy
  • +
+
+
+

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.

+
+
+
+ + diff --git a/pos_tare_generate_barcode/static/description/label.png b/pos_tare_generate_barcode/static/description/label.png new file mode 100644 index 00000000..6857be07 Binary files /dev/null and b/pos_tare_generate_barcode/static/description/label.png differ diff --git a/pos_tare_generate_barcode/static/description/null_weight.png b/pos_tare_generate_barcode/static/description/null_weight.png new file mode 100644 index 00000000..df7f9199 Binary files /dev/null and b/pos_tare_generate_barcode/static/description/null_weight.png differ diff --git a/pos_tare_generate_barcode/static/description/ready_to_print.png b/pos_tare_generate_barcode/static/description/ready_to_print.png new file mode 100644 index 00000000..4ff7866d Binary files /dev/null and b/pos_tare_generate_barcode/static/description/ready_to_print.png differ diff --git a/pos_tare_generate_barcode/static/description/zoom_action_widget.png b/pos_tare_generate_barcode/static/description/zoom_action_widget.png new file mode 100644 index 00000000..c00add3f Binary files /dev/null and b/pos_tare_generate_barcode/static/description/zoom_action_widget.png differ diff --git a/pos_tare_generate_barcode/static/src/css/pos_tare_generate_barcode.css b/pos_tare_generate_barcode/static/src/css/pos_tare_generate_barcode.css new file mode 100644 index 00000000..55f45827 --- /dev/null +++ b/pos_tare_generate_barcode/static/src/css/pos_tare_generate_barcode.css @@ -0,0 +1,123 @@ +.pos .print-label.disabled { + background: #e2e2e2; + border: solid 1px #BEBEBE; + opacity: 0.5; + cursor: default; + color: inherit; +} + +.pos .tare-screen .centered-content { + text-align:center; +} + +@media screen { + .pos .tare-screen .pos-tare-label-container { + width: 300px; + background-color: white; + margin: 20px; + padding: 15px; + font-size: 21px; + padding-bottom:30px; + font-family: "Inconsolata"; + border: solid 1px rgb(220,220,220); + border-radius: 3px; + overflow: hidden; + text-align: center; + display: inline-block; + justify-content: center; + align-items: center; + flex-wrap: wrap; + } + + .pos .tare-screen .pos-tare-label-container img { + width: 50mm; + height: 45mm; + } +} + +.pos .tare-screen .pos-tare-label-container .caption { + display: block; + text-overflow: ellipsis; + flex-basis: 100vw; +} + +.pos .tare-screen .pos-directions-for-user { + font-size: 25px; + margin: 8px; + text-align: center; + line-height: 2; +} + +.pos .tare-screen .pos-directions-for-user span { + width:100px; + height: 50px; + background-color: rgb(49,174,218); + color: white !important; + font-weight: bold; + border: solid 1px black; + border-radius: 90% 30%; + display: flex; + align-items: center; + overflow: hidden; + vertical-align:middle; + justify-content: center; + margin-left: auto; + margin-right: auto; +} + +.pos .tare-screen .centered-content .print-label { + text-align: center; + font-size: 32px; + background: rgb(110,200,155); + color: white; + border-radius: 3px; + padding: 16px; + margin: 16px; + cursor: pointer; +} + +@media print { + body { + position: relative !important; + } + + .pos .tare-screen header, + .pos .tare-screen .top-content, + .pos .tare-screen .print-label, + .pos .tare-screen .pos-directions-for-user { + display: none !important; + } + + .pos .tare-screen .screen-content { + max-width: unset !important; + } + + .pos .tare-screen .centered-content { + position: static; + text-align: center; + border: none; + width: 100vw; + height: 100vh; + margin: 0mm; + page-break-inside: avoid; + overflow: hidden; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + left: unset !important; + right: unset !important; + } + + .pos .tare-screen .centered-content .pos-tare-label-container img { + width: 90vw; + height: 70vh; + } + + .pos .tare-screen .centered-content .pos-tare-label-container .caption { + text-overflow: ellipsis; + font-size: 5vh; + flex-basis: 100%; + } +} \ No newline at end of file diff --git a/pos_tare_generate_barcode/static/src/js/screens.js b/pos_tare_generate_barcode/static/src/js/screens.js new file mode 100644 index 00000000..3c93e16c --- /dev/null +++ b/pos_tare_generate_barcode/static/src/js/screens.js @@ -0,0 +1,199 @@ +odoo.define('pos_barcode_tare.screens', function (require) { + + "use strict"; + var core = require('web.core'); + var gui = require('point_of_sale.gui'); + var models = require('point_of_sale.models'); + var screens = require('point_of_sale.screens'); + var tools = require('pos_tare.tools'); + + var QWeb = core.qweb; + var _t = core._t; + var convert_mass = tools.convert_mass; + var format_tare = tools.format_tare; + + // This create a new button on top of action widget. This button links to + // the barcode label printing screen defined below. + var TareScreenButton = screens.ActionButtonWidget.extend({ + template: 'TareScreenButton', + + button_click: function () { + this.gui.show_screen('tare'); + }, + }); + + screens.define_action_button({ + 'name': 'tareScreenButton', + 'widget': TareScreenButton, + }); + + // This is a new screen that reads weight from the electronic scale and + // create a barcode label encoding the weight. The screen shows a preview + // of the label. The user is expected to check if the preview matches what's + // measured on the scale. The barcode image is generated by the report + // module. + var TareScreenWidget = screens.ScreenWidget.extend({ + template: 'TareScreenWidget', + next_screen: 'products', + previous_screen: 'products', + default_tare_value: 0.0, + weight_barcode_prefix: null, + + show: function () { + this._super(); + // Fetch the barcode prefix from POS barcode parser rules. + this.weight_barcode_prefix = this.get_barcode_prefix(); + // Setup the proxy + var queue = this.pos.proxy_queue; + // The pooling of the scale starts here. + var self = this; + queue.schedule(function () { + return self.pos.proxy.scale_read().then(function (weight) { + try { + self.set_tare_weight(weight); + } catch (error) { + var title = _t("Failed to read weight from scale."); + var popup = {title: title, body: error.message}; + self.gui.show_popup('error', popup); + } + }); + }, {duration:150, repeat: true}); + // Shows a barcode whose weight might be zero, but this is preferred + // for UI/UX reasons. + this.render_receipt(); + this.lock_screen(true); + }, + get_barcode_prefix: function () { + var barcode_pattern = this.get_barcode_pattern(); + return barcode_pattern.substr(0, 2); + }, + get_barcode_pattern: function () { + var rules = this.get_barcode_rules(); + var rule = rules.filter( + function (r) { + // We select the first (smallest sequence ID) barcode rule + // with the expected type. + return r.type === "tare"; + })[0]; + return rule.pattern; + }, + get_barcode_rules: function () { + return this.pos.barcode_reader.barcode_parser.nomenclature.rules; + }, + set_tare_weight: function (scale_measure) { + var weight = scale_measure.weight; + var measure_unit = this.pos.units.filter( + function (u) { + return u.name === scale_measure.unit; + })[0]; + + if (typeof measure_unit === 'undefined') { + throw new Error(_.str.sprintf( + _t("The scale sent a measure in %s unit. This unit of "+ + "measure (UOM) in not found in the point of sale. You " + + "may need to create a new UOM named %s. The UOM name is "+ + "case sensitive."), scale_measure.unit, + scale_measure.unit)); + } + + if (weight > 0) { + var tare_uom = this.pos.config.iface_tare_uom_id[0]; + var tare_unit = this.pos.units_by_id[tare_uom]; + this.weight_in_tare_unit = convert_mass(weight, + measure_unit, tare_unit); + this.render_receipt(); + this.lock_screen(false); + } + }, + get_tare_weight: function () { + if (typeof this.weight_in_tare_unit === 'undefined') { + return this.default_tare_value; + } + return this.weight_in_tare_unit; + }, + barcode_data: function (weight) { + // We use EAN13 barcode, it looks like 07 00000 12345 x. First there + // is the prefix, here 07, that is used to decide which type of + // barcode we're dealing with. A weight barcode has then two groups + // of five digits. The first group encodes the product id. Here the + // product id is 00000. The second group encodes the weight in + // grams. Here the weight is 12.345kg. The last digit of the barcode + // is a checksum, here symbolized by x. + var padding_size = 5; + var void_product_id = '0'.repeat(padding_size); + var weight_in_gram = weight * 1e3; + + if (weight_in_gram >= Math.pow(10, padding_size)) { + throw new RangeError(_t("Maximum tare weight is 99.999kg")); + } + + // Weight has to be padded with zeros. + var weight_with_padding = '0'.repeat(padding_size) + weight_in_gram; + var padded_weight = weight_with_padding.substr( + weight_with_padding.length - padding_size); + // Builds the barcode using a placeholder checksum. + var barcode = this.weight_barcode_prefix + .concat(void_product_id, padded_weight) + .concat(0); + // Compute checksum + var barcode_parser = this.pos.barcode_reader.barcode_parser; + var checksum = barcode_parser.ean_checksum(barcode); + // Replace checksum placeholder by the actual checksum. + return barcode.substr(0, 12).concat(checksum); + }, + get_barcode_data: function () { + return this.barcode_data(this.get_tare_weight()); + }, + lock_screen: function (locked) { + this._locked = locked; + if (locked) { + this.$('.print-label').addClass('disabled'); + } else { + this.$('.print-label').removeClass('disabled'); + } + }, + print_web: function () { + window.print(); + this.pos.get_order()._printed = true; + }, + print: function () { + // See comment in print function of ReceiptScreenWidget + this.lock_screen(true); + var self = this; + setTimeout(function () { + self.lock_screen(false); + }, 1000); + + this.print_web(); + this.click_back(); + }, + click_back: function () { + this.close(); + this.gui.show_screen(this.previous_screen); + }, + renderElement: function () { + this._super(); + var self = this; + this.$('.back').click(function () { + self.click_back(); + }); + this.$('.print-label').click(function () { + if (!self._locked) { + self.print(); + } + }); + }, + render_receipt: function () { + this.$('.pos-tare-label-container').html( + QWeb.render('PosTareLabel', {widget:this})); + }, + close: function () { + this._super(); + delete this.weight; + this.pos.proxy_queue.clear(); + }, + }); + + gui.define_screen({name:'tare', widget: TareScreenWidget}); + +}); diff --git a/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml b/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml new file mode 100644 index 00000000..8bb6de28 --- /dev/null +++ b/pos_tare_generate_barcode/static/src/xml/pos_tare_generate_barcode.xml @@ -0,0 +1,47 @@ + + + +
+
+
+ + + Back + +

Print a tare label

+
+
+
+
+ Set the pot on the scale and check the weight above +
+ +
+
+
+
+ + +
+
+
+ + tare = kg +
+
+
+
+ + + + + + Print a tare label + + + + +
diff --git a/pos_tare_generate_barcode/views/pos_config_view.xml b/pos_tare_generate_barcode/views/pos_config_view.xml new file mode 100644 index 00000000..3c2415eb --- /dev/null +++ b/pos_tare_generate_barcode/views/pos_config_view.xml @@ -0,0 +1,26 @@ + + + + + + view.pos.config.form + pos.config + + + +
+
+
+ +
+
+
+
+
+
+
+