From 44ef139cb6e175a1ff3c33648ef7257c52a09a5f Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Mon, 28 Nov 2022 09:42:02 +0100 Subject: [PATCH 01/31] [IMP] product_packaging_type: Rename to product_packaging_level --- product_packaging_level/README.rst | 94 ++++ product_packaging_level/__init__.py | 1 + product_packaging_level/__manifest__.py | 22 + .../data/product_packaging_level.xml | 9 + product_packaging_level/i18n/ca.po | 158 +++++++ product_packaging_level/i18n/es.po | 158 +++++++ product_packaging_level/i18n/nl.po | 156 +++++++ .../i18n/product_packaging_level.pot | 148 ++++++ product_packaging_level/models/__init__.py | 1 + .../models/product_packaging.py | 131 ++++++ .../models/product_packaging_level.py | 34 ++ .../readme/CONTRIBUTORS.rst | 7 + product_packaging_level/readme/CREDITS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + product_packaging_level/readme/USAGE.rst | 4 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 442 ++++++++++++++++++ product_packaging_level/tests/__init__.py | 1 + .../tests/test_product_packaging_level.py | 112 +++++ .../views/product_packaging_level_view.xml | 67 +++ .../views/product_packaging_view.xml | 50 ++ 22 files changed, 1602 insertions(+) create mode 100644 product_packaging_level/README.rst create mode 100644 product_packaging_level/__init__.py create mode 100644 product_packaging_level/__manifest__.py create mode 100644 product_packaging_level/data/product_packaging_level.xml create mode 100644 product_packaging_level/i18n/ca.po create mode 100644 product_packaging_level/i18n/es.po create mode 100644 product_packaging_level/i18n/nl.po create mode 100644 product_packaging_level/i18n/product_packaging_level.pot create mode 100644 product_packaging_level/models/__init__.py create mode 100644 product_packaging_level/models/product_packaging.py create mode 100644 product_packaging_level/models/product_packaging_level.py create mode 100644 product_packaging_level/readme/CONTRIBUTORS.rst create mode 100644 product_packaging_level/readme/CREDITS.rst create mode 100644 product_packaging_level/readme/DESCRIPTION.rst create mode 100644 product_packaging_level/readme/USAGE.rst create mode 100644 product_packaging_level/security/ir.model.access.csv create mode 100644 product_packaging_level/static/description/icon.png create mode 100644 product_packaging_level/static/description/index.html create mode 100644 product_packaging_level/tests/__init__.py create mode 100644 product_packaging_level/tests/test_product_packaging_level.py create mode 100644 product_packaging_level/views/product_packaging_level_view.xml create mode 100644 product_packaging_level/views/product_packaging_view.xml diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst new file mode 100644 index 00000000000..a99d9390007 --- /dev/null +++ b/product_packaging_level/README.rst @@ -0,0 +1,94 @@ +====================== +Product Packaging Type +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/16.0/product_packaging_level + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/135/16.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows odoo users to declare packaging levels (pallets, ...) + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To create a new packaging level: + +#. Go to *Sales > Configuration > Products > Product Packaging Level*. +#. You can create/edit/delete packaging levels + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* `Camptocamp `_ + + * Damien Crier + * Hiep (Nguyen Hoang) +* Christopher Ormaza + +* Denis Roussel + +Other credits +~~~~~~~~~~~~~ + +The development of this module has been financially supported by: + +* Camptocamp + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_packaging_level/__init__.py b/product_packaging_level/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_packaging_level/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py new file mode 100644 index 00000000000..0691987cc7a --- /dev/null +++ b/product_packaging_level/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2019-2020 Camptocamp (). +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +{ + "name": "Product Packaging Level", + "version": "16.0.1.0.0", + "development_status": "Beta", + "category": "Product", + "summary": "This module binds a product packaging to a packaging level", + "author": "Camptocamp, " "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", + "license": "LGPL-3", + "depends": ["product", "stock"], + "data": [ + "data/product_packaging_level.xml", + "security/ir.model.access.csv", + "views/product_packaging_level_view.xml", + "views/product_packaging_view.xml", + ], + "installable": True, + "auto_install": False, +} diff --git a/product_packaging_level/data/product_packaging_level.xml b/product_packaging_level/data/product_packaging_level.xml new file mode 100644 index 00000000000..de843e5626d --- /dev/null +++ b/product_packaging_level/data/product_packaging_level.xml @@ -0,0 +1,9 @@ + + + + Default Level + DEFAULT + 1 + + + diff --git a/product_packaging_level/i18n/ca.po b/product_packaging_level/i18n/ca.po new file mode 100644 index 00000000000..5ddca0405b6 --- /dev/null +++ b/product_packaging_level/i18n/ca.po @@ -0,0 +1,158 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_packaging_level +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-04-22 10:05+0000\n" +"Last-Translator: pablontura \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__active +msgid "Active" +msgstr "Actiu" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__barcode_required_for_gtin +msgid "Barcode Required For Gtin" +msgstr "Codi de barres necessari per a Gtin" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__code +msgid "Code" +msgstr "Codi" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: product_packaging_level +#: model:product.packaging.type,name:product_packaging_level.product_packaging_level_default +msgid "Default Type" +msgstr "Tipus per defecte" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name +msgid "Display Name" +msgstr "Nom de visualització" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__has_gtin +msgid "Has Gtin" +msgstr "Té Gtin" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__id +msgid "ID" +msgstr "ID" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__is_default +msgid "Is Default" +msgstr "És per defecte" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"It is forbidden to have different packagings with the same type for a given " +"product ({})." +msgstr "" +"Està prohibit tenir embalatges diferents amb el mateix tipus per a un " +"determinat producte ({})." + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update +msgid "Last Modified on" +msgstr "Última modificació el" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_uid +msgid "Last Updated by" +msgstr "Última actualització per" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_date +msgid "Last Updated on" +msgstr "Última actualització el" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name +msgid "Name" +msgstr "Nom" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "Only one product packaging level can be set as \"Is Default\"." +msgstr "" +"Només es pot establir un tipus d'embalatge de producte com a \"És " +"predeterminat\"." + +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +msgid "Packaging" +msgstr "Embalatge" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "Packaging Level" +msgstr "Tipus d'embalatge" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging +msgid "Product Packaging" +msgstr "Embalatge del producte" + +#. module: product_packaging_level +#: model:ir.actions.act_window,name:product_packaging_level.act_open_product_packaging_level_view +#: model:ir.ui.menu,name:product_packaging_level.menu_product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search +msgid "Product Packaging Level" +msgstr "Tipus d'embalatge del producte" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__qty_per_level +msgid "Qty per package level" +msgstr "Quantitat per tipus de paquet" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence +msgid "Sequence" +msgstr "Seqüència" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "There must be one product packaging level set as \"Is Default\"." +msgstr "" +"Hi ha d'haver un tipus d'embalatge de producte definit com a \"És " +"predeterminat\"." + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +#, fuzzy +msgid "Level management for product.packaging" +msgstr "Gestió de tipus per producte.packaging" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level sequence" +msgstr "Seqüència de tipus" diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po new file mode 100644 index 00000000000..4def3167eba --- /dev/null +++ b/product_packaging_level/i18n/es.po @@ -0,0 +1,158 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_packaging_level +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-10-14 14:08+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Level: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__active +msgid "Active" +msgstr "Activo" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__barcode_required_for_gtin +msgid "Barcode Required For Gtin" +msgstr "Código de barras obligatorio para Gtin" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__code +msgid "Code" +msgstr "Código" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: product_packaging_level +#: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default +msgid "Default Level" +msgstr "Tipo predeterminado" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__has_gtin +msgid "Has Gtin" +msgstr "Tiene Gtin" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__id +msgid "ID" +msgstr "ID" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__is_default +msgid "Is Default" +msgstr "Es predeterminado" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"It is forbidden to have different packagings with the same level for a given " +"product ({})." +msgstr "" +"Está prohibido tener diferentes embalajes con el mismo tipo para un producto " +"determinado ({})." + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name +msgid "Name" +msgstr "Nombre" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "Only one product packaging level can be set as \"Is Default\"." +msgstr "" +"Solo se puede establecer un tipo de empaque de producto como \"" +"Predeterminado\"." + +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +msgid "Packaging" +msgstr "Empaquetado" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "Packaging Level" +msgstr "Tipo de empaquetado" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging +msgid "Product Packaging" +msgstr "Empaquetado de producto" + +#. module: product_packaging_level +#: model:ir.actions.act_window,name:product_packaging_level.act_open_product_packaging_level_view +#: model:ir.ui.menu,name:product_packaging_level.menu_product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_tree +msgid "Product Packaging Level" +msgstr "Tipo de empaquetado de producto" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__qty_per_level +msgid "Qty per package level" +msgstr "Cantidad por tipo de paquete" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "There must be one product packaging level set as \"Is Default\"." +msgstr "" +"Debe haber un tipo de empaque de producto establecido como \"Es " +"predeterminado\"." + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +msgid "Level management for product.packaging" +msgstr "Tipo de administración para empaquetado de producto" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level sequence" +msgstr "Tipo de secuencia" diff --git a/product_packaging_level/i18n/nl.po b/product_packaging_level/i18n/nl.po new file mode 100644 index 00000000000..48196a60180 --- /dev/null +++ b/product_packaging_level/i18n/nl.po @@ -0,0 +1,156 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_packaging_level +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-05-09 16:47+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Level: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__active +msgid "Active" +msgstr "Actief" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__barcode_required_for_gtin +msgid "Barcode Required For Gtin" +msgstr "Barcode is vereist voor GTIN" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__code +msgid "Code" +msgstr "Code" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: product_packaging_level +#: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default +msgid "Default Level" +msgstr "Standaard level" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__display_name +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__has_gtin +msgid "Has Gtin" +msgstr "heeft GTIN" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__id +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__id +msgid "ID" +msgstr "ID" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__is_default +msgid "Is Default" +msgstr "Is standaard" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"It is forbidden to have different packagings with the same level for a given " +"product ({})." +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging____last_update +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name +msgid "Name" +msgstr "Naam" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "Only one product packaging level can be set as \"Is Default\"." +msgstr "" +"Er kan slechts een verpakkingslevel worden ingesteld als \"Is standaard\"." + +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +msgid "Packaging" +msgstr "Verpakking" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "Packaging Level" +msgstr "Verpakkingslevel" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging +msgid "Product Packaging" +msgstr "Product verpakking" + +#. module: product_packaging_level +#: model:ir.actions.act_window,name:product_packaging_level.act_open_product_packaging_level_view +#: model:ir.ui.menu,name:product_packaging_level.menu_product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_tree +msgid "Product Packaging Level" +msgstr "Product verpakking level" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__qty_per_level +msgid "Qty per package level" +msgstr "Stuks per verpakkingslevel" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence +msgid "Sequence" +msgstr "Volgorde" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "There must be one product packaging level set as \"Is Default\"." +msgstr "Er dient een verpakkingslevel te zijn ingesteld als \"Is standaard\"." + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +msgid "Level management for product.packaging" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level sequence" +msgstr "Level volgorde" diff --git a/product_packaging_level/i18n/product_packaging_level.pot b/product_packaging_level/i18n/product_packaging_level.pot new file mode 100644 index 00000000000..298f23eda89 --- /dev/null +++ b/product_packaging_level/i18n/product_packaging_level.pot @@ -0,0 +1,148 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_packaging_level +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__active +msgid "Active" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__barcode_required_for_gtin +msgid "Barcode Required For Gtin" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__code +msgid "Code" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_uid +msgid "Created by" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_date +msgid "Created on" +msgstr "" + +#. module: product_packaging_level +#: model:product.packaging.type,name:product_packaging_level.product_packaging_level_default +msgid "Default Type" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name +msgid "Display Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__has_gtin +msgid "Has Gtin" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__id +msgid "ID" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__is_default +msgid "Is Default" +msgstr "" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"It is forbidden to have different packagings with the same type for a given " +"product ({})." +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name +msgid "Name" +msgstr "" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "Only one product packaging type can be set as \"Is Default\"." +msgstr "" + +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +msgid "Packaging" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "Packaging Level" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: product_packaging_level +#: model:ir.actions.act_window,name:product_packaging_level.act_open_product_packaging_level_view +#: model:ir.ui.menu,name:product_packaging_level.menu_product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search +msgid "Product Packaging Level" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__qty_per_level +msgid "Qty per package level" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence +msgid "Sequence" +msgstr "" + +#. module: product_packaging_level +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "There must be one product packaging level set as \"Is Default\"." +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +msgid "Level management for product.packaging" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level sequence" +msgstr "" diff --git a/product_packaging_level/models/__init__.py b/product_packaging_level/models/__init__.py new file mode 100644 index 00000000000..e0cb60cb000 --- /dev/null +++ b/product_packaging_level/models/__init__.py @@ -0,0 +1 @@ +from . import product_packaging_level, product_packaging diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py new file mode 100644 index 00000000000..27900b060b5 --- /dev/null +++ b/product_packaging_level/models/product_packaging.py @@ -0,0 +1,131 @@ +# Copyright 2019-2020 Camptocamp (). +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) +from collections import OrderedDict + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ProductPackaging(models.Model): + _inherit = "product.packaging" + _order = "product_id, level_sequence" + + packaging_level_id = fields.Many2one( + "product.packaging.level", + required=True, + ondelete="restrict", + default=lambda p: p.default_packaging_level_id(), + ) + barcode_required_for_gtin = fields.Boolean( + readonly=True, compute="_compute_barcode_required_for_gtin" + ) + level_sequence = fields.Integer( + string="Level Sequence", + related="packaging_level_id.sequence", + readonly=True, + store=True, + ) + qty_per_level = fields.Char( + compute="_compute_qty_per_level", string="Qty per package level" + ) + + def default_packaging_level_id(self): + return self.env["product.packaging.level"].search( + [("is_default", "=", True)], limit=1 + ) + + @api.constrains("packaging_level_id", "product_id") + def _check_one_packaging_level_per_product(self): + for packaging in self: + product = packaging.product_id + # do not use a mapped/filtered because it would union the duplicates + packaging_level_ids = [ + packaging.packaging_level_id.id + for packaging in product.packaging_ids + # We have to allow several packaging using the default type, + # because when we install the module on an existing database, + # the default value will be set to default and we'll have + # duplicates. Anyway "default" is not meant to be used as a + # real type. + if not packaging.packaging_level_id.is_default + ] + if len(set(packaging_level_ids)) != len(packaging_level_ids): + raise ValidationError( + _( + "It is forbidden to have different packagings " + "with the same level for a given product ({})." + ).format(product.display_name) + ) + + @api.depends("packaging_level_id", "packaging_level_id.has_gtin", "qty") + def _compute_barcode_required_for_gtin(self): + for packaging in self: + packaging.barcode_required_for_gtin = packaging.packaging_level_id.has_gtin + if not packaging.qty: + packaging.barcode_required_for_gtin = False + + @api.depends( + "product_id", + "product_id.packaging_ids", + "packaging_level_id", + "packaging_level_id.code", + ) + def _compute_qty_per_level(self): + for packaging in self: + if not packaging.product_id: + packaging.qty_per_level = "" + continue + mapping = packaging._get_qty_per_level_mapping() + packaging.qty_per_level = packaging._format_qty_per_level(mapping) + + def _get_qty_per_level_mapping(self): + """Retrieve qty for each packaging level. + + :return: mapping {level.code: qty} + """ + smaller_product_packagings = self.product_id.packaging_ids.filtered( + lambda p: p.id != self.id and self.qty > p.qty > 0.0 + ) + res = OrderedDict() + for p_pack in smaller_product_packagings.sorted(lambda p: p.qty): + res[p_pack.packaging_level_id.code] = p_pack.qty + return res + + def _format_qty_per_level(self, qty_per_level_mapping, format_pattern=None): + """Format given qty per level mapping as string.""" + qty_per_level = self._make_qty_per_level( + qty_per_level_mapping, format_pattern=format_pattern + ) + res = [] + for code, qty in qty_per_level: + res.append("{} {}".format(qty, code)) + return "; ".join(res) + + def _make_qty_per_level(self, qty_per_level_mapping, format_pattern=None): + """Prepare list of packaging qty by code.""" + res = [] + format_pattern = format_pattern or "{}{}" + for code, qty in qty_per_level_mapping.items(): + new_qty = self.qty / qty + if not new_qty.is_integer(): + new_qty_int = int(new_qty) + new_qty_decimals = new_qty - new_qty_int + new_qty = format_pattern.format( + new_qty_int, str(new_qty_decimals).lstrip("0") + ) + res.append((code, new_qty)) + return res + + @api.onchange("packaging_level_id") + def _onchange_name(self): + if self.packaging_level_id: + self.name = self.packaging_level_id.name + + def name_get(self): + result = [] + for record in self: + if record.product_id and record.packaging_level_id: + result.append((record.id, record.packaging_level_id.display_name)) + else: + result.append((record.id, record.name)) + return result diff --git a/product_packaging_level/models/product_packaging_level.py b/product_packaging_level/models/product_packaging_level.py new file mode 100644 index 00000000000..f5063a502da --- /dev/null +++ b/product_packaging_level/models/product_packaging_level.py @@ -0,0 +1,34 @@ +# Copyright 2019-2020 Camptocamp (). +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ProductPackagingLevel(models.Model): + _name = "product.packaging.level" + _description = "Level management for product.packaging" + _order = "sequence, code" + + name = fields.Char(required=True, translate=True) + code = fields.Char(required=True) + sequence = fields.Integer(required=True) + has_gtin = fields.Boolean() + active = fields.Boolean(default=True) + is_default = fields.Boolean() + + @api.constrains("is_default") + def _check_is_default(self): + msg = False + default_count = self.search_count([("is_default", "=", True)]) + if default_count == 0: + msg = _('There must be one product packaging level set as "Is Default".') + elif default_count > 1: + msg = _('Only one product packaging level can be set as "Is Default".') + if msg: + raise ValidationError(msg) + + def name_get(self): + result = [] + for record in self: + result.append((record.id, "{} ({})".format(record.name, record.code))) + return result diff --git a/product_packaging_level/readme/CONTRIBUTORS.rst b/product_packaging_level/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..d665dbacc63 --- /dev/null +++ b/product_packaging_level/readme/CONTRIBUTORS.rst @@ -0,0 +1,7 @@ +* `Camptocamp `_ + + * Damien Crier + * Hiep (Nguyen Hoang) +* Christopher Ormaza + +* Denis Roussel diff --git a/product_packaging_level/readme/CREDITS.rst b/product_packaging_level/readme/CREDITS.rst new file mode 100644 index 00000000000..f5cc070c78e --- /dev/null +++ b/product_packaging_level/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* Camptocamp diff --git a/product_packaging_level/readme/DESCRIPTION.rst b/product_packaging_level/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..fda78ef90c9 --- /dev/null +++ b/product_packaging_level/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows odoo users to declare packaging levels (pallets, ...) diff --git a/product_packaging_level/readme/USAGE.rst b/product_packaging_level/readme/USAGE.rst new file mode 100644 index 00000000000..a706b9a7be4 --- /dev/null +++ b/product_packaging_level/readme/USAGE.rst @@ -0,0 +1,4 @@ +To create a new packaging level: + +#. Go to *Sales > Configuration > Products > Product Packaging Level*. +#. You can create/edit/delete packaging levels diff --git a/product_packaging_level/security/ir.model.access.csv b/product_packaging_level/security/ir.model.access.csv new file mode 100644 index 00000000000..6a3ed0fae4c --- /dev/null +++ b/product_packaging_level/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +access_product_packaging_level_user,product.packaging.level.user,model_product_packaging_level,base.group_user,1,0,0,0 +access_product_packaging_level_manager,product.packaging.level.manager,model_product_packaging_level,product.group_stock_packaging,1,1,1,1 diff --git a/product_packaging_level/static/description/icon.png b/product_packaging_level/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html new file mode 100644 index 00000000000..890b2b1ed30 --- /dev/null +++ b/product_packaging_level/static/description/index.html @@ -0,0 +1,442 @@ + + + + + + +Product Packaging Type + + + +
+

