diff --git a/product_secondary_unit/README.rst b/product_secondary_unit/README.rst new file mode 100644 index 00000000000..8f4eb765460 --- /dev/null +++ b/product_secondary_unit/README.rst @@ -0,0 +1,102 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +====================== +Product Secondary Unit +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:63ed715c2b6f80cfa91b5f6bd1aa5bfdd21b625fd49ae9aa646fc9825a4054d5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github + :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-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=19.0 + :alt: Try me on Runboat + +|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: + +1. Go to a *Product > General Information tab*. +2. Create any record in "Secondary unit of measure". +3. 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 to smash 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 +- Kitti Upariphutthiphong +- Pimolnat Suntian +- Alan Ramos + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-sergio-teruel| image:: https://github.com/sergio-teruel.png?size=40px + :target: https://github.com/sergio-teruel + :alt: sergio-teruel + +Current `maintainer `__: + +|maintainer-sergio-teruel| + +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..7c2156c6045 --- /dev/null +++ b/product_secondary_unit/__manifest__.py @@ -0,0 +1,17 @@ +# 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": "19.0.1.0.0", + "development_status": "Production/Stable", + "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"], + "maintainers": ["sergio-teruel"], +} diff --git a/product_secondary_unit/i18n/es.po b/product_secondary_unit/i18n/es.po new file mode 100644 index 00000000000..3e8f12bb587 --- /dev/null +++ b/product_secondary_unit/i18n/es.po @@ -0,0 +1,165 @@ +# 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: 2023-01-11 04:38+0000\n" +"PO-Revision-Date: 2023-08-29 08:30+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \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: Weblate 4.17\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "Activo" + +#. module: product_secondary_unit +#: 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 +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_secondary_unit__dependency_type +msgid "Dependency Type" +msgstr "Tipo de dependencia" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent +msgid "Dependent" +msgstr "Dependiente" + +#. module: product_secondary_unit +#: 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 +msgid "ID" +msgstr "ID (Identificador)" + +#. 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 "" +"Si el tipo de dependencia es 'dependiente' el factor se utiliza para " +"calcular la cantidad en la unidad primaria, de lo contrario la unidad " +"primaria y secundaria son independientes. Por ejemplo, si vende un servicio " +"por paquete (1 unidad, por ejemplo) y desea poner el tiempo real (por " +"ejemplo, 4 horas) para permitir la programación de los empleados" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent +msgid "Independent" +msgstr "Independiente" + +#. 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 +msgid "Product" +msgstr "Producto" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "Unidad secundaria del producto" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin +msgid "Product Secondary Unit Mixin" +msgstr "Producto Unidad secundaria Mixin" + +#. module: product_secondary_unit +#: 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,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 "Variante de producto" + +#. 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 "Unidad secundaria" + +#. 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 "Cta. Ud. secundaria" + +#. 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 +#: model_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "Secondary Unit of Measure" +msgstr "Segunda unidad de medida" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#~ msgid "secondary Unit" +#~ msgstr "Unidad Secundaria" + +#~ 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/es_MX.po b/product_secondary_unit/i18n/es_MX.po new file mode 100644 index 00000000000..d9dfb78a3f4 --- /dev/null +++ b/product_secondary_unit/i18n/es_MX.po @@ -0,0 +1,151 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-03-11 15:57+0000\n" +"Last-Translator: Jesús Alan Ramos Rodríguez \n" +"Language-Team: none\n" +"Language: es_MX\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.10\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "Activo" + +#. module: product_secondary_unit +#: 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 +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 "Unidad de Medida Secundaria por Defecto." + +#. 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 "Nombre para Mostrar" + +#. 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,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 "Última Actualización por" + +#. 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 +msgid "Product" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "Unidad de Medida Secundaria del Producto" + +#. 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 "Plantilla de Producto" + +#. 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 "Factor de Unidad Secundaria" + +#. 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 "Unidad de Medida Secundaria" + +#~ msgid "Last Modified on" +#~ msgstr "Última Actualización en" + +#~ msgid "secondary Unit" +#~ msgstr "Unidad Secundaria" + +#~ msgid "secondary unit of measure" +#~ msgstr "unidad de medida secundaria" diff --git a/product_secondary_unit/i18n/fr.po b/product_secondary_unit/i18n/fr.po new file mode 100644 index 00000000000..1ab1aef2ab6 --- /dev/null +++ b/product_secondary_unit/i18n/fr.po @@ -0,0 +1,154 @@ +# 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: 2020-07-22 11:19+0000\n" +"Last-Translator: c2cdidier \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.10\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "Actif" + +#. 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__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 "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,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 "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 +msgid "Product" +msgstr "" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "Unité produit secondaire" + +#. 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 "Modèle de produit" + +#. 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 "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_terms:ir.ui.view,arch_db:product_secondary_unit.product_template_form_view +msgid "Secondary Unit of Measure" +msgstr "Unité de mesure secondaire" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière Modification le" + +#~ msgid "secondary Unit" +#~ msgstr "Unité secondaire" + +#~ 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/hr.po b/product_secondary_unit/i18n/hr.po new file mode 100644 index 00000000000..2c8181ccfa6 --- /dev/null +++ b/product_secondary_unit/i18n/hr.po @@ -0,0 +1,147 @@ +# 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" +"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" +"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" +"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 "Aktivno" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code +msgid "Code" +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 "Kreirao" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date +msgid "Created on" +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 "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 "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 "Ovisno" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name +msgid "Display Name" +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 "ID" + +#. 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 "" +"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 "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 "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 "Zadnje ažurirano" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name +msgid "Name" +msgstr "Naziv" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +msgid "Product" +msgstr "Proizvod" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +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 "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 "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 "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 "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 "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 "Alt. omjer" + +#. 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 "Alt. JM" diff --git a/product_secondary_unit/i18n/it.po b/product_secondary_unit/i18n/it.po new file mode 100644 index 00000000000..ab04aab821a --- /dev/null +++ b/product_secondary_unit/i18n/it.po @@ -0,0 +1,150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-31 12:16+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "Attiva" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code +msgid "Code" +msgstr "Codice" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date +msgid "Created on" +msgstr "Creato il" + +#. 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à di misura secondaria predefinita." + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "Dependency Type" +msgstr "Tipo dipendenza" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent +msgid "Dependent" +msgstr "Dipendente" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. 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,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 "" +"Se il tipo dipendenza è 'dipendente' il fattore è utilizzato per calcolare " +"la quantità nell'unità principale, altrimenti l'unità principale e " +"secondaria sono indipendenti. Per esempio se si vende un servizio per collo " +"(una unità per esempio) e si vuole inserire il tempo reale (es.: 4 ore) per " +"consentire la schedulazione dipendente" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent +msgid "Independent" +msgstr "Indipendente" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name +msgid "Name" +msgstr "Nome" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +msgid "Product" +msgstr "Prodotto" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "Unità di misura secondaria del prodotto" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin +msgid "Product Secondary Unit Mixin" +msgstr "Mixin unità di misura secondaria del prodotto" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id +msgid "Product Template" +msgstr "Modello prodotto" + +#. 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 "Variante prodotto" + +#. 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 "Unità secondaria" + +#. 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 "Q.tà secondaria" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor +msgid "Secondary Unit Factor" +msgstr "Fattore unità secondaria" + +#. 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 "Unità di misura secondaria" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/product_secondary_unit/i18n/ja.po b/product_secondary_unit/i18n/ja.po new file mode 100644 index 00000000000..0421c1a701d --- /dev/null +++ b/product_secondary_unit/i18n/ja.po @@ -0,0 +1,145 @@ +# 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" +"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 "有効" + +#. 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 "ID" + +#. 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 "" +"依存タイプが「依存」の場合、係数を使って主単位の数量を計算します。そうしなけ" +"れば主単位と副単位は独立します。例えばサービスをパッケージ(例: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 "独立" + +#. 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 "副単位" 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 "" 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..f6c4ebb48f8 --- /dev/null +++ b/product_secondary_unit/i18n/product_secondary_unit.pot @@ -0,0 +1,139 @@ +# 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: \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__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 "" diff --git a/product_secondary_unit/i18n/pt_BR.po b/product_secondary_unit/i18n/pt_BR.po new file mode 100644 index 00000000000..408fe382a52 --- /dev/null +++ b/product_secondary_unit/i18n/pt_BR.po @@ -0,0 +1,150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-06-10 22:13+0000\n" +"Last-Translator: Adriano Prado \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__active +msgid "Active" +msgstr "Ativo" + +#. module: product_secondary_unit +#: 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 +msgid "Created by" +msgstr "Criado por" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__create_date +msgid "Created on" +msgstr "Criado em" + +#. 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 "Unidade de medida secundária padrão." + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__dependency_type +msgid "Dependency Type" +msgstr "Tipo de Dependência" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__dependent +msgid "Dependent" +msgstr "Dependente" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__display_name +msgid "Display Name" +msgstr "Nome de exibição" + +#. 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,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 "" +"Se o tipo de dependência for 'dependente', o fator é usado para calcular a " +"quantidade na unidade primária, caso contrário, as unidades primária e " +"secundária são independentes. Por exemplo se você vende serviço por pacote " +"(1 unidade por exemplo) e quer colocar o tempo real (ex: 4 horas) para " +"permitir agendamento de funcionários" + +#. module: product_secondary_unit +#: model:ir.model.fields.selection,name:product_secondary_unit.selection__product_secondary_unit__dependency_type__independent +msgid "Independent" +msgstr "Independente" + +#. 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 Atualização por" + +#. 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 Atualização em" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name +msgid "Name" +msgstr "Nome" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +msgid "Product" +msgstr "Produto" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +msgstr "Unidade Secundária Produto" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit_mixin +msgid "Product Secondary Unit Mixin" +msgstr "Mixin de Unidade Secundária de Produto" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__product_tmpl_id +msgid "Product Template" +msgstr "Modelo de produto" + +#. 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 "Variação Produto" + +#. 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 "Unidade Secundaria" + +#. 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 "Qtd Secundaria" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__factor +msgid "Secondary Unit Factor" +msgstr "Fator da Unidade Secundaria" + +#. 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 "Unidade de Medida Secundaria" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificação em" diff --git a/product_secondary_unit/i18n/tr.po b/product_secondary_unit/i18n/tr.po new file mode 100644 index 00000000000..56c7046b004 --- /dev/null +++ b/product_secondary_unit/i18n/tr.po @@ -0,0 +1,146 @@ +# 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" +"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 "Aktif" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__code +msgid "Code" +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 "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 "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 "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 "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 "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 "İsim Göster" + +#. 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 "" +"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 "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 "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 "Son Güncelleme" + +#. module: product_secondary_unit +#: model:ir.model.fields,field_description:product_secondary_unit.field_product_secondary_unit__name +msgid "Name" +msgstr "Ad" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_template +msgid "Product" +msgstr "Ürün" + +#. module: product_secondary_unit +#: model:ir.model,name:product_secondary_unit.model_product_secondary_unit +msgid "Product Secondary Unit" +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 "Ü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 "Ü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 "Ü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 "İ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 "İ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 "İkincil Birim Faktörü" + +#. 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 "İkincil Ölçü Birimi" diff --git a/product_secondary_unit/i18n/zh_CN.po b/product_secondary_unit/i18n/zh_CN.po new file mode 100644 index 00000000000..499191a853e --- /dev/null +++ b/product_secondary_unit/i18n/zh_CN.po @@ -0,0 +1,151 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_secondary_unit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-10-21 13:32+0000\n" +"Last-Translator: Tony Gu \n" +"Language-Team: none\n" +"Language: zh_CN\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 3.8\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 "ID" + +#. 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 "辅助计量单位" + +#~ msgid "Last Modified on" +#~ msgstr "最后修改于" + +#~ msgid "secondary Unit" +#~ msgstr "辅助计量单位" + +#~ 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..0f06812747f --- /dev/null +++ b/product_secondary_unit/models/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import product_product +from . import product_second_unit +from . import product_secondary_unit_mixin +from . import product_template diff --git a/product_secondary_unit/models/product_product.py b/product_secondary_unit/models/product_product.py new file mode 100644 index 00000000000..09bf59ac0b2 --- /dev/null +++ b/product_secondary_unit/models/product_product.py @@ -0,0 +1,35 @@ +# Copyright 2023 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + secondary_uom_ids = fields.One2many( + comodel_name="product.secondary.unit", + inverse_name="product_id", + string="Secondary Unit of Measure", + help="Default Secondary Unit of Measure.", + context={"active_test": False}, + compute="_compute_secondary_uom_ids", + inverse="_inverse_secondary_uom_ids", + ) + + @api.depends("product_tmpl_id") + def _compute_secondary_uom_ids(self): + for variant in self: + variant.secondary_uom_ids = ( + variant.product_tmpl_id.secondary_uom_ids.filtered( + lambda s, v=variant: s.product_id == v or not s.product_id + ) + ) + + def _inverse_secondary_uom_ids(self): + for variant in self: + variant.product_tmpl_id.secondary_uom_ids = ( + variant.product_tmpl_id.secondary_uom_ids.filtered( + lambda s, v=variant: s.product_id != v + ) + + variant.secondary_uom_ids + ) diff --git a/product_secondary_unit/models/product_second_unit.py b/product_secondary_unit/models/product_second_unit.py new file mode 100644 index 00000000000..d9d16757a66 --- /dev/null +++ b/product_secondary_unit/models/product_second_unit.py @@ -0,0 +1,49 @@ +# 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" + _description = "Product Secondary Unit" + _rec_names_search = ["name", "code"] + + name = fields.Char(required=True, translate=True) + code = fields.Char() + product_tmpl_id = fields.Many2one( + comodel_name="product.template", + string="Product Template", + required=True, + ondelete="cascade", + ) + product_id = fields.Many2one( + comodel_name="product.product", + string="Product Variant", + ondelete="cascade", + ) + uom_id = fields.Many2one( + comodel_name="uom.uom", + string="Secondary Unit of Measure", + required=True, + help="Default Secondary Unit of Measure.", + ) + dependency_type = fields.Selection( + selection=[ + ("dependent", "Dependent"), + ("independent", "Independent"), + ], + default="dependent", + help="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 service" + "by package (1 unit for example) and you want to put the " + "real time (ex : 4 hours) to allows employee scheduling", + ) + factor = fields.Float(string="Secondary Unit Factor", default=1.0, required=True) + active = fields.Boolean(default=True) + + @api.depends("name", "factor") + def _compute_display_name(self): + for unit in self: + unit.display_name = f"{unit.name}-{unit.factor}" diff --git a/product_secondary_unit/models/product_secondary_unit_mixin.py b/product_secondary_unit/models/product_secondary_unit_mixin.py new file mode 100644 index 00000000000..3bb7ac91f73 --- /dev/null +++ b/product_secondary_unit/models/product_secondary_unit_mixin.py @@ -0,0 +1,151 @@ +# Copyright 2021 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models +from odoo.tools.float_utils import float_round + + +class ProductSecondaryUnitMixin(models.AbstractModel): + """ + Mixin model that allows to compute a field from a secondary unit helper + An example is to extend any model in which you want to compute quantities + based on secondary units. You must add a dictionary `_secondary_unit_fields` + as class variable with the following content: + _secondary_unit_fields = { + "qty_field": "product_uom_qty", + "uom_field": "product_uom" + } + + To compute ``qty_field`` on target model, you must convert the field to computed + writable (computed, stored and readonly=False), and you have to define the + compute method adding ``secondary_uom_id`` and ``secondary_uom_qty`` fields + as dependencies and calling inside to ``self._compute_helper_target_field_qty()``. + + To compute secondary units when user changes the uom field on target model, + you must add an onchange method on uom field and call to + ``self._onchange_helper_product_uom_for_secondary()`` + + You can see an example in ``purchase_order_secondary_unit`` on purchase-workflow + repository. + """ + + _name = "product.secondary.unit.mixin" + _description = "Product Secondary Unit Mixin" + _secondary_unit_fields = {} + _product_uom_field = "uom_id" + + @api.model + def _get_default_secondary_uom(self): + return self.env["product.template"]._get_default_secondary_uom() + + secondary_uom_qty = fields.Float( + string="Secondary Qty", + digits="Product Unit of Measure", + store=True, + readonly=False, + compute="_compute_secondary_uom_qty", + precompute=True, + ) + secondary_uom_id = fields.Many2one( + comodel_name="product.secondary.unit", + string="Second unit", + ondelete="restrict", + default=lambda self: self._get_default_secondary_uom(), + ) + + 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 * ( + uom_line.factor + if self.product_id[self._product_uom_field] != uom_line + else 1.0 + ) + + def _get_quantity_from_line(self): + return self[self._secondary_unit_fields["qty_field"]] + + @api.model + def _get_secondary_uom_qty_depends(self): + if not self._secondary_unit_fields: + 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: + if not line.secondary_uom_id: + line.secondary_uom_qty = 0.0 + continue + elif line.secondary_uom_id.dependency_type == "independent": + continue + qty_line = line._get_quantity_from_line() + 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( + self._secondary_unit_fields["qty_field"] + ) + + def _compute_helper_target_field_qty(self): + """Set the target qty field defined in model""" + default_qty_field_value = self._get_default_value_for_qty_field() + for rec in self: + if not rec.secondary_uom_id: + rec[rec._secondary_unit_fields["qty_field"]] = ( + rec[rec._secondary_unit_fields["qty_field"]] + or default_qty_field_value + ) + continue + if rec.secondary_uom_id.dependency_type == "independent": + if rec[rec._secondary_unit_fields["qty_field"]] == 0.0: + rec[rec._secondary_unit_fields["qty_field"]] = ( + default_qty_field_value + ) + continue + # To avoid recompute secondary_uom_qty field when + # secondary_uom_id changes. + rec.env.remove_to_compute( + field=rec._fields["secondary_uom_qty"], records=rec + ) + 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 + target model. + """ + if not self.secondary_uom_id: + self.secondary_uom_qty = 0.0 + return + elif self.secondary_uom_id.dependency_type == "independent": + return + 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): + defaults = super().default_get(fields_list) + if self.secondary_uom_id and not self.env.context.get( + "skip_default_secondary_uom_qty", False + ): + defaults["secondary_uom_qty"] = 1.0 + return defaults diff --git a/product_secondary_unit/models/product_template.py b/product_secondary_unit/models/product_template.py new file mode 100644 index 00000000000..e6d7725e133 --- /dev/null +++ b/product_secondary_unit/models/product_template.py @@ -0,0 +1,23 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, 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.", + context={"active_test": False}, + ) + + @api.model + def _get_default_secondary_uom(self): + return ( + self.secondary_uom_ids + and self.secondary_uom_ids[0] + or self.secondary_uom_ids + ) diff --git a/product_secondary_unit/pyproject.toml b/product_secondary_unit/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/product_secondary_unit/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_secondary_unit/readme/CONTRIBUTORS.md b/product_secondary_unit/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..b9e4cd3c0b9 --- /dev/null +++ b/product_secondary_unit/readme/CONTRIBUTORS.md @@ -0,0 +1,5 @@ +- Carlos Dauden \<\> +- Sergio Teruel \<\> +- Kitti Upariphutthiphong \<\> +- Pimolnat Suntian \<\> +- Alan Ramos \<\> diff --git a/product_secondary_unit/readme/DESCRIPTION.md b/product_secondary_unit/readme/DESCRIPTION.md new file mode 100644 index 00000000000..006bd6d63a2 --- /dev/null +++ b/product_secondary_unit/readme/DESCRIPTION.md @@ -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.md b/product_secondary_unit/readme/USAGE.md new file mode 100644 index 00000000000..2411df3cdcb --- /dev/null +++ b/product_secondary_unit/readme/USAGE.md @@ -0,0 +1,5 @@ +To use this module you need to: + +1. Go to a *Product \> General Information tab*. +2. Create any record in "Secondary unit of measure". +3. 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 00000000000..3a0328b516c Binary files /dev/null and b/product_secondary_unit/static/description/icon.png differ diff --git a/product_secondary_unit/static/description/index.html b/product_secondary_unit/static/description/index.html new file mode 100644 index 00000000000..14c515729ef --- /dev/null +++ b/product_secondary_unit/static/description/index.html @@ -0,0 +1,446 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Product Secondary Unit

