From 2edecc8abbbb8bb4cc7b253ef9fb15e1769a425d Mon Sep 17 00:00:00 2001 From: Sergio Teruel Albert Date: Thu, 11 Oct 2018 20:02:46 +0200 Subject: [PATCH 01/58] [11.0][NEW] product_secondary_unit: New module for setting a secondary unit for a product (#377) --- product_secondary_unit/README.rst | 84 ++++ product_secondary_unit/__init__.py | 2 + product_secondary_unit/__manifest__.py | 21 + product_secondary_unit/i18n/es.po | 111 +++++ .../i18n/product_secondary_unit.pot | 106 +++++ product_secondary_unit/models/__init__.py | 3 + .../models/product_second_unit.py | 47 ++ .../models/product_template.py | 18 + .../readme/CONTRIBUTORS.rst | 2 + product_secondary_unit/readme/DESCRIPTION.rst | 2 + product_secondary_unit/readme/USAGE.rst | 5 + .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 431 ++++++++++++++++++ product_secondary_unit/tests/__init__.py | 2 + .../tests/test_product_second_unit.py | 52 +++ .../views/product_views.xml | 32 ++ 17 files changed, 920 insertions(+) create mode 100644 product_secondary_unit/README.rst create mode 100644 product_secondary_unit/__init__.py create mode 100644 product_secondary_unit/__manifest__.py create mode 100644 product_secondary_unit/i18n/es.po create mode 100644 product_secondary_unit/i18n/product_secondary_unit.pot create mode 100644 product_secondary_unit/models/__init__.py create mode 100755 product_secondary_unit/models/product_second_unit.py create mode 100755 product_secondary_unit/models/product_template.py create mode 100644 product_secondary_unit/readme/CONTRIBUTORS.rst create mode 100644 product_secondary_unit/readme/DESCRIPTION.rst create mode 100644 product_secondary_unit/readme/USAGE.rst create mode 100644 product_secondary_unit/security/ir.model.access.csv create mode 100644 product_secondary_unit/static/description/icon.png create mode 100644 product_secondary_unit/static/description/index.html create mode 100644 product_secondary_unit/tests/__init__.py create mode 100644 product_secondary_unit/tests/test_product_second_unit.py create mode 100755 product_secondary_unit/views/product_views.xml diff --git a/product_secondary_unit/README.rst b/product_secondary_unit/README.rst new file mode 100644 index 00000000000..3757c47dc45 --- /dev/null +++ b/product_secondary_unit/README.rst @@ -0,0 +1,84 @@ +====================== +Product Secondary Unit +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/11.0/product_secondary_unit + :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-11-0/product-attribute-11-0-product_secondary_unit + :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/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of product module to allow define +other units with their conversion factor. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module you need to: + +#. Go to a *Product > General Information tab*. +#. Create any record in "Secondary unit of measure". +#. Set the conversion factor. + +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 +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* Carlos Dauden +* Sergio Teruel + +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_secondary_unit/__init__.py b/product_secondary_unit/__init__.py new file mode 100644 index 00000000000..3275ac2adf3 --- /dev/null +++ b/product_secondary_unit/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import models diff --git a/product_secondary_unit/__manifest__.py b/product_secondary_unit/__manifest__.py new file mode 100644 index 00000000000..7a04b95f739 --- /dev/null +++ b/product_secondary_unit/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + 'name': 'Product Secondary Unit', + 'summary': 'Set a secondary unit per product', + 'version': '11.0.1.0.0', + 'development_status': 'Beta', + 'category': 'Product', + 'website': 'https://github.com/OCA/product-attribute', + 'author': 'Tecnativa, Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'application': False, + 'installable': True, + 'depends': [ + 'product', + ], + 'data': [ + 'security/ir.model.access.csv', + 'views/product_views.xml', + ], +} diff --git a/product_secondary_unit/i18n/es.po b/product_secondary_unit/i18n/es.po new file mode 100644 index 00000000000..a00fd986880 --- /dev/null +++ b/product_secondary_unit/i18n/es.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-05 10:03+0000\n" +"PO-Revision-Date: 2018-09-05 12:05+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.6\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_code +msgid "Code" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_product_secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit_uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template_secondary_uom_ids +msgid "Default Secondary Unit of Measure." +msgstr "Segunda unidad de medida por defecto" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_sale_secondary_uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_sale_secondary_uom_id +msgid "Default unit sale" +msgstr "Unidad de venta por defecto" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name +#, fuzzy +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_id +#, fuzzy +msgid "ID" +msgstr "ID" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_name +msgid "Name" +msgstr "Nombre" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_product_tmpl_id +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_factor +msgid "Secondary Unit Factor" +msgstr "Factor segunda unidad" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_secondary_uom_ids +msgid "Secondary Unit of Measure" +msgstr "Segunda unidad de medida" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "product.secondary.unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "secondary Unit" +msgstr "Unidad Secundaria" + +#. module: product_secondary_unit +#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "secondary unit of measure" +msgstr "Segunda unidad de medida" diff --git a/product_secondary_unit/i18n/product_secondary_unit.pot b/product_secondary_unit/i18n/product_secondary_unit.pot new file mode 100644 index 00000000000..69e6cd3a39f --- /dev/null +++ b/product_secondary_unit/i18n/product_secondary_unit.pot @@ -0,0 +1,106 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.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_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_code +msgid "Code" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_uid +msgid "Created by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_date +msgid "Created on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_product_secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit_uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template_secondary_uom_ids +msgid "Default Secondary Unit of Measure." +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_sale_secondary_uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_sale_secondary_uom_id +msgid "Default unit sale" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name +msgid "Display Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_id +msgid "ID" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit___last_update +msgid "Last Modified on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_name +msgid "Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_product_tmpl_id +msgid "Product Template" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_factor +msgid "Secondary Unit Factor" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_secondary_uom_ids +msgid "Secondary Unit of Measure" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "product.secondary.unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "secondary Unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "secondary unit of measure" +msgstr "" + diff --git a/product_secondary_unit/models/__init__.py b/product_secondary_unit/models/__init__.py new file mode 100644 index 00000000000..4775c1b3fcc --- /dev/null +++ b/product_secondary_unit/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import product_second_unit +from . import product_template diff --git a/product_secondary_unit/models/product_second_unit.py b/product_secondary_unit/models/product_second_unit.py new file mode 100755 index 00000000000..914186ad826 --- /dev/null +++ b/product_secondary_unit/models/product_second_unit.py @@ -0,0 +1,47 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class ProductSecondaryUnit(models.Model): + _name = 'product.secondary.unit' + + name = fields.Char(required=True) + code = fields.Char() + product_tmpl_id = fields.Many2one( + comodel_name='product.template', + string='Product Template', + required=True, + ) + uom_id = fields.Many2one( + comodel_name='product.uom', + string='Secondary Unit of Measure', + required=True, + help="Default Secondary Unit of Measure.", + ) + factor = fields.Float( + string='Secondary Unit Factor', + default=1.0, + digits=0, + required=True, + ) + + @api.multi + def name_get(self): + result = [] + for unit in self: + result.append((unit.id, "{unit_name}-{factor}".format( + unit_name=unit.name, + factor=unit.factor)) + ) + return result + + @api.model + def name_search(self, name='', args=None, operator='ilike', limit=100): + if args is None: + args = [] + units = self.search([('code', '=', name)] + args, limit=1) + if not units: + return super(ProductSecondaryUnit, self).name_search( + name=name, args=args, operator=operator, limit=limit) + return units.name_get() diff --git a/product_secondary_unit/models/product_template.py b/product_secondary_unit/models/product_template.py new file mode 100755 index 00000000000..067316bdc60 --- /dev/null +++ b/product_secondary_unit/models/product_template.py @@ -0,0 +1,18 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + secondary_uom_ids = fields.One2many( + comodel_name='product.secondary.unit', + inverse_name='product_tmpl_id', + string='Secondary Unit of Measure', + help='Default Secondary Unit of Measure.', + ) + sale_secondary_uom_id = fields.Many2one( + comodel_name='product.secondary.unit', + string='Default unit sale', + ) diff --git a/product_secondary_unit/readme/CONTRIBUTORS.rst b/product_secondary_unit/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..b919cb776aa --- /dev/null +++ b/product_secondary_unit/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Carlos Dauden +* Sergio Teruel diff --git a/product_secondary_unit/readme/DESCRIPTION.rst b/product_secondary_unit/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..006bd6d63a2 --- /dev/null +++ b/product_secondary_unit/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of product module to allow define +other units with their conversion factor. diff --git a/product_secondary_unit/readme/USAGE.rst b/product_secondary_unit/readme/USAGE.rst new file mode 100644 index 00000000000..3f837c39383 --- /dev/null +++ b/product_secondary_unit/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module you need to: + +#. Go to a *Product > General Information tab*. +#. Create any record in "Secondary unit of measure". +#. Set the conversion factor. diff --git a/product_secondary_unit/security/ir.model.access.csv b/product_secondary_unit/security/ir.model.access.csv new file mode 100644 index 00000000000..5ca549da6e5 --- /dev/null +++ b/product_secondary_unit/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_secondary_unit_user,access_product_second_unit_user,model_product_secondary_unit,base.group_user,1,1,1,1 diff --git a/product_secondary_unit/static/description/icon.png b/product_secondary_unit/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_secondary_unit/static/description/index.html b/product_secondary_unit/static/description/index.html new file mode 100644 index 00000000000..58907ad4632 --- /dev/null +++ b/product_secondary_unit/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +Product Secondary Unit + + + +
+

Product Secondary Unit

+ + +

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

+

This module extends the functionality of product module to allow define +other units with their conversion factor.

+

Table of contents

+ +
+

Usage

+

To use this module you need to:

+
    +
  1. Go to a Product > General Information tab.
  2. +
  3. Create any record in “Secondary unit of measure”.
  4. +
  5. Set the conversion factor.
  6. +
+
+
+

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

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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_secondary_unit/tests/__init__.py b/product_secondary_unit/tests/__init__.py new file mode 100644 index 00000000000..62bc6773d19 --- /dev/null +++ b/product_secondary_unit/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_product_second_unit diff --git a/product_secondary_unit/tests/test_product_second_unit.py b/product_secondary_unit/tests/test_product_second_unit.py new file mode 100644 index 00000000000..3b01607bba3 --- /dev/null +++ b/product_secondary_unit/tests/test_product_second_unit.py @@ -0,0 +1,52 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests import SavepointCase + + +class TestProductSecondaryUnit(SavepointCase): + at_install = False + post_install = True + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_uom_kg = cls.env.ref('product.product_uom_kgm') + cls.product_uom_unit = cls.env.ref('product.product_uom_unit') + cls.product = cls.env['product.template'].create({ + 'name': 'test', + 'uom_id': cls.product_uom_kg.id, + 'uom_po_id': cls.product_uom_kg.id, + 'secondary_uom_ids': [ + (0, 0, { + 'code': 'A', + 'name': 'unit-700', + 'uom_id': cls.product_uom_unit.id, + 'factor': 0.7, + }), + (0, 0, { + 'code': 'B', + 'name': 'unit-900', + 'uom_id': cls.product_uom_unit.id, + 'factor': 0.9, + }), + ], + }) + secondary_unit = cls.env['product.secondary.unit'].search([ + ('product_tmpl_id', '=', cls.product.id), + ], limit=1) + cls.product.sale_secondary_uom_id = secondary_unit.id + + def test_product_secondary_unit_name(self): + self.assertEqual( + self.product.sale_secondary_uom_id.name_get()[0][1], + 'unit-700-0.7') + + def test_product_secondary_unit_search(self): + args = [('product_tmpl_id.product_variant_ids', 'in', + self.product.product_variant_ids.ids)] + name_get = self.env['product.secondary.unit'].name_search( + name='A', args=args) + self.assertEqual(len(name_get), 1) + name_get = self.env['product.secondary.unit'].name_search( + name='X', args=args) + self.assertEqual(len(name_get), 0) diff --git a/product_secondary_unit/views/product_views.xml b/product_secondary_unit/views/product_views.xml new file mode 100755 index 00000000000..2ef69a3b719 --- /dev/null +++ b/product_secondary_unit/views/product_views.xml @@ -0,0 +1,32 @@ + + + + + + Product template Secondary Unit + product.template + + + + + + + + + + + + + + + + + + + + + + From a5e606959600528944b799530a005d0fa7a44edf Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Thu, 25 Oct 2018 23:00:02 +0200 Subject: [PATCH 02/58] [11.0][ADD] product_secondary_unit: Add default secondary unit for purchases --- product_secondary_unit/__manifest__.py | 2 +- product_secondary_unit/i18n/es.po | 12 ++++++++++-- product_secondary_unit/models/product_template.py | 4 ---- .../tests/test_product_second_unit.py | 7 ++----- product_secondary_unit/views/product_views.xml | 5 ----- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/product_secondary_unit/__manifest__.py b/product_secondary_unit/__manifest__.py index 7a04b95f739..3eff04f5948 100644 --- a/product_secondary_unit/__manifest__.py +++ b/product_secondary_unit/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Product Secondary Unit', 'summary': 'Set a secondary unit per product', - 'version': '11.0.1.0.0', + 'version': '11.0.1.0.1', 'development_status': 'Beta', 'category': 'Product', 'website': 'https://github.com/OCA/product-attribute', diff --git a/product_secondary_unit/i18n/es.po b/product_secondary_unit/i18n/es.po index a00fd986880..b8ce1848db4 100644 --- a/product_secondary_unit/i18n/es.po +++ b/product_secondary_unit/i18n/es.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-05 10:03+0000\n" -"PO-Revision-Date: 2018-09-05 12:05+0200\n" +"POT-Creation-Date: 2018-10-26 10:00+0000\n" +"PO-Revision-Date: 2018-10-26 12:01+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: es_ES\n" @@ -39,6 +39,14 @@ msgstr "Creado en" msgid "Default Secondary Unit of Measure." msgstr "Segunda unidad de medida por defecto" +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_purchase_secondary_uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_purchase_secondary_uom_id +#, fuzzy +#| msgid "Default unit sale" +msgid "Default unit purchase" +msgstr "Unidad de venta por defecto" + #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_sale_secondary_uom_id #: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_sale_secondary_uom_id diff --git a/product_secondary_unit/models/product_template.py b/product_secondary_unit/models/product_template.py index 067316bdc60..b729a648a27 100755 --- a/product_secondary_unit/models/product_template.py +++ b/product_secondary_unit/models/product_template.py @@ -12,7 +12,3 @@ class ProductTemplate(models.Model): string='Secondary Unit of Measure', help='Default Secondary Unit of Measure.', ) - sale_secondary_uom_id = fields.Many2one( - comodel_name='product.secondary.unit', - string='Default unit sale', - ) diff --git a/product_secondary_unit/tests/test_product_second_unit.py b/product_secondary_unit/tests/test_product_second_unit.py index 3b01607bba3..f05b1bb936e 100644 --- a/product_secondary_unit/tests/test_product_second_unit.py +++ b/product_secondary_unit/tests/test_product_second_unit.py @@ -31,15 +31,12 @@ def setUpClass(cls): }), ], }) - secondary_unit = cls.env['product.secondary.unit'].search([ + cls.secondary_unit = cls.env['product.secondary.unit'].search([ ('product_tmpl_id', '=', cls.product.id), ], limit=1) - cls.product.sale_secondary_uom_id = secondary_unit.id def test_product_secondary_unit_name(self): - self.assertEqual( - self.product.sale_secondary_uom_id.name_get()[0][1], - 'unit-700-0.7') + self.assertEqual(self.secondary_unit.name_get()[0][1], 'unit-700-0.7') def test_product_secondary_unit_search(self): args = [('product_tmpl_id.product_variant_ids', 'in', diff --git a/product_secondary_unit/views/product_views.xml b/product_secondary_unit/views/product_views.xml index 2ef69a3b719..c0f2817b410 100755 --- a/product_secondary_unit/views/product_views.xml +++ b/product_secondary_unit/views/product_views.xml @@ -9,11 +9,6 @@ - - - From 0d7a93703e1ea9e4a2ab57b7172de7e2329cd1c8 Mon Sep 17 00:00:00 2001 From: William Olhasque Date: Mon, 5 Nov 2018 11:07:01 +0000 Subject: [PATCH 03/58] Added translation using Weblate (French) --- product_secondary_unit/i18n/es.po | 22 ++-- product_secondary_unit/i18n/fr.po | 105 ++++++++++++++++++ .../i18n/product_secondary_unit.pot | 6 - 3 files changed, 113 insertions(+), 20 deletions(-) create mode 100644 product_secondary_unit/i18n/fr.po diff --git a/product_secondary_unit/i18n/es.po b/product_secondary_unit/i18n/es.po index b8ce1848db4..7d785cfa001 100644 --- a/product_secondary_unit/i18n/es.po +++ b/product_secondary_unit/i18n/es.po @@ -39,20 +39,6 @@ msgstr "Creado en" msgid "Default Secondary Unit of Measure." msgstr "Segunda unidad de medida por defecto" -#. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_purchase_secondary_uom_id -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_purchase_secondary_uom_id -#, fuzzy -#| msgid "Default unit sale" -msgid "Default unit purchase" -msgstr "Unidad de venta por defecto" - -#. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_sale_secondary_uom_id -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_sale_secondary_uom_id -msgid "Default unit sale" -msgstr "Unidad de venta por defecto" - #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name #, fuzzy @@ -117,3 +103,11 @@ msgstr "Unidad Secundaria" #: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "secondary unit of measure" msgstr "Segunda unidad de medida" + +#~ msgid "Default unit sale" +#~ msgstr "Unidad de venta por defecto" + +#, fuzzy +#~| msgid "Default unit sale" +#~ msgid "Default unit purchase" +#~ msgstr "Unidad de venta por defecto" diff --git a/product_secondary_unit/i18n/fr.po b/product_secondary_unit/i18n/fr.po new file mode 100644 index 00000000000..74937bceb58 --- /dev/null +++ b/product_secondary_unit/i18n/fr.po @@ -0,0 +1,105 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-11-06 11:25+0000\n" +"Last-Translator: William Olhasque \n" +"Language-Team: none\n" +"Language: fr\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 3.2.2\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_code +msgid "Code" +msgstr "Code" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_product_secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit_uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template_secondary_uom_ids +msgid "Default Secondary Unit of Measure." +msgstr "Unité de mesure secondaire par défaut." + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_id +msgid "ID" +msgstr "ID" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit___last_update +msgid "Last Modified on" +msgstr "Dernière Modification le" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_name +msgid "Name" +msgstr "Nom" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_product_tmpl_id +msgid "Product Template" +msgstr "Modèle de produit" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_factor +msgid "Secondary Unit Factor" +msgstr "Facteur de l'unité secondaire" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_secondary_uom_ids +msgid "Secondary Unit of Measure" +msgstr "Unité de mesure secondaire" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "product.secondary.unit" +msgstr "product.secondary.unit" + +#. module: product_secondary_unit +#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "secondary Unit" +msgstr "Unité secondaire" + +#. module: product_secondary_unit +#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "secondary unit of measure" +msgstr "Unité de mesure secondaire" + +#~ msgid "Default unit sale" +#~ msgstr "Unité de vente par défaut" diff --git a/product_secondary_unit/i18n/product_secondary_unit.pot b/product_secondary_unit/i18n/product_secondary_unit.pot index 69e6cd3a39f..aeb44245bbf 100644 --- a/product_secondary_unit/i18n/product_secondary_unit.pot +++ b/product_secondary_unit/i18n/product_secondary_unit.pot @@ -35,12 +35,6 @@ msgstr "" msgid "Default Secondary Unit of Measure." msgstr "" -#. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_sale_secondary_uom_id -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_sale_secondary_uom_id -msgid "Default unit sale" -msgstr "" - #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name msgid "Display Name" From 76214ab9866b94610460bdb677425408db1f3a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marta=20V=C3=A1zquez=20Rodr=C3=ADguez?= Date: Fri, 8 Feb 2019 11:19:26 +0000 Subject: [PATCH 04/58] Translated using Weblate (Spanish) Currently translated at 100.0% (16 of 16 strings) Translation: product-attribute-11.0/product-attribute-11.0-product_secondary_unit Translate-URL: https://translation.odoo-community.org/projects/product-attribute-11-0/product-attribute-11-0-product_secondary_unit/es/ --- product_secondary_unit/i18n/es.po | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/product_secondary_unit/i18n/es.po b/product_secondary_unit/i18n/es.po index 7d785cfa001..c38d4b91d19 100644 --- a/product_secondary_unit/i18n/es.po +++ b/product_secondary_unit/i18n/es.po @@ -7,20 +7,20 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-26 10:00+0000\n" -"PO-Revision-Date: 2018-10-26 12:01+0200\n" -"Last-Translator: \n" +"PO-Revision-Date: 2019-02-08 13:50+0000\n" +"Last-Translator: Marta Vázquez Rodríguez \n" "Language-Team: \n" -"Language: es_ES\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.6\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.4\n" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_code msgid "Code" -msgstr "" +msgstr "Código" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_uid @@ -37,19 +37,17 @@ msgstr "Creado en" #: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit_uom_id #: model:ir.model.fields,help:product_secondary_unit.field_product_template_secondary_uom_ids msgid "Default Secondary Unit of Measure." -msgstr "Segunda unidad de medida por defecto" +msgstr "Segunda unidad de medida por defecto." #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name -#, fuzzy msgid "Display Name" -msgstr "Mostrar Nombre" +msgstr "Mostrar nombre" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_id -#, fuzzy msgid "ID" -msgstr "ID" +msgstr "ID (Identificador)" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit___last_update @@ -92,7 +90,7 @@ msgstr "Segunda unidad de medida" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_secondary_unit msgid "product.secondary.unit" -msgstr "" +msgstr "'product.secondary.unit'" #. module: product_secondary_unit #: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view From 67b5d4a3d535874f8257165ac70bbd600455ce06 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Wed, 13 Mar 2019 15:43:15 +0100 Subject: [PATCH 05/58] [11.0][IMP] product_secondary_unit: Make secondary unit name translatable --- product_secondary_unit/models/product_second_unit.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/product_secondary_unit/models/product_second_unit.py b/product_secondary_unit/models/product_second_unit.py index 914186ad826..2d7ffc35382 100755 --- a/product_secondary_unit/models/product_second_unit.py +++ b/product_secondary_unit/models/product_second_unit.py @@ -6,7 +6,10 @@ class ProductSecondaryUnit(models.Model): _name = 'product.secondary.unit' - name = fields.Char(required=True) + name = fields.Char( + required=True, + translate=True, + ) code = fields.Char() product_tmpl_id = fields.Many2one( comodel_name='product.template', From 97475c6684a04b9ab6462d7c9cd89b3c9b7a3bd3 Mon Sep 17 00:00:00 2001 From: Kitti U Date: Thu, 4 Apr 2019 10:58:57 +0700 Subject: [PATCH 06/58] [12.0][MIG] product_secondary_unit --- product_secondary_unit/README.rst | 11 ++-- product_secondary_unit/__manifest__.py | 2 +- product_secondary_unit/i18n/es.po | 50 ++++++++++--------- product_secondary_unit/i18n/fr.po | 50 ++++++++++--------- .../i18n/product_secondary_unit.pot | 50 +++++++++---------- .../models/product_second_unit.py | 3 +- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 9 ++-- .../tests/test_product_second_unit.py | 4 +- .../views/product_views.xml | 2 +- 10 files changed, 95 insertions(+), 87 deletions(-) diff --git a/product_secondary_unit/README.rst b/product_secondary_unit/README.rst index 3757c47dc45..7995d463506 100644 --- a/product_secondary_unit/README.rst +++ b/product_secondary_unit/README.rst @@ -14,13 +14,13 @@ Product Secondary Unit :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/11.0/product_secondary_unit + :target: https://github.com/OCA/product-attribute/tree/12.0/product_secondary_unit :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-11-0/product-attribute-11-0-product_secondary_unit + :target: https://translation.odoo-community.org/projects/product-attribute-12-0/product-attribute-12-0-product_secondary_unit :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/11.0 + :target: https://runbot.odoo-community.org/runbot/135/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -48,7 +48,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 -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -65,6 +65,7 @@ Contributors * Carlos Dauden * Sergio Teruel +* Kitti Upariphutthiphong Maintainers ~~~~~~~~~~~ @@ -79,6 +80,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_secondary_unit/__manifest__.py b/product_secondary_unit/__manifest__.py index 3eff04f5948..0bca0932970 100644 --- a/product_secondary_unit/__manifest__.py +++ b/product_secondary_unit/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Product Secondary Unit', 'summary': 'Set a secondary unit per product', - 'version': '11.0.1.0.1', + 'version': '12.0.1.0.0', 'development_status': 'Beta', 'category': 'Product', 'website': 'https://github.com/OCA/product-attribute', diff --git a/product_secondary_unit/i18n/es.po b/product_secondary_unit/i18n/es.po index c38d4b91d19..5ed405865dd 100644 --- a/product_secondary_unit/i18n/es.po +++ b/product_secondary_unit/i18n/es.po @@ -18,87 +18,89 @@ msgstr "" "X-Generator: Weblate 3.4\n" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_code +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code msgid "Code" msgstr "Código" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_uid +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid msgid "Created by" msgstr "Creado por" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_date +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date msgid "Created on" msgstr "Creado en" #. module: product_secondary_unit -#: model:ir.model.fields,help:product_secondary_unit.field_product_product_secondary_uom_ids -#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit_uom_id -#: model:ir.model.fields,help:product_secondary_unit.field_product_template_secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Default Secondary Unit of Measure." msgstr "Segunda unidad de medida por defecto." #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name msgid "Display Name" msgstr "Mostrar nombre" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id msgid "ID" msgstr "ID (Identificador)" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit___last_update +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit____last_update msgid "Last Modified on" msgstr "Última modificación en" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_uid +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid msgid "Last Updated by" msgstr "Última actualización de" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_date +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date msgid "Last Updated on" msgstr "Última actualización en" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_name +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name msgid "Name" msgstr "Nombre" +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +#, fuzzy +#| msgid "product.secondary.unit" +msgid "Product Secondary Unit" +msgstr "'product.secondary.unit'" + #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_template -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_product_tmpl_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id msgid "Product Template" msgstr "Plantilla de producto" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_factor +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor msgid "Secondary Unit Factor" msgstr "Factor segunda unidad" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_secondary_uom_ids -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_uom_id -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Secondary Unit of Measure" msgstr "Segunda unidad de medida" #. module: product_secondary_unit -#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit -msgid "product.secondary.unit" -msgstr "'product.secondary.unit'" - -#. module: product_secondary_unit -#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "secondary Unit" msgstr "Unidad Secundaria" #. module: product_secondary_unit -#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "secondary unit of measure" msgstr "Segunda unidad de medida" diff --git a/product_secondary_unit/i18n/fr.po b/product_secondary_unit/i18n/fr.po index 74937bceb58..658fa2536e1 100644 --- a/product_secondary_unit/i18n/fr.po +++ b/product_secondary_unit/i18n/fr.po @@ -17,87 +17,89 @@ msgstr "" "X-Generator: Weblate 3.2.2\n" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_code +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code msgid "Code" msgstr "Code" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_uid +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid msgid "Created by" msgstr "Créé par" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_date +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date msgid "Created on" msgstr "Créé le" #. module: product_secondary_unit -#: model:ir.model.fields,help:product_secondary_unit.field_product_product_secondary_uom_ids -#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit_uom_id -#: model:ir.model.fields,help:product_secondary_unit.field_product_template_secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Default Secondary Unit of Measure." msgstr "Unité de mesure secondaire par défaut." #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name msgid "Display Name" msgstr "Nom affiché" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id msgid "ID" msgstr "ID" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit___last_update +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit____last_update msgid "Last Modified on" msgstr "Dernière Modification le" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_uid +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid msgid "Last Updated by" msgstr "Dernière mise à jour par" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_date +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date msgid "Last Updated on" msgstr "Dernière mise à jour le" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_name +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name msgid "Name" msgstr "Nom" +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +#, fuzzy +#| msgid "product.secondary.unit" +msgid "Product Secondary Unit" +msgstr "product.secondary.unit" + #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_template -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_product_tmpl_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id msgid "Product Template" msgstr "Modèle de produit" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_factor +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor msgid "Secondary Unit Factor" msgstr "Facteur de l'unité secondaire" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_secondary_uom_ids -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_uom_id -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Secondary Unit of Measure" msgstr "Unité de mesure secondaire" #. module: product_secondary_unit -#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit -msgid "product.secondary.unit" -msgstr "product.secondary.unit" - -#. module: product_secondary_unit -#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "secondary Unit" msgstr "Unité secondaire" #. module: product_secondary_unit -#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "secondary unit of measure" msgstr "Unité de mesure secondaire" diff --git a/product_secondary_unit/i18n/product_secondary_unit.pot b/product_secondary_unit/i18n/product_secondary_unit.pot index aeb44245bbf..efb8985cb05 100644 --- a/product_secondary_unit/i18n/product_secondary_unit.pot +++ b/product_secondary_unit/i18n/product_secondary_unit.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,87 +14,87 @@ msgstr "" "Plural-Forms: \n" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_code +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code msgid "Code" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_uid +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid msgid "Created by" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_create_date +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date msgid "Created on" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,help:product_secondary_unit.field_product_product_secondary_uom_ids -#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit_uom_id -#: model:ir.model.fields,help:product_secondary_unit.field_product_template_secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Default Secondary Unit of Measure." msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_display_name +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name msgid "Display Name" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id msgid "ID" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit___last_update +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit____last_update msgid "Last Modified on" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_uid +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid msgid "Last Updated by" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_write_date +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date msgid "Last Updated on" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_name +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name msgid "Name" msgstr "" +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "" + #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_template -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_product_tmpl_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id msgid "Product Template" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_factor +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor msgid "Secondary Unit Factor" msgstr "" #. module: product_secondary_unit -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product_secondary_uom_ids -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_uom_id -#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template_secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Secondary Unit of Measure" msgstr "" #. module: product_secondary_unit -#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit -msgid "product.secondary.unit" -msgstr "" - -#. module: product_secondary_unit -#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "secondary Unit" msgstr "" #. module: product_secondary_unit -#: model:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "secondary unit of measure" msgstr "" diff --git a/product_secondary_unit/models/product_second_unit.py b/product_secondary_unit/models/product_second_unit.py index 2d7ffc35382..ee21713a676 100755 --- a/product_secondary_unit/models/product_second_unit.py +++ b/product_secondary_unit/models/product_second_unit.py @@ -5,6 +5,7 @@ class ProductSecondaryUnit(models.Model): _name = 'product.secondary.unit' + _description = 'Product Secondary Unit' name = fields.Char( required=True, @@ -17,7 +18,7 @@ class ProductSecondaryUnit(models.Model): required=True, ) uom_id = fields.Many2one( - comodel_name='product.uom', + comodel_name='uom.uom', string='Secondary Unit of Measure', required=True, help="Default Secondary Unit of Measure.", diff --git a/product_secondary_unit/readme/CONTRIBUTORS.rst b/product_secondary_unit/readme/CONTRIBUTORS.rst index b919cb776aa..3b07d85d575 100644 --- a/product_secondary_unit/readme/CONTRIBUTORS.rst +++ b/product_secondary_unit/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Carlos Dauden * Sergio Teruel +* Kitti Upariphutthiphong diff --git a/product_secondary_unit/static/description/index.html b/product_secondary_unit/static/description/index.html index 58907ad4632..ccbe87ff2bf 100644 --- a/product_secondary_unit/static/description/index.html +++ b/product_secondary_unit/static/description/index.html @@ -3,7 +3,7 @@ - + Product Secondary Unit -
-

Product Secondary Unit

+
+ + +Odoo Community Association + +
+

Product Secondary Unit

-

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This module extends the functionality of product module to allow define other units with their conversion factor.

Table of contents

@@ -386,7 +391,7 @@

Product Secondary Unit

-

Usage

+

Usage

To use this module you need to:

  1. Go to a Product > General Information tab.
  2. @@ -395,7 +400,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 @@ -403,15 +408,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Tecnativa
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -436,5 +441,6 @@

Maintainers

+
From 32dc9b98e501414ef3034eff0e210c0c18dc7a4a Mon Sep 17 00:00:00 2001 From: vladimiruvid Date: Mon, 29 Sep 2025 08:01:18 +0000 Subject: [PATCH 45/58] Added translation using Weblate (Croatian) --- product_secondary_unit/i18n/hr.po | 141 ++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 product_secondary_unit/i18n/hr.po diff --git a/product_secondary_unit/i18n/hr.po b/product_secondary_unit/i18n/hr.po new file mode 100644 index 00000000000..ff011cdf10d --- /dev/null +++ b/product_secondary_unit/i18n/hr.po @@ -0,0 +1,141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code +msgid "Code" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid +msgid "Created by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date +msgid "Created on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids +msgid "Default Secondary Unit of Measure." +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "Dependency Type" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent +msgid "Dependent" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name +msgid "Display Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id +msgid "ID" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "" +"If dependency type is 'dependent' the factor is used to compute quantity in " +"primary unit,otherwise primary and secondary unit are independent. For " +"example if you sell serviceby package (1 unit for example) and you want to " +"put the real time (ex : 4 hours) to allows employee scheduling" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent +msgid "Independent" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name +msgid "Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +msgid "Product" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin +msgid "Product Secondary Unit Mixin" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id +msgid "Product Template" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_product +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_id +msgid "Product Variant" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_id +msgid "Second unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_qty +msgid "Secondary Qty" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor +msgid "Secondary Unit Factor" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "Secondary Unit of Measure" +msgstr "" From 02392bea854178dc79f1c92493a58248a332753a Mon Sep 17 00:00:00 2001 From: vladimiruvid Date: Mon, 29 Sep 2025 08:01:39 +0000 Subject: [PATCH 46/58] Translated using Weblate (Croatian) Currently translated at 100.0% (23 of 23 strings) Translation: product-attribute-18.0/product-attribute-18.0-product_secondary_unit Translate-URL: https://translation.odoo-community.org/projects/product-attribute-18-0/product-attribute-18-0-product_secondary_unit/hr/ --- product_secondary_unit/i18n/hr.po | 52 +++++++++++++++++-------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/product_secondary_unit/i18n/hr.po b/product_secondary_unit/i18n/hr.po index ff011cdf10d..2c8181ccfa6 100644 --- a/product_secondary_unit/i18n/hr.po +++ b/product_secondary_unit/i18n/hr.po @@ -6,7 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2025-09-29 08:08+0000\n" +"Last-Translator: vladimiruvid \n" "Language-Team: none\n" "Language: hr\n" "MIME-Version: 1.0\n" @@ -14,53 +15,54 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.10.4\n" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active msgid "Active" -msgstr "" +msgstr "Aktivno" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code msgid "Code" -msgstr "" +msgstr "Šifra" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid msgid "Created by" -msgstr "" +msgstr "Kreirao" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date msgid "Created on" -msgstr "" +msgstr "Kreirano" #. module: product_secondary_unit #: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids #: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id #: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Default Secondary Unit of Measure." -msgstr "" +msgstr "Zadana sekundarna mjerna jedinica." #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type msgid "Dependency Type" -msgstr "" +msgstr "Vrsta ovisnosti" #. module: product_secondary_unit #: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent msgid "Dependent" -msgstr "" +msgstr "Ovisno" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name msgid "Display Name" -msgstr "" +msgstr "Naziv za prikaz" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id msgid "ID" -msgstr "" +msgstr "ID" #. module: product_secondary_unit #: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__dependency_type @@ -70,67 +72,71 @@ msgid "" "example if you sell serviceby package (1 unit for example) and you want to " "put the real time (ex : 4 hours) to allows employee scheduling" msgstr "" +"Ako je vrsta ovisnosti 'ovisna', faktor se koristi za izračun količine u " +"primarnoj jedinici, inače su primarna i sekundarna jedinica neovisne. Na " +"primjer, ako prodajete uslugu po paketu (npr. 1 jedinica) i želite postaviti " +"stvarno vrijeme (npr. 4 sata) kako biste omogućili raspoređivanje zaposlenika" #. module: product_secondary_unit #: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent msgid "Independent" -msgstr "" +msgstr "Neovisno" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Zadnje ažurirao" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date msgid "Last Updated on" -msgstr "" +msgstr "Zadnje ažurirano" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name msgid "Name" -msgstr "" +msgstr "Naziv" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_template msgid "Product" -msgstr "" +msgstr "Proizvod" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_secondary_unit msgid "Product Secondary Unit" -msgstr "" +msgstr "Sekundarna jedinica proizvoda" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin msgid "Product Secondary Unit Mixin" -msgstr "" +msgstr "Miješana sekundarna jedinica proizvoda" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id msgid "Product Template" -msgstr "" +msgstr "Predložak proizvoda" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_product #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_id msgid "Product Variant" -msgstr "" +msgstr "Varijanta proizvoda" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_id msgid "Second unit" -msgstr "" +msgstr "Alt. jedinica" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_qty msgid "Secondary Qty" -msgstr "" +msgstr "Alt. količina" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor msgid "Secondary Unit Factor" -msgstr "" +msgstr "Alt. omjer" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids @@ -138,4 +144,4 @@ msgstr "" #: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids #: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "Secondary Unit of Measure" -msgstr "" +msgstr "Alt. JM" From b571bf22fc5f8ee6a30f3a590eb0378c2629dca3 Mon Sep 17 00:00:00 2001 From: Graeme Gellatly Date: Thu, 4 Sep 2025 11:01:01 +1200 Subject: [PATCH 47/58] [FIX] product_secondary_unit: don't show inactive UoMs --- product_secondary_unit/views/product_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_secondary_unit/views/product_views.xml b/product_secondary_unit/views/product_views.xml index f8c4bd1b5a4..09a33a9204f 100644 --- a/product_secondary_unit/views/product_views.xml +++ b/product_secondary_unit/views/product_views.xml @@ -28,7 +28,7 @@ /> - + From 467133c70c6020b4bffaabddc3fa9d78f17b7ee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bet=C3=BCl=20=C3=96=C4=9Fmen?= Date: Mon, 24 Nov 2025 12:07:03 +0000 Subject: [PATCH 48/58] Translated using Weblate (Turkish) Currently translated at 95.6% (22 of 23 strings) Translation: product-attribute-18.0/product-attribute-18.0-product_secondary_unit Translate-URL: https://translation.odoo-community.org/projects/product-attribute-18-0/product-attribute-18-0-product_secondary_unit/tr/ --- product_secondary_unit/i18n/tr.po | 50 +++++++++++++++++-------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/product_secondary_unit/i18n/tr.po b/product_secondary_unit/i18n/tr.po index 35c5d1557d2..56c7046b004 100644 --- a/product_secondary_unit/i18n/tr.po +++ b/product_secondary_unit/i18n/tr.po @@ -6,55 +6,57 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2025-11-24 12:50+0000\n" +"Last-Translator: Betül Öğmen \n" "Language-Team: none\n" "Language: tr\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 5.10.4\n" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active msgid "Active" -msgstr "" +msgstr "Aktif" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code msgid "Code" -msgstr "" +msgstr "Kod" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid msgid "Created by" -msgstr "" +msgstr "Oluşturan" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date msgid "Created on" -msgstr "" +msgstr "Oluşturulma tarihi" #. module: product_secondary_unit #: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids #: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id #: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Default Secondary Unit of Measure." -msgstr "" +msgstr "Varsayılan İkincil Ölçü Birimi." #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type msgid "Dependency Type" -msgstr "" +msgstr "Bağımlılık Türü" #. module: product_secondary_unit #: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent msgid "Dependent" -msgstr "" +msgstr "Bağımlı" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name msgid "Display Name" -msgstr "" +msgstr "İsim Göster" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id @@ -69,67 +71,71 @@ msgid "" "example if you sell serviceby package (1 unit for example) and you want to " "put the real time (ex : 4 hours) to allows employee scheduling" msgstr "" +"Bağımlılık türü 'bağımlı' ise faktör birincil birimdeki miktarı hesaplamak " +"için kullanılır, aksi takdirde birincil ve ikincil birim bağımsızdır. " +"Örneğin, hizmeti paket olarak satıyorsanız (örneğin 1 birim) ve gerçek " +"zamanı (örneğin: 4 saat) çalışan planlamasına izin vermek istiyorsanız" #. module: product_secondary_unit #: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent msgid "Independent" -msgstr "" +msgstr "Bağımsız" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Son Güncelleyen" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date msgid "Last Updated on" -msgstr "" +msgstr "Son Güncelleme" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name msgid "Name" -msgstr "" +msgstr "Ad" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_template msgid "Product" -msgstr "" +msgstr "Ürün" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_secondary_unit msgid "Product Secondary Unit" -msgstr "" +msgstr "Ürün İkincil Birim" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin msgid "Product Secondary Unit Mixin" -msgstr "" +msgstr "Ürün İkincil Birim Karışımı" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id msgid "Product Template" -msgstr "" +msgstr "Ürün Şablonu" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_product #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_id msgid "Product Variant" -msgstr "" +msgstr "Ürün Varyantı" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_id msgid "Second unit" -msgstr "" +msgstr "İkincil birim" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_qty msgid "Secondary Qty" -msgstr "" +msgstr "İkincil miktar" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor msgid "Secondary Unit Factor" -msgstr "" +msgstr "İkincil Birim Faktörü" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids @@ -137,4 +143,4 @@ msgstr "" #: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids #: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "Secondary Unit of Measure" -msgstr "" +msgstr "İkincil Ölçü Birimi" From 63674bdaff338d005b4c7ff183db7fec5a53208c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 30 Nov 2025 16:10:52 +0000 Subject: [PATCH 49/58] [BOT] post-merge updates --- product_secondary_unit/README.rst | 2 +- product_secondary_unit/__manifest__.py | 2 +- product_secondary_unit/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/product_secondary_unit/README.rst b/product_secondary_unit/README.rst index c061b212cb2..6923954aa09 100644 --- a/product_secondary_unit/README.rst +++ b/product_secondary_unit/README.rst @@ -11,7 +11,7 @@ Product Secondary Unit !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:0029efd789786ccc3b328f612bf8dec00c53357a6b825b322a5170cdc451ba88 + !! source digest: sha256:7c3631b2bfcbf6b7a703fcf35191a858aa0cb2b95ac103597c58663e10a9d49b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/product_secondary_unit/__manifest__.py b/product_secondary_unit/__manifest__.py index fb00c049418..7af44ebf5ef 100644 --- a/product_secondary_unit/__manifest__.py +++ b/product_secondary_unit/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Secondary Unit", "summary": "Set a secondary unit per product", - "version": "18.0.1.0.1", + "version": "18.0.1.1.0", "development_status": "Production/Stable", "category": "Product", "website": "https://github.com/OCA/product-attribute", diff --git a/product_secondary_unit/static/description/index.html b/product_secondary_unit/static/description/index.html index cf3800afb65..c617ae3fe4e 100644 --- a/product_secondary_unit/static/description/index.html +++ b/product_secondary_unit/static/description/index.html @@ -372,7 +372,7 @@

Product Secondary Unit

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:0029efd789786ccc3b328f612bf8dec00c53357a6b825b322a5170cdc451ba88 +!! source digest: sha256:7c3631b2bfcbf6b7a703fcf35191a858aa0cb2b95ac103597c58663e10a9d49b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This module extends the functionality of product module to allow define From aae89e22c2e20f59b9c0bb371e05060725088b3d Mon Sep 17 00:00:00 2001 From: "Toshikimi Shigenobu (Quartile)" Date: Tue, 20 Jan 2026 09:33:55 +0000 Subject: [PATCH 50/58] Added translation using Weblate (Japanese) --- product_secondary_unit/i18n/ja.po | 140 ++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 product_secondary_unit/i18n/ja.po diff --git a/product_secondary_unit/i18n/ja.po b/product_secondary_unit/i18n/ja.po new file mode 100644 index 00000000000..00787b48de2 --- /dev/null +++ b/product_secondary_unit/i18n/ja.po @@ -0,0 +1,140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code +msgid "Code" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid +msgid "Created by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date +msgid "Created on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids +msgid "Default Secondary Unit of Measure." +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "Dependency Type" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent +msgid "Dependent" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name +msgid "Display Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id +msgid "ID" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "" +"If dependency type is 'dependent' the factor is used to compute quantity in " +"primary unit,otherwise primary and secondary unit are independent. For " +"example if you sell serviceby package (1 unit for example) and you want to " +"put the real time (ex : 4 hours) to allows employee scheduling" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent +msgid "Independent" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name +msgid "Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +msgid "Product" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin +msgid "Product Secondary Unit Mixin" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id +msgid "Product Template" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_product +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_id +msgid "Product Variant" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_id +msgid "Second unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_qty +msgid "Secondary Qty" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor +msgid "Secondary Unit Factor" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "Secondary Unit of Measure" +msgstr "" From 89a5a4daa735b77c04e949700297e5f79edb35c1 Mon Sep 17 00:00:00 2001 From: "Toshikimi Shigenobu (Quartile)" Date: Tue, 20 Jan 2026 09:36:04 +0000 Subject: [PATCH 51/58] Added translation using Weblate (Japanese (ja_JP) (ja_JP)) --- product_secondary_unit/i18n/ja_JP.po | 140 +++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 product_secondary_unit/i18n/ja_JP.po diff --git a/product_secondary_unit/i18n/ja_JP.po b/product_secondary_unit/i18n/ja_JP.po new file mode 100644 index 00000000000..8a99751d7de --- /dev/null +++ b/product_secondary_unit/i18n/ja_JP.po @@ -0,0 +1,140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja_JP\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code +msgid "Code" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid +msgid "Created by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date +msgid "Created on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids +msgid "Default Secondary Unit of Measure." +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "Dependency Type" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent +msgid "Dependent" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name +msgid "Display Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id +msgid "ID" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "" +"If dependency type is 'dependent' the factor is used to compute quantity in " +"primary unit,otherwise primary and secondary unit are independent. For " +"example if you sell serviceby package (1 unit for example) and you want to " +"put the real time (ex : 4 hours) to allows employee scheduling" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent +msgid "Independent" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name +msgid "Name" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +msgid "Product" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin +msgid "Product Secondary Unit Mixin" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id +msgid "Product Template" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_product +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_id +msgid "Product Variant" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_id +msgid "Second unit" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_qty +msgid "Secondary Qty" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor +msgid "Secondary Unit Factor" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__uom_id +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "Secondary Unit of Measure" +msgstr "" From 7582ec16442eaa9bbf696e120774192c57bdd820 Mon Sep 17 00:00:00 2001 From: "Toshikimi Shigenobu (Quartile)" Date: Tue, 20 Jan 2026 10:01:10 +0000 Subject: [PATCH 52/58] Translated using Weblate (Japanese) Currently translated at 100.0% (23 of 23 strings) Translation: product-attribute-18.0/product-attribute-18.0-product_secondary_unit Translate-URL: https://translation.odoo-community.org/projects/product-attribute-18-0/product-attribute-18-0-product_secondary_unit/ja/ --- product_secondary_unit/i18n/ja.po | 51 +++++++++++++++++-------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/product_secondary_unit/i18n/ja.po b/product_secondary_unit/i18n/ja.po index 00787b48de2..0421c1a701d 100644 --- a/product_secondary_unit/i18n/ja.po +++ b/product_secondary_unit/i18n/ja.po @@ -6,60 +6,62 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-01-20 10:07+0000\n" +"Last-Translator: \"Toshikimi Shigenobu (Quartile)\" \n" "Language-Team: none\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.15.2\n" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active msgid "Active" -msgstr "" +msgstr "有効" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code msgid "Code" -msgstr "" +msgstr "コード" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid msgid "Created by" -msgstr "" +msgstr "作成者" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date msgid "Created on" -msgstr "" +msgstr "作成日" #. module: product_secondary_unit #: model:ir.model.fields,help:product_secondary_unit.field_product_product__secondary_uom_ids #: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__uom_id #: model:ir.model.fields,help:product_secondary_unit.field_product_template__secondary_uom_ids msgid "Default Secondary Unit of Measure." -msgstr "" +msgstr "デフォルト副単位." #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type msgid "Dependency Type" -msgstr "" +msgstr "依存タイプ" #. module: product_secondary_unit #: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent msgid "Dependent" -msgstr "" +msgstr "依存" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name msgid "Display Name" -msgstr "" +msgstr "表示名" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__id msgid "ID" -msgstr "" +msgstr "ID" #. module: product_secondary_unit #: model:ir.model.fields,help:product_secondary_unit.field_product_secondary_unit__dependency_type @@ -69,67 +71,70 @@ msgid "" "example if you sell serviceby package (1 unit for example) and you want to " "put the real time (ex : 4 hours) to allows employee scheduling" msgstr "" +"依存タイプが「依存」の場合、係数を使って主単位の数量を計算します。そうしなけ" +"れば主単位と副単位は独立します。例えばサービスをパッケージ(例:1単位)で販売" +"し、実時間(例:4時間)を入力して社員のスケジューリングに使いたい場合などです" #. module: product_secondary_unit #: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent msgid "Independent" -msgstr "" +msgstr "独立" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid msgid "Last Updated by" -msgstr "" +msgstr "最終更新者" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date msgid "Last Updated on" -msgstr "" +msgstr "最終更新日" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name msgid "Name" -msgstr "" +msgstr "名称" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_template msgid "Product" -msgstr "" +msgstr "プロダクト" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_secondary_unit msgid "Product Secondary Unit" -msgstr "" +msgstr "プロダクト副単位" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin msgid "Product Secondary Unit Mixin" -msgstr "" +msgstr "プロダクト副単位ミックスイン" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id msgid "Product Template" -msgstr "" +msgstr "プロダクトテンプレート" #. module: product_secondary_unit #: model:ir.model,name:product_secondary_unit.model_product_product #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_id msgid "Product Variant" -msgstr "" +msgstr "プロダクトバリアント" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_id msgid "Second unit" -msgstr "" +msgstr "副単位" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit_mixin__secondary_uom_qty msgid "Secondary Qty" -msgstr "" +msgstr "副数量" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor msgid "Secondary Unit Factor" -msgstr "" +msgstr "副単位係数" #. module: product_secondary_unit #: model:ir.model.fields,field_description:product_secondary_unit.field_product_product__secondary_uom_ids @@ -137,4 +142,4 @@ msgstr "" #: model:ir.model.fields,field_description:product_secondary_unit.field_product_template__secondary_uom_ids #: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view msgid "Secondary Unit of Measure" -msgstr "" +msgstr "副単位" From 126e9de629fb180b45768cc1f9beae24fb1c6121 Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Tue, 6 Jan 2026 10:17:15 +0000 Subject: [PATCH 53/58] [FIX] product_secondary_unit: UoM conversion in secondary unit mixin Replace _get_factor_line() with uom._compute_quantity() to fix incorrect conversion when line UoM differs from product's base UoM. The previous method failed for certain UoM combinations (e.g., line in L, product in mL). Co-authored-by: Yoshi Tashiro --- .../models/product_secondary_unit_mixin.py | 41 +++++++++-------- .../tests/test_secondary_unit_mixin.py | 46 +++++++++++++++++-- 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/product_secondary_unit/models/product_secondary_unit_mixin.py b/product_secondary_unit/models/product_secondary_unit_mixin.py index 276c4184b92..7129d152ce5 100644 --- a/product_secondary_unit/models/product_secondary_unit_mixin.py +++ b/product_secondary_unit/models/product_secondary_unit_mixin.py @@ -55,6 +55,7 @@ def _get_default_secondary_uom(self): def _get_uom_line(self): return self[self._secondary_unit_fields["uom_field"]] + # TODO: This method is now not used in this module. Deprecate it in future. def _get_factor_line(self): uom_line = self._get_uom_line() return self.secondary_uom_id.factor * ( @@ -72,6 +73,19 @@ def _get_secondary_uom_qty_depends(self): return [] return [self._secondary_unit_fields["qty_field"]] + @api.model + def _convert_qty_to_secondary_uom(self, qty): + # Intended to be called from other operations if needed. + self.ensure_one() + uom_line = self._get_uom_line() + uom_product = self.product_id[self._product_uom_field] + if uom_line != uom_product: + qty = uom_line._compute_quantity(qty, uom_product) + return float_round( + qty / (self.secondary_uom_id.factor or 1.0), + precision_rounding=self.secondary_uom_id.uom_id.rounding, + ) + @api.depends(lambda x: x._get_secondary_uom_qty_depends()) def _compute_secondary_uom_qty(self): for line in self: @@ -80,13 +94,8 @@ def _compute_secondary_uom_qty(self): continue elif line.secondary_uom_id.dependency_type == "independent": continue - factor = line._get_factor_line() qty_line = line._get_quantity_from_line() - qty = float_round( - qty_line / (factor or 1.0), - precision_rounding=line.secondary_uom_id.uom_id.rounding, - ) - line.secondary_uom_qty = qty + line.secondary_uom_qty = line._convert_qty_to_secondary_uom(qty_line) def _get_default_value_for_qty_field(self): return self.default_get([self._secondary_unit_fields["qty_field"]]).get( @@ -114,12 +123,11 @@ def _compute_helper_target_field_qty(self): rec.env.remove_to_compute( field=rec._fields["secondary_uom_qty"], records=rec ) - factor = rec._get_factor_line() - qty = float_round( - rec.secondary_uom_qty * factor, - precision_rounding=rec._get_uom_line().rounding, - ) - rec[rec._secondary_unit_fields["qty_field"]] = qty + qty_base = rec.secondary_uom_qty * rec.secondary_uom_id.factor + uom_line = rec._get_uom_line() + uom_product = rec.product_id[rec._product_uom_field] + qty_line = uom_product._compute_quantity(qty_base, uom_line) + rec[rec._secondary_unit_fields["qty_field"]] = qty_line def _onchange_helper_product_uom_for_secondary(self): """Helper method to be called from onchange method of uom field in @@ -130,13 +138,8 @@ def _onchange_helper_product_uom_for_secondary(self): return elif self.secondary_uom_id.dependency_type == "independent": return - factor = self._get_factor_line() - line_qty = self._get_quantity_from_line() - qty = float_round( - line_qty / (factor or 1.0), - precision_rounding=self.secondary_uom_id.uom_id.rounding, - ) - self.secondary_uom_qty = qty + qty_line = self._get_quantity_from_line() + self.secondary_uom_qty = self._convert_qty_to_secondary_uom(qty_line) @api.model def default_get(self, fields_list): diff --git a/product_secondary_unit/tests/test_secondary_unit_mixin.py b/product_secondary_unit/tests/test_secondary_unit_mixin.py index 79427234eaa..44e61510d02 100644 --- a/product_secondary_unit/tests/test_secondary_unit_mixin.py +++ b/product_secondary_unit/tests/test_secondary_unit_mixin.py @@ -15,14 +15,13 @@ def setUpClass(cls): from .models import SecondaryUnitFake cls.loader.update_registry((SecondaryUnitFake,)) - cls.product_uom_kg = cls.env.ref("uom.product_uom_kgm") cls.product_uom_unit = cls.env.ref("uom.product_uom_unit") cls.product_uom_dozen = cls.env.ref("uom.product_uom_dozen") cls.product_template = cls.env["product.template"].create( { "name": "test", - "uom_id": cls.product_uom_kg.id, - "uom_po_id": cls.product_uom_kg.id, + "uom_id": cls.product_uom_unit.id, + "uom_po_id": cls.product_uom_unit.id, "secondary_uom_ids": [ Command.create( { @@ -151,3 +150,44 @@ def test_independent_type(self): fake_model.write({"secondary_uom_qty": 4}) self.assertEqual(fake_model.product_uom_qty, 17) self.assertEqual(fake_model.secondary_uom_qty, 4) + + def test_secondary_uom_qty_conversion_with_different_line_uom(self): + product_uom_litre = self.env.ref("uom.product_uom_litre") + volume_category = self.env.ref("uom.product_uom_categ_vol") + product_uom_millilitre = self.env["uom.uom"].create( + { + "name": "mL", + "category_id": volume_category.id, + "uom_type": "smaller", + "factor": 1000.0, + "rounding": 0.01, + } + ) + product_template = self.env["product.template"].create( + { + "name": "Test", + "uom_id": product_uom_millilitre.id, + "uom_po_id": product_uom_millilitre.id, + "secondary_uom_ids": [ + Command.create( + { + "name": "Bottle", + "uom_id": product_uom_millilitre.id, + "factor": 1200.0, + "dependency_type": "dependent", + } + ) + ], + } + ) + bottle_secondary_uom = product_template.secondary_uom_ids + fake_model = self.env["secondary.unit.fake"].create( + { + "name": "Secondary unit fake (volume)", + "product_id": product_template.product_variant_ids.id, + "product_uom_id": product_uom_litre.id, + "product_uom_qty": 1.2, + "secondary_uom_id": bottle_secondary_uom.id, + } + ) + self.assertEqual(fake_model.secondary_uom_qty, 1.0) From fe33d3556492de32ab4d60a2a53800160769bcd3 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 16 Feb 2026 11:16:09 +0000 Subject: [PATCH 54/58] [BOT] post-merge updates --- product_secondary_unit/README.rst | 2 +- product_secondary_unit/__manifest__.py | 2 +- product_secondary_unit/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/product_secondary_unit/README.rst b/product_secondary_unit/README.rst index 6923954aa09..efc6bfa2aaa 100644 --- a/product_secondary_unit/README.rst +++ b/product_secondary_unit/README.rst @@ -11,7 +11,7 @@ Product Secondary Unit !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7c3631b2bfcbf6b7a703fcf35191a858aa0cb2b95ac103597c58663e10a9d49b + !! source digest: sha256:4ece400aee08c0178ff656081f07fa4f180c2d365e2a82302b56d3a4424096c4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/product_secondary_unit/__manifest__.py b/product_secondary_unit/__manifest__.py index 7af44ebf5ef..7c024e14b57 100644 --- a/product_secondary_unit/__manifest__.py +++ b/product_secondary_unit/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Secondary Unit", "summary": "Set a secondary unit per product", - "version": "18.0.1.1.0", + "version": "18.0.2.0.0", "development_status": "Production/Stable", "category": "Product", "website": "https://github.com/OCA/product-attribute", diff --git a/product_secondary_unit/static/description/index.html b/product_secondary_unit/static/description/index.html index c617ae3fe4e..5f2e4e06282 100644 --- a/product_secondary_unit/static/description/index.html +++ b/product_secondary_unit/static/description/index.html @@ -372,7 +372,7 @@

Product Secondary Unit

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

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This module extends the functionality of product module to allow define From 8509596cf8dc28ab3f28a5ce23f9c8fdff69629e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Fri, 20 Feb 2026 15:39:49 +0100 Subject: [PATCH 55/58] [IMP] product_secondary_unit: Change where the mock has to be loaded With the changes introduced in odoo/odoo@de056cc#diff-b37c7fd5520c97a29ddc59495779e7be61a66e15e85603928e27b3affb9dc31f, an error was occurring because the change validation on the model was being performed before tearDownClass was executed. Therefore, it has been modified so that the mock changes are applied in each test and cleaned up after each test. This way, the error will no longer appear and the test will run normally. --- .../tests/test_secondary_unit_mixin.py | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/product_secondary_unit/tests/test_secondary_unit_mixin.py b/product_secondary_unit/tests/test_secondary_unit_mixin.py index 44e61510d02..0ece7b8ff8c 100644 --- a/product_secondary_unit/tests/test_secondary_unit_mixin.py +++ b/product_secondary_unit/tests/test_secondary_unit_mixin.py @@ -7,27 +7,26 @@ class TestProductSecondaryUnitMixin(TransactionCase, FakeModelLoader): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.loader = FakeModelLoader(cls.env, cls.__module__) - cls.loader.backup_registry() + def setUp(self): + super().setUp() + self.loader = FakeModelLoader(self.env, self.__module__) + self.loader.backup_registry() from .models import SecondaryUnitFake - cls.loader.update_registry((SecondaryUnitFake,)) - cls.product_uom_unit = cls.env.ref("uom.product_uom_unit") - cls.product_uom_dozen = cls.env.ref("uom.product_uom_dozen") - cls.product_template = cls.env["product.template"].create( + self.loader.update_registry((SecondaryUnitFake,)) + self.product_uom_unit = self.env.ref("uom.product_uom_unit") + self.product_uom_dozen = self.env.ref("uom.product_uom_dozen") + self.product_template = self.env["product.template"].create( { "name": "test", - "uom_id": cls.product_uom_unit.id, - "uom_po_id": cls.product_uom_unit.id, + "uom_id": self.product_uom_unit.id, + "uom_po_id": self.product_uom_unit.id, "secondary_uom_ids": [ Command.create( { "code": "C5", "name": "box 5", - "uom_id": cls.product_uom_unit.id, + "uom_id": self.product_uom_unit.id, "factor": 5, } ), @@ -35,7 +34,7 @@ def setUpClass(cls): { "code": "C10", "name": "box 10", - "uom_id": cls.product_uom_unit.id, + "uom_id": self.product_uom_unit.id, "factor": 10, } ), @@ -44,29 +43,28 @@ def setUpClass(cls): "code": "C20", "name": "box 20", "dependency_type": "independent", - "uom_id": cls.product_uom_unit.id, + "uom_id": self.product_uom_unit.id, "factor": 20, } ), ], } ) - cls.secondary_unit_box_5 = cls.product_template.secondary_uom_ids[0] - cls.secondary_unit_box_10 = cls.product_template.secondary_uom_ids[1] - cls.secondary_unit_box_20 = cls.product_template.secondary_uom_ids[2] + self.secondary_unit_box_5 = self.product_template.secondary_uom_ids[0] + self.secondary_unit_box_10 = self.product_template.secondary_uom_ids[1] + self.secondary_unit_box_20 = self.product_template.secondary_uom_ids[2] # Fake model which inherit from - cls.secondary_unit_fake = cls.env["secondary.unit.fake"].create( + self.secondary_unit_fake = self.env["secondary.unit.fake"].create( { "name": "Secondary unit fake", - "product_id": cls.product_template.product_variant_ids.id, - "product_uom_id": cls.product_uom_unit.id, + "product_id": self.product_template.product_variant_ids.id, + "product_uom_id": self.product_uom_unit.id, } ) - @classmethod - def tearDownClass(cls): - cls.loader.restore_registry() - return super().tearDownClass() + def tearDown(self): + self.loader.restore_registry() + return super().tearDown() def test_product_secondary_unit_mixin(self): fake_model = self.secondary_unit_fake From f162039aa4b8d859188563f7c286a9ffac1936b1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 20 Feb 2026 17:13:08 +0000 Subject: [PATCH 56/58] [BOT] post-merge updates --- product_secondary_unit/README.rst | 2 +- product_secondary_unit/__manifest__.py | 2 +- product_secondary_unit/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/product_secondary_unit/README.rst b/product_secondary_unit/README.rst index efc6bfa2aaa..01d90c5a4af 100644 --- a/product_secondary_unit/README.rst +++ b/product_secondary_unit/README.rst @@ -11,7 +11,7 @@ Product Secondary Unit !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:4ece400aee08c0178ff656081f07fa4f180c2d365e2a82302b56d3a4424096c4 + !! source digest: sha256:63ed715c2b6f80cfa91b5f6bd1aa5bfdd21b625fd49ae9aa646fc9825a4054d5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/product_secondary_unit/__manifest__.py b/product_secondary_unit/__manifest__.py index 7c024e14b57..5224dbf1d5c 100644 --- a/product_secondary_unit/__manifest__.py +++ b/product_secondary_unit/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Secondary Unit", "summary": "Set a secondary unit per product", - "version": "18.0.2.0.0", + "version": "18.0.2.0.1", "development_status": "Production/Stable", "category": "Product", "website": "https://github.com/OCA/product-attribute", diff --git a/product_secondary_unit/static/description/index.html b/product_secondary_unit/static/description/index.html index 5f2e4e06282..88435e8768b 100644 --- a/product_secondary_unit/static/description/index.html +++ b/product_secondary_unit/static/description/index.html @@ -372,7 +372,7 @@

Product Secondary Unit

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

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This module extends the functionality of product module to allow define From 806c69ab95a852cc5543d834a78c6732f7180d7e Mon Sep 17 00:00:00 2001 From: Jochen De Bie Date: Wed, 25 Feb 2026 11:28:12 +0100 Subject: [PATCH 57/58] [IMP] product_secondary_unit: pre-commit stuff --- product_secondary_unit/README.rst | 20 +++++++++---------- product_secondary_unit/__manifest__.py | 2 +- .../models/product_secondary_unit_mixin.py | 2 +- .../static/description/index.html | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/product_secondary_unit/README.rst b/product_secondary_unit/README.rst index 01d90c5a4af..8f4eb765460 100644 --- a/product_secondary_unit/README.rst +++ b/product_secondary_unit/README.rst @@ -21,13 +21,13 @@ Product Secondary Unit :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/18.0/product_secondary_unit + :target: https://github.com/OCA/product-attribute/tree/19.0/product_secondary_unit :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-18-0/product-attribute-18-0-product_secondary_unit + :target: https://translation.odoo-community.org/projects/product-attribute-19-0/product-attribute-19-0-product_secondary_unit :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=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -55,7 +55,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. @@ -70,11 +70,11 @@ Authors Contributors ------------ -- Carlos Dauden -- Sergio Teruel -- Kitti Upariphutthiphong -- Pimolnat Suntian -- Alan Ramos +- Carlos Dauden +- Sergio Teruel +- Kitti Upariphutthiphong +- Pimolnat Suntian +- Alan Ramos Maintainers ----------- @@ -97,6 +97,6 @@ Current `maintainer `__: |maintainer-sergio-teruel| -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_secondary_unit/__manifest__.py b/product_secondary_unit/__manifest__.py index 5224dbf1d5c..7c2156c6045 100644 --- a/product_secondary_unit/__manifest__.py +++ b/product_secondary_unit/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Secondary Unit", "summary": "Set a secondary unit per product", - "version": "18.0.2.0.1", + "version": "19.0.1.0.0", "development_status": "Production/Stable", "category": "Product", "website": "https://github.com/OCA/product-attribute", diff --git a/product_secondary_unit/models/product_secondary_unit_mixin.py b/product_secondary_unit/models/product_secondary_unit_mixin.py index 7129d152ce5..3bb7ac91f73 100644 --- a/product_secondary_unit/models/product_secondary_unit_mixin.py +++ b/product_secondary_unit/models/product_secondary_unit_mixin.py @@ -49,7 +49,7 @@ def _get_default_secondary_uom(self): comodel_name="product.secondary.unit", string="Second unit", ondelete="restrict", - default=_get_default_secondary_uom, + default=lambda self: self._get_default_secondary_uom(), ) def _get_uom_line(self): diff --git a/product_secondary_unit/static/description/index.html b/product_secondary_unit/static/description/index.html index 88435e8768b..14c515729ef 100644 --- a/product_secondary_unit/static/description/index.html +++ b/product_secondary_unit/static/description/index.html @@ -374,7 +374,7 @@

Product Secondary Unit

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:63ed715c2b6f80cfa91b5f6bd1aa5bfdd21b625fd49ae9aa646fc9825a4054d5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

Production/Stable License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This module extends the functionality of product module to allow define other units with their conversion factor.

Table of contents

@@ -404,7 +404,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.

@@ -436,7 +436,7 @@

Maintainers

promote its widespread use.

Current maintainer:

sergio-teruel

-

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.

From 84882191d7bdcea1bb49e2960492c22f07d630dd Mon Sep 17 00:00:00 2001 From: Jochen De Bie Date: Wed, 25 Feb 2026 13:00:47 +0100 Subject: [PATCH 58/58] [MIG] product_secondary_unit: Migration to 19.0 --- .../tests/test_product_second_unit.py | 6 +- .../tests/test_secondary_unit_mixin.py | 66 ++++++++----------- 2 files changed, 31 insertions(+), 41 deletions(-) diff --git a/product_secondary_unit/tests/test_product_second_unit.py b/product_secondary_unit/tests/test_product_second_unit.py index c038b1bcfa5..de225864a91 100644 --- a/product_secondary_unit/tests/test_product_second_unit.py +++ b/product_secondary_unit/tests/test_product_second_unit.py @@ -19,7 +19,6 @@ def setUpClass(cls): { "name": "test", "uom_id": cls.product_uom_kg.id, - "uom_po_id": cls.product_uom_kg.id, "secondary_uom_ids": [ Command.create( { @@ -45,7 +44,6 @@ def setUpClass(cls): "name": "Piece of woods", "list_price": 2000, "uom_id": cls.product_uom_kg.id, - "uom_po_id": cls.product_uom_kg.id, "secondary_uom_ids": [ Command.create( { @@ -111,7 +109,7 @@ def test_product_secondary_unit_search(self): self.product.product_variant_ids.ids, ) ] - results = self.env["product.secondary.unit"].name_search(name="A", args=args) + results = self.env["product.secondary.unit"].name_search(name="A", domain=args) self.assertEqual(len(results), 1) self.assertEqual( results[0][1], @@ -120,7 +118,7 @@ def test_product_secondary_unit_search(self): .sudo() .display_name, ) - results = self.env["product.secondary.unit"].name_search(name="X", args=args) + results = self.env["product.secondary.unit"].name_search(name="X", domain=args) self.assertEqual(len(results), 0) def test_multi_variant_product_secondary_unit(self): diff --git a/product_secondary_unit/tests/test_secondary_unit_mixin.py b/product_secondary_unit/tests/test_secondary_unit_mixin.py index 0ece7b8ff8c..03e2bb0b839 100644 --- a/product_secondary_unit/tests/test_secondary_unit_mixin.py +++ b/product_secondary_unit/tests/test_secondary_unit_mixin.py @@ -1,32 +1,38 @@ # Copyright 2021 Tecnativa - Sergio Teruel # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo_test_helper import FakeModelLoader - from odoo.fields import Command +from odoo.orm.model_classes import add_to_registry from odoo.tests import TransactionCase -class TestProductSecondaryUnitMixin(TransactionCase, FakeModelLoader): - def setUp(self): - super().setUp() - self.loader = FakeModelLoader(self.env, self.__module__) - self.loader.backup_registry() +class TestProductSecondaryUnitMixin(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + from .models import SecondaryUnitFake - self.loader.update_registry((SecondaryUnitFake,)) - self.product_uom_unit = self.env.ref("uom.product_uom_unit") - self.product_uom_dozen = self.env.ref("uom.product_uom_dozen") - self.product_template = self.env["product.template"].create( + add_to_registry(cls.registry, SecondaryUnitFake) + cls.registry._setup_models__(cls.env.cr, ["secondary.unit.fake"]) + cls.registry.init_models( + cls.env.cr, + model_names=["secondary.unit.fake"], + context={"models_to_check": True}, + ) + cls.addClassCleanup(cls.registry.__delitem__, "secondary.unit.fake") + + cls.product_uom_unit = cls.env.ref("uom.product_uom_unit") + cls.product_uom_dozen = cls.env.ref("uom.product_uom_dozen") + cls.product_template = cls.env["product.template"].create( { "name": "test", - "uom_id": self.product_uom_unit.id, - "uom_po_id": self.product_uom_unit.id, + "uom_id": cls.product_uom_unit.id, "secondary_uom_ids": [ Command.create( { "code": "C5", "name": "box 5", - "uom_id": self.product_uom_unit.id, + "uom_id": cls.product_uom_unit.id, "factor": 5, } ), @@ -34,7 +40,7 @@ def setUp(self): { "code": "C10", "name": "box 10", - "uom_id": self.product_uom_unit.id, + "uom_id": cls.product_uom_unit.id, "factor": 10, } ), @@ -43,29 +49,25 @@ def setUp(self): "code": "C20", "name": "box 20", "dependency_type": "independent", - "uom_id": self.product_uom_unit.id, + "uom_id": cls.product_uom_unit.id, "factor": 20, } ), ], } ) - self.secondary_unit_box_5 = self.product_template.secondary_uom_ids[0] - self.secondary_unit_box_10 = self.product_template.secondary_uom_ids[1] - self.secondary_unit_box_20 = self.product_template.secondary_uom_ids[2] + cls.secondary_unit_box_5 = cls.product_template.secondary_uom_ids[0] + cls.secondary_unit_box_10 = cls.product_template.secondary_uom_ids[1] + cls.secondary_unit_box_20 = cls.product_template.secondary_uom_ids[2] # Fake model which inherit from - self.secondary_unit_fake = self.env["secondary.unit.fake"].create( + cls.secondary_unit_fake = cls.env["secondary.unit.fake"].create( { "name": "Secondary unit fake", - "product_id": self.product_template.product_variant_ids.id, - "product_uom_id": self.product_uom_unit.id, + "product_id": cls.product_template.product_variant_ids.id, + "product_uom_id": cls.product_uom_unit.id, } ) - def tearDown(self): - self.loader.restore_registry() - return super().tearDown() - def test_product_secondary_unit_mixin(self): fake_model = self.secondary_unit_fake @@ -151,21 +153,11 @@ def test_independent_type(self): def test_secondary_uom_qty_conversion_with_different_line_uom(self): product_uom_litre = self.env.ref("uom.product_uom_litre") - volume_category = self.env.ref("uom.product_uom_categ_vol") - product_uom_millilitre = self.env["uom.uom"].create( - { - "name": "mL", - "category_id": volume_category.id, - "uom_type": "smaller", - "factor": 1000.0, - "rounding": 0.01, - } - ) + product_uom_millilitre = self.env.ref("uom.product_uom_milliliter") product_template = self.env["product.template"].create( { "name": "Test", "uom_id": product_uom_millilitre.id, - "uom_po_id": product_uom_millilitre.id, "secondary_uom_ids": [ Command.create( {