diff --git a/product_to_bizerba_scale/README.rst b/product_to_bizerba_scale/README.rst new file mode 100644 index 000000000..f5748f732 --- /dev/null +++ b/product_to_bizerba_scale/README.rst @@ -0,0 +1,102 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +======================== +Product to Bizerba Scale +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:38c59c7259f536acb7c048f1d90e7f7eaff8393a3e7c72d46d02f42f3e269722 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/license-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-coopiteasy%2Faddons-lightgray.png?logo=github + :target: https://github.com/coopiteasy/addons/tree/16.0/product_to_bizerba_scale + :alt: coopiteasy/addons + +|badge1| |badge2| |badge3| + +Synchronize Odoo database with Bizerba Scales + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +Configuration via Point of Sale > Configuration: + +1. Scale Systems > a scale system: FTP Connexion + + * FTP Server URL + * FTP Login + * FTP Password + * Relative Path for CSV + * Relative Path for Product Images + +2. Scale Groups > a scale group + + * Lists products belonging to the scale group + +3. Logs + + * Automatically sent if "Send to Scale" CRON is active (debug mode, via Settings > Technical > Automation > Scheduled Actions) + +Changelog +========= + +This module comes originally from the ``product_to_scale_bizerba`` module created by Grap (see `here `_). +It was forked from `this commit `_. +The original module continued to evolve and is now available `here `_. +Another version exists `here `_ (12.0) and `here `_ (9.0). + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Coop IT Easy SC +* GRAP + +Contributors +~~~~~~~~~~~~ + +* `Grap `_: + + * Sylvain Le Gal + +* `Coop IT Easy SC `_: + + * Houssine Bakkali + * Rémy Taymans + * Vincent Van Rossem + +Maintainers +~~~~~~~~~~~ + +This module is part of the `coopiteasy/addons `_ project on GitHub. + +You are welcome to contribute. diff --git a/product_to_bizerba_scale/__init__.py b/product_to_bizerba_scale/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/product_to_bizerba_scale/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_to_bizerba_scale/__manifest__.py b/product_to_bizerba_scale/__manifest__.py new file mode 100644 index 000000000..0fe1c2539 --- /dev/null +++ b/product_to_bizerba_scale/__manifest__.py @@ -0,0 +1,37 @@ +# Copyright 2014-2017 GRAP (http://www.grap.coop) +# - Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2017-Today Coop IT Easy SC +# - Houssine BAKKALI +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Product to Bizerba Scale", + "summary": "Synchronize Odoo database with Bizerba Scales", + "author": "Coop IT Easy SC, GRAP", + "website": "https://github.com/coopiteasy/addons", + "category": "Sales/Point of Sale", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "depends": [ + "product_scale_label", + ], + "data": [ + "security/ir_module_category.xml", + "security/res_groups.xml", + "security/ir.model.access.csv", + "data/ir_cron.xml", + "views/product_template_view.xml", + "views/uom_uom_view.xml", + "views/product_scale_system_view.xml", + "views/product_scale_group_view.xml", + "views/product_scale_log_view.xml", + "views/action.xml", + "views/menu.xml", + ], + "demo": [ + "demo/product_scale_system.xml", + "demo/product_scale_system_product_line.xml", + "demo/product_scale_group.xml", + "demo/product_template.xml", + "demo/decimal_precision.xml", + ], +} diff --git a/product_to_bizerba_scale/data/ir_cron.xml b/product_to_bizerba_scale/data/ir_cron.xml new file mode 100644 index 000000000..0b16161b8 --- /dev/null +++ b/product_to_bizerba_scale/data/ir_cron.xml @@ -0,0 +1,14 @@ + + + + Send to Scale + 5 + minutes + -1 + + + code + model.cron_send_to_scale() + + + diff --git a/product_to_bizerba_scale/demo/decimal_precision.xml b/product_to_bizerba_scale/demo/decimal_precision.xml new file mode 100644 index 000000000..2add96e38 --- /dev/null +++ b/product_to_bizerba_scale/demo/decimal_precision.xml @@ -0,0 +1,8 @@ + + + + + 3 + + + diff --git a/product_to_bizerba_scale/demo/product_scale_group.xml b/product_to_bizerba_scale/demo/product_scale_group.xml new file mode 100644 index 000000000..f660e8f5e --- /dev/null +++ b/product_to_bizerba_scale/demo/product_scale_group.xml @@ -0,0 +1,16 @@ + + + + + Fruits + + 1 + + + + Vegetables + + 2 + + + diff --git a/product_to_bizerba_scale/demo/product_scale_system.xml b/product_to_bizerba_scale/demo/product_scale_system.xml new file mode 100644 index 000000000..505cfb2f1 --- /dev/null +++ b/product_to_bizerba_scale/demo/product_scale_system.xml @@ -0,0 +1,12 @@ + + + + + Bizerba Demo System + /bizerba_test/IMPORT/ + /bizerba_test/IMAGE_IMPORT/ + TEXT_MAG_0000_%Y%m%d_%H%M%S.CSV + ARTI_MAG_0000_%Y%m%d_%H%M%S.CSV + + + diff --git a/product_to_bizerba_scale/demo/product_scale_system_product_line.xml b/product_to_bizerba_scale/demo/product_scale_system_product_line.xml new file mode 100644 index 000000000..ff90338d0 --- /dev/null +++ b/product_to_bizerba_scale/demo/product_scale_system_product_line.xml @@ -0,0 +1,440 @@ + + + + + + ABNR + Bizerba Shelf ID + 2 + many2one + + + # + + + + + + PLNR + Product ID + 3 + id + # + + + + + ABEZ + Product Name + 4 + text + + 40 + @0A + # + + + + + WGNR + PoS Category ID + 5 + + constant + 0 + # + + + + + PREI + Public Price (x 100) + 6 + numeric + + 100 + 1 + # + + + + + HAL1 + Days before Sale End + 7 + + constant + 7 + # + + + + + HAL2 + Days before Consumption End + 8 + + constant + 14 + # + + + + + EAN1 + Product Barcode + 9 + text + + # + + + + + AART + To Weight ('P' / 'F') + 10 + many2one + + + # + + + + + TARA + Tare Weight + 11 + numeric + + 1000 + 1 + # + + + + + FIXG + Fixed Weight + 12 + numeric + + 1000 + 1 + # + + + + + LOG1 + Logo #1 + 13 + constant + 999 + # + + + + + LOG1 + Logo #2 + 14 + + constant + 0 + # + + + + + LOG3 + Logo #3 + 15 + + constant + 0 + # + + + + + LOG4 + Logo #4 + 16 + + constant + 0 + # + + + + + LOG5 + Logo #5 + 17 + + constant + 0 + # + + + + + ZUT1 + Ingredients (#1) + 18 + external_constant + TODO - Ingredient #1 + # + + + + + ZUT2 + Ingredients (#2) + 19 + external_constant + TODO - Ingredient #2 + # + + + + + ZUT3 + Ingredients (#3) + 20 + external_constant + TODO - Ingredient #3 + # + + + + + ZUT4 + Ingredients (#4) + 21 + external_constant + TODO - Ingredient #4 + # + + + + + TX01 + Text (#01) + 22 + constant + Packed + # + + + + + TX02 + Text (#02) + 23 + external_constant + Best Before + # + + + + + TX03 + Text (#03) + 24 + + external_constant + TODO - Conservation Text + # + + + + + TX04 + Text (#04) + 25 + + external_constant + TODO - Freeze Text + # + + + + + TX05 + Text (#05) + 26 + external_constant + For Sale Before + # + + + + + TX06 + Text (#06) + 27 + external_constant + Unit Price + # + + + + + TX07 + Text (#07) + 28 + external_constant + Net Weight + # + + + + + TX08 + Text (#08) + 29 + external_constant + Price + # + + + + + TX09 + Unused Text (#09) + 30 + constant + 0 + # + + + + + TX10 + Text (#10) + 31 + constant + 0 + # + + + + + MDAT + Main Image + 32 + product_image + + .PNG + # + + + + diff --git a/product_to_bizerba_scale/demo/product_template.xml b/product_to_bizerba_scale/demo/product_template.xml new file mode 100644 index 000000000..c9af51a99 --- /dev/null +++ b/product_to_bizerba_scale/demo/product_template.xml @@ -0,0 +1,38 @@ + + + + + Apple (Gala, small) + 2.05 + 2341321000002 + + + + 0.015 + 1 + + + + Salade (Lettuce, Mache) + 1.20 + 2304639000003 + 0.250 + + + + 0.005 + 1 + + + + Cucumber (Green) + 2.40 + 2304062000007 + + + + 0.015 + 2 + + + diff --git a/product_to_bizerba_scale/i18n/fr.po b/product_to_bizerba_scale/i18n/fr.po new file mode 100644 index 000000000..8f1ac80c1 --- /dev/null +++ b/product_to_bizerba_scale/i18n/fr.po @@ -0,0 +1,699 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_to_scale_bizerba +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__action +msgid "Action" +msgstr "Action" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__active +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__active +msgid "Active" +msgstr "Actif" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_ids +msgid "Activities" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_state +msgid "Activity State" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:product.template,name:product_to_bizerba_scale.apple +msgid "Apple (Gala, small)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__code +msgid "Bizerba Code" +msgstr "Code Bizerba" + +#. module: product_to_bizerba_scale +#: model:ir.module.category,name:product_to_bizerba_scale.category_bizerba_scale +msgid "Bizerba Scale" +msgstr "Balance Bizerba" + +#. module: product_to_bizerba_scale +#: model:res.groups,name:product_to_bizerba_scale.group_manager +msgid "Bizerba Scale Manager" +msgstr "Gestionnaire de Balance Bizerba" + +#. module: product_to_bizerba_scale +#: model:res.groups,name:product_to_bizerba_scale.group_user +msgid "Bizerba Scale User" +msgstr "Utilisateur de Balance Bizerba" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__text +msgid "Char / Text Field" +msgstr "Champ texte" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__company_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__company_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__company_id +msgid "Company" +msgstr "Société" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__constant_value +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__constant +msgid "Constant Value" +msgstr "Constante" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_product__scale_tare_weight +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_template__scale_tare_weight +msgid "" +"Constant tare weight of the product. This tare will be substracted when the " +"product is weighted. Useful for weighable products only.\n" +"The tare is defined with kg UoM." +msgstr "" +"Poids constant de la tare pour l'article. Cette tare sera soustraite quand " +"l'article sera pesé. Utile seulement pour les produits à peser.\n" +"La tare est définie au kg." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__create_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__create_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__create_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__create_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__create_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__create_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_log__action__create +msgid "Creation" +msgstr "Création" + +#. module: product_to_bizerba_scale +#: model:product.template,name:product_to_bizerba_scale.cucumber +msgid "Cucumber (Green)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_log__action__unlink +msgid "Deletion" +msgstr "Suppression" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__delimiter +msgid "Delimiter Char" +msgstr "Délimitateur" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__display_name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__display_name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__display_name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__encoding +msgid "Encoding" +msgstr "Encodage" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__external_constant +msgid "External Constant Text Value" +msgstr "Constante externe" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__external_identity +msgid "External ID" +msgstr "ID Externe" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__external_text +msgid "External Text" +msgstr "Texte externe" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__external_text_display +msgid "External Text (Display)" +msgstr "Texte externe (Valeur affichée)" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__external_text +msgid "External Text Field" +msgstr "Champ texte externe" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__external_text_file_pattern +msgid "External Text File Pattern" +msgstr "Motif de fichier (Texte externe)" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_system_form +msgid "FTP Connexion" +msgstr "Connexion FTP" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__ftp_login +msgid "FTP Login" +msgstr "Login FTP" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__ftp_password +msgid "FTP Password" +msgstr "Mot de passe FTP" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__ftp_url +msgid "FTP Server URL" +msgstr "URL du serveur FTP" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__field_ids +msgid "Fields" +msgstr "Champs" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__id +msgid "ID" +msgstr "ID" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__sent +msgid "Is Sent" +msgstr "Envoyé" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group____last_update +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log____last_update +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system____last_update +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__last_send_date +msgid "Last Send Date" +msgstr "Date de dernier envoi" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__write_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__write_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__write_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__write_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__write_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__write_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system__encoding__cp1252 +msgid "Latin 1 (cp1252)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system__encoding__iso-8859-1 +msgid "Latin 1 (iso-8859-1)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_length +msgid "Length for Multiline" +msgstr "Taille pour les multilignes" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_system_form +msgid "Line Settings" +msgstr "Configuration des lignes" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__log_date +msgid "Log Date" +msgstr "Date du log" + +#. module: product_to_bizerba_scale +#: model:ir.actions.act_window,name:product_to_bizerba_scale.action_product_scale_log +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_product_scale_log +msgid "Logs" +msgstr "Logs" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__related_field_id +msgid "M2M / M2O Field" +msgstr "Champ M2M / M2O" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Manual Deletion in the Scale System" +msgstr "Suppression manuelle sur le système de balance" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__many2many +msgid "Many2many Field" +msgstr "Champ Many2many" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__many2one +msgid "Many2one Field" +msgstr "Champ Many2one" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__name +msgid "Name" +msgstr "Nom" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_coefficient +msgid "Numeric Coefficient" +msgstr "Coefficient Numérique" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__numeric +msgid "Numeric Field" +msgstr "Champ numérique" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system__external_text_file_pattern +msgid "" +"Pattern of the External Text file. Use % to include dated information. Ref: " +"https://docs.python.org/3/library/time.html#time.strftime" +msgstr "" +"Motif du fichier de textes externes. Utiliser % pour horodater votre " +"fichier.\n" +"Réf: https://docs.python.org/3/library/time.html#time.strftime" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system__product_text_file_pattern +msgid "" +"Pattern of the Product file. Use % to include dated information. Ref: " +"https://docs.python.org/3/library/time.html#time.strftime" +msgstr "" +"Motif du fichier de produits. Utiliser % pour horodater votre fichier.\n" +"Réf: https://docs.python.org/3/library/time.html#time.strftime" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_template +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__product_id +msgid "Product" +msgstr "Article" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__field_id +msgid "Product Field" +msgstr "Champ de l'article" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__id +msgid "Product ID" +msgstr "ID de l'article" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__product_image +msgid "Product Image" +msgstr "Image de l'article" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__product_line_ids +msgid "Product Lines" +msgstr "Lignes d'articles" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_group +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_product__scale_group_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_template__scale_group_id +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Product Scale Group" +msgstr "Groupe de produits (balance)" + +#. module: product_to_bizerba_scale +#: model:ir.actions.act_window,name:product_to_bizerba_scale.action_product_scale_group +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_product_scale_group +msgid "Product Scale Groups" +msgstr "Groupes de produits (balance)" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_system +msgid "Product Scale System" +msgstr "Système de balances" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_system_product_line +msgid "Product Scale System Product Line" +msgstr "Ligne de produit pour balance" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__product_text +msgid "Product Text" +msgstr "Texte de l'article" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__product_text_file_pattern +msgid "Product Text File Pattern" +msgstr "Motif de fichier (Articles)" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unité de mesure d'article" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__product_ids +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Products" +msgstr "Articles" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__product_qty +msgid "Products Quantity" +msgstr "Nombre d'articles" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__x2many_range +msgid "Range of the x2Many Fields" +msgstr "Index des champs x2Many" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__csv_relative_path +msgid "Relative Path for CSV" +msgstr "Chemin relatif pour les fichiers CSV" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__product_image_relative_path +msgid "Relative Path for Product Images" +msgstr "Chemin relatif pour les images d'articles" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Resend Creation All To the Scale System" +msgstr "Réenvoyer la création de tous au système de balance" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Resend Creation To the Scale System" +msgstr "Réenvoyer la création au système de balance" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Resend Update All To the Scale System" +msgstr "Réenvoyer la mise à jour de tous au système de balance" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Resend Update To the Scale System" +msgstr "Réenvoyer la mise à jour au système de balance" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_round +msgid "Rounding Method" +msgstr "Méthode d'arrondi" + +#. module: product_to_bizerba_scale +#: model:product.template,name:product_to_bizerba_scale.salad +msgid "Salade (Lettuce, Mache)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Scale" +msgstr "Balance" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Scale Communication" +msgstr "Communication avec la balance" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_log +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_log_form +msgid "Scale Log" +msgstr "Log balance" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_product__scale_sequence +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_template__scale_sequence +msgid "Scale Sequence" +msgstr "Séquence sur la balance" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__scale_system_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__scale_system_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__scale_system_id +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_system_form +msgid "Scale System" +msgstr "Système de balances" + +#. module: product_to_bizerba_scale +#: model:ir.actions.act_window,name:product_to_bizerba_scale.action_product_scale_system +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_product_scale_system +msgid "Scale Systems" +msgstr "Systèmes de balances" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_product__scale_tare_weight +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_template__scale_tare_weight +msgid "Scale Tare Weight" +msgstr "Poids de la tare" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_uom_uom__scale_type +msgid "Scale Type" +msgstr "Type balance (P / F)" + +#. module: product_to_bizerba_scale +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_scale_root +msgid "Scales" +msgstr "Balances" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Send Delete All To the Scale System" +msgstr "Envoyer la suppression de tous au système de balance" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__send_product_image +msgid "Send Product Image" +msgstr "Envoyer l'image de l'article" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_log_form +msgid "Send to FTP Server" +msgstr "Envoyer au serveur FTP" + +#. module: product_to_bizerba_scale +#: model:ir.actions.server,name:product_to_bizerba_scale.ir_cron_send_to_scale_ir_actions_server +#: model:ir.cron,cron_name:product_to_bizerba_scale.ir_cron_send_to_scale +msgid "Send to Scale" +msgstr "Envoyer à la balance" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_separator +msgid "Separator for Multiline" +msgstr "Séparateur pour les multilignes" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__suffix +msgid "Suffix" +msgstr "Suffixe" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__type +msgid "Type" +msgstr "Type" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system__encoding__utf-8 +msgid "UTF-8" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_log__action__write +msgid "Update" +msgstr "Update" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__suffix +msgid "" +"Used if type is 'External Text Field', to indicate how to suffix the field.\n" +"Make sure to have a uniq value by Scale System, and all with the same size.\n" +"\n" +"Used if type is Product Image to mention the end of the file. Exemple : '_01." +"jpg'. " +msgstr "" +"Utilisé si le type est Champ Texte externe, pour indiquer comment suffixer " +"le champs.\n" +"Faire attention d'avoir une valeur unique pour tout le sytème de balance, et " +"toujours de la même taille.\n" +"\n" +"Utilisé si le type est 'Image d'article', pour mentionné la fin du type de " +"fichier. Exemple : '_01.jpg'." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__x2many_range +msgid "" +"Used if type is 'Many2Many Field', to mention the range of the field to " +"send. Begin by 0. (used for exemple for product logos) " +msgstr "" +"Utilisé si le champ est de type Many2Many, pour mentionner l'index du champ " +"à envoyer. Commencer par 0. (utilisé pour envoyer par exemple les logos d'un " +"article)" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_round +msgid "" +"Used if type is 'Numeric Field', to mention how the value should be " +"rounded.\n" +"Do not Use 0, because it will truncate the value." +msgstr "" +"Utilisé pour les champs de type Numérique, pour indiquer comment la valeur " +"sera arrondie..\n" +" N'utilisez pas la valeur 0, car la valeur sera tronquée." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_coefficient +msgid "" +"Used if type is 'Numeric Field', to mention which coefficient numeric field " +"should be multiplied." +msgstr "" +"Utilisé si le type est de type Numérique, pour indiquer le coefficient " +"multiplicateur à appliquer." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_length +msgid "" +"Used if type is 'Text Field' or 'External Text Constant', to indicate the " +"max length of a line. Set 0 to avoid to split the value." +msgstr "" +"Utilisé si le champ est de type Texte, ou Texte Constant externe, pour " +"indiquer la taille maximum de la ligne. Mettre 0 pour éviter de couper la " +"valeur." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_separator +msgid "" +"Used if type is 'Text Field' or 'External Text Constant', to indicate wich " +"text will be used to mention break lines." +msgstr "" +"Utilisé pour les champs de type Texte ou Constante Texte externe, pour " +"indiquer avec quel caractère la ligne sera indiquée comme coupée." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__constant_value +msgid "Used if type is 'constant', to always send the same value." +msgstr "" +"Utilisé si le champ est de type constante, pour envoyer toujours la même " +"valeur." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__related_field_id +msgid "" +"Used only for the x2x fields. Set here the field of the related model that " +"you want to send to the scale. Let empty to send the ID. " +msgstr "" +"Utilisé pour les champs x2x. mettre le nom du champ dans le modèle lié que " +"vous voulez envoyer la balance. Laisser vide si vous souhaitez envoyer l'ID." + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__delimiter +msgid "Used to finish the column" +msgstr "Utilisé pour terminer la colonne" diff --git a/product_to_bizerba_scale/i18n/product_to_bizerba_scale.pot b/product_to_bizerba_scale/i18n/product_to_bizerba_scale.pot new file mode 100644 index 000000000..a1b6ea27b --- /dev/null +++ b/product_to_bizerba_scale/i18n/product_to_bizerba_scale.pot @@ -0,0 +1,663 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_to_bizerba_scale +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\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: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__action +msgid "Action" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__active +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__active +msgid "Active" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_ids +msgid "Activities" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_state +msgid "Activity State" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:product.template,name:product_to_bizerba_scale.apple +msgid "Apple (Gala, small)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__code +msgid "Bizerba Code" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.module.category,name:product_to_bizerba_scale.category_bizerba_scale +msgid "Bizerba Scale" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:res.groups,name:product_to_bizerba_scale.group_manager +msgid "Bizerba Scale Manager" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:res.groups,name:product_to_bizerba_scale.group_user +msgid "Bizerba Scale User" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__text +msgid "Char / Text Field" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__company_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__company_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__company_id +msgid "Company" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__constant_value +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__constant +msgid "Constant Value" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_product__scale_tare_weight +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_template__scale_tare_weight +msgid "" +"Constant tare weight of the product. This tare will be substracted when the product is weighted. Useful for weighable products only.\n" +"The tare is defined with kg UoM." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__create_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__create_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__create_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__create_uid +msgid "Created by" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__create_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__create_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__create_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__create_date +msgid "Created on" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_log__action__create +msgid "Creation" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:product.template,name:product_to_bizerba_scale.cucumber +msgid "Cucumber (Green)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_log__action__unlink +msgid "Deletion" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__delimiter +msgid "Delimiter Char" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__display_name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__display_name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__display_name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__display_name +msgid "Display Name" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__encoding +msgid "Encoding" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__external_constant +msgid "External Constant Text Value" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__external_identity +msgid "External ID" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__external_text +msgid "External Text" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__external_text_display +msgid "External Text (Display)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__external_text +msgid "External Text Field" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__external_text_file_pattern +msgid "External Text File Pattern" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_system_form +msgid "FTP Connexion" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__ftp_login +msgid "FTP Login" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__ftp_password +msgid "FTP Password" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__ftp_url +msgid "FTP Server URL" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__field_ids +msgid "Fields" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__id +msgid "ID" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__sent +msgid "Is Sent" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group____last_update +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log____last_update +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system____last_update +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__last_send_date +msgid "Last Send Date" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__write_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__write_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__write_uid +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__write_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__write_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__write_date +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system__encoding__cp1252 +msgid "Latin 1 (cp1252)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system__encoding__iso-8859-1 +msgid "Latin 1 (iso-8859-1)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_length +msgid "Length for Multiline" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_system_form +msgid "Line Settings" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__log_date +msgid "Log Date" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.actions.act_window,name:product_to_bizerba_scale.action_product_scale_log +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_product_scale_log +msgid "Logs" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__related_field_id +msgid "M2M / M2O Field" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Manual Deletion in the Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__many2many +msgid "Many2many Field" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__many2one +msgid "Many2one Field" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__name +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__name +msgid "Name" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_coefficient +msgid "Numeric Coefficient" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__numeric +msgid "Numeric Field" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system__external_text_file_pattern +msgid "" +"Pattern of the External Text file. Use % to include dated information. Ref: " +"https://docs.python.org/3/library/time.html#time.strftime" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system__product_text_file_pattern +msgid "" +"Pattern of the Product file. Use % to include dated information. Ref: " +"https://docs.python.org/3/library/time.html#time.strftime" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_template +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__product_id +msgid "Product" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__field_id +msgid "Product Field" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__id +msgid "Product ID" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system_product_line__type__product_image +msgid "Product Image" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__product_line_ids +msgid "Product Lines" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_group +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_product__scale_group_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_template__scale_group_id +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Product Scale Group" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.actions.act_window,name:product_to_bizerba_scale.action_product_scale_group +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_product_scale_group +msgid "Product Scale Groups" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_system +msgid "Product Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_system_product_line +msgid "Product Scale System Product Line" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__product_text +msgid "Product Text" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__product_text_file_pattern +msgid "Product Text File Pattern" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__product_ids +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Products" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__product_qty +msgid "Products Quantity" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__x2many_range +msgid "Range of the x2Many Fields" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__csv_relative_path +msgid "Relative Path for CSV" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system__product_image_relative_path +msgid "Relative Path for Product Images" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Resend Creation All To the Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Resend Creation To the Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Resend Update All To the Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Resend Update To the Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_round +msgid "Rounding Method" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:product.template,name:product_to_bizerba_scale.salad +msgid "Salade (Lettuce, Mache)" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Scale" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.product_template_form_view +msgid "Scale Communication" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model,name:product_to_bizerba_scale.model_product_scale_log +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_log_form +msgid "Scale Log" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_product__scale_sequence +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_template__scale_sequence +msgid "Scale Sequence" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_group__scale_system_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__scale_system_id +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__scale_system_id +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_system_form +msgid "Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.actions.act_window,name:product_to_bizerba_scale.action_product_scale_system +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_product_scale_system +msgid "Scale Systems" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_product__scale_tare_weight +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_template__scale_tare_weight +msgid "Scale Tare Weight" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_uom_uom__scale_type +msgid "Scale Type" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.ui.menu,name:product_to_bizerba_scale.menu_scale_root +msgid "Scales" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_group_form +msgid "Send Delete All To the Scale System" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_log__send_product_image +msgid "Send Product Image" +msgstr "" + +#. module: product_to_bizerba_scale +#: model_terms:ir.ui.view,arch_db:product_to_bizerba_scale.view_product_scale_log_form +msgid "Send to FTP Server" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.actions.server,name:product_to_bizerba_scale.ir_cron_send_to_scale_ir_actions_server +#: model:ir.cron,cron_name:product_to_bizerba_scale.ir_cron_send_to_scale +msgid "Send to Scale" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_separator +msgid "Separator for Multiline" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__sequence +msgid "Sequence" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__suffix +msgid "Suffix" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,field_description:product_to_bizerba_scale.field_product_scale_system_product_line__type +msgid "Type" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_log__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_system__encoding__utf-8 +msgid "UTF-8" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields.selection,name:product_to_bizerba_scale.selection__product_scale_log__action__write +msgid "Update" +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__suffix +msgid "" +"Used if type is 'External Text Field', to indicate how to suffix the field.\n" +"Make sure to have a uniq value by Scale System, and all with the same size.\n" +"\n" +"Used if type is Product Image to mention the end of the file. Exemple : '_01.jpg'. " +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__x2many_range +msgid "" +"Used if type is 'Many2Many Field', to mention the range of the field to " +"send. Begin by 0. (used for exemple for product logos) " +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_round +msgid "" +"Used if type is 'Numeric Field', to mention how the value should be rounded.\n" +"Do not Use 0, because it will truncate the value." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__numeric_coefficient +msgid "" +"Used if type is 'Numeric Field', to mention which coefficient numeric field " +"should be multiplied." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_length +msgid "" +"Used if type is 'Text Field' or 'External Text Constant', to indicate the " +"max length of a line. Set 0 to avoid to split the value." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__multiline_separator +msgid "" +"Used if type is 'Text Field' or 'External Text Constant', to indicate wich " +"text will be used to mention break lines." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__constant_value +msgid "Used if type is 'constant', to always send the same value." +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__related_field_id +msgid "" +"Used only for the x2x fields. Set here the field of the related model that " +"you want to send to the scale. Let empty to send the ID. " +msgstr "" + +#. module: product_to_bizerba_scale +#: model:ir.model.fields,help:product_to_bizerba_scale.field_product_scale_system_product_line__delimiter +msgid "Used to finish the column" +msgstr "" diff --git a/product_to_bizerba_scale/models/__init__.py b/product_to_bizerba_scale/models/__init__.py new file mode 100644 index 000000000..98668b4be --- /dev/null +++ b/product_to_bizerba_scale/models/__init__.py @@ -0,0 +1,6 @@ +from . import product_scale_group +from . import product_scale_log +from . import product_scale_system +from . import product_scale_system_product_line +from . import product_template +from . import uom_uom diff --git a/product_to_bizerba_scale/models/product_scale_group.py b/product_to_bizerba_scale/models/product_scale_group.py new file mode 100644 index 000000000..c7418cdd6 --- /dev/null +++ b/product_to_bizerba_scale/models/product_scale_group.py @@ -0,0 +1,59 @@ +# Copyright 2014-2017 GRAP (http://www.grap.coop) +# - Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2017-Today Coop IT Easy SC +# - Houssine BAKKALI +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import api, fields, models + + +class ProductScaleGroup(models.Model): + _name = "product.scale.group" + _description = "Product Scale Group" + + name = fields.Char(required=True) + active = fields.Boolean(default=True) + external_identity = fields.Char(string="External ID", required=True) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + default=lambda self: self.env.company, + index=True, + ) + scale_system_id = fields.Many2one( + comodel_name="product.scale.system", + string="Scale System", + required=True, + ) + product_ids = fields.One2many( + comodel_name="product.template", + inverse_name="scale_group_id", + string="Products", + ) + product_qty = fields.Integer( + string="Products Quantity", compute="_compute_product_qty" + ) + + def send_all_to_scale_create(self): + for scale_group in self: + ( + scale_group.product_ids.filtered( + lambda r: r.is_in_scale() + ).send_scale_create() + ) + + def send_all_to_scale_write(self): + for scale_group in self: + ( + scale_group.product_ids.filtered( + lambda r: r.is_in_scale() + ).send_scale_write() + ) + + def send_all_to_scale_unlink(self): + for scale_group in self: + scale_group.product_ids.send_scale_unlink() + + @api.depends("product_ids") + def _compute_product_qty(self): + for group in self: + group.product_qty = len(group.product_ids) diff --git a/product_to_bizerba_scale/models/product_scale_log.py b/product_to_bizerba_scale/models/product_scale_log.py new file mode 100644 index 000000000..b222afc21 --- /dev/null +++ b/product_to_bizerba_scale/models/product_scale_log.py @@ -0,0 +1,316 @@ +# Copyright 2014-2017 GRAP (http://www.grap.coop) +# - Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2017-Today Coop IT Easy SC +# - Houssine BAKKALI +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import codecs +import io +import logging +import os +from datetime import datetime + +from odoo import api, fields, models, tools + +_logger = logging.getLogger(__name__) + +try: + from ftplib import FTP +except ImportError: + _logger.warning( + "Cannot import 'ftplib' Python Library. 'product_to_bizerba_scale' " + "module will not work properly. " + ) + + +class ProductScaleLog(models.Model): + _name = "product.scale.log" + _description = "Scale Log" + _inherit = "mail.activity.mixin" + _order = "log_date desc, id desc" + + _EXTERNAL_SIZE_ID_RIGHT = 4 + + _DELIMITER = "#" + + _ACTION_SELECTION = [ + ("create", "Creation"), + ("write", "Update"), + ("unlink", "Deletion"), + ] + + _ACTION_MAPPING = {"create": "C", "write": "C", "unlink": "S"} + + _ENCODING_MAPPING = {"iso-8859-1": "\r\n", "cp1252": "\n", "utf-8": "\n"} + + _EXTERNAL_TEXT_ACTION_CODE = "C" + + _EXTERNAL_TEXT_DELIMITER = "#" + + _FTP_TIMEOUT = 5 + + log_date = fields.Datetime(required=True) + scale_system_id = fields.Many2one( + comodel_name="product.scale.system", + string="Scale System", + required=True, + ) + send_product_image = fields.Boolean() + product_id = fields.Many2one("product.template", string="Product") + product_text = fields.Text(compute="_compute_text", store=True) + external_text = fields.Text(compute="_compute_text", store=True) + external_text_display = fields.Text( + compute="_compute_text", string="External Text (Display)", store=True + ) + action = fields.Selection(selection=_ACTION_SELECTION, required=True) + sent = fields.Boolean(string="Is Sent") + last_send_date = fields.Datetime() + + # Private Section + def _clean_value(self, value, product_line): + if not value: + return "" + elif product_line.multiline_length: + res = "" + current_val = value + while current_val: + res += current_val[: product_line.multiline_length] + current_val = current_val[product_line.multiline_length :] + if current_val: + res += product_line.multiline_separator + else: + res = value + if product_line.delimiter: + return res.replace(product_line.delimiter, "") + else: + return res + + def _generate_external_text(self, value, product_line, external_id, log): + external_text_list = [ + self._EXTERNAL_TEXT_ACTION_CODE, # WALO Code + log.product_id.scale_group_id.external_identity, # ABNR Code + external_id, # TXNR Code + self._clean_value(value, product_line), # TEXT Code + ] + return self._EXTERNAL_TEXT_DELIMITER.join(external_text_list) + + # Compute Section + @api.depends("scale_system_id", "product_id") + def _compute_text(self): # noqa: C901 (method too complex) + for log in self: + + group = log.product_id.scale_group_id + product_text = self._ACTION_MAPPING[log.action] + self._DELIMITER + external_texts = [] + + # Set custom fields + for product_line in group.scale_system_id.product_line_ids: + if product_line.field_id: + value = getattr(log.product_id, product_line.field_id.name) + + if product_line.type == "id": + product_text += str(log.product_id.id) + + elif product_line.type == "numeric": + value = tools.float_round( + value * product_line.numeric_coefficient, + precision_rounding=product_line.numeric_round, + ) + product_text += str(value).replace(".0", "") + + elif product_line.type == "text": + product_text += self._clean_value(value, product_line) + + elif product_line.type == "external_text": + external_id = str(log.product_id.id) + str(product_line.id).rjust( + self._EXTERNAL_SIZE_ID_RIGHT, "0" + ) + external_texts.append( + self._generate_external_text( + value, product_line, external_id, log + ) + ) + product_text += external_id + + elif product_line.type == "constant": + product_text += self._clean_value( + product_line.constant_value, product_line + ) + + elif product_line.type == "external_constant": + # Constant Value are like product ID = 0 + external_id = str(product_line.id) + + external_texts.append( + self._generate_external_text( + product_line.constant_value, + product_line, + external_id, + log, + ) + ) + product_text += external_id + + elif product_line.type == "many2one": + # If the many2one is defined + if value and not product_line.related_field_id: + product_text += value.id + elif value and product_line.related_field_id: + item_value = getattr(value, product_line.related_field_id.name) + product_text += item_value and str(item_value) or "" + + elif product_line.type == "many2many": + # Select one value, depending of x2many_range + if product_line.x2many_range < len(value): + item = value[product_line.x2many_range - 1] + if product_line.related_field_id: + item_value = getattr( + item, product_line.related_field_id.name + ) + else: + item_value = item.id + product_text += self._clean_value(item_value, product_line) + + elif product_line.type == "product_image": + product_text += str(log.product_id.id) + product_line.suffix + + if product_line.delimiter: + product_text += product_line.delimiter + break_line = self._ENCODING_MAPPING[log.scale_system_id.encoding] + log.product_text = product_text + break_line + log.external_text = break_line.join(external_texts) + break_line + log.external_text_display = "\n".join( + [x.replace("\n", "") for x in external_texts] + ) + + # View Section + @api.model + def _needaction_count(self): + return len(self.search([("sent", "=", False)])) + + @api.model + def ftp_connection_open(self, scale_system): + """Return a new FTP connection with found parameters.""" + _logger.info( + "Trying to connect to ftp://%s@%s" + % (scale_system.ftp_login, scale_system.ftp_url) + ) + try: + ftp = FTP(scale_system.ftp_url, timeout=self._FTP_TIMEOUT) + if scale_system.ftp_login: + ftp.login(scale_system.ftp_login, scale_system.ftp_password) + else: + ftp.login() + return ftp + except Exception as e: + _logger.error( + "Connection to ftp://%s@%s failed: %s", + scale_system.ftp_login, + scale_system.ftp_url, + e, + ) + return False + + @api.model + def ftp_connection_close(self, ftp): + try: + ftp.quit() + except Exception as e: + _logger.error("Error closing the FTP connection: %s", e) + + @api.model + def ftp_connection_push_text_file( + self, + ftp, + distant_folder_path, + pattern, + lines, + encoding, + ): + if lines: + f_name = datetime.now().strftime(pattern) + distant_path = os.path.join(distant_folder_path, f_name) + with io.BytesIO("".join(lines).encode(encoding)) as f: + # Send File by FTP + ftp.storbinary("STOR " + distant_path, f) + + @api.model + def action_send_product_image(self, ftp, distant_folder_path, product_lst): + if not ftp: + return False + + for product in product_lst: + f_name = str(product.id) + ".jpeg" + datas = codecs.decode(product.image_256, "base64") + distant_path = os.path.join(distant_folder_path, f_name) + with io.BytesIO(datas) as f: + # Send File by FTP + ftp.storbinary("STOR " + distant_path, f) + return True + + def send_log(self, context=None, domain=None, order=None): + system_map = {} + if domain and order: # cron_send_to_scale + logs = self.search(domain, order=order) + else: + logs = self.browse(self.ids) + + for log in logs: + if log.scale_system_id in list(system_map.keys()): + system_map[log.scale_system_id].append(log) + else: + system_map[log.scale_system_id] = [log] + + for scale_system, logs in system_map.items(): + + # Open FTP Connection + ftp = self.ftp_connection_open(logs[0].scale_system_id) + if not ftp: + return False + + # Generate and Send Files + product_image_lst = [] + product_text_lst = [] + external_text_lst = [] + + for log in logs: + if log.send_product_image and log.product_id.image_256: + product_image_lst.append(log.product_id) + if log.product_text: + product_text_lst.append(log.product_text) + if log.external_text: + external_text_lst.append(log.external_text) + self.action_send_product_image( + ftp, + scale_system.product_image_relative_path, + product_image_lst, + ) + self.ftp_connection_push_text_file( + ftp, + scale_system.csv_relative_path, + scale_system.external_text_file_pattern, + external_text_lst, + scale_system.encoding, + ) + self.ftp_connection_push_text_file( + ftp, + scale_system.csv_relative_path, + scale_system.product_text_file_pattern, + product_text_lst, + scale_system.encoding, + ) + + # Close FTP Connection + self.ftp_connection_close(ftp) + + # Mark logs as sent + now = fields.Datetime.now() + for log in logs: + log.write({"sent": True, "last_send_date": now}) + return True + + @api.model + def cron_send_to_scale(self): + domain = [("sent", "=", False)] + order = "log_date" + self.send_log(domain=domain, order=order) diff --git a/product_to_bizerba_scale/models/product_scale_system.py b/product_to_bizerba_scale/models/product_scale_system.py new file mode 100644 index 000000000..62712d83d --- /dev/null +++ b/product_to_bizerba_scale/models/product_scale_system.py @@ -0,0 +1,72 @@ +# Copyright 2014-2017 GRAP (http://www.grap.coop) +# - Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2017-Today Coop IT Easy SC +# - Houssine BAKKALI +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ProductScaleSystem(models.Model): + _name = "product.scale.system" + _description = "Product Scale System" + + # Constant section + _ENCODING_SELECTION = [ + ("iso-8859-1", "Latin 1 (iso-8859-1)"), + ("cp1252", "Latin 1 (cp1252)"), + ("utf-8", "UTF-8"), + ] + + def _compute_field_ids(self): + for system in self: + values = [] + for product_line in system.product_line_ids: + if product_line.field_id: + values.append(product_line.field_id.id) + system.field_ids = values + + name = fields.Char(required=True) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + default=lambda self: self.env.company, + index=True, + ) + active = fields.Boolean(default=True) + ftp_url = fields.Char(string="FTP Server URL", default="xxx.xxx.xxx.xxx") + ftp_login = fields.Char(string="FTP Login") + ftp_password = fields.Char(string="FTP Password") + encoding = fields.Selection( + selection=_ENCODING_SELECTION, + default="iso-8859-1", + required=True, + ) + csv_relative_path = fields.Char( + string="Relative Path for CSV", default="/", required=True + ) + product_image_relative_path = fields.Char( + string="Relative Path for Product Images", default="/", required=True + ) + product_text_file_pattern = fields.Char( + required=True, + default="product.csv", + help="Pattern of the Product file. Use % to include dated information. " + "Ref: https://docs.python.org/3/library/time.html#time.strftime", + ) + external_text_file_pattern = fields.Char( + required=True, + default="external_text.csv", + help="Pattern of the External Text file. Use % to include dated " + "information. " + "Ref: https://docs.python.org/3/library/time.html#time.strftime", + ) + product_line_ids = fields.One2many( + comodel_name="product.scale.system.product.line", + inverse_name="scale_system_id", + string="Product Lines", + ) + field_ids = fields.One2many( + comodel_name="ir.model.fields", + compute="_compute_field_ids", + string="Fields", + ) diff --git a/product_to_bizerba_scale/models/product_scale_system_product_line.py b/product_to_bizerba_scale/models/product_scale_system_product_line.py new file mode 100644 index 000000000..f57fedf48 --- /dev/null +++ b/product_to_bizerba_scale/models/product_scale_system_product_line.py @@ -0,0 +1,102 @@ +# Copyright 2014-2017 GRAP (http://www.grap.coop) +# - Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2017-Today Coop IT Easy SC +# - Houssine BAKKALI +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ProductScaleSystemProductLine(models.Model): + _name = "product.scale.system.product.line" + _description = "Product Scale System Product Line" + _order = "scale_system_id, sequence" + + _TYPE_SELECTION = [ + ("id", "Product ID"), + ("numeric", "Numeric Field"), + ("text", "Char / Text Field"), + ("external_text", "External Text Field"), + ("constant", "Constant Value"), + ("external_constant", "External Constant Text Value"), + ("many2one", "Many2one Field"), + ("many2many", "Many2many Field"), + ("product_image", "Product Image"), + ] + + scale_system_id = fields.Many2one( + comodel_name="product.scale.system", + string="Scale System", + required=True, + ondelete="cascade", + index=True, + ) + company_id = fields.Many2one( + related="scale_system_id.company_id", string="Company", store=True + ) + code = fields.Char(string="Bizerba Code", required=True) + name = fields.Char(required=True) + sequence = fields.Integer(required=True, default=10) + type = fields.Selection(selection=_TYPE_SELECTION) + field_id = fields.Many2one( + comodel_name="ir.model.fields", + string="Product Field", + domain="[('model', 'in', ['product.template'])]", + ) + + # TODO Improve. Set domain, depending on the other field + related_field_id = fields.Many2one( + comodel_name="ir.model.fields", + string="M2M / M2O Field", + help="Used only for the x2x fields. Set here the field of the related " + "model that you want to send to the " + "scale. Let empty to send the ID. ", + ) + + x2many_range = fields.Integer( + string="Range of the x2Many Fields", + help="Used if type is 'Many2Many Field', to mention the range of the " + "field to send. Begin by 0. (used for exemple for product logos) ", + ) + constant_value = fields.Char( + help="Used if type is 'constant', to always send the same value.", + ) + multiline_length = fields.Integer( + string="Length for Multiline", + help="Used if type is 'Text Field' or 'External Text Constant', " + "to indicate the max length of a line. Set 0 " + "to avoid to split the value.", + default=0, + ) + multiline_separator = fields.Char( + string="Separator for Multiline", + help="Used if type is 'Text Field' or 'External Text Constant', " + "to indicate wich text will be used to mention " + "break lines.", + default="\n", + ) + + # TODO Improve. Set contrains. + suffix = fields.Char( + help="Used if type is 'External Text Field', to indicate how to " + "suffix the field.\nMake sure to have a uniq " + "value by Scale System, and all with the same size.\n\nUsed if type " + "is Product Image to mention the end " + "of the file. Exemple : '_01.jpg'. ", + ) + numeric_coefficient = fields.Float( + help="Used if type is 'Numeric Field', to mention which coefficient " + "numeric field should be multiplied.", + default=1, + ) + + numeric_round = fields.Float( + string="Rounding Method", + help="Used if type is 'Numeric Field', to mention how the value " + "should be rounded.\nDo not Use 0, because it " + "will truncate the value.", + default=1, + ) + delimiter = fields.Char( + string="Delimiter Char", help="Used to finish the column", default="#" + ) diff --git a/product_to_bizerba_scale/models/product_template.py b/product_to_bizerba_scale/models/product_template.py new file mode 100644 index 000000000..d530ae546 --- /dev/null +++ b/product_to_bizerba_scale/models/product_template.py @@ -0,0 +1,142 @@ +# Copyright 2014-2017 GRAP (http://www.grap.coop) +# - Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2017-Today Coop IT Easy SC +# - Houssine BAKKALI +# - Rémy TAYMANS +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + +# scale_category is defined in product_scale_label. this is why this module +# depends on it. +ADDITIONAL_FIELDS = ["list_price", "scale_category", "image_1920"] + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + scale_group_id = fields.Many2one( + comodel_name="product.scale.group", string="Product Scale Group" + ) + scale_sequence = fields.Integer() + scale_tare_weight = fields.Float( + digits="Stock Weight", + help="Constant tare weight of the product. This tare will be " + "substracted when the product is weighted. Useful for weighable " + "products only.\n" + "The tare is defined with kg UoM.", + ) + + # View Section + def send_scale_create(self): + for product in self: + # TODO: Should check if the product has a scale group + product._send_to_scale_bizerba("create", True) + return True + + def send_scale_write(self): + for product in self: + # TODO: Should check if the product has a scale group + product._send_to_scale_bizerba("write", True) + return True + + def send_scale_unlink(self): + for product in self: + # TODO: Should check if the product has a scale group + product._send_to_scale_bizerba("unlink") + return True + + # Custom Section + def _send_to_scale_bizerba(self, action, send_product_image=False): + log_obj = self.env["product.scale.log"] + log_obj.create( + { + "log_date": fields.Datetime.now(), + "scale_system_id": self.scale_group_id.scale_system_id.id, + "product_id": self.id, + "action": action, + "send_product_image": send_product_image, + } + ) + + def _check_vals_scale_bizerba(self, vals): + system = self.scale_group_id.scale_system_id + system_fields = [x.name for x in system.field_ids] + for product_field in ADDITIONAL_FIELDS: + if product_field not in system_fields: + system_fields.append(product_field) + vals_fields = list(vals.keys()) + return set(system_fields).intersection(vals_fields) + + def is_in_scale(self): + """Return True if the current product should be in the scale + system. + """ + self.ensure_one() + return self.active and self.sale_ok and self.scale_group_id + + def is_new_in_scale(self, vals): + """Return True if the current product will be new in the scale + system after the write. + """ + return not self.is_in_scale() and self.will_be_in_scale(vals) + + def will_be_in_scale(self, vals): + """Return True if the current product will be in the scale + system after the write. + """ + self.ensure_one() + return ( + vals.get("active", self.active) + and vals.get("sale_ok", self.sale_ok) + and vals.get("scale_group_id", self.scale_group_id) + ) + + # Overload Section + @api.model_create_multi + def create(self, vals_list): + products = super().create(vals_list) + for product in products: + if product.is_in_scale(): + product._send_to_scale_bizerba("create") + return products + + def write(self, vals): + deferred = {} + for product in self: + if product.is_new_in_scale(vals): + # Product is new to the scale system: create it. + deferred[product.id] = "create" + elif product.is_in_scale() and product.will_be_in_scale(vals): + # Product is in the scale system and will be in the + # scale system after the write: if there is changes in + # the fields related to the scale system, update it. + if product._check_vals_scale_bizerba(vals): + deferred[product.id] = "write" + # If scale_group has change, product must be updated. + if ( + "scale_group_id" in vals + and vals["scale_group_id"] != product.scale_group_id.id + ): + # Remove it from previous group + product._send_to_scale_bizerba("unlink") + # Send it in the new group + deferred[product.id] = "create" + elif product.is_in_scale() and not product.will_be_in_scale(vals): + # Product is in the scale system and will no longer be + # in the scale system after the write: delete it. + deferred[product.id] = "unlink" + + res = super().write(vals) + + for product_id, action in deferred.items(): + product = self.browse(product_id) + product._send_to_scale_bizerba(action, True) + + return res + + def unlink(self): + for product in self: + if product.is_in_scale(): + product._send_to_scale_bizerba("unlink") + return super().unlink() diff --git a/product_to_bizerba_scale/models/uom_uom.py b/product_to_bizerba_scale/models/uom_uom.py new file mode 100644 index 000000000..06e6ef402 --- /dev/null +++ b/product_to_bizerba_scale/models/uom_uom.py @@ -0,0 +1,13 @@ +# Copyright 2014-2017 GRAP (http://www.grap.coop) +# - Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2017-Today Coop IT Easy SC +# - Houssine BAKKALI +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class Uom(models.Model): + _inherit = "uom.uom" + + scale_type = fields.Char() diff --git a/product_to_bizerba_scale/readme/CONFIGURE.rst b/product_to_bizerba_scale/readme/CONFIGURE.rst new file mode 100644 index 000000000..c4dd6c459 --- /dev/null +++ b/product_to_bizerba_scale/readme/CONFIGURE.rst @@ -0,0 +1,17 @@ +Configuration via Point of Sale > Configuration: + +1. Scale Systems > a scale system: FTP Connexion + + * FTP Server URL + * FTP Login + * FTP Password + * Relative Path for CSV + * Relative Path for Product Images + +2. Scale Groups > a scale group + + * Lists products belonging to the scale group + +3. Logs + + * Automatically sent if "Send to Scale" CRON is active (debug mode, via Settings > Technical > Automation > Scheduled Actions) diff --git a/product_to_bizerba_scale/readme/CONTRIBUTORS.rst b/product_to_bizerba_scale/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..45f542048 --- /dev/null +++ b/product_to_bizerba_scale/readme/CONTRIBUTORS.rst @@ -0,0 +1,9 @@ +* `Grap `_: + + * Sylvain Le Gal + +* `Coop IT Easy SC `_: + + * Houssine Bakkali + * Rémy Taymans + * Vincent Van Rossem diff --git a/product_to_bizerba_scale/readme/DESCRIPTION.rst b/product_to_bizerba_scale/readme/DESCRIPTION.rst new file mode 100644 index 000000000..8769e2de7 --- /dev/null +++ b/product_to_bizerba_scale/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Synchronize Odoo database with Bizerba Scales diff --git a/product_to_bizerba_scale/readme/HISTORY.rst b/product_to_bizerba_scale/readme/HISTORY.rst new file mode 100644 index 000000000..2332fad39 --- /dev/null +++ b/product_to_bizerba_scale/readme/HISTORY.rst @@ -0,0 +1,4 @@ +This module comes originally from the ``product_to_scale_bizerba`` module created by Grap (see `here `_). +It was forked from `this commit `_. +The original module continued to evolve and is now available `here `_. +Another version exists `here `_ (12.0) and `here `_ (9.0). diff --git a/product_to_bizerba_scale/security/ir.model.access.csv b/product_to_bizerba_scale/security/ir.model.access.csv new file mode 100644 index 000000000..ace4db23f --- /dev/null +++ b/product_to_bizerba_scale/security/ir.model.access.csv @@ -0,0 +1,9 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_model_product_scale_group_all,access_model_product_scale_group_all,model_product_scale_group,,1,0,0,0 +access_model_product_scale_group_manager,access_model_product_scale_group_manager,model_product_scale_group,product_to_bizerba_scale.group_manager,1,1,1,1 +access_model_product_scale_system_all,access_model_product_scale_system_all,model_product_scale_system,,1,0,0,0 +access_model_product_scale_system_manager,access_model_product_scale_system_manager,model_product_scale_system,product_to_bizerba_scale.group_manager,1,1,1,1 +access_model_product_scale_system_product_line_all,access_model_product_scale_system_product_line_all,model_product_scale_system_product_line,,1,0,0,0 +access_model_product_scale_system_product_line_manager,access_model_product_scale_system_product_line_manager,model_product_scale_system_product_line,product_to_bizerba_scale.group_manager,1,1,1,1 +access_model_product_scale_log_all,access_model_product_scale_log_all,model_product_scale_log,,1,0,0,0 +access_model_product_scale_log_manager,access_model_product_scale_log_manager,model_product_scale_log,product_to_bizerba_scale.group_manager,1,1,1,1 diff --git a/product_to_bizerba_scale/security/ir_module_category.xml b/product_to_bizerba_scale/security/ir_module_category.xml new file mode 100644 index 000000000..5cbf1cb17 --- /dev/null +++ b/product_to_bizerba_scale/security/ir_module_category.xml @@ -0,0 +1,7 @@ + + + + Bizerba Scale + + + diff --git a/product_to_bizerba_scale/security/res_groups.xml b/product_to_bizerba_scale/security/res_groups.xml new file mode 100644 index 000000000..d1b2afb25 --- /dev/null +++ b/product_to_bizerba_scale/security/res_groups.xml @@ -0,0 +1,19 @@ + + + + + Bizerba Scale User + + + + + Bizerba Scale Manager + + + + + + diff --git a/product_to_bizerba_scale/static/description/barcode_rule.png b/product_to_bizerba_scale/static/description/barcode_rule.png new file mode 100644 index 000000000..82cad0a93 Binary files /dev/null and b/product_to_bizerba_scale/static/description/barcode_rule.png differ diff --git a/product_to_bizerba_scale/static/description/icon.png b/product_to_bizerba_scale/static/description/icon.png new file mode 100644 index 000000000..f3533a281 Binary files /dev/null and b/product_to_bizerba_scale/static/description/icon.png differ diff --git a/product_to_bizerba_scale/static/description/index.html b/product_to_bizerba_scale/static/description/index.html new file mode 100644 index 000000000..173ac2c77 --- /dev/null +++ b/product_to_bizerba_scale/static/description/index.html @@ -0,0 +1,463 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Product to Bizerba Scale