Product Packaging Type

+ + +

Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

+

This module allows odoo users to declare packaging levels (pallets, …)

+

Table of contents

+ +
+

Usage

+

To create a new packaging level:

+
    +
  1. Go to Sales > Configuration > Products > Product Packaging Level.
  2. +
  3. You can create/edit/delete packaging levels
  4. +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The development of this module has been financially supported by:

+
    +
  • Camptocamp
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

This module is part of the OCA/product-attribute project on GitHub.

+

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

+
+
+
+ + diff --git a/product_packaging_level/tests/__init__.py b/product_packaging_level/tests/__init__.py new file mode 100644 index 00000000000..77ec7d3608a --- /dev/null +++ b/product_packaging_level/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_packaging_level diff --git a/product_packaging_level/tests/test_product_packaging_level.py b/product_packaging_level/tests/test_product_packaging_level.py new file mode 100644 index 00000000000..4071d14ab51 --- /dev/null +++ b/product_packaging_level/tests/test_product_packaging_level.py @@ -0,0 +1,112 @@ +# Copyright 2021 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.exceptions import ValidationError +from odoo.tests import common + + +class TestProductPackagingLevel(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.default_level = cls.env.ref( + "product_packaging_level.product_packaging_level_default" + ) + cls.level = cls.env["product.packaging.level"].create( + { + "name": "Packaging Level Test", + "code": "TEST2", + "sequence": 2, + } + ) + cls.packaging_default = cls.env["product.packaging"].create( + {"name": "Packaging Default", "qty": 1.0} + ) + cls.packaging = cls.env["product.packaging"].create( + {"name": "Packaging Test", "packaging_level_id": cls.level.id, "qty": 1.0} + ) + + cls.product = cls.env["product.template"].create( + {"name": "Product Test", "packaging_ids": [(6, 0, cls.packaging.ids)]} + ) + + def test_packaging_default_level(self): + self.assertEqual(self.default_level, self.packaging_default.packaging_level_id) + + def test_display_name(self): + self.assertEqual(self.default_level.display_name, "Default Level (DEFAULT)") + + def test_product_level_constraint(self): + # Add a new packaging to product with same level as the other one. + # Check that exception is raised + with self.assertRaises( + ValidationError, msg="It is forbidden to have different packagings" + ): + self.product.write( + { + "packaging_ids": [ + ( + 0, + 0, + { + "name": "Packaging Test 2", + "packaging_level_id": self.level.id, + }, + ) + ] + } + ) + + def test_packaging_required_gtin(self): + # Check if the barcode required for gtin is well computed + self.assertFalse(self.product.packaging_ids.barcode_required_for_gtin) + self.level.has_gtin = True + self.assertTrue(self.product.packaging_ids.barcode_required_for_gtin) + + def test_packaging_is_default(self): + # Check that the 'is_default' value is set once + msg = "There must be one product packaging level set as 'Is Default'." + with self.assertRaises(ValidationError, msg=msg): + self.default_level.is_default = False + msg = "Only one product packaging level can be set as 'Is Default'." + with self.assertRaises(ValidationError, msg=msg): + self.level.is_default = True + + def test_packaging_qty_per_level(self): + # Check if the barcode required for gtin is well computed + self.level_3 = self.env["product.packaging.level"].create( + { + "name": "Packaging Level 3 Test", + "code": "TEST3", + "sequence": 3, + } + ) + self.packaging_3 = self.env["product.packaging"].create( + { + "name": "Packaging Test", + "packaging_level_id": self.level_3.id, + "qty": 3.0, + "product_id": self.product.product_variant_ids.id, + } + ) + + self.level_4 = self.env["product.packaging.level"].create( + { + "name": "Packaging Level 4 Test", + "code": "TEST4", + "sequence": 4, + } + ) + self.packaging_10 = self.env["product.packaging"].create( + { + "name": "Packaging Test", + "packaging_level_id": self.level_4.id, + "qty": 6.0, + "product_id": self.product.product_variant_ids.id, + } + ) + + self.assertEqual(self.packaging_3.qty_per_level, "3.0 TEST2") + + self.assertEqual(self.packaging_10.qty_per_level, "6.0 TEST2; 2.0 TEST3") + # Base packaging has no qty per level + self.assertEqual(self.packaging.qty_per_level, "") diff --git a/product_packaging_level/views/product_packaging_level_view.xml b/product_packaging_level/views/product_packaging_level_view.xml new file mode 100644 index 00000000000..90b6536b847 --- /dev/null +++ b/product_packaging_level/views/product_packaging_level_view.xml @@ -0,0 +1,67 @@ + + + + product.packaging.level.tree + product.packaging.level + + + + + + + + + + + + + product.packaging.level.form + product.packaging.level + + +
+ + +
+
+
+ + product.packaging.level.search + product.packaging.level + + + + + + + + + + Product Packaging Level + ir.actions.act_window + product.packaging.level + tree,form + + + +
diff --git a/product_packaging_level/views/product_packaging_view.xml b/product_packaging_level/views/product_packaging_view.xml new file mode 100644 index 00000000000..d029082f32b --- /dev/null +++ b/product_packaging_level/views/product_packaging_view.xml @@ -0,0 +1,50 @@ + + + + + product.packaging.tree (in product_packaging_level) + product.packaging + + + + + + + + + + + + {'required': [('barcode_required_for_gtin', '=', True)]} + + + 1 + + + + + + + product.packaging.form + product.packaging + + + + + + + + + {'required': [('barcode_required_for_gtin', '=', True)]} + + + 1 + + + + + From cfb87206f7e3380fa5560d9fdb8c3a1a5ffa2340 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Mon, 28 Nov 2022 10:15:19 +0100 Subject: [PATCH 02/31] [IMP] product_packaging_level: Add migration scripts --- product_packaging_level/__init__.py | 1 + product_packaging_level/__manifest__.py | 2 ++ product_packaging_level/hooks.py | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 product_packaging_level/hooks.py diff --git a/product_packaging_level/__init__.py b/product_packaging_level/__init__.py index 0650744f6bc..6d58305f5dd 100644 --- a/product_packaging_level/__init__.py +++ b/product_packaging_level/__init__.py @@ -1 +1,2 @@ from . import models +from .hooks import pre_init_hook diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py index 0691987cc7a..e29874ef4f0 100644 --- a/product_packaging_level/__manifest__.py +++ b/product_packaging_level/__manifest__.py @@ -19,4 +19,6 @@ ], "installable": True, "auto_install": False, + "external_dependencies": {"python": ["openupgradelib"]}, + "pre_init_hook": "pre_init_hook", } diff --git a/product_packaging_level/hooks.py b/product_packaging_level/hooks.py new file mode 100644 index 00000000000..5d3fd3f8cc6 --- /dev/null +++ b/product_packaging_level/hooks.py @@ -0,0 +1,25 @@ +# Copyright 2022 ACSONE SA/NV +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) +from openupgradelib import openupgrade + +from odoo import SUPERUSER_ID, api + + +def pre_init_hook(cr): + if openupgrade.table_exists(cr, "product_packaging_type"): + env = api.Environment(cr, SUPERUSER_ID, {}) + # Former version of the module is present + models = [("product.packaging.type", "product.packaging.level")] + openupgrade.rename_models(env.cr, models) + fields = [ + ( + "product.packaging", + "product_packaging", + "packaging_level_id", + "packaging_level_id", + ) + ] + openupgrade.rename_fields(env, fields, no_deep=True) + + modules = [("product_packaging_type", "product_packaging_level")] + openupgrade.update_module_names(env.cr, modules, merge_modules=True) From 74237dc0eedc3964c0eec82bb83a9d5cea16a3e6 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Mon, 18 Sep 2023 12:12:40 +0200 Subject: [PATCH 03/31] [IMP] product_packaging_level: Improve README --- product_packaging_level/README.rst | 30 ++++++++++++++----- .../readme/DESCRIPTION.rst | 13 +++++++- product_packaging_level/readme/USAGE.rst | 2 +- .../static/description/index.html | 19 +++++++++--- 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst index a99d9390007..40308d9a39e 100644 --- a/product_packaging_level/README.rst +++ b/product_packaging_level/README.rst @@ -2,10 +2,13 @@ Product Packaging Type ====================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b97473bd193dd776e77a26e36c2a4311c5d2704b0d0813927d8e3ec5cdb53295 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,13 +22,24 @@ Product Packaging Type .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/135/16.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module binds a product packaging to a packaging level. + +There are usually 3 levels: + +* The primary: it is the closest to the product, also called the retail packaging +* The secondary: it allows to ship the products already in the primary packaging, like a box +* The tertiary: it allows to ship large quantities in warehousing, like a pallet -|badge1| |badge2| |badge3| |badge4| |badge5| +This differentiates from the odoo standard package type that is typing the packaging in a more +precise way and that can serve for put-away routing in the warehouse. -This module allows odoo users to declare packaging levels (pallets, ...) +For example a small box and a large box, or an EPAL pallet and CHEP pallet. **Table of contents** @@ -37,7 +51,7 @@ Usage To create a new packaging level: -#. Go to *Sales > Configuration > Products > Product Packaging Level*. +#. Go to *Inventory > Configuration > Products > Product Packaging Level*. #. You can create/edit/delete packaging levels Bug Tracker @@ -45,7 +59,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed +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. diff --git a/product_packaging_level/readme/DESCRIPTION.rst b/product_packaging_level/readme/DESCRIPTION.rst index fda78ef90c9..4862ee0a4fd 100644 --- a/product_packaging_level/readme/DESCRIPTION.rst +++ b/product_packaging_level/readme/DESCRIPTION.rst @@ -1 +1,12 @@ -This module allows odoo users to declare packaging levels (pallets, ...) +This module binds a product packaging to a packaging level. + +There are usually 3 levels: + +* The primary: it is the closest to the product, also called the retail packaging +* The secondary: it allows to ship the products already in the primary packaging, like a box +* The tertiary: it allows to ship large quantities in warehousing, like a pallet + +This differentiates from the odoo standard package type that is typing the packaging in a more +precise way and that can serve for put-away routing in the warehouse. + +For example a small box and a large box, or an EPAL pallet and CHEP pallet. diff --git a/product_packaging_level/readme/USAGE.rst b/product_packaging_level/readme/USAGE.rst index a706b9a7be4..8d69de1fa37 100644 --- a/product_packaging_level/readme/USAGE.rst +++ b/product_packaging_level/readme/USAGE.rst @@ -1,4 +1,4 @@ To create a new packaging level: -#. Go to *Sales > Configuration > Products > Product Packaging Level*. +#. Go to *Inventory > Configuration > Products > Product Packaging Level*. #. You can create/edit/delete packaging levels diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html index 890b2b1ed30..7745dbf3aa1 100644 --- a/product_packaging_level/static/description/index.html +++ b/product_packaging_level/static/description/index.html @@ -366,9 +366,20 @@