+ +

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

+ +
+

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 to smash 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.

+

Current maintainer:

+

sergio-teruel

+

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..c10322abd6a --- /dev/null +++ b/product_secondary_unit/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_product_second_unit +from . import test_secondary_unit_mixin diff --git a/product_secondary_unit/tests/models.py b/product_secondary_unit/tests/models.py new file mode 100644 index 00000000000..8880e5ec531 --- /dev/null +++ b/product_secondary_unit/tests/models.py @@ -0,0 +1,28 @@ +# Copyright 2021 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class SecondaryUnitFake(models.Model): + _name = "secondary.unit.fake" + _inherit = "product.secondary.unit.mixin" + _description = "Secondary unit fake model for tests" + _secondary_unit_fields = { + "qty_field": "product_uom_qty", + "uom_field": "product_uom_id", + } + + name = fields.Char() + product_id = fields.Many2one("product.product", "Product", readonly=True) + product_uom_qty = fields.Float( + store=True, readonly=False, compute="_compute_product_uom_qty", precompute=True + ) + product_uom_id = fields.Many2one("uom.uom", string="Product Unit of Measure") + + @api.depends("secondary_uom_qty", "secondary_uom_id") + def _compute_product_uom_qty(self): + self._compute_helper_target_field_qty() + + @api.onchange("product_uom_id") + def _onchange_product_uom(self): + self._onchange_helper_product_uom_for_secondary() 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..de225864a91 --- /dev/null +++ b/product_secondary_unit/tests/test_product_second_unit.py @@ -0,0 +1,147 @@ +# Copyright 2018 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import logging + +from odoo.fields import Command +from odoo.tests import TransactionCase, tagged + +_logger = logging.getLogger(__name__) + + +@tagged("post_install", "-at_install") +class TestProductSecondaryUnit(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_uom_kg = cls.env.ref("uom.product_uom_kgm") + cls.product_uom_unit = cls.env.ref("uom.product_uom_unit") + cls.product = cls.env["product.template"].create( + { + "name": "test", + "uom_id": cls.product_uom_kg.id, + "secondary_uom_ids": [ + Command.create( + { + "code": "A", + "name": "unit-700", + "uom_id": cls.product_uom_unit.id, + "factor": 0.7, + }, + ), + Command.create( + { + "code": "B", + "name": "unit-900", + "uom_id": cls.product_uom_unit.id, + "factor": 0.9, + }, + ), + ], + } + ) + cls.woods = cls.env["product.template"].create( + { + "name": "Piece of woods", + "list_price": 2000, + "uom_id": cls.product_uom_kg.id, + "secondary_uom_ids": [ + Command.create( + { + "code": "A", + "name": "unit-700", + "uom_id": cls.product_uom_unit.id, + "factor": 0.7, + }, + ), + Command.create( + { + "code": "B", + "name": "unit-900", + "uom_id": cls.product_uom_unit.id, + "factor": 0.9, + }, + ), + ], + } + ) + cls.secondary_unit = cls.env["product.secondary.unit"].search( + [("product_tmpl_id", "=", cls.product.id)], limit=1 + ) + cls.densitiy = cls.env["product.attribute"].create( + [ + { + "name": "Density", + "sequence": 1, + "value_ids": [ + Command.create( + { + "name": "Low", + "sequence": 1, + } + ), + Command.create( + { + "name": "Heavy", + "sequence": 2, + } + ), + ], + } + ] + ) + cls.low, cls.heavy = cls.densitiy.value_ids + cls.density_attribute_lines = cls.env["product.template.attribute.line"].create( + { + "product_tmpl_id": cls.woods.id, + "attribute_id": cls.densitiy.id, + "value_ids": [Command.set([cls.low.id, cls.heavy.id])], + } + ) + + def test_product_secondary_unit_name(self): + self.assertEqual(self.secondary_unit.sudo().display_name, "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, + ) + ] + results = self.env["product.secondary.unit"].name_search(name="A", domain=args) + self.assertEqual(len(results), 1) + self.assertEqual( + results[0][1], + self.env["product.secondary.unit"] + .browse(results[0][0]) + .sudo() + .display_name, + ) + 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): + first_variant = self.woods.product_variant_ids[0] + second_variant = self.woods.product_variant_ids[1] + self.assertEqual(len(self.woods.secondary_uom_ids), 2) + self.assertEqual(first_variant.secondary_uom_ids, self.woods.secondary_uom_ids) + first_variant.write( + { + "secondary_uom_ids": [ + Command.create( + { + "code": "C", + "name": "unit-1000", + "product_id": first_variant.id, + "uom_id": self.product_uom_unit.id, + "factor": 0.1, + } + ) + ] + } + ) + first_variant.invalidate_recordset() + self.assertEqual(len(self.woods.secondary_uom_ids), 3) + self.assertEqual(len(first_variant.secondary_uom_ids), 3) + self.assertEqual(len(second_variant.secondary_uom_ids), 2) diff --git a/product_secondary_unit/tests/test_secondary_unit_mixin.py b/product_secondary_unit/tests/test_secondary_unit_mixin.py new file mode 100644 index 00000000000..03e2bb0b839 --- /dev/null +++ b/product_secondary_unit/tests/test_secondary_unit_mixin.py @@ -0,0 +1,183 @@ +# Copyright 2021 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.fields import Command +from odoo.orm.model_classes import add_to_registry +from odoo.tests import TransactionCase + + +class TestProductSecondaryUnitMixin(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + from .models import SecondaryUnitFake + + 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": cls.product_uom_unit.id, + "secondary_uom_ids": [ + Command.create( + { + "code": "C5", + "name": "box 5", + "uom_id": cls.product_uom_unit.id, + "factor": 5, + } + ), + Command.create( + { + "code": "C10", + "name": "box 10", + "uom_id": cls.product_uom_unit.id, + "factor": 10, + } + ), + Command.create( + { + "code": "C20", + "name": "box 20", + "dependency_type": "independent", + "uom_id": cls.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] + # Fake model which inherit from + cls.secondary_unit_fake = cls.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, + } + ) + + def test_product_secondary_unit_mixin(self): + fake_model = self.secondary_unit_fake + + fake_model.write( + {"secondary_uom_qty": 2, "secondary_uom_id": self.secondary_unit_box_5.id} + ) + self.assertEqual(fake_model.product_uom_qty, 10.0) + + fake_model.write( + {"secondary_uom_qty": 2, "secondary_uom_id": self.secondary_unit_box_10.id} + ) + self.assertEqual(fake_model.product_uom_qty, 20.0) + + fake_model.write({"product_uom_qty": 40.0}) + self.assertEqual(fake_model.secondary_uom_qty, 4) + + # Test onchange helper method + fake_model.write( + {"secondary_uom_qty": 1, "secondary_uom_id": self.secondary_unit_box_10.id} + ) + fake_model.invalidate_recordset() + fake_model.product_uom_id = self.product_uom_dozen + fake_model._onchange_helper_product_uom_for_secondary() + self.assertEqual(fake_model.secondary_uom_qty, 12) + + def test_product_secondary_unit_independent_mixin(self): + fake_model = self.secondary_unit_fake + fake_model.write( + { + "product_uom_qty": 20, + "secondary_uom_qty": 1, + "secondary_uom_id": self.secondary_unit_box_20.id, + } + ) + self.assertEqual(fake_model.product_uom_qty, 20) + fake_model.invalidate_recordset() + fake_model.product_uom_id = self.product_uom_dozen + fake_model._onchange_helper_product_uom_for_secondary() + self.assertEqual(fake_model.secondary_uom_qty, 1) + + def test_product_secondary_unit_mixin_no_uom(self): + # If secondary_uom_id is not informed product_qty on target model is + # not computed. + fake_model = self.secondary_unit_fake + fake_model.secondary_uom_qty = 23 + self.assertEqual(fake_model.product_uom_qty, 0) + + def test_product_secondary_unit_mixin_no_uom_onchange(self): + # If secondary_uom_id is not informed secondary_uom_qty on source + # model is not computed. + fake_model = self.secondary_unit_fake + # import pdb ; pdb.set_trace() + fake_model._onchange_helper_product_uom_for_secondary() + self.assertEqual(fake_model.secondary_uom_qty, 0) + + def test_chained_compute_field(self): + """Secondary_uom_qty has not been computed when secondary_uom_id changes""" + fake_model = self.secondary_unit_fake + fake_model.secondary_uom_qty = 2.0 + fake_model.secondary_uom_id = self.secondary_unit_box_5 + self.assertEqual(fake_model.product_uom_qty, 10.0) + self.assertEqual(fake_model.secondary_uom_qty, 2.0) + fake_model.secondary_uom_id = self.secondary_unit_box_10 + self.assertEqual(fake_model.product_uom_qty, 20.0) + self.assertEqual(fake_model.secondary_uom_qty, 2.0) + + def test_independent_type(self): + # dependent type is already tested as dependency_type by default + fake_model = self.secondary_unit_fake + fake_model.secondary_uom_id = self.secondary_unit_box_5 + fake_model.secondary_uom_id.write({"dependency_type": "independent"}) + fake_model.write({"secondary_uom_qty": 2}) + self.assertEqual(fake_model.product_uom_qty, 0.0) + self.assertEqual(fake_model.secondary_uom_qty, 2) + + fake_model.write({"product_uom_qty": 17}) + self.assertEqual(fake_model.product_uom_qty, 17) + self.assertEqual(fake_model.secondary_uom_qty, 2) + + 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") + 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, + "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) diff --git a/product_secondary_unit/views/product_views.xml b/product_secondary_unit/views/product_views.xml new file mode 100644 index 00000000000..09a33a9204f --- /dev/null +++ b/product_secondary_unit/views/product_views.xml @@ -0,0 +1,54 @@ + + + + + Product template Secondary Unit + product.template + + + + + + + + + + + + + + + + + + + + + + Product Secondary Unit + product.product + + + + [('id', '=', parent.id)] + + + +