+ +

Beta License: AGPL-3 coopiteasy/addons

+

Synchronize Odoo database with Bizerba Scales

+

Table of contents

+ +
+

Configuration

+

Configuration via Point of Sale > Configuration:

+
    +
  1. Scale Systems > a scale system: FTP Connexion
      +
    • FTP Server URL
    • +
    • FTP Login
    • +
    • FTP Password
    • +
    • Relative Path for CSV
    • +
    • Relative Path for Product Images
    • +
    +
  2. +
  3. Scale Groups > a scale group
      +
    • Lists products belonging to the scale group
    • +
    +
  4. +
  5. Logs
      +
    • Automatically sent if “Send to Scale” CRON is active (debug mode, via Settings > Technical > Automation > Scheduled Actions)
    • +
    +
  6. +
+
+
+

Changelog

+

This module comes originally from the product_to_scale_bizerba module created by Grap (see here). +It was forked from this commit. +The original module continued to evolve and is now available here. +Another version exists here (12.0) and here (9.0).

+
+
+

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 to smash it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Coop IT Easy SC
  • +
  • GRAP
  • +
+
+
+

Contributors

+
    +
  • Grap:
      +
    • Sylvain Le Gal
    • +
    +
  • +
  • Coop IT Easy SC:
      +
    • Houssine Bakkali
    • +
    • Rémy Taymans
    • +
    • Vincent Van Rossem
    • +
    +
  • +