Product Packaging Type

-

Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

-

This module allows odoo users to declare packaging levels (pallets, …)

+

Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

This module binds a product packaging to a packaging level.

+

There are usually 3 levels:

+
    +
  • The primary: it is the closest to the product, also called the retail packaging
  • +
  • The secondary: it allows to ship the products already in the primary packaging, like a box
  • +
  • The tertiary: it allows to ship large quantities in warehousing, like a pallet
  • +
+

This differentiates from the odoo standard package type that is typing the packaging in a more +precise way and that can serve for put-away routing in the warehouse.

+

For example a small box and a large box, or an EPAL pallet and CHEP pallet.

Table of contents

    @@ -387,7 +398,7 @@

    Product Packaging Type

    Usage

    To create a new packaging level:

      -
    1. Go to Sales > Configuration > Products > Product Packaging Level.
    2. +
    3. Go to Inventory > Configuration > Products > Product Packaging Level.
    4. You can create/edit/delete packaging levels
@@ -395,7 +406,7 @@

Usage

Bug Tracker

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

From 06855b2a89b53deee248c3d1cc922f53ece40321 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 18 Sep 2023 12:42:35 +0000 Subject: [PATCH 04/31] [UPD] Update product_packaging_level.pot --- .../i18n/product_packaging_level.pot | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/product_packaging_level/i18n/product_packaging_level.pot b/product_packaging_level/i18n/product_packaging_level.pot index 298f23eda89..e1721e8621e 100644 --- a/product_packaging_level/i18n/product_packaging_level.pot +++ b/product_packaging_level/i18n/product_packaging_level.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -39,8 +39,8 @@ msgid "Created on" msgstr "" #. module: product_packaging_level -#: model:product.packaging.type,name:product_packaging_level.product_packaging_level_default -msgid "Default Type" +#: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default +msgid "Default Level" msgstr "" #. module: product_packaging_level @@ -64,11 +64,12 @@ msgid "Is Default" msgstr "" #. module: product_packaging_level -#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging.py:0 #, python-format msgid "" -"It is forbidden to have different packagings with the same type for a given " -"product ({})." +"It is forbidden to have different packagings with the same level for a given" +" product ({})." msgstr "" #. module: product_packaging_level @@ -86,19 +87,30 @@ msgstr "" msgid "Last Updated on" msgstr "" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level Sequence" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +msgid "Level management for product.packaging" +msgstr "" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name msgid "Name" msgstr "" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format -msgid "Only one product packaging type can be set as \"Is Default\"." +msgid "Only one product packaging level can be set as \"Is Default\"." msgstr "" #. module: product_packaging_level -#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" msgstr "" @@ -132,17 +144,8 @@ msgid "Sequence" msgstr "" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "There must be one product packaging level set as \"Is Default\"." msgstr "" - -#. module: product_packaging_level -#: model:ir.model,name:product_packaging_level.model_product_packaging_level -msgid "Level management for product.packaging" -msgstr "" - -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level sequence" -msgstr "" From e5684e768a5e71f29ef5970aa60421347b4481ea Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 18 Sep 2023 12:46:28 +0000 Subject: [PATCH 05/31] oca-github-bot post-merge updates --- product_packaging_level/README.rst | 8 ++-- .../static/description/index.html | 46 +++++++++---------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst index 40308d9a39e..47cd8183783 100644 --- a/product_packaging_level/README.rst +++ b/product_packaging_level/README.rst @@ -1,13 +1,13 @@ -====================== -Product Packaging Type -====================== +======================= +Product Packaging Level +======================= .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b97473bd193dd776e77a26e36c2a4311c5d2704b0d0813927d8e3ec5cdb53295 + !! source digest: sha256:4f72b2c635e8dd7def853bbf256333c0f9d09d9b4245d2ec953e2b2b738667e4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html index 7745dbf3aa1..25482ed0177 100644 --- a/product_packaging_level/static/description/index.html +++ b/product_packaging_level/static/description/index.html @@ -1,20 +1,20 @@ - + - -Product Packaging Type + +Product Packaging Level -
-

Product Packaging Type

+
+

Product Packaging Level

-

Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This module binds a product packaging to a packaging level.