+
+
+

Maintainers

+

This module is part of the coopiteasy/addons project on GitHub.

+

You are welcome to contribute.

+
+
+
+
+ + diff --git a/product_to_bizerba_scale/views/action.xml b/product_to_bizerba_scale/views/action.xml new file mode 100644 index 000000000..8585fd7a0 --- /dev/null +++ b/product_to_bizerba_scale/views/action.xml @@ -0,0 +1,23 @@ + + + + Scale Systems + ir.actions.act_window + product.scale.system + tree,form + + + + Product Scale Groups + ir.actions.act_window + product.scale.group + tree,form + + + + Logs + ir.actions.act_window + product.scale.log + tree,form + + diff --git a/product_to_bizerba_scale/views/menu.xml b/product_to_bizerba_scale/views/menu.xml new file mode 100644 index 000000000..2d03e2ad8 --- /dev/null +++ b/product_to_bizerba_scale/views/menu.xml @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/product_to_bizerba_scale/views/product_scale_group_view.xml b/product_to_bizerba_scale/views/product_scale_group_view.xml new file mode 100644 index 000000000..703b3e051 --- /dev/null +++ b/product_to_bizerba_scale/views/product_scale_group_view.xml @@ -0,0 +1,69 @@ + + + + product.scale.group + + + + + + + + + + product.scale.group + +
+
+
+ + + +

+ +

+ +
+ + + + + + +
+ + + + + + + + + +
+
+ +
+
+
diff --git a/product_to_bizerba_scale/views/product_scale_log_view.xml b/product_to_bizerba_scale/views/product_scale_log_view.xml new file mode 100644 index 000000000..83600904c --- /dev/null +++ b/product_to_bizerba_scale/views/product_scale_log_view.xml @@ -0,0 +1,46 @@ + + + + product.scale.log + + + + + + + + + + + + + + product.scale.log + +
+
+
+ + + + + + + + + + + + + + + + + + + +
+
+
+
diff --git a/product_to_bizerba_scale/views/product_scale_system_view.xml b/product_to_bizerba_scale/views/product_scale_system_view.xml new file mode 100644 index 000000000..cb4037501 --- /dev/null +++ b/product_to_bizerba_scale/views/product_scale_system_view.xml @@ -0,0 +1,81 @@ + + + + product.scale.system + +
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
diff --git a/product_to_bizerba_scale/views/product_template_view.xml b/product_to_bizerba_scale/views/product_template_view.xml new file mode 100644 index 000000000..d38d766b0 --- /dev/null +++ b/product_to_bizerba_scale/views/product_template_view.xml @@ -0,0 +1,40 @@ + + + + product.template + + + + + + + + + + + +