There are usually 3 levels:

    @@ -383,19 +383,19 @@

    Product Packaging Type

    Table of contents

    -

    Usage

    +

    Usage

    To create a new packaging level:

    1. Go to Inventory > Configuration > Products > Product Packaging Level.
    2. @@ -403,7 +403,7 @@

      Usage

    -

    Bug Tracker

    +

    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 @@ -411,15 +411,15 @@

    Bug Tracker

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Camptocamp
    -

    Other credits

    +

    Other credits

    The development of this module has been financially supported by:

    • Camptocamp
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association

    OCA, or the Odoo Community Association, is a nonprofit organization whose From e593183a13195c5684f893603c0e68e5e321a7a8 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Tue, 19 Sep 2023 14:30:08 +0200 Subject: [PATCH 06/31] [FIX] product_packaging_level: Use correct field in hook --- product_packaging_level/hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_packaging_level/hooks.py b/product_packaging_level/hooks.py index 5d3fd3f8cc6..5e4dbd569e4 100644 --- a/product_packaging_level/hooks.py +++ b/product_packaging_level/hooks.py @@ -15,7 +15,7 @@ def pre_init_hook(cr): ( "product.packaging", "product_packaging", - "packaging_level_id", + "packaging_type_id", "packaging_level_id", ) ] From be8e3bc1c959118141ffefb43ea5ff2e9c0fc516 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 19 Sep 2023 12:38:00 +0000 Subject: [PATCH 07/31] oca-github-bot post-merge updates --- product_packaging_level/README.rst | 2 +- product_packaging_level/__manifest__.py | 2 +- product_packaging_level/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst index 47cd8183783..6022fbf5cc2 100644 --- a/product_packaging_level/README.rst +++ b/product_packaging_level/README.rst @@ -7,7 +7,7 @@ Product Packaging Level !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:4f72b2c635e8dd7def853bbf256333c0f9d09d9b4245d2ec953e2b2b738667e4 + !! source digest: sha256:f5fae6970b39b157040a8bd963675eda06fd01e7e9d5182f5284dd59164822f4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py index e29874ef4f0..eefab59bf9f 100644 --- a/product_packaging_level/__manifest__.py +++ b/product_packaging_level/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Packaging Level", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "development_status": "Beta", "category": "Product", "summary": "This module binds a product packaging to a packaging level", diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html index 25482ed0177..61d3ab6ccd5 100644 --- a/product_packaging_level/static/description/index.html +++ b/product_packaging_level/static/description/index.html @@ -367,7 +367,7 @@

    Product Packaging Level

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:4f72b2c635e8dd7def853bbf256333c0f9d09d9b4245d2ec953e2b2b738667e4 +!! source digest: sha256:f5fae6970b39b157040a8bd963675eda06fd01e7e9d5182f5284dd59164822f4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module binds a product packaging to a packaging level.

    From c783522dd69f11a97a1d78b7649c5f11474f7700 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 20 Sep 2023 20:21:24 +0000 Subject: [PATCH 08/31] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/ --- product_packaging_level/i18n/ca.po | 49 +++++++++++++++++++----------- product_packaging_level/i18n/es.po | 35 ++++++++++++--------- product_packaging_level/i18n/nl.po | 34 +++++++++++---------- 3 files changed, 70 insertions(+), 48 deletions(-) diff --git a/product_packaging_level/i18n/ca.po b/product_packaging_level/i18n/ca.po index 5ddca0405b6..9339e12accd 100644 --- a/product_packaging_level/i18n/ca.po +++ b/product_packaging_level/i18n/ca.po @@ -42,9 +42,9 @@ msgid "Created on" msgstr "Creat el" #. module: product_packaging_level -#: model:product.packaging.type,name:product_packaging_level.product_packaging_level_default -msgid "Default Type" -msgstr "Tipus per defecte" +#: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default +msgid "Default Level" +msgstr "" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name @@ -67,14 +67,13 @@ msgid "Is Default" msgstr "És per defecte" #. module: product_packaging_level -#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging.py:0 #, python-format msgid "" -"It is forbidden to have different packagings with the same type for a given " +"It is forbidden to have different packagings with the same level for a given " "product ({})." msgstr "" -"Està prohibit tenir embalatges diferents amb el mateix tipus per a un " -"determinat producte ({})." #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update @@ -91,12 +90,24 @@ msgstr "Última actualització per" msgid "Last Updated on" msgstr "Última actualització el" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level Sequence" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +#, fuzzy +msgid "Level management for product.packaging" +msgstr "Gestió de tipus per producte.packaging" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name msgid "Name" msgstr "Nom" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "Only one product packaging level can be set as \"Is Default\"." @@ -105,7 +116,7 @@ msgstr "" "predeterminat\"." #. module: product_packaging_level -#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" msgstr "Embalatge" @@ -139,6 +150,7 @@ msgid "Sequence" msgstr "Seqüència" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "There must be one product packaging level set as \"Is Default\"." @@ -146,13 +158,16 @@ msgstr "" "Hi ha d'haver un tipus d'embalatge de producte definit com a \"És " "predeterminat\"." -#. module: product_packaging_level -#: model:ir.model,name:product_packaging_level.model_product_packaging_level -#, fuzzy -msgid "Level management for product.packaging" -msgstr "Gestió de tipus per producte.packaging" +#~ msgid "Default Type" +#~ msgstr "Tipus per defecte" -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level sequence" -msgstr "Seqüència de tipus" +#, python-format +#~ msgid "" +#~ "It is forbidden to have different packagings with the same type for a " +#~ "given product ({})." +#~ msgstr "" +#~ "Està prohibit tenir embalatges diferents amb el mateix tipus per a un " +#~ "determinat producte ({})." + +#~ msgid "Level sequence" +#~ msgstr "Seqüència de tipus" diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index 4def3167eba..6a60a3dc0e1 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -11,8 +11,8 @@ msgstr "" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" -"Content-Level: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" +"Content-Level: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.10\n" @@ -67,7 +67,8 @@ msgid "Is Default" msgstr "Es predeterminado" #. module: product_packaging_level -#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging.py:0 #, python-format msgid "" "It is forbidden to have different packagings with the same level for a given " @@ -91,21 +92,32 @@ msgstr "Última actualización por" msgid "Last Updated on" msgstr "Última actualización el" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level Sequence" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +msgid "Level management for product.packaging" +msgstr "Tipo de administración para empaquetado de producto" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name msgid "Name" msgstr "Nombre" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "Only one product packaging level can be set as \"Is Default\"." msgstr "" -"Solo se puede establecer un tipo de empaque de producto como \"" -"Predeterminado\"." +"Solo se puede establecer un tipo de empaque de producto como \"Predeterminado" +"\"." #. module: product_packaging_level -#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" msgstr "Empaquetado" @@ -125,7 +137,6 @@ msgstr "Empaquetado de producto" #: model:ir.ui.menu,name:product_packaging_level.menu_product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search -#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_tree msgid "Product Packaging Level" msgstr "Tipo de empaquetado de producto" @@ -140,6 +151,7 @@ msgid "Sequence" msgstr "Secuencia" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "There must be one product packaging level set as \"Is Default\"." @@ -147,12 +159,5 @@ msgstr "" "Debe haber un tipo de empaque de producto establecido como \"Es " "predeterminado\"." -#. module: product_packaging_level -#: model:ir.model,name:product_packaging_level.model_product_packaging_level -msgid "Level management for product.packaging" -msgstr "Tipo de administración para empaquetado de producto" - -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level sequence" -msgstr "Tipo de secuencia" +#~ msgid "Level sequence" +#~ msgstr "Tipo de secuencia" diff --git a/product_packaging_level/i18n/nl.po b/product_packaging_level/i18n/nl.po index 48196a60180..684a519dda2 100644 --- a/product_packaging_level/i18n/nl.po +++ b/product_packaging_level/i18n/nl.po @@ -11,8 +11,8 @@ msgstr "" "Language-Team: none\n" "Language: nl\n" "MIME-Version: 1.0\n" -"Content-Level: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" +"Content-Level: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" @@ -47,7 +47,6 @@ msgid "Default Level" msgstr "Standaard level" #. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__display_name #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name msgid "Display Name" msgstr "Weergavenaam" @@ -58,7 +57,6 @@ msgid "Has Gtin" msgstr "heeft GTIN" #. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__id #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__id msgid "ID" msgstr "ID" @@ -69,7 +67,8 @@ msgid "Is Default" msgstr "Is standaard" #. module: product_packaging_level -#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging.py:0 #, python-format msgid "" "It is forbidden to have different packagings with the same level for a given " @@ -77,7 +76,6 @@ msgid "" msgstr "" #. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging____last_update #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update msgid "Last Modified on" msgstr "Laatst gewijzigd op" @@ -92,12 +90,23 @@ msgstr "Laatst bijgewerkt door" msgid "Last Updated on" msgstr "Laatst bijgewerkt op" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level Sequence" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +msgid "Level management for product.packaging" +msgstr "" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name msgid "Name" msgstr "Naam" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "Only one product packaging level can be set as \"Is Default\"." @@ -105,7 +114,7 @@ msgstr "" "Er kan slechts een verpakkingslevel worden ingesteld als \"Is standaard\"." #. module: product_packaging_level -#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view_inherit +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" msgstr "Verpakking" @@ -125,7 +134,6 @@ msgstr "Product verpakking" #: model:ir.ui.menu,name:product_packaging_level.menu_product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search -#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_tree msgid "Product Packaging Level" msgstr "Product verpakking level" @@ -140,17 +148,11 @@ msgid "Sequence" msgstr "Volgorde" #. module: product_packaging_level +#. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "There must be one product packaging level set as \"Is Default\"." msgstr "Er dient een verpakkingslevel te zijn ingesteld als \"Is standaard\"." -#. module: product_packaging_level -#: model:ir.model,name:product_packaging_level.model_product_packaging_level -msgid "Level management for product.packaging" -msgstr "" - -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level sequence" -msgstr "Level volgorde" +#~ msgid "Level sequence" +#~ msgstr "Level volgorde" From e56a8bb70bbe365212ad0b2295ac893dc5788949 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Wed, 27 Sep 2023 18:28:34 +0000 Subject: [PATCH 09/31] Translated using Weblate (Spanish) Currently translated at 100.0% (25 of 25 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/es/ --- product_packaging_level/i18n/es.po | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index 6a60a3dc0e1..ee045c19cd5 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -6,15 +6,16 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2020-10-14 14:08+0000\n" -"Last-Translator: claudiagn \n" +"PO-Revision-Date: 2023-10-09 02:46+0000\n" +"Last-Translator: Ivorra78 \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Content-Level: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10\n" +"X-Generator: Weblate 4.17\n" +"Content-Level: text/plain; charset=UTF-8\n" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__active @@ -95,7 +96,7 @@ msgstr "Última actualización el" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence msgid "Level Sequence" -msgstr "" +msgstr "Secuencia de niveles" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging_level From 0e089e434a1a98becf77fad5d718f76bb2f70737 Mon Sep 17 00:00:00 2001 From: Hoang Diep Date: Tue, 10 Oct 2023 16:56:51 +0700 Subject: [PATCH 10/31] [IMP] product_packaging_level: configure product packaging name --- product_packaging_level/__manifest__.py | 1 + product_packaging_level/models/__init__.py | 4 +- .../models/product_packaging.py | 31 ++++++----- .../models/product_packaging_level.py | 27 ++++++++++ .../models/stock_package_type.py | 12 +++++ .../readme/CONTRIBUTORS.rst | 2 + .../tests/test_product_packaging_level.py | 53 +++++++++++++++++++ .../views/product_packaging_level_view.xml | 1 + .../views/product_packaging_view.xml | 8 ++- .../views/stock_package_type_view.xml | 13 +++++ 10 files changed, 137 insertions(+), 15 deletions(-) create mode 100644 product_packaging_level/models/stock_package_type.py create mode 100644 product_packaging_level/views/stock_package_type_view.xml diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py index eefab59bf9f..b9da6234496 100644 --- a/product_packaging_level/__manifest__.py +++ b/product_packaging_level/__manifest__.py @@ -16,6 +16,7 @@ "security/ir.model.access.csv", "views/product_packaging_level_view.xml", "views/product_packaging_view.xml", + "views/stock_package_type_view.xml", ], "installable": True, "auto_install": False, diff --git a/product_packaging_level/models/__init__.py b/product_packaging_level/models/__init__.py index e0cb60cb000..793a5967954 100644 --- a/product_packaging_level/models/__init__.py +++ b/product_packaging_level/models/__init__.py @@ -1 +1,3 @@ -from . import product_packaging_level, product_packaging +from . import product_packaging_level +from . import product_packaging +from . import stock_package_type diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py index 27900b060b5..95e128ac92b 100644 --- a/product_packaging_level/models/product_packaging.py +++ b/product_packaging_level/models/product_packaging.py @@ -28,6 +28,7 @@ class ProductPackaging(models.Model): qty_per_level = fields.Char( compute="_compute_qty_per_level", string="Qty per package level" ) + name_policy = fields.Selection(related="packaging_level_id.name_policy") def default_packaging_level_id(self): return self.env["product.packaging.level"].search( @@ -36,7 +37,10 @@ def default_packaging_level_id(self): @api.constrains("packaging_level_id", "product_id") def _check_one_packaging_level_per_product(self): - for packaging in self: + packages_name_by_level = self.filtered( + lambda p: p.name_policy == "by_package_level" + ) + for packaging in packages_name_by_level: product = packaging.product_id # do not use a mapped/filtered because it would union the duplicates packaging_level_ids = [ @@ -116,16 +120,17 @@ def _make_qty_per_level(self, qty_per_level_mapping, format_pattern=None): res.append((code, new_qty)) return res - @api.onchange("packaging_level_id") - def _onchange_name(self): - if self.packaging_level_id: - self.name = self.packaging_level_id.name + @api.onchange("package_type_id") + def _onchange_package_type(self): + package_type_level_id = self.package_type_id.packaging_level_id + if package_type_level_id: + self.packaging_level_id = package_type_level_id - def name_get(self): - result = [] - for record in self: - if record.product_id and record.packaging_level_id: - result.append((record.id, record.packaging_level_id.display_name)) - else: - result.append((record.id, record.name)) - return result + @api.onchange("packaging_level_id", "package_type_id", "name", "name_policy") + def _onchange_name(self): + new_name = self.name + if self.name_policy == "by_package_level": + new_name = self.packaging_level_id.display_name + elif self.name_policy == "by_package_type": + new_name = self.package_type_id.name + self.name = new_name diff --git a/product_packaging_level/models/product_packaging_level.py b/product_packaging_level/models/product_packaging_level.py index f5063a502da..10b81f17d6d 100644 --- a/product_packaging_level/models/product_packaging_level.py +++ b/product_packaging_level/models/product_packaging_level.py @@ -15,6 +15,33 @@ class ProductPackagingLevel(models.Model): has_gtin = fields.Boolean() active = fields.Boolean(default=True) is_default = fields.Boolean() + name_policy = fields.Selection( + selection=[ + ("by_package_level", "Package Level Name"), + ("by_package_type", "Package Type Name"), + ("user_defined", "User Defined"), + ], + default="by_package_level", + help=( + "config to set name of product packaging. Three options:" + "- The package level name (default)" + "- The package type name (if groups='stock.group_tracking_lot')" + "- user defined: free text value defined" + ), + ) + + @api.constrains("name_policy") + def _check_packaging_name(self): + for packaging in self: + activated_packages = self.env.user.has_group("stock.group_tracking_lot") + if packaging.name_policy == "by_package_type" and not activated_packages: + raise ValidationError( + _( + "Packaging name based on package type is only allowed" + " after activating the option Packages in Inventory >" + " Configuration > Settings !" + ) + ) @api.constrains("is_default") def _check_is_default(self): diff --git a/product_packaging_level/models/stock_package_type.py b/product_packaging_level/models/stock_package_type.py new file mode 100644 index 00000000000..0e959ed921d --- /dev/null +++ b/product_packaging_level/models/stock_package_type.py @@ -0,0 +1,12 @@ +# Copyright 2023 Camptocamp (). +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) +from odoo import fields, models + + +class StockPackageType(models.Model): + _inherit = "stock.package.type" + + packaging_level_id = fields.Many2one( + "product.packaging.level", + default=lambda self: self.env["product.packaging"].default_packaging_level_id(), + ) diff --git a/product_packaging_level/readme/CONTRIBUTORS.rst b/product_packaging_level/readme/CONTRIBUTORS.rst index d665dbacc63..aa4fcb56047 100644 --- a/product_packaging_level/readme/CONTRIBUTORS.rst +++ b/product_packaging_level/readme/CONTRIBUTORS.rst @@ -2,6 +2,8 @@ * Damien Crier * Hiep (Nguyen Hoang) + * Hoang Diep + * Christopher Ormaza * Denis Roussel diff --git a/product_packaging_level/tests/test_product_packaging_level.py b/product_packaging_level/tests/test_product_packaging_level.py index 4071d14ab51..cbbaf6818e0 100644 --- a/product_packaging_level/tests/test_product_packaging_level.py +++ b/product_packaging_level/tests/test_product_packaging_level.py @@ -28,6 +28,8 @@ def setUpClass(cls): cls.product = cls.env["product.template"].create( {"name": "Product Test", "packaging_ids": [(6, 0, cls.packaging.ids)]} ) + cls.package_type_pallet = cls.env.ref("stock.package_type_01") + cls.package_type_box = cls.env.ref("stock.package_type_02") def test_packaging_default_level(self): self.assertEqual(self.default_level, self.packaging_default.packaging_level_id) @@ -35,6 +37,57 @@ def test_packaging_default_level(self): def test_display_name(self): self.assertEqual(self.default_level.display_name, "Default Level (DEFAULT)") + def test_name_by_level(self): + self.packaging.name_policy = "by_package_level" + self.assertEqual(self.packaging.name, "Packaging Test") + + def test_name_by_package_type(self): + # Required for `package_type_id` to be visible in the view + self.env.user.write( + {"groups_id": [(4, self.env.ref("stock.group_tracking_lot").id)]} + ) + self.packaging.name_policy = "by_package_type" + self.packaging.package_type_id = self.package_type_box + self.packaging._onchange_name() + self.assertEqual(self.packaging.name, "Box") + + def test_name_by_user_defined(self): + # Required for `package_type_id` to be visible in the view + self.env.user.write( + {"groups_id": [(4, self.env.ref("stock.group_tracking_lot").id)]} + ) + packaging_name = "user defined - not box - not pallet" + self.packaging.packaging_level_id.name_policy = "user_defined" + self.packaging.name = packaging_name + # try to change package_type_id + self.packaging.package_type_id = self.package_type_box + self.packaging._onchange_name() + self.assertEqual(self.packaging.name, packaging_name) + + # try to change packaging level + self.packaging.packaging_level_id = self.level + self.packaging._onchange_name() + self.assertEqual(self.packaging.name, packaging_name) + + def test_name_by_package_type_without_group_tracking_lot(self): + # remove Packages from Internal group + internal_group = self.env.ref("base.group_user") + group_tracking_lot = self.env.ref("stock.group_tracking_lot") + internal_group.implied_ids -= group_tracking_lot + self.env.user.groups_id -= group_tracking_lot + with self.assertRaises(ValidationError): + self.packaging.packaging_level_id.write({"name_policy": "by_package_type"}) + + def test_default_packaging_level_defined_on_package_type(self): + self.package_type_box.packaging_level_id = self.default_level + # check current level + self.assertEqual(self.packaging.packaging_level_id, self.level) + # set package_type and + # recheck new level if same as level on package_type + self.packaging.package_type_id = self.package_type_box + self.packaging._onchange_package_type() + self.assertEqual(self.packaging.packaging_level_id, self.default_level) + def test_product_level_constraint(self): # Add a new packaging to product with same level as the other one. # Check that exception is raised diff --git a/product_packaging_level/views/product_packaging_level_view.xml b/product_packaging_level/views/product_packaging_level_view.xml index 90b6536b847..3360e574fdb 100644 --- a/product_packaging_level/views/product_packaging_level_view.xml +++ b/product_packaging_level/views/product_packaging_level_view.xml @@ -29,6 +29,7 @@ + diff --git a/product_packaging_level/views/product_packaging_view.xml b/product_packaging_level/views/product_packaging_view.xml index d029082f32b..8b8c89c7292 100644 --- a/product_packaging_level/views/product_packaging_view.xml +++ b/product_packaging_level/views/product_packaging_view.xml @@ -31,6 +31,9 @@ product.packaging + + + @@ -42,7 +45,10 @@ >{'required': [('barcode_required_for_gtin', '=', True)]} - 1 + 1 + {'readonly': [('name_policy', '!=', 'user_defined')]} diff --git a/product_packaging_level/views/stock_package_type_view.xml b/product_packaging_level/views/stock_package_type_view.xml new file mode 100644 index 00000000000..5e192d69043 --- /dev/null +++ b/product_packaging_level/views/stock_package_type_view.xml @@ -0,0 +1,13 @@ + + + + stock.package.type.form + stock.package.type + + + + + + + + From 230e5c90879e8feebfd65eafa2e3dcae4b51d68b Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 12 Oct 2023 06:36:34 +0000 Subject: [PATCH 11/31] [UPD] Update product_packaging_level.pot --- .../i18n/product_packaging_level.pot | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/product_packaging_level/i18n/product_packaging_level.pot b/product_packaging_level/i18n/product_packaging_level.pot index e1721e8621e..4d3300f1d87 100644 --- a/product_packaging_level/i18n/product_packaging_level.pot +++ b/product_packaging_level/i18n/product_packaging_level.pot @@ -102,6 +102,12 @@ msgstr "" msgid "Name" msgstr "" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy +msgid "Name Policy" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -109,6 +115,16 @@ msgstr "" msgid "Only one product packaging level can be set as \"Is Default\"." msgstr "" +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_level +msgid "Package Level Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_type +msgid "Package Type Name" +msgstr "" + #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" @@ -116,10 +132,20 @@ msgstr "" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model:ir.model.fields,field_description:product_packaging_level.field_stock_package_type__packaging_level_id #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form msgid "Packaging Level" msgstr "" +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"Packaging name based on package type is only allowed after activating the " +"option Packages in Inventory > Configuration > Settings !" +msgstr "" + #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging msgid "Product Packaging" @@ -143,9 +169,28 @@ msgstr "" msgid "Sequence" msgstr "" +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_stock_package_type +msgid "Stock package type" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "There must be one product packaging level set as \"Is Default\"." msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined +msgid "User Defined" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging_level__name_policy +msgid "" +"config to set name of product packaging. Three options:- The package level " +"name (default)- The package type name (if " +"groups='stock.group_tracking_lot')- user defined: free text value defined" +msgstr "" From c5aba95aa43e4158de65fb655ede9b1c7b32455a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 12 Oct 2023 06:41:23 +0000 Subject: [PATCH 12/31] [BOT] post-merge updates --- product_packaging_level/README.rst | 4 +++- product_packaging_level/__manifest__.py | 2 +- product_packaging_level/static/description/index.html | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst index 6022fbf5cc2..0b08ae0cbf8 100644 --- a/product_packaging_level/README.rst +++ b/product_packaging_level/README.rst @@ -7,7 +7,7 @@ Product Packaging Level !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:f5fae6970b39b157040a8bd963675eda06fd01e7e9d5182f5284dd59164822f4 + !! source digest: sha256:b435a07b412c1cbbfd6045ab3b478a38f2faf6ed7659934338eba807c896160d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -79,6 +79,8 @@ Contributors * Damien Crier * Hiep (Nguyen Hoang) + * Hoang Diep + * Christopher Ormaza * Denis Roussel diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py index b9da6234496..a5ecc237b86 100644 --- a/product_packaging_level/__manifest__.py +++ b/product_packaging_level/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Packaging Level", - "version": "16.0.1.0.1", + "version": "16.0.1.1.0", "development_status": "Beta", "category": "Product", "summary": "This module binds a product packaging to a packaging level", diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html index 61d3ab6ccd5..121ee8758cb 100644 --- a/product_packaging_level/static/description/index.html +++ b/product_packaging_level/static/description/index.html @@ -367,7 +367,7 @@

    Product Packaging Level

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:f5fae6970b39b157040a8bd963675eda06fd01e7e9d5182f5284dd59164822f4 +!! source digest: sha256:b435a07b412c1cbbfd6045ab3b478a38f2faf6ed7659934338eba807c896160d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module binds a product packaging to a packaging level.

    @@ -424,6 +424,7 @@

    Contributors

  • Camptocamp
  • Christopher Ormaza <chris.ormaza@forgeflow.com>
  • From 55f34078c600fff48ff0efe5894f84c84a023af1 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 12 Oct 2023 06:41:39 +0000 Subject: [PATCH 13/31] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/ --- product_packaging_level/i18n/ca.po | 45 ++++++++++++++++++++++++++++++ product_packaging_level/i18n/es.po | 45 ++++++++++++++++++++++++++++++ product_packaging_level/i18n/nl.po | 45 ++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+) diff --git a/product_packaging_level/i18n/ca.po b/product_packaging_level/i18n/ca.po index 9339e12accd..689e466c944 100644 --- a/product_packaging_level/i18n/ca.po +++ b/product_packaging_level/i18n/ca.po @@ -106,6 +106,12 @@ msgstr "Gestió de tipus per producte.packaging" msgid "Name" msgstr "Nom" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy +msgid "Name Policy" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -115,6 +121,16 @@ msgstr "" "Només es pot establir un tipus d'embalatge de producte com a \"És " "predeterminat\"." +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_level +msgid "Package Level Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_type +msgid "Package Type Name" +msgstr "" + #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" @@ -122,10 +138,20 @@ msgstr "Embalatge" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model:ir.model.fields,field_description:product_packaging_level.field_stock_package_type__packaging_level_id #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form msgid "Packaging Level" msgstr "Tipus d'embalatge" +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"Packaging name based on package type is only allowed after activating the " +"option Packages in Inventory > Configuration > Settings !" +msgstr "" + #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging msgid "Product Packaging" @@ -149,6 +175,11 @@ msgstr "Quantitat per tipus de paquet" msgid "Sequence" msgstr "Seqüència" +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_stock_package_type +msgid "Stock package type" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -158,6 +189,20 @@ msgstr "" "Hi ha d'haver un tipus d'embalatge de producte definit com a \"És " "predeterminat\"." +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined +msgid "User Defined" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging_level__name_policy +msgid "" +"config to set name of product packaging. Three options:- The package level " +"name (default)- The package type name (if groups='stock." +"group_tracking_lot')- user defined: free text value defined" +msgstr "" + #~ msgid "Default Type" #~ msgstr "Tipus per defecte" diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index ee045c19cd5..caab20749dc 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -108,6 +108,12 @@ msgstr "Tipo de administración para empaquetado de producto" msgid "Name" msgstr "Nombre" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy +msgid "Name Policy" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -117,6 +123,16 @@ msgstr "" "Solo se puede establecer un tipo de empaque de producto como \"Predeterminado" "\"." +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_level +msgid "Package Level Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_type +msgid "Package Type Name" +msgstr "" + #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" @@ -124,10 +140,20 @@ msgstr "Empaquetado" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model:ir.model.fields,field_description:product_packaging_level.field_stock_package_type__packaging_level_id #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form msgid "Packaging Level" msgstr "Tipo de empaquetado" +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"Packaging name based on package type is only allowed after activating the " +"option Packages in Inventory > Configuration > Settings !" +msgstr "" + #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging msgid "Product Packaging" @@ -151,6 +177,11 @@ msgstr "Cantidad por tipo de paquete" msgid "Sequence" msgstr "Secuencia" +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_stock_package_type +msgid "Stock package type" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -160,5 +191,19 @@ msgstr "" "Debe haber un tipo de empaque de producto establecido como \"Es " "predeterminado\"." +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined +msgid "User Defined" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging_level__name_policy +msgid "" +"config to set name of product packaging. Three options:- The package level " +"name (default)- The package type name (if groups='stock." +"group_tracking_lot')- user defined: free text value defined" +msgstr "" + #~ msgid "Level sequence" #~ msgstr "Tipo de secuencia" diff --git a/product_packaging_level/i18n/nl.po b/product_packaging_level/i18n/nl.po index 684a519dda2..3d997083679 100644 --- a/product_packaging_level/i18n/nl.po +++ b/product_packaging_level/i18n/nl.po @@ -105,6 +105,12 @@ msgstr "" msgid "Name" msgstr "Naam" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy +msgid "Name Policy" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -113,6 +119,16 @@ msgid "Only one product packaging level can be set as \"Is Default\"." msgstr "" "Er kan slechts een verpakkingslevel worden ingesteld als \"Is standaard\"." +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_level +msgid "Package Level Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_type +msgid "Package Type Name" +msgstr "" + #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" @@ -120,10 +136,20 @@ msgstr "Verpakking" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model:ir.model.fields,field_description:product_packaging_level.field_stock_package_type__packaging_level_id #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form msgid "Packaging Level" msgstr "Verpakkingslevel" +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"Packaging name based on package type is only allowed after activating the " +"option Packages in Inventory > Configuration > Settings !" +msgstr "" + #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging msgid "Product Packaging" @@ -147,6 +173,11 @@ msgstr "Stuks per verpakkingslevel" msgid "Sequence" msgstr "Volgorde" +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_stock_package_type +msgid "Stock package type" +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -154,5 +185,19 @@ msgstr "Volgorde" msgid "There must be one product packaging level set as \"Is Default\"." msgstr "Er dient een verpakkingslevel te zijn ingesteld als \"Is standaard\"." +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined +msgid "User Defined" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging_level__name_policy +msgid "" +"config to set name of product packaging. Three options:- The package level " +"name (default)- The package type name (if groups='stock." +"group_tracking_lot')- user defined: free text value defined" +msgstr "" + #~ msgid "Level sequence" #~ msgstr "Level volgorde" From 5131f47aace3da8cb11b9bddc01dfe1a72e0d597 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Thu, 12 Oct 2023 13:28:40 +0000 Subject: [PATCH 14/31] Translated using Weblate (Spanish) Currently translated at 100.0% (32 of 32 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/es/ --- product_packaging_level/i18n/es.po | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index caab20749dc..b4693b5898c 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-10-09 02:46+0000\n" +"PO-Revision-Date: 2023-10-12 15:36+0000\n" "Last-Translator: Ivorra78 \n" "Language-Team: none\n" "Language: es\n" @@ -112,7 +112,7 @@ msgstr "Nombre" #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy msgid "Name Policy" -msgstr "" +msgstr "Política de nombres" #. module: product_packaging_level #. odoo-python @@ -126,12 +126,12 @@ msgstr "" #. module: product_packaging_level #: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_level msgid "Package Level Name" -msgstr "" +msgstr "Nivel de paquete Nombre" #. module: product_packaging_level #: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_type msgid "Package Type Name" -msgstr "" +msgstr "Tipo de paquete Nombre" #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view @@ -153,6 +153,8 @@ msgid "" "Packaging name based on package type is only allowed after activating the " "option Packages in Inventory > Configuration > Settings !" msgstr "" +"¡El nombre del paquete basado en el tipo de paquete sólo se permite tras " +"activar la opción Paquetes en Inventario > Configuración > Ajustes!" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging @@ -180,7 +182,7 @@ msgstr "Secuencia" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_stock_package_type msgid "Stock package type" -msgstr "" +msgstr "Tipo de empaquetado de existencias" #. module: product_packaging_level #. odoo-python @@ -194,7 +196,7 @@ msgstr "" #. module: product_packaging_level #: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined msgid "User Defined" -msgstr "" +msgstr "Definido por el usuario" #. module: product_packaging_level #: model:ir.model.fields,help:product_packaging_level.field_product_packaging__name_policy @@ -204,6 +206,10 @@ msgid "" "name (default)- The package type name (if groups='stock." "group_tracking_lot')- user defined: free text value defined" msgstr "" +"config para establecer el nombre del embalaje del producto. Tres opciones:- " +"El nombre de nivel de paquete (por defecto)- El nombre de tipo de paquete (" +"si groups='stock.group_tracking_lot')- definido por el usuario: valor de " +"texto libre definido" #~ msgid "Level sequence" #~ msgstr "Tipo de secuencia" From 3214b6412b2fcf486b9cc36f6706588395aa7495 Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 29 Oct 2023 10:55:13 +0000 Subject: [PATCH 15/31] Added translation using Weblate (Italian) --- product_packaging_level/i18n/it.po | 197 +++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 product_packaging_level/i18n/it.po diff --git a/product_packaging_level/i18n/it.po b/product_packaging_level/i18n/it.po new file mode 100644 index 00000000000..0a23cce23c1 --- /dev/null +++ b/product_packaging_level/i18n/it.po @@ -0,0 +1,197 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_packaging_level +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__active +msgid "Active" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__barcode_required_for_gtin +msgid "Barcode Required For Gtin" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__code +msgid "Code" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_uid +msgid "Created by" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_date +msgid "Created on" +msgstr "" + +#. module: product_packaging_level +#: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default +msgid "Default Level" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name +msgid "Display Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__has_gtin +msgid "Has Gtin" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__id +msgid "ID" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__is_default +msgid "Is Default" +msgstr "" + +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging.py:0 +#, python-format +msgid "" +"It is forbidden to have different packagings with the same level for a given" +" product ({})." +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence +msgid "Level Sequence" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging_level +msgid "Level management for product.packaging" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name +msgid "Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy +msgid "Name Policy" +msgstr "" + +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "Only one product packaging level can be set as \"Is Default\"." +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_level +msgid "Package Level Name" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_type +msgid "Package Type Name" +msgstr "" + +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view +msgid "Packaging" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id +#: model:ir.model.fields,field_description:product_packaging_level.field_stock_package_type__packaging_level_id +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "Packaging Level" +msgstr "" + +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "" +"Packaging name based on package type is only allowed after activating the " +"option Packages in Inventory > Configuration > Settings !" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: product_packaging_level +#: model:ir.actions.act_window,name:product_packaging_level.act_open_product_packaging_level_view +#: model:ir.ui.menu,name:product_packaging_level.menu_product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search +msgid "Product Packaging Level" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__qty_per_level +msgid "Qty per package level" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence +msgid "Sequence" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model,name:product_packaging_level.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: product_packaging_level +#. odoo-python +#: code:addons/product_packaging_level/models/product_packaging_level.py:0 +#, python-format +msgid "There must be one product packaging level set as \"Is Default\"." +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined +msgid "User Defined" +msgstr "" + +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__name_policy +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging_level__name_policy +msgid "" +"config to set name of product packaging. Three options:- The package level " +"name (default)- The package type name (if " +"groups='stock.group_tracking_lot')- user defined: free text value defined" +msgstr "" From 228f3f549507ca219dcfc46f5bdc9dc3f00a587b Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 29 Oct 2023 15:36:38 +0000 Subject: [PATCH 16/31] Translated using Weblate (Italian) Currently translated at 71.8% (23 of 32 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/it/ --- product_packaging_level/i18n/it.po | 50 +++++++++++++++++------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/product_packaging_level/i18n/it.po b/product_packaging_level/i18n/it.po index 0a23cce23c1..a669fd8cd52 100644 --- a/product_packaging_level/i18n/it.po +++ b/product_packaging_level/i18n/it.po @@ -6,63 +6,65 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-10-29 15:40+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__active msgid "Active" -msgstr "" +msgstr "Attivo" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__barcode_required_for_gtin msgid "Barcode Required For Gtin" -msgstr "" +msgstr "Codice a barre obbligatorio per GTIN" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__code msgid "Code" -msgstr "" +msgstr "Codice" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_uid msgid "Created by" -msgstr "" +msgstr "Creato da" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__create_date msgid "Created on" -msgstr "" +msgstr "Creato il" #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default msgid "Default Level" -msgstr "" +msgstr "Livello predefinito" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__has_gtin msgid "Has Gtin" -msgstr "" +msgstr "Ha GTIN" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__id msgid "ID" -msgstr "" +msgstr "ID" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__is_default msgid "Is Default" -msgstr "" +msgstr "È predefinito" #. module: product_packaging_level #. odoo-python @@ -72,42 +74,44 @@ msgid "" "It is forbidden to have different packagings with the same level for a given" " product ({})." msgstr "" +"Non è permesso avere imballaggi differenti con lo stesso livello per un dato " +"prodotto ({})." #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Ultimo aggiornamento di" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__write_date msgid "Last Updated on" -msgstr "" +msgstr "Ultimo aggiornamento il" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence msgid "Level Sequence" -msgstr "" +msgstr "Sequenza livello" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging_level msgid "Level management for product.packaging" -msgstr "" +msgstr "Gestione livello per product.packaging" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name msgid "Name" -msgstr "" +msgstr "Nome" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy msgid "Name Policy" -msgstr "" +msgstr "Nome policy" #. module: product_packaging_level #. odoo-python @@ -115,28 +119,30 @@ msgstr "" #, python-format msgid "Only one product packaging level can be set as \"Is Default\"." msgstr "" +"Solo un livello imballaggio prodotto può essere impostato come \"È " +"predefinito\"." #. module: product_packaging_level #: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_level msgid "Package Level Name" -msgstr "" +msgstr "Nome livello collo" #. module: product_packaging_level #: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__by_package_type msgid "Package Type Name" -msgstr "" +msgstr "Nome tipo collo" #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view msgid "Packaging" -msgstr "" +msgstr "Imballaggio" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__packaging_level_id #: model:ir.model.fields,field_description:product_packaging_level.field_stock_package_type__packaging_level_id #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form msgid "Packaging Level" -msgstr "" +msgstr "Livello inballaggio" #. module: product_packaging_level #. odoo-python From f72935cadfd7043b73dbbf8816a74efe1d9cbf23 Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 29 Oct 2023 15:43:46 +0000 Subject: [PATCH 17/31] Translated using Weblate (Italian) Currently translated at 100.0% (32 of 32 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/it/ --- product_packaging_level/i18n/it.po | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/product_packaging_level/i18n/it.po b/product_packaging_level/i18n/it.po index a669fd8cd52..07b4a998fbf 100644 --- a/product_packaging_level/i18n/it.po +++ b/product_packaging_level/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-10-29 15:40+0000\n" +"PO-Revision-Date: 2023-10-29 18:37+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -152,11 +152,14 @@ msgid "" "Packaging name based on package type is only allowed after activating the " "option Packages in Inventory > Configuration > Settings !" msgstr "" +"Il nome imballaggio basato sul tipo collo è consentito solo dopo " +"l'attivazione dell'opzione \"Colli in inventario\" > Configurazione > " +"Impostazioni !" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging msgid "Product Packaging" -msgstr "" +msgstr "Imballaggio prodotto" #. module: product_packaging_level #: model:ir.actions.act_window,name:product_packaging_level.act_open_product_packaging_level_view @@ -164,22 +167,22 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form #: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_search msgid "Product Packaging Level" -msgstr "" +msgstr "Livello imballaggio prodotto" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__qty_per_level msgid "Qty per package level" -msgstr "" +msgstr "Q.tà per livello collo" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence msgid "Sequence" -msgstr "" +msgstr "Sequenza" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_stock_package_type msgid "Stock package type" -msgstr "" +msgstr "Tipo collo magazzino" #. module: product_packaging_level #. odoo-python @@ -187,11 +190,13 @@ msgstr "" #, python-format msgid "There must be one product packaging level set as \"Is Default\"." msgstr "" +"Deve esserci un livello imballaggio prodotto impostato come \"È predefinito\"" +"." #. module: product_packaging_level #: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined msgid "User Defined" -msgstr "" +msgstr "Definito dall'utente" #. module: product_packaging_level #: model:ir.model.fields,help:product_packaging_level.field_product_packaging__name_policy @@ -201,3 +206,6 @@ msgid "" "name (default)- The package type name (if " "groups='stock.group_tracking_lot')- user defined: free text value defined" msgstr "" +"Configurare per impostare il nome dell'imballo prodotto. Tre opzioni: - Il " +"nome livello collo (predefinito) - Il nome tipo collo (se gruppi='stock." +"group_tracking_lot') - definito dall'utente: testo libero" From c550fcfb338c1d4a2f6d34cb36cd03d3a71e4a4a Mon Sep 17 00:00:00 2001 From: Patrick Tombez Date: Wed, 14 Feb 2024 11:12:48 +0100 Subject: [PATCH 18/31] [16.0][FIX] product_packaging_level: Preserve sequence order --- product_packaging_level/models/product_packaging.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py index 95e128ac92b..2c48de0faf5 100644 --- a/product_packaging_level/models/product_packaging.py +++ b/product_packaging_level/models/product_packaging.py @@ -8,7 +8,6 @@ class ProductPackaging(models.Model): _inherit = "product.packaging" - _order = "product_id, level_sequence" packaging_level_id = fields.Many2one( "product.packaging.level", @@ -19,16 +18,11 @@ class ProductPackaging(models.Model): barcode_required_for_gtin = fields.Boolean( readonly=True, compute="_compute_barcode_required_for_gtin" ) - level_sequence = fields.Integer( - string="Level Sequence", - related="packaging_level_id.sequence", - readonly=True, - store=True, - ) qty_per_level = fields.Char( compute="_compute_qty_per_level", string="Qty per package level" ) name_policy = fields.Selection(related="packaging_level_id.name_policy") + sequence = fields.Integer(compute="_compute_sequence", store=True, readonly=False) def default_packaging_level_id(self): return self.env["product.packaging.level"].search( @@ -61,6 +55,11 @@ def _check_one_packaging_level_per_product(self): ).format(product.display_name) ) + @api.depends("packaging_level_id") + def _compute_sequence(self): + for packaging in self: + packaging.sequence = packaging.packaging_level_id.sequence + @api.depends("packaging_level_id", "packaging_level_id.has_gtin", "qty") def _compute_barcode_required_for_gtin(self): for packaging in self: From cfec7401b56900dd4b79c401ff7837a2bb994184 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 26 Mar 2024 14:20:00 +0000 Subject: [PATCH 19/31] [UPD] Update product_packaging_level.pot --- .../i18n/product_packaging_level.pot | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/product_packaging_level/i18n/product_packaging_level.pot b/product_packaging_level/i18n/product_packaging_level.pot index 4d3300f1d87..cafaec51ea1 100644 --- a/product_packaging_level/i18n/product_packaging_level.pot +++ b/product_packaging_level/i18n/product_packaging_level.pot @@ -87,11 +87,6 @@ msgstr "" msgid "Last Updated on" msgstr "" -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level Sequence" -msgstr "" - #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging_level msgid "Level management for product.packaging" @@ -165,6 +160,7 @@ msgid "Qty per package level" msgstr "" #. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__sequence #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence msgid "Sequence" msgstr "" @@ -174,6 +170,11 @@ msgstr "" msgid "Stock package type" msgstr "" +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__sequence +msgid "The first in the sequence is the default one." +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 From 5db3c93e62fd721604f5acdfca92b854bbbcd888 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 26 Mar 2024 14:24:37 +0000 Subject: [PATCH 20/31] [BOT] post-merge updates --- product_packaging_level/README.rst | 2 +- product_packaging_level/__manifest__.py | 2 +- product_packaging_level/static/description/index.html | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst index 0b08ae0cbf8..83550a1df64 100644 --- a/product_packaging_level/README.rst +++ b/product_packaging_level/README.rst @@ -7,7 +7,7 @@ Product Packaging Level !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b435a07b412c1cbbfd6045ab3b478a38f2faf6ed7659934338eba807c896160d + !! source digest: sha256:ba4cb3b5d779453c4111d0263d7b078676ea655d8427d5124a224914233d3d9f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py index a5ecc237b86..a746cba11bc 100644 --- a/product_packaging_level/__manifest__.py +++ b/product_packaging_level/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Packaging Level", - "version": "16.0.1.1.0", + "version": "16.0.1.1.1", "development_status": "Beta", "category": "Product", "summary": "This module binds a product packaging to a packaging level", diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html index 121ee8758cb..3a008e9b1b8 100644 --- a/product_packaging_level/static/description/index.html +++ b/product_packaging_level/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

    Product Packaging Level

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b435a07b412c1cbbfd6045ab3b478a38f2faf6ed7659934338eba807c896160d +!! source digest: sha256:ba4cb3b5d779453c4111d0263d7b078676ea655d8427d5124a224914233d3d9f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module binds a product packaging to a packaging level.

    From 9c29ff0dd91539fba2450f6bd91ea8241e3cdad4 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 26 Mar 2024 14:25:03 +0000 Subject: [PATCH 21/31] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/ --- product_packaging_level/i18n/ca.po | 11 ++++++----- product_packaging_level/i18n/es.po | 18 +++++++++++------- product_packaging_level/i18n/it.po | 26 +++++++++++++++----------- product_packaging_level/i18n/nl.po | 11 ++++++----- 4 files changed, 38 insertions(+), 28 deletions(-) diff --git a/product_packaging_level/i18n/ca.po b/product_packaging_level/i18n/ca.po index 689e466c944..15f0708d063 100644 --- a/product_packaging_level/i18n/ca.po +++ b/product_packaging_level/i18n/ca.po @@ -90,11 +90,6 @@ msgstr "Última actualització per" msgid "Last Updated on" msgstr "Última actualització el" -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level Sequence" -msgstr "" - #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging_level #, fuzzy @@ -171,6 +166,7 @@ msgid "Qty per package level" msgstr "Quantitat per tipus de paquet" #. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__sequence #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence msgid "Sequence" msgstr "Seqüència" @@ -180,6 +176,11 @@ msgstr "Seqüència" msgid "Stock package type" msgstr "" +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__sequence +msgid "The first in the sequence is the default one." +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index b4693b5898c..a690441f4ff 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -93,11 +93,6 @@ msgstr "Última actualización por" msgid "Last Updated on" msgstr "Última actualización el" -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level Sequence" -msgstr "Secuencia de niveles" - #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging_level msgid "Level management for product.packaging" @@ -175,6 +170,7 @@ msgid "Qty per package level" msgstr "Cantidad por tipo de paquete" #. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__sequence #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence msgid "Sequence" msgstr "Secuencia" @@ -184,6 +180,11 @@ msgstr "Secuencia" msgid "Stock package type" msgstr "Tipo de empaquetado de existencias" +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__sequence +msgid "The first in the sequence is the default one." +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 @@ -207,9 +208,12 @@ msgid "" "group_tracking_lot')- user defined: free text value defined" msgstr "" "config para establecer el nombre del embalaje del producto. Tres opciones:- " -"El nombre de nivel de paquete (por defecto)- El nombre de tipo de paquete (" -"si groups='stock.group_tracking_lot')- definido por el usuario: valor de " +"El nombre de nivel de paquete (por defecto)- El nombre de tipo de paquete " +"(si groups='stock.group_tracking_lot')- definido por el usuario: valor de " "texto libre definido" +#~ msgid "Level Sequence" +#~ msgstr "Secuencia de niveles" + #~ msgid "Level sequence" #~ msgstr "Tipo de secuencia" diff --git a/product_packaging_level/i18n/it.po b/product_packaging_level/i18n/it.po index 07b4a998fbf..b678c23c004 100644 --- a/product_packaging_level/i18n/it.po +++ b/product_packaging_level/i18n/it.po @@ -71,8 +71,8 @@ msgstr "È predefinito" #: code:addons/product_packaging_level/models/product_packaging.py:0 #, python-format msgid "" -"It is forbidden to have different packagings with the same level for a given" -" product ({})." +"It is forbidden to have different packagings with the same level for a given " +"product ({})." msgstr "" "Non è permesso avere imballaggi differenti con lo stesso livello per un dato " "prodotto ({})." @@ -92,11 +92,6 @@ msgstr "Ultimo aggiornamento di" msgid "Last Updated on" msgstr "Ultimo aggiornamento il" -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level Sequence" -msgstr "Sequenza livello" - #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging_level msgid "Level management for product.packaging" @@ -175,6 +170,7 @@ msgid "Qty per package level" msgstr "Q.tà per livello collo" #. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__sequence #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence msgid "Sequence" msgstr "Sequenza" @@ -184,14 +180,19 @@ msgstr "Sequenza" msgid "Stock package type" msgstr "Tipo collo magazzino" +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__sequence +msgid "The first in the sequence is the default one." +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 #, python-format msgid "There must be one product packaging level set as \"Is Default\"." msgstr "" -"Deve esserci un livello imballaggio prodotto impostato come \"È predefinito\"" -"." +"Deve esserci un livello imballaggio prodotto impostato come \"È predefinito" +"\"." #. module: product_packaging_level #: model:ir.model.fields.selection,name:product_packaging_level.selection__product_packaging_level__name_policy__user_defined @@ -203,9 +204,12 @@ msgstr "Definito dall'utente" #: model:ir.model.fields,help:product_packaging_level.field_product_packaging_level__name_policy msgid "" "config to set name of product packaging. Three options:- The package level " -"name (default)- The package type name (if " -"groups='stock.group_tracking_lot')- user defined: free text value defined" +"name (default)- The package type name (if groups='stock." +"group_tracking_lot')- user defined: free text value defined" msgstr "" "Configurare per impostare il nome dell'imballo prodotto. Tre opzioni: - Il " "nome livello collo (predefinito) - Il nome tipo collo (se gruppi='stock." "group_tracking_lot') - definito dall'utente: testo libero" + +#~ msgid "Level Sequence" +#~ msgstr "Sequenza livello" diff --git a/product_packaging_level/i18n/nl.po b/product_packaging_level/i18n/nl.po index 3d997083679..efa63b69d8e 100644 --- a/product_packaging_level/i18n/nl.po +++ b/product_packaging_level/i18n/nl.po @@ -90,11 +90,6 @@ msgstr "Laatst bijgewerkt door" msgid "Last Updated on" msgstr "Laatst bijgewerkt op" -#. module: product_packaging_level -#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__level_sequence -msgid "Level Sequence" -msgstr "" - #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging_level msgid "Level management for product.packaging" @@ -169,6 +164,7 @@ msgid "Qty per package level" msgstr "Stuks per verpakkingslevel" #. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__sequence #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__sequence msgid "Sequence" msgstr "Volgorde" @@ -178,6 +174,11 @@ msgstr "Volgorde" msgid "Stock package type" msgstr "" +#. module: product_packaging_level +#: model:ir.model.fields,help:product_packaging_level.field_product_packaging__sequence +msgid "The first in the sequence is the default one." +msgstr "" + #. module: product_packaging_level #. odoo-python #: code:addons/product_packaging_level/models/product_packaging_level.py:0 From e609c0e4ac19189e8d1cb64d1e0d76c3f090f56c Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Tue, 26 Mar 2024 21:16:48 +0000 Subject: [PATCH 22/31] Translated using Weblate (Spanish) Currently translated at 100.0% (32 of 32 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/es/ --- product_packaging_level/i18n/es.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index a690441f4ff..97b1b14a916 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-10-12 15:36+0000\n" +"PO-Revision-Date: 2024-03-26 22:36+0000\n" "Last-Translator: Ivorra78 \n" "Language-Team: none\n" "Language: es\n" @@ -183,7 +183,7 @@ msgstr "Tipo de empaquetado de existencias" #. module: product_packaging_level #: model:ir.model.fields,help:product_packaging_level.field_product_packaging__sequence msgid "The first in the sequence is the default one." -msgstr "" +msgstr "El primero de la secuencia es el predeterminado." #. module: product_packaging_level #. odoo-python From 7d966e83c7e44c017a680e3e0f4af427340ee554 Mon Sep 17 00:00:00 2001 From: sonhd91 Date: Mon, 26 Feb 2024 16:37:39 +0700 Subject: [PATCH 23/31] [IMP]product_packaging_level: recover name_get policy flow --- .../models/product_packaging.py | 26 ++++++++++++++-- .../models/product_packaging_level.py | 12 +++++++ .../tests/test_product_packaging_level.py | 31 ++++++++++++++++--- .../views/product_packaging_level_view.xml | 4 +++ .../views/product_packaging_view.xml | 6 ++++ 5 files changed, 71 insertions(+), 8 deletions(-) diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py index 2c48de0faf5..1f89f64b158 100644 --- a/product_packaging_level/models/product_packaging.py +++ b/product_packaging_level/models/product_packaging.py @@ -9,6 +9,7 @@ class ProductPackaging(models.Model): _inherit = "product.packaging" + name = fields.Char(compute="_compute_name", store=True, readonly=False) packaging_level_id = fields.Many2one( "product.packaging.level", required=True, @@ -125,11 +126,30 @@ def _onchange_package_type(self): if package_type_level_id: self.packaging_level_id = package_type_level_id - @api.onchange("packaging_level_id", "package_type_id", "name", "name_policy") - def _onchange_name(self): + @api.depends( + "package_type_id", + "name_policy", + "packaging_level_id", + ) + def _compute_name(self): + for rec in self: + rec.name = rec._get_name_from_policy() + + # Keep this method to respect translations on level name + @api.depends("product_id", "packaging_level_id", "name_policy") + def _compute_display_name(self): + for record in self: + if record.product_id and record.packaging_level_id: + record.display_name = record._get_name_from_policy(lang=self.env.lang) + else: + return super()._compute_display_name() + + def _get_name_from_policy(self, lang=None): new_name = self.name if self.name_policy == "by_package_level": + lang = lang or self.packaging_level_id.default_lang_id.code + self = self.with_context(lang=lang) new_name = self.packaging_level_id.display_name elif self.name_policy == "by_package_type": new_name = self.package_type_id.name - self.name = new_name + return new_name diff --git a/product_packaging_level/models/product_packaging_level.py b/product_packaging_level/models/product_packaging_level.py index 10b81f17d6d..e9642dead4c 100644 --- a/product_packaging_level/models/product_packaging_level.py +++ b/product_packaging_level/models/product_packaging_level.py @@ -9,12 +9,24 @@ class ProductPackagingLevel(models.Model): _description = "Level management for product.packaging" _order = "sequence, code" + def _default_language(self): + lang_code = self.env["ir.default"].get("res.partner", "lang") + def_lang_id = self.env["res.lang"]._lang_get_id(lang_code) + return def_lang_id or self._active_languages()[0] + name = fields.Char(required=True, translate=True) code = fields.Char(required=True) sequence = fields.Integer(required=True) has_gtin = fields.Boolean() active = fields.Boolean(default=True) is_default = fields.Boolean() + default_lang_id = fields.Many2one( + "res.lang", + string="Default Language", + default=lambda self: self._default_language(), + required=True, + ) + name_policy = fields.Selection( selection=[ ("by_package_level", "Package Level Name"), diff --git a/product_packaging_level/tests/test_product_packaging_level.py b/product_packaging_level/tests/test_product_packaging_level.py index cbbaf6818e0..193433899f0 100644 --- a/product_packaging_level/tests/test_product_packaging_level.py +++ b/product_packaging_level/tests/test_product_packaging_level.py @@ -8,6 +8,8 @@ class TestProductPackagingLevel(common.TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() + cls.env.ref("base.lang_fr").active = True + cls.default_level = cls.env.ref( "product_packaging_level.product_packaging_level_default" ) @@ -18,13 +20,29 @@ def setUpClass(cls): "sequence": 2, } ) + + cls.level_fr = cls.env["product.packaging.level"].create( + { + "name": "Packaging Level Test", + "code": "TEST3", + "sequence": 2, + "default_lang_id": cls.env.ref("base.lang_fr").id, + } + ) + cls.level_fr.with_context(lang="fr_FR").name = "Packaging Level Test France" cls.packaging_default = cls.env["product.packaging"].create( {"name": "Packaging Default", "qty": 1.0} ) cls.packaging = cls.env["product.packaging"].create( {"name": "Packaging Test", "packaging_level_id": cls.level.id, "qty": 1.0} ) - + cls.packaging_fr = cls.env["product.packaging"].create( + { + "name": "Packaging Test", + "packaging_level_id": cls.level_fr.id, + "qty": 1.0, + } + ) cls.product = cls.env["product.template"].create( {"name": "Product Test", "packaging_ids": [(6, 0, cls.packaging.ids)]} ) @@ -39,7 +57,13 @@ def test_display_name(self): def test_name_by_level(self): self.packaging.name_policy = "by_package_level" - self.assertEqual(self.packaging.name, "Packaging Test") + self.assertEqual(self.packaging.name, "Packaging Level Test (TEST2)") + self.assertEqual(self.packaging.display_name, "Packaging Level Test (TEST2)") + self.packaging_fr.name_policy = "by_package_level" + self.assertEqual(self.packaging_fr.name, "Packaging Level Test France (TEST3)") + self.assertEqual( + self.packaging_fr.display_name, "Packaging Level Test France (TEST3)" + ) def test_name_by_package_type(self): # Required for `package_type_id` to be visible in the view @@ -48,7 +72,6 @@ def test_name_by_package_type(self): ) self.packaging.name_policy = "by_package_type" self.packaging.package_type_id = self.package_type_box - self.packaging._onchange_name() self.assertEqual(self.packaging.name, "Box") def test_name_by_user_defined(self): @@ -61,12 +84,10 @@ def test_name_by_user_defined(self): self.packaging.name = packaging_name # try to change package_type_id self.packaging.package_type_id = self.package_type_box - self.packaging._onchange_name() self.assertEqual(self.packaging.name, packaging_name) # try to change packaging level self.packaging.packaging_level_id = self.level - self.packaging._onchange_name() self.assertEqual(self.packaging.name, packaging_name) def test_name_by_package_type_without_group_tracking_lot(self): diff --git a/product_packaging_level/views/product_packaging_level_view.xml b/product_packaging_level/views/product_packaging_level_view.xml index 3360e574fdb..12ae00f226d 100644 --- a/product_packaging_level/views/product_packaging_level_view.xml +++ b/product_packaging_level/views/product_packaging_level_view.xml @@ -30,6 +30,10 @@ +
    diff --git a/product_packaging_level/views/product_packaging_view.xml b/product_packaging_level/views/product_packaging_view.xml index 8b8c89c7292..ea7dc3ce548 100644 --- a/product_packaging_level/views/product_packaging_view.xml +++ b/product_packaging_level/views/product_packaging_view.xml @@ -31,6 +31,12 @@ product.packaging + + + + + 1 + From f49e6cb5f0f3cd1e0543188e73aec7993ce2c5af Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 27 Mar 2024 07:44:17 +0000 Subject: [PATCH 24/31] [UPD] Update product_packaging_level.pot --- .../i18n/product_packaging_level.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/product_packaging_level/i18n/product_packaging_level.pot b/product_packaging_level/i18n/product_packaging_level.pot index cafaec51ea1..4169731f773 100644 --- a/product_packaging_level/i18n/product_packaging_level.pot +++ b/product_packaging_level/i18n/product_packaging_level.pot @@ -38,6 +38,11 @@ msgstr "" msgid "Created on" msgstr "" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__default_lang_id +msgid "Default Language" +msgstr "" + #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default msgid "Default Level" @@ -72,6 +77,13 @@ msgid "" " product ({})." msgstr "" +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "" +"Language option for packaging names used in case policy names is packaging " +"by levels" +msgstr "" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update msgid "Last Modified on" @@ -122,6 +134,7 @@ msgstr "" #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_add_type_form msgid "Packaging" msgstr "" @@ -143,6 +156,7 @@ msgstr "" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name msgid "Product Packaging" msgstr "" From f701d9203162edc401dc31018927bc4bdf8408c3 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 27 Mar 2024 07:48:36 +0000 Subject: [PATCH 25/31] [BOT] post-merge updates --- product_packaging_level/README.rst | 2 +- product_packaging_level/__manifest__.py | 2 +- product_packaging_level/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst index 83550a1df64..6c827de2d63 100644 --- a/product_packaging_level/README.rst +++ b/product_packaging_level/README.rst @@ -7,7 +7,7 @@ Product Packaging Level !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ba4cb3b5d779453c4111d0263d7b078676ea655d8427d5124a224914233d3d9f + !! source digest: sha256:75e11fae4004a39e651e1162643c5ec763d00d748cec9d0478e483067b24c164 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py index a746cba11bc..bff080cc879 100644 --- a/product_packaging_level/__manifest__.py +++ b/product_packaging_level/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Packaging Level", - "version": "16.0.1.1.1", + "version": "16.0.1.2.0", "development_status": "Beta", "category": "Product", "summary": "This module binds a product packaging to a packaging level", diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html index 3a008e9b1b8..308238a05d7 100644 --- a/product_packaging_level/static/description/index.html +++ b/product_packaging_level/static/description/index.html @@ -366,7 +366,7 @@

    Product Packaging Level

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:ba4cb3b5d779453c4111d0263d7b078676ea655d8427d5124a224914233d3d9f +!! source digest: sha256:75e11fae4004a39e651e1162643c5ec763d00d748cec9d0478e483067b24c164 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module binds a product packaging to a packaging level.

    From 584cbc8c3d8ab612a794d2b077a84ec545fa9943 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 27 Mar 2024 07:48:59 +0000 Subject: [PATCH 26/31] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/ --- product_packaging_level/i18n/ca.po | 14 ++++++++++++++ product_packaging_level/i18n/es.po | 14 ++++++++++++++ product_packaging_level/i18n/it.po | 14 ++++++++++++++ product_packaging_level/i18n/nl.po | 14 ++++++++++++++ 4 files changed, 56 insertions(+) diff --git a/product_packaging_level/i18n/ca.po b/product_packaging_level/i18n/ca.po index 15f0708d063..9e981efd4ad 100644 --- a/product_packaging_level/i18n/ca.po +++ b/product_packaging_level/i18n/ca.po @@ -41,6 +41,11 @@ msgstr "Creat per" msgid "Created on" msgstr "Creat el" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__default_lang_id +msgid "Default Language" +msgstr "" + #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default msgid "Default Level" @@ -75,6 +80,13 @@ msgid "" "product ({})." msgstr "" +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "" +"Language option for packaging names used in case policy names is packaging " +"by levels" +msgstr "" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update msgid "Last Modified on" @@ -128,6 +140,7 @@ msgstr "" #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_add_type_form msgid "Packaging" msgstr "Embalatge" @@ -149,6 +162,7 @@ msgstr "" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name msgid "Product Packaging" msgstr "Embalatge del producte" diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index 97b1b14a916..f194cb82b44 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -42,6 +42,11 @@ msgstr "Creado por" msgid "Created on" msgstr "Creado el" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__default_lang_id +msgid "Default Language" +msgstr "" + #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default msgid "Default Level" @@ -78,6 +83,13 @@ msgstr "" "Está prohibido tener diferentes embalajes con el mismo tipo para un producto " "determinado ({})." +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "" +"Language option for packaging names used in case policy names is packaging " +"by levels" +msgstr "" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update msgid "Last Modified on" @@ -130,6 +142,7 @@ msgstr "Tipo de paquete Nombre" #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_add_type_form msgid "Packaging" msgstr "Empaquetado" @@ -153,6 +166,7 @@ msgstr "" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name msgid "Product Packaging" msgstr "Empaquetado de producto" diff --git a/product_packaging_level/i18n/it.po b/product_packaging_level/i18n/it.po index b678c23c004..1b181ee9c6a 100644 --- a/product_packaging_level/i18n/it.po +++ b/product_packaging_level/i18n/it.po @@ -41,6 +41,11 @@ msgstr "Creato da" msgid "Created on" msgstr "Creato il" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__default_lang_id +msgid "Default Language" +msgstr "" + #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default msgid "Default Level" @@ -77,6 +82,13 @@ msgstr "" "Non è permesso avere imballaggi differenti con lo stesso livello per un dato " "prodotto ({})." +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "" +"Language option for packaging names used in case policy names is packaging " +"by levels" +msgstr "" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update msgid "Last Modified on" @@ -129,6 +141,7 @@ msgstr "Nome tipo collo" #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_add_type_form msgid "Packaging" msgstr "Imballaggio" @@ -153,6 +166,7 @@ msgstr "" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name msgid "Product Packaging" msgstr "Imballaggio prodotto" diff --git a/product_packaging_level/i18n/nl.po b/product_packaging_level/i18n/nl.po index efa63b69d8e..dfd8d73e0ca 100644 --- a/product_packaging_level/i18n/nl.po +++ b/product_packaging_level/i18n/nl.po @@ -41,6 +41,11 @@ msgstr "Aangemaakt door" msgid "Created on" msgstr "Aangemaakt op" +#. module: product_packaging_level +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__default_lang_id +msgid "Default Language" +msgstr "" + #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default msgid "Default Level" @@ -75,6 +80,13 @@ msgid "" "product ({})." msgstr "" +#. module: product_packaging_level +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_level_form +msgid "" +"Language option for packaging names used in case policy names is packaging " +"by levels" +msgstr "" + #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update msgid "Last Modified on" @@ -126,6 +138,7 @@ msgstr "" #. module: product_packaging_level #: model_terms:ir.ui.view,arch_db:product_packaging_level.product_packaging_tree_view +#: model_terms:ir.ui.view,arch_db:product_packaging_level.view_product_packaging_add_type_form msgid "Packaging" msgstr "Verpakking" @@ -147,6 +160,7 @@ msgstr "" #. module: product_packaging_level #: model:ir.model,name:product_packaging_level.model_product_packaging +#: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name msgid "Product Packaging" msgstr "Product verpakking" From a3b366f425add439b1bc9279eee4f6928e91da76 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Wed, 27 Mar 2024 12:50:48 +0000 Subject: [PATCH 27/31] Translated using Weblate (Spanish) Currently translated at 100.0% (34 of 34 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/es/ --- product_packaging_level/i18n/es.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/product_packaging_level/i18n/es.po b/product_packaging_level/i18n/es.po index f194cb82b44..7c2167c0d40 100644 --- a/product_packaging_level/i18n/es.po +++ b/product_packaging_level/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-03-26 22:36+0000\n" +"PO-Revision-Date: 2024-03-27 15:35+0000\n" "Last-Translator: Ivorra78 \n" "Language-Team: none\n" "Language: es\n" @@ -45,7 +45,7 @@ msgstr "Creado el" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__default_lang_id msgid "Default Language" -msgstr "" +msgstr "Idioma por Defecto" #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default @@ -89,6 +89,8 @@ msgid "" "Language option for packaging names used in case policy names is packaging " "by levels" msgstr "" +"Opción de idioma para los nombres de embalaje utilizados en caso de que los " +"nombres de política sea el embalaje por niveles" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update From dd1447bcd7213878cc31947ff1dc1f1e9c34f7c8 Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 2 Apr 2024 09:23:28 +0000 Subject: [PATCH 28/31] Translated using Weblate (Italian) Currently translated at 100.0% (34 of 34 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/it/ --- product_packaging_level/i18n/it.po | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/product_packaging_level/i18n/it.po b/product_packaging_level/i18n/it.po index 1b181ee9c6a..93b1395b8ac 100644 --- a/product_packaging_level/i18n/it.po +++ b/product_packaging_level/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-10-29 18:37+0000\n" +"PO-Revision-Date: 2024-04-02 11:38+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -44,7 +44,7 @@ msgstr "Creato il" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__default_lang_id msgid "Default Language" -msgstr "" +msgstr "Lingua predefinita" #. module: product_packaging_level #: model:product.packaging.level,name:product_packaging_level.product_packaging_level_default @@ -88,6 +88,8 @@ msgid "" "Language option for packaging names used in case policy names is packaging " "by levels" msgstr "" +"Opzione lingua per i nomi imballaggi utilizzati nel caso la politica dei " +"nomi sia imballaggi per livelli" #. module: product_packaging_level #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level____last_update @@ -197,7 +199,7 @@ msgstr "Tipo collo magazzino" #. module: product_packaging_level #: model:ir.model.fields,help:product_packaging_level.field_product_packaging__sequence msgid "The first in the sequence is the default one." -msgstr "" +msgstr "Il primo della sequenza è il predefinito." #. module: product_packaging_level #. odoo-python From 3bf188e32df3e402f6960e7dde073cc5e9f6df48 Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 23 May 2024 07:08:36 +0000 Subject: [PATCH 29/31] Translated using Weblate (Italian) Currently translated at 100.0% (34 of 34 strings) Translation: product-attribute-16.0/product-attribute-16.0-product_packaging_level Translate-URL: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level/it/ --- product_packaging_level/i18n/it.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/product_packaging_level/i18n/it.po b/product_packaging_level/i18n/it.po index 93b1395b8ac..71201b2e94f 100644 --- a/product_packaging_level/i18n/it.po +++ b/product_packaging_level/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-04-02 11:38+0000\n" +"PO-Revision-Date: 2024-05-23 09:36+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -120,7 +120,7 @@ msgstr "Nome" #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging__name_policy #: model:ir.model.fields,field_description:product_packaging_level.field_product_packaging_level__name_policy msgid "Name Policy" -msgstr "Nome policy" +msgstr "Nome politica" #. module: product_packaging_level #. odoo-python From b87a841f7dc68a93892f885d5aa009eb321459e3 Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 18 Jun 2024 11:48:09 +0530 Subject: [PATCH 30/31] [IMP] product_packaging_level: pre-commit auto fixes --- product_packaging_level/README.rst | 55 ++++++++++--------- .../models/product_packaging.py | 2 +- .../models/product_packaging_level.py | 2 +- product_packaging_level/pyproject.toml | 3 + .../readme/CONTRIBUTORS.md | 6 ++ .../readme/CONTRIBUTORS.rst | 9 --- .../readme/{CREDITS.rst => CREDITS.md} | 2 +- product_packaging_level/readme/DESCRIPTION.md | 17 ++++++ .../readme/DESCRIPTION.rst | 12 ---- product_packaging_level/readme/USAGE.md | 5 ++ product_packaging_level/readme/USAGE.rst | 4 -- .../static/description/index.html | 37 ++++++++----- requirements.txt | 2 + 13 files changed, 89 insertions(+), 67 deletions(-) create mode 100644 product_packaging_level/pyproject.toml create mode 100644 product_packaging_level/readme/CONTRIBUTORS.md delete mode 100644 product_packaging_level/readme/CONTRIBUTORS.rst rename product_packaging_level/readme/{CREDITS.rst => CREDITS.md} (83%) create mode 100644 product_packaging_level/readme/DESCRIPTION.md delete mode 100644 product_packaging_level/readme/DESCRIPTION.rst create mode 100644 product_packaging_level/readme/USAGE.md delete mode 100644 product_packaging_level/readme/USAGE.rst create mode 100644 requirements.txt diff --git a/product_packaging_level/README.rst b/product_packaging_level/README.rst index 6c827de2d63..f4a93b0527f 100644 --- a/product_packaging_level/README.rst +++ b/product_packaging_level/README.rst @@ -17,13 +17,13 @@ Product Packaging Level :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/16.0/product_packaging_level + :target: https://github.com/OCA/product-attribute/tree/17.0/product_packaging_level :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_packaging_level + :target: https://translation.odoo-community.org/projects/product-attribute-17-0/product-attribute-17-0-product_packaging_level :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -32,14 +32,19 @@ This module binds a product packaging to a packaging level. There are usually 3 levels: -* The primary: it is the closest to the product, also called the retail packaging -* The secondary: it allows to ship the products already in the primary packaging, like a box -* The tertiary: it allows to ship large quantities in warehousing, like a pallet +- The primary: it is the closest to the product, also called the retail + packaging +- The secondary: it allows to ship the products already in the primary + packaging, like a box +- The tertiary: it allows to ship large quantities in warehousing, like + a pallet -This differentiates from the odoo standard package type that is typing the packaging in a more -precise way and that can serve for put-away routing in the warehouse. +This differentiates from the odoo standard package type that is typing +the packaging in a more precise way and that can serve for put-away +routing in the warehouse. -For example a small box and a large box, or an EPAL pallet and CHEP pallet. +For example a small box and a large box, or an EPAL pallet and CHEP +pallet. **Table of contents** @@ -51,8 +56,9 @@ Usage To create a new packaging level: -#. Go to *Inventory > Configuration > Products > Product Packaging Level*. -#. You can create/edit/delete packaging levels +1. Go to *Inventory > Configuration > Products > Product Packaging + Level*. +2. You can create/edit/delete packaging levels Bug Tracker =========== @@ -60,7 +66,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -68,32 +74,31 @@ Credits ======= Authors -~~~~~~~ +------- * Camptocamp Contributors -~~~~~~~~~~~~ +------------ -* `Camptocamp `_ +- `Camptocamp `__ - * Damien Crier - * Hiep (Nguyen Hoang) - * Hoang Diep + - Damien Crier + - Hiep (Nguyen Hoang) + - Hoang Diep -* Christopher Ormaza - -* Denis Roussel +- Christopher Ormaza +- Denis Roussel Other credits -~~~~~~~~~~~~~ +------------- The development of this module has been financially supported by: -* Camptocamp +- Camptocamp Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -105,6 +110,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py index 1f89f64b158..4b0a5340743 100644 --- a/product_packaging_level/models/product_packaging.py +++ b/product_packaging_level/models/product_packaging.py @@ -102,7 +102,7 @@ def _format_qty_per_level(self, qty_per_level_mapping, format_pattern=None): ) res = [] for code, qty in qty_per_level: - res.append("{} {}".format(qty, code)) + res.append(f"{qty} {code}") return "; ".join(res) def _make_qty_per_level(self, qty_per_level_mapping, format_pattern=None): diff --git a/product_packaging_level/models/product_packaging_level.py b/product_packaging_level/models/product_packaging_level.py index e9642dead4c..4565871b1cb 100644 --- a/product_packaging_level/models/product_packaging_level.py +++ b/product_packaging_level/models/product_packaging_level.py @@ -69,5 +69,5 @@ def _check_is_default(self): def name_get(self): result = [] for record in self: - result.append((record.id, "{} ({})".format(record.name, record.code))) + result.append((record.id, f"{record.name} ({record.code})")) return result diff --git a/product_packaging_level/pyproject.toml b/product_packaging_level/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/product_packaging_level/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_packaging_level/readme/CONTRIBUTORS.md b/product_packaging_level/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..3e53ad3999f --- /dev/null +++ b/product_packaging_level/readme/CONTRIBUTORS.md @@ -0,0 +1,6 @@ +- [Camptocamp](https://www.camptocamp.com) + - Damien Crier \<\> + - Hiep (Nguyen Hoang) \<\> + - Hoang Diep \<\> +- Christopher Ormaza \<\> +- Denis Roussel \<\> diff --git a/product_packaging_level/readme/CONTRIBUTORS.rst b/product_packaging_level/readme/CONTRIBUTORS.rst deleted file mode 100644 index aa4fcb56047..00000000000 --- a/product_packaging_level/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,9 +0,0 @@ -* `Camptocamp `_ - - * Damien Crier - * Hiep (Nguyen Hoang) - * Hoang Diep - -* Christopher Ormaza - -* Denis Roussel diff --git a/product_packaging_level/readme/CREDITS.rst b/product_packaging_level/readme/CREDITS.md similarity index 83% rename from product_packaging_level/readme/CREDITS.rst rename to product_packaging_level/readme/CREDITS.md index f5cc070c78e..705d3b30cad 100644 --- a/product_packaging_level/readme/CREDITS.rst +++ b/product_packaging_level/readme/CREDITS.md @@ -1,3 +1,3 @@ The development of this module has been financially supported by: -* Camptocamp +- Camptocamp diff --git a/product_packaging_level/readme/DESCRIPTION.md b/product_packaging_level/readme/DESCRIPTION.md new file mode 100644 index 00000000000..0262416c47b --- /dev/null +++ b/product_packaging_level/readme/DESCRIPTION.md @@ -0,0 +1,17 @@ +This module binds a product packaging to a packaging level. + +There are usually 3 levels: + +- The primary: it is the closest to the product, also called the retail + packaging +- The secondary: it allows to ship the products already in the primary + packaging, like a box +- The tertiary: it allows to ship large quantities in warehousing, like + a pallet + +This differentiates from the odoo standard package type that is typing +the packaging in a more precise way and that can serve for put-away +routing in the warehouse. + +For example a small box and a large box, or an EPAL pallet and CHEP +pallet. diff --git a/product_packaging_level/readme/DESCRIPTION.rst b/product_packaging_level/readme/DESCRIPTION.rst deleted file mode 100644 index 4862ee0a4fd..00000000000 --- a/product_packaging_level/readme/DESCRIPTION.rst +++ /dev/null @@ -1,12 +0,0 @@ -This module binds a product packaging to a packaging level. - -There are usually 3 levels: - -* The primary: it is the closest to the product, also called the retail packaging -* The secondary: it allows to ship the products already in the primary packaging, like a box -* The tertiary: it allows to ship large quantities in warehousing, like a pallet - -This differentiates from the odoo standard package type that is typing the packaging in a more -precise way and that can serve for put-away routing in the warehouse. - -For example a small box and a large box, or an EPAL pallet and CHEP pallet. diff --git a/product_packaging_level/readme/USAGE.md b/product_packaging_level/readme/USAGE.md new file mode 100644 index 00000000000..12998c33394 --- /dev/null +++ b/product_packaging_level/readme/USAGE.md @@ -0,0 +1,5 @@ +To create a new packaging level: + +1. Go to *Inventory \> Configuration \> Products \> Product Packaging + Level*. +2. You can create/edit/delete packaging levels diff --git a/product_packaging_level/readme/USAGE.rst b/product_packaging_level/readme/USAGE.rst deleted file mode 100644 index 8d69de1fa37..00000000000 --- a/product_packaging_level/readme/USAGE.rst +++ /dev/null @@ -1,4 +0,0 @@ -To create a new packaging level: - -#. Go to *Inventory > Configuration > Products > Product Packaging Level*. -#. You can create/edit/delete packaging levels diff --git a/product_packaging_level/static/description/index.html b/product_packaging_level/static/description/index.html index 308238a05d7..13c4b4df9af 100644 --- a/product_packaging_level/static/description/index.html +++ b/product_packaging_level/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -368,17 +369,22 @@

    Product Packaging Level

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:75e11fae4004a39e651e1162643c5ec763d00d748cec9d0478e483067b24c164 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    +

    Beta License: LGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

    This module binds a product packaging to a packaging level.

    There are usually 3 levels:

      -
    • The primary: it is the closest to the product, also called the retail packaging
    • -
    • The secondary: it allows to ship the products already in the primary packaging, like a box
    • -
    • The tertiary: it allows to ship large quantities in warehousing, like a pallet
    • +
    • The primary: it is the closest to the product, also called the retail +packaging
    • +
    • The secondary: it allows to ship the products already in the primary +packaging, like a box
    • +
    • The tertiary: it allows to ship large quantities in warehousing, like +a pallet
    -

    This differentiates from the odoo standard package type that is typing the packaging in a more -precise way and that can serve for put-away routing in the warehouse.

    -

    For example a small box and a large box, or an EPAL pallet and CHEP pallet.

    +

    This differentiates from the odoo standard package type that is typing +the packaging in a more precise way and that can serve for put-away +routing in the warehouse.

    +

    For example a small box and a large box, or an EPAL pallet and CHEP +pallet.

    Table of contents

      @@ -397,7 +403,8 @@

      Product Packaging Level

      Usage

      To create a new packaging level:

        -
      1. Go to Inventory > Configuration > Products > Product Packaging Level.
      2. +
      3. Go to Inventory > Configuration > Products > Product Packaging +Level.
      4. You can create/edit/delete packaging levels
    @@ -406,7 +413,7 @@

    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.

    +feedback.

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

    @@ -440,11 +447,13 @@

    Other credits

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +Odoo Community Association +

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

    -

    This module is part of the OCA/product-attribute project on GitHub.

    +

    This module is part of the OCA/product-attribute project on GitHub.

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

    diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000000..180fc49789b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +# generated from manifests external_dependencies +openupgradelib From 61d8f55438d17ad7e5a1924cbb4735d9d1a03b28 Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 18 Jun 2024 11:55:32 +0530 Subject: [PATCH 31/31] [MIG] product_packaging_level: Migration to 17.0 --- product_packaging_level/__manifest__.py | 2 +- product_packaging_level/hooks.py | 6 +++--- .../models/product_packaging.py | 3 --- .../models/product_packaging_level.py | 12 ++++++------ .../tests/test_product_packaging_level.py | 14 ++++++++++++-- .../views/product_packaging_view.xml | 14 ++++---------- 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/product_packaging_level/__manifest__.py b/product_packaging_level/__manifest__.py index bff080cc879..d131668377d 100644 --- a/product_packaging_level/__manifest__.py +++ b/product_packaging_level/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Packaging Level", - "version": "16.0.1.2.0", + "version": "17.0.1.0.0", "development_status": "Beta", "category": "Product", "summary": "This module binds a product packaging to a packaging level", diff --git a/product_packaging_level/hooks.py b/product_packaging_level/hooks.py index 5e4dbd569e4..f2c00356582 100644 --- a/product_packaging_level/hooks.py +++ b/product_packaging_level/hooks.py @@ -5,9 +5,9 @@ from odoo import SUPERUSER_ID, api -def pre_init_hook(cr): - if openupgrade.table_exists(cr, "product_packaging_type"): - env = api.Environment(cr, SUPERUSER_ID, {}) +def pre_init_hook(env): + if openupgrade.table_exists(env.cr, "product_packaging_type"): + env = api.Environment(env.cr, SUPERUSER_ID, {}) # Former version of the module is present models = [("product.packaging.type", "product.packaging.level")] openupgrade.rename_models(env.cr, models) diff --git a/product_packaging_level/models/product_packaging.py b/product_packaging_level/models/product_packaging.py index 4b0a5340743..496a19eeaee 100644 --- a/product_packaging_level/models/product_packaging.py +++ b/product_packaging_level/models/product_packaging.py @@ -76,9 +76,6 @@ def _compute_barcode_required_for_gtin(self): ) def _compute_qty_per_level(self): for packaging in self: - if not packaging.product_id: - packaging.qty_per_level = "" - continue mapping = packaging._get_qty_per_level_mapping() packaging.qty_per_level = packaging._format_qty_per_level(mapping) diff --git a/product_packaging_level/models/product_packaging_level.py b/product_packaging_level/models/product_packaging_level.py index 4565871b1cb..19c52277e38 100644 --- a/product_packaging_level/models/product_packaging_level.py +++ b/product_packaging_level/models/product_packaging_level.py @@ -10,7 +10,7 @@ class ProductPackagingLevel(models.Model): _order = "sequence, code" def _default_language(self): - lang_code = self.env["ir.default"].get("res.partner", "lang") + lang_code = self.env["ir.default"]._get("res.partner", "lang") def_lang_id = self.env["res.lang"]._lang_get_id(lang_code) return def_lang_id or self._active_languages()[0] @@ -66,8 +66,8 @@ def _check_is_default(self): if msg: raise ValidationError(msg) - def name_get(self): - result = [] - for record in self: - result.append((record.id, f"{record.name} ({record.code})")) - return result + @api.depends("name", "code") + def _compute_display_name(self): + for product_packaging_level in self: + name = f"{product_packaging_level.name} ({product_packaging_level.code})" + product_packaging_level.display_name = name diff --git a/product_packaging_level/tests/test_product_packaging_level.py b/product_packaging_level/tests/test_product_packaging_level.py index 193433899f0..8614aba4ba7 100644 --- a/product_packaging_level/tests/test_product_packaging_level.py +++ b/product_packaging_level/tests/test_product_packaging_level.py @@ -31,16 +31,26 @@ def setUpClass(cls): ) cls.level_fr.with_context(lang="fr_FR").name = "Packaging Level Test France" cls.packaging_default = cls.env["product.packaging"].create( - {"name": "Packaging Default", "qty": 1.0} + { + "name": "Packaging Default", + "qty": 1.0, + "product_id": cls.env.ref("product.product_product_5").id, + } ) cls.packaging = cls.env["product.packaging"].create( - {"name": "Packaging Test", "packaging_level_id": cls.level.id, "qty": 1.0} + { + "name": "Packaging Test", + "packaging_level_id": cls.level.id, + "qty": 1.0, + "product_id": cls.env.ref("product.product_product_5").id, + } ) cls.packaging_fr = cls.env["product.packaging"].create( { "name": "Packaging Test", "packaging_level_id": cls.level_fr.id, "qty": 1.0, + "product_id": cls.env.ref("product.product_product_5").id, } ) cls.product = cls.env["product.template"].create( diff --git a/product_packaging_level/views/product_packaging_view.xml b/product_packaging_level/views/product_packaging_view.xml index ea7dc3ce548..4102f7301d5 100644 --- a/product_packaging_level/views/product_packaging_view.xml +++ b/product_packaging_level/views/product_packaging_view.xml @@ -15,12 +15,10 @@ - {'required': [('barcode_required_for_gtin', '=', True)]} + barcode_required_for_gtin - 1 + 1 @@ -46,15 +44,11 @@ - {'required': [('barcode_required_for_gtin', '=', True)]} + barcode_required_for_gtin 1 - {'readonly': [('name_policy', '!=', 'user_defined')]} + name_policy != 'user_defined'