diff --git a/product_pack/README.rst b/product_pack/README.rst new file mode 100644 index 00000000..3741ea30 --- /dev/null +++ b/product_pack/README.rst @@ -0,0 +1,165 @@ +============ +Product Pack +============ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:6412314c32b470ebaa9ba73edd671e2513bf0b8c9faa4703dcb22faf76692670 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github + :target: https://github.com/OCA/product-pack/tree/16.0/product_pack + :alt: OCA/product-pack +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-product_pack + :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-pack&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to define a product as a *Product Pack*. Each +*Product Pack* has a list of products that are part of this pack. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +#. Go to *Sales > Products > Products*, create a product and set "Is Pack?". +#. Set *Pack Type* and *Pack component price*. +#. Then choose the products to include in the pack. + +`Product pack` is a base module for `sale_product_pack` and other modules that +needs to use packs. `Pack type` and `Pack component price` are used to define +the behavior that the packs will have when it is selected in the sales order +lines (if `sale_product_pack` module is installed). +The options of this field are the followings: + +`Pack type`: + + * Detailed: It allows you to select an option defined in + `Pack component price` field. + * Non Detailed: Will not show the components information, + only the pack product and the price will be the its price plus the sum of + all the components prices. + +`Pack component price`: + + * Detailed per component: will show each components and its prices, + including the pack product itself with its price. + * Totalized in main product: will show each component but will not show + components prices. The pack product will be the only one that has price + and this one will be its price plus the sum of all the components prices. + * Ignored: will show each components but will not show + components prices. The pack product will be the only one that has price + and this one will be the price set in the pack product. + ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **Pack type** | **Show components on SO?** | **Sale price** | **Discount** | **Can be modified?** | ++=============================+=============================+=================================+=========================================+======================+ +| **Detailed per components** | Yes, with their prices | Components + Pack | Applies to the price of the pack and | Yes, configurable | +| | | | the components | | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **Detailed - Totalized** | Yes, with their prices at 0 | Components | Applies to the total (pack + components)| No | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **Detailed - Ignored** | Yes, with their prices at 0 | Only Pack | Applies to the pack | No | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **No detailed** | No | Components | Applies to the total (pack + components)| No | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ + +**Note:** If pricelist enabled, Odoo will display the price according to the corresponding pricelist. In the case of a pricelist with discount policy "Show public price & discount to the customer" keep in mind that the "Non Detailed" and "Detailed - Totalized in main product" packs do not display the discount. + +Known issues / Roadmap +====================== + +* It could add another *Pack Type* called maybe *merged* in *Packs*, in which + the calculation of the related sale order line *Unit Price* is equal to + *main product Pack price* + *sum of all its component* +* Make *product.pack.line* multi-company + +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 +~~~~~~~ + +* NaN·tic +* ADHOC SA +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `ADHOC SA `_: + + * Juan José Scarafía + * Nicolas Mac Rouillon + * Katherine Zaoral + * Bruno Zanotti + * Augusto Weiss + * Nicolas Col +* `NaN·TIC `_ +* `Tecnativa `_: + + * Ernesto Tejeda + * Pedro M. Baeza + * Jairo Llopis + * Sergio Teruel +* `Sygel `_: + + * Manuel Regidor + +* `Acsone `_: + + * Maxime Franco + +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-ernestotejeda| image:: https://github.com/ernestotejeda.png?size=40px + :target: https://github.com/ernestotejeda + :alt: ernestotejeda + +Current `maintainer `__: + +|maintainer-ernestotejeda| + +This module is part of the `OCA/product-pack `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_pack/__init__.py b/product_pack/__init__.py new file mode 100644 index 00000000..cb45f271 --- /dev/null +++ b/product_pack/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import models diff --git a/product_pack/__manifest__.py b/product_pack/__manifest__.py new file mode 100644 index 00000000..c83c60be --- /dev/null +++ b/product_pack/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2019 NaN (http://www.nan-tic.com) - Àngel Àlvarez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Product Pack", + "version": "18.0.1.0.0", + "category": "Product", + "summary": "This module allows you to set a product as a Pack", + "website": "https://github.com/OCA/product-pack", + "author": "NaN·tic, ADHOC SA, Tecnativa, Odoo Community Association (OCA)", + "maintainers": ["ernestotejeda"], + "license": "AGPL-3", + "depends": ["product"], + "data": [ + "security/ir.model.access.csv", + "views/product_pack_line_views.xml", + "views/product_template_views.xml", + "views/product_product_views.xml", + ], + "demo": ["demo/product_product_demo.xml", "demo/product_pack_line_demo.xml"], + "installable": True, + "auto_install": False, + "application": False, +} diff --git a/product_pack/demo/product_pack_line_demo.xml b/product_pack/demo/product_pack_line_demo.xml new file mode 100644 index 00000000..ed0df2ae --- /dev/null +++ b/product_pack/demo/product_pack_line_demo.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/product_pack/demo/product_product_demo.xml b/product_pack/demo/product_product_demo.xml new file mode 100644 index 00000000..210304fe --- /dev/null +++ b/product_pack/demo/product_product_demo.xml @@ -0,0 +1,74 @@ + + + + + Pack CPU (Detailed - Displayed Components Price) + + + detailed + detailed + 20.5 + 30.75 + service + + + Pack CPU (Detailed - Totalized Components Price) + + + detailed + totalized + 20.5 + 30.75 + service + + + Pack CPU (Detailed - Ignored Components Price) + + + detailed + ignored + 20.5 + 30.75 + service + + + Pack CPU (Non Detailed - Totalized Components Price) + + + non_detailed + 20.5 + 30.75 + service + + + Pack PC (Detailed - Displayed Components Price) + + + detailed + detailed + 20.5 + 30.75 + service + + + Pack PC (Detailed - Totalized Components Price) + + + detailed + totalized + 20.5 + 30.75 + service + + + Pack PC (Detailed - Ignored Components Price) + + + detailed + ignored + 20.5 + 30.75 + service + + diff --git a/product_pack/i18n/ca.po b/product_pack/i18n/ca.po new file mode 100644 index 00000000..adeef206 --- /dev/null +++ b/product_pack/i18n/ca.po @@ -0,0 +1,311 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-02-28 13:17+0000\n" +"Last-Translator: Noel estudillo \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "Detallat" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "Detallat per component" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "Nom visualitzat" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "Es troba en packs" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "ID (identificació)" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" +"Si marqueu aquest camp, podreu editar la línia de comanda / compra " +"relacionada amb el seu component" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "Ignorat" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "Es un Pack?" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "¿Es un Pack de Producte?" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "Darrera actualització de" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "Darrera actualització el" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "No detallat" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" +"A les comandes de venda o comandes de compra:\n" +"* Detallat per component: Línies de detall amb preus.\n" +"* Totalitzat en el producte principal: Detalla les línies fusionant els " +"preus de les línies en el Pack (no mostren els preus dels components).\n" +"* Ignorat: utilitza el preu del Pack de producte (ignora els preus de la " +"línia de detalls)." + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" +"En ordres de venda o ordres de compra:\n" +"* Detallat: Mostra els components individualment en línies de la comanda de " +"venda / Comanda de compra.\n" +"* No Detallat: No mostra els components individualment en línies de la " +"comanda de Venda / Comanda de Compra." + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "Pack" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "Pack CPU (Detallat - Preu dels Components Mostrat)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "Pack CPU (Detallat - Preu dels Components Ignorat)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "Pack CPU (Detallat - Preu dels Components Totalitzat)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "Pack CPU (No Detallat - Preu dels Components Totalitzat)" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "Tipus de pantalla de paquet" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "Pack modificable" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "Pack PC (Detallat - Preu dels Components Mostrat)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "Pack PC (Detallat - Preu dels Components Ignorat)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "Pack PC (Detallat - Preu dels Components Totalitzat)" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "Línia de producte pack" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "Productes del pack" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" +"Les línies dels Packs de productes de la companyia han de ser les mateixes " +"que el producte pare de la companyia" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "Packs on el producte és utilitzat." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "Producte pare" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "Producte" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "¡El producte ha d'estar només una vegada en un pack!" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "Línia de pack" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "Productes que formen part del pack." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "Quantitat" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "Totalitzat en el producte principal" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" +"No pot establir packs recursius.\n" +"ID del producte:%s" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "Ha de guardar primer per afegir línies de pack" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificació el" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de producte" + +#~ msgid "Units" +#~ msgstr "Unitats" + +#~ msgid "Pack Product Lines" +#~ msgstr "Línies del producte pack" + +#~ msgid "Pack component price" +#~ msgstr "Preu dels components" + +#~ msgid "Pack Type" +#~ msgstr "Tipus de Pack" + +#~ msgid "kg" +#~ msgstr "kg" diff --git a/product_pack/i18n/de.po b/product_pack/i18n/de.po new file mode 100644 index 00000000..b48bf7f4 --- /dev/null +++ b/product_pack/i18n/de.po @@ -0,0 +1,271 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "" diff --git a/product_pack/i18n/es.po b/product_pack/i18n/es.po new file mode 100644 index 00000000..33a278e4 --- /dev/null +++ b/product_pack/i18n/es.po @@ -0,0 +1,325 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +# Translators: +# Juan José Scarafía , 2019 +# Gonzalo Ruzafa , 2019 +# emiquinodoz , 2019 +# Julián García , 2019 +# Valentino Defelice , 2019 +# Santiago Crespo , 2019 +# Mariana Luz Torres , 2019 +# Nicolas Mac Rouillon , 2019 +# Katherine Zaoral , 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-30 16:02+0000\n" +"PO-Revision-Date: 2024-04-24 10:34+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: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "Detallado" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "Detallado por componente" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "Encontrado en Packs" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" +"Si marca esta casilla serás capaz de editar las lineas de órdenes de venta/" +"compra relativas a sus componentes" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "Ignorado" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "Es un Pack?" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "¿Es un Pack de Producto?" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "No detallado" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" +"En órdenes de venta u órdenes de compra:\n" +"* Detallado por componente: Detalla las lineas con precios.\n" +"* Totalizado en el producto principal: Detalla las lineas mezclando sus " +"precios en el Pack (No muestra los precios de los componentes).\n" +"* Ignorado: Se usa el precio el Pack (los precios de las lineas son " +"ignorados)." + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" +"En órdenes de venta u órdenes de compra:\n" +"* Detallado: Muestra los componentes individualmente en lineas de la Orden " +"de Venta/Orden de Compra\n" +"* No Detallado: No muestra los componentes individualmente en lineas de la " +"Orden de Venta/Orden de Compra." + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "Paquete" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "Pack CPU (Detallado - Precio de los Componentes Mostrado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "Pack CPU (Detallado - Precio de los Componentes Ignorado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "Pack CPU (Detallado - Precio de los Componentes Totalizado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "Pack CPU (No Detallado - Precio de los Componentes Totalizado)" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "Precio de los Componentes del Paquete" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "Tipo de Visualización del Paquete" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "Pack modificable" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "Paquete Modificable Invisible" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "Pack PC (Detallado - Precio de los Componentes Mostrado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "Pack PC (Detallado - Precio de los Componentes Ignorado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "Pack PC (Detallado - Precio de los Componentes Totalizado)" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "Linea de producto pack" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "Productos del pack" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" +"Las líneas de los Paquetes de productos de la compañía deben ser las mismas " +"que el producto padre de la compañía" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "Paquetes en los que se utiliza el producto." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "Producto padre" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "Producto" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "Variante de Producto" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "¡El producto debe estar solo una vez en un pack!" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "Linea de pack" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "Productos que forman parte de este paquete." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "Cantidad" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" +"Campo técnico para calcular la disponibilidad del campo Paquete Modificable" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "Totalizado en el producto principal" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" +"No puede establecer packs recursivos.\n" +"ID del producto: %s" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "Debe guardar primero para agregar líneas de paquete" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de producto" + +#, fuzzy +#~ msgid "Units" +#~ msgstr "Unidad(es)" + +#~ msgid "Pack Product Lines" +#~ msgstr "Lineas del producto pack" + +#~ msgid "Pack component price" +#~ msgstr "Precio de los componentes" + +#~ msgid "Pack Type" +#~ msgstr "Tipo de Pack" + +#~ msgid "kg" +#~ msgstr "kg" diff --git a/product_pack/i18n/fr.po b/product_pack/i18n/fr.po new file mode 100644 index 00000000..d98a5e3b --- /dev/null +++ b/product_pack/i18n/fr.po @@ -0,0 +1,310 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-05-28 12:19+0000\n" +"Last-Translator: Yann Papouin \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_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "Détaillé" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "Détaillé par composant" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "Trouvé dans des packs" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "ID" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" +"Si vous cochez ce champ, vous pourrez modifier la ligne de commande de " +"vente / d'achat relative à son composant" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "Ignoré" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "Est un pack ?" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "Est un pack d'article ?" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "Non détaillé" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" +"Sur les commandes clients ou fournisseurs :\n" +"* Détaillé par composant : lignes détaillées avec prix.\n" +"* Totalisé dans l'article principal : lignes détaillées mais le prix est " +"additionné sur celui du pack (n'affiche pas les prix par composant).\n" +"* Ignoré : utilise le prix du pack d'articles (ignore les prix des " +"composants)." + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" +"Sur les commandes clients ou fournisseurs :\n" +"* Détaillé : affiche les composants individuellement dans la commande.\n" +"* Non détaillé : n'affiche pas les composants dans la commande." + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "Pack" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "Pack CPU (Détaillé - Prix des composants affiché)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "Pack CPU (Détaillé - Prix des composants ignoré)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "Pack CPU (Détaillé - Prix des composants totalisé)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "Pack CPU (Non détaillé - Prix des composants totalisé)" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "Pack modifiable" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "Pack PC (Détaillé - Prix des composants affiché)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "Pack PC (Détaillé - Prix des composants ignoré)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "Pack PC (Détaillé - Prix des composants totalisé)" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "Ligne d'article de pack" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "Pack d'articles" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" +"Les composants d'un pack doivent appartenir à la même société que celle du " +"produit parent" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "Packs où le produit est utilisé." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "Article parent" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "Article" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "Un article ne doit être apparaître qu’une seule fois dans un pack !" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "Ligne de pack d'articles" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "Articles qui composent ce pack." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "Quantité" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "Totalisé dans l'article principal" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" +"Vous ne pouvez pas définir de packs récursifs.\n" +"ID du produit : %s" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "Vous devez d'abord enregistrer pour ajouter des lignes de pack" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" + +#~ msgid "Product Template" +#~ msgstr "Modèle d'article" + +#, fuzzy +#~ msgid "Units" +#~ msgstr "Unité(s)" + +#~ msgid "Pack Product Lines" +#~ msgstr "Lignes d'article de pack" + +#~ msgid "Pack component price" +#~ msgstr "Prix d'un composant du pack" + +#~ msgid "Pack Type" +#~ msgstr "Type de pack" + +#~ msgid "kg" +#~ msgstr "kg" diff --git a/product_pack/i18n/it.po b/product_pack/i18n/it.po new file mode 100644 index 00000000..93f90a61 --- /dev/null +++ b/product_pack/i18n/it.po @@ -0,0 +1,289 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-11-05 11:06+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 5.6.2\n" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "Dettagliato" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "Detagliato per componente" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "Si trova nei colli" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "ID" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" +"Se si seleziona questo campo si potrà modificare la riga ordine vendita/" +"acquisto relativa a questo componente" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "Ignorato" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "È collo?" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "È un collo prodotto?" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "Non dettagliato" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" +"Negli ordini di vendita o di acquisto:\n" +"* Dettagliato per componente: dettaglio righe con prezzi.\n" +"* Totalizzate nel prodotto principale: dettaglio righe unendo i prezzi delle " +"righe nel collo (non mostra i prezzi dei componenti).\n" +"* Ignorate: usa il prezzo prodotto del collo (ignora il dettaglio prezzi " +"riga)." + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" +"Negli ordini di ventita o di acquisto:\n" +"* Dettagliati: visualizza i singoli componenti nell'ordine di vendita.\n" +"* Non detagliati: non visualizza i singoli componenti nell'ordine di vendita." + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "Collo" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "CPU collo (Dettagliato - prezzo componenti visualizzati)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "CPU collo (Dettagliato - prezzo componenti ignorati)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "CPU collo (Dettagliato - prezzo componenti totali)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "CPU collo (Non dettagliato - prezzo componenti totali)" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "Prezzo componente collo" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "Visualizza tipo collo" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "Collo modificabile" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "Collo modificabile invisibile" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "PC collo (Dettagliato - prezzo componenti visualizzati)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "PC collo (Dettagliato - prezzo componenti ignorati)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "PC collo (Dettagliato - prezzo componenti totali)" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "Riga prdotto collo" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "Prodotti collo" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" +"L'azienda dei prodotti delle righe collo deve essere la stessa del prodotto " +"padre" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "Colli dove è usato il prdotto." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "Prodotto padre" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "Listino prezzi" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "Prodotto" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "Variante prodotto" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "Il prdotto deve essere unico per collo!" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "Riga collo prodotto" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "Prodotti che sono presenti in questo collo." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "Quantità" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" +"Campo tecnico per calcolare la disponibilità del campo collo modificabile" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "Totali nel prodotto padre" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" +"Non si possono impostare colli ricorsivi.\n" +"ID prodotto: %s" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "Bisogna salvare prima di aggiungere righe collo" diff --git a/product_pack/i18n/nl.po b/product_pack/i18n/nl.po new file mode 100644 index 00000000..e53f073a --- /dev/null +++ b/product_pack/i18n/nl.po @@ -0,0 +1,276 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-12-14 00:28+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "Gedetailleerd" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "Gedetailleerd per component" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "ID" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "Is verpakking?" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst gewijzigt op" diff --git a/product_pack/i18n/product_pack.pot b/product_pack/i18n/product_pack.pot new file mode 100644 index 00000000..2f3bf86b --- /dev/null +++ b/product_pack/i18n/product_pack.pot @@ -0,0 +1,270 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.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_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack (don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "" diff --git a/product_pack/i18n/pt.po b/product_pack/i18n/pt.po new file mode 100644 index 00000000..ce52c3b5 --- /dev/null +++ b/product_pack/i18n/pt.po @@ -0,0 +1,307 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-12-12 22:05+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\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.9.1\n" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "Detalhado" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "Detalhado por componente" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "Nome a Exibir" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "Pertencente a packs" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "ID" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" +"Se assinalar este campo, poderá editar linhas de encomendas de compra/venda " +"relacionadas com o seu componente" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "Ignorado" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "É Pack?" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "É um Pack de Produtos?" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "Atualiz. pela Última Vez por" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "Atualiz. pela Última Vez em" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "Não Detalhado" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" +"Em encomendas de compra ou venda:\n" +"* Detalhado por componente: Linha de detalhes com preços.\n" +"* Totalizado no produto principal: Linhas de detalhes fundindo os preços das " +"linhas no pack (não mostrar preços dos compoenentes).\n" +"* Ignorado: Usar o preço do pack de produtos (ignorar preços das linhas de " +"detalhes)." + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" +"Em encomendas de compra ou venda:\n" +"* Detalhado: Exibir os componentes individualmente na encomenda.\n" +"*Não Detalhado: Não exibir os componentes individualmente na encomenda." + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "Pack CPU (Detalhado - Preço dos Componentes Exibido)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "Pack CPU (Detalhado - Preço dos Componentes Ignorado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "Pack CPU (Detalhado - Preço dos Componentes Totalizado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "Pack CPU (Não Detalhado - Preço dos Componentes Totalizado)" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "Pack Modificável" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "Pack PC (Detalhado - Preço dos Componentes Exibido)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "Pack PC (Detalhado - Preço dos Componentes Ignorado)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "Pack PC (Detalhado - Preço dos Componentes Totalizado)" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "Linha de Pack de Produtos" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "Packs de Produtos" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "" +"A empresa das linhas de produtos dos packs tem que ser a mesma que a do " +"produto ascendente" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "Packs em que o produto é usado." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "Produto Ascendente" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "Produto" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "O produto só pode aparecer uma vez no pack!" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "Linha de pack de produto" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "Produtos pertencentes a este pack." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "Quantidade" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "Totalizado no produto principal" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" +"Não pode atribuir pack recursivos.\n" +"Id de produto: %s" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "Para adicionar linhas de packs, deve primeiro guardar" + +#~ msgid "Last Modified on" +#~ msgstr "Modif. pela Última Vez em" + +#~ msgid "Product Template" +#~ msgstr "Modelo de Produto" + +#, fuzzy +#~ msgid "Units" +#~ msgstr "Unidade(s)" + +#~ msgid "Pack Product Lines" +#~ msgstr "Linhas de Pack de Produtos" + +#~ msgid "Pack component price" +#~ msgstr "Preço do componente do pack" + +#~ msgid "Pack Type" +#~ msgstr "Tipo de Pack" diff --git a/product_pack/i18n/sv.po b/product_pack/i18n/sv.po new file mode 100644 index 00000000..0bb48095 --- /dev/null +++ b/product_pack/i18n/sv.po @@ -0,0 +1,301 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pack +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-06-11 14:38+0000\n" +"Last-Translator: jakobkrabbe \n" +"Language-Team: none\n" +"Language: sv\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_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__detailed +msgid "Detailed" +msgstr "Detaljerad" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__detailed +msgid "Detailed per component" +msgstr "Detaljerad per beståndsdel" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__used_in_pack_line_ids +msgid "Found in packs" +msgstr "Finns i pack" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__id +msgid "ID" +msgstr "ID" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable +msgid "" +"If you check this field yo will be able to edit sale/purchase order line " +"relate to its component" +msgstr "" +"Om du kryssar i det här fältet så kommer du att kunna redigera den " +"relaterade orderraden för försäljning/köpordern" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__ignored +msgid "Ignored" +msgstr "Ignorerad" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_ok +msgid "Is Pack?" +msgstr "Är ett pack?" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_ok +#: model:ir.model.fields,help:product_pack.field_product_template__pack_ok +msgid "Is a Product Pack?" +msgstr "Är ett produkt pack?" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad den" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_type__non_detailed +msgid "Non Detailed" +msgstr "Icke detaljerad" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,help:product_pack.field_product_template__pack_component_price +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed per component: Detail lines with prices.\n" +"* Totalized in main product: Detail lines merging lines prices on pack " +"(don't show component prices).\n" +"* Ignored: Use product pack price (ignore detail line prices)." +msgstr "" +"För sälj eller köpordrar:\n" +"* Detaljerade per beståndsdel: Detaljrader med priser.\n" +"* Summerade i huvudprodukten: Detaljrader med sammanslagna packpriser (visar " +"ej beståndsdelarnas priser).\n" +"* Ignorerade: Använd produkt-packpriser (ignorera detaljradernas priser)." + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_type +#: model:ir.model.fields,help:product_pack.field_product_template__pack_type +msgid "" +"On sale orders or purchase orders:\n" +"* Detailed: Display components individually in the sale order.\n" +"* Non Detailed: Do not display components individually in the sale order." +msgstr "" +"För sälj eller köpordrar:\n" +"* Detaljerad: Visa individuella beståndsdelar i säljordern.\n" +"* Icke detaljerad: Visa inte individuella beståndsdelar i säljordern." + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_form_view +msgid "Pack" +msgstr "Pack" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_components_product_template +msgid "Pack CPU (Detailed - Displayed Components Price)" +msgstr "Pack CPU (Detaljerad - Visa pris för beståndsdelar)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_ignored_product_template +msgid "Pack CPU (Detailed - Ignored Components Price)" +msgstr "Pack CPU (Detaljerad - Ignorera priser för beståndsdelar)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_detailed_totalized_product_template +msgid "Pack CPU (Detailed - Totalized Components Price)" +msgstr "Pack CPU (Detaljerad - Summerade priser för beståndsdelar)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_cpu_non_detailed_product_template +msgid "Pack CPU (Non Detailed - Totalized Components Price)" +msgstr "Pack CPU (Icke detaljerad - Summerade priser för beståndsdelar)" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_component_price +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_component_price +msgid "Pack Component Price" +msgstr "Förpackning Komponent Pris" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_type +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_type +msgid "Pack Display Type" +msgstr "Pack visningstyp" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable +msgid "Pack Modifiable" +msgstr "Pack modifierbart" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_modifiable_invisible +msgid "Pack Modifiable Invisible" +msgstr "Pack Modifierbar Osynlig" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_components_product_template +msgid "Pack PC (Detailed - Displayed Components Price)" +msgstr "Pack PC (Detaljerad - Visa pris för beståndsdelar)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_ignored_product_template +msgid "Pack PC (Detailed - Ignored Components Price)" +msgstr "Pack PC (Detaljerad - Ignorera priser för beståndsdelar)" + +#. module: product_pack +#: model:product.template,name:product_pack.product_pack_pc_detailed_totalized_product_template +msgid "Pack PC (Detailed - Totalized Components Price)" +msgstr "Pack PC (Icke detaljerad - Summerade priser för beståndsdelar)" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_pack_line_form +msgid "Pack Product Line" +msgstr "Pack produktrad" + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,field_description:product_pack.field_product_template__pack_line_ids +#: model_terms:ir.ui.view,arch_db:product_pack.nan_product_pack_form +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "Pack Products" +msgstr "Pack produkter" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_template.py:0 +#, python-format +msgid "" +"Pack lines products company must be the same as the parent product company" +msgstr "Produktbolaget för packraderna måste vara samma som moderbolaget" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__used_in_pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__used_in_pack_line_ids +msgid "Packs where product is used." +msgstr "Pack där produkt används." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__parent_product_id +msgid "Parent Product" +msgstr "Moderprodukt" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pricelist +msgid "Pricelist" +msgstr "" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_template +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__product_id +msgid "Product" +msgstr "Produkt" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_product +msgid "Product Variant" +msgstr "Produktvariant" + +#. module: product_pack +#: model:ir.model.constraint,message:product_pack.constraint_product_pack_line_product_uniq +msgid "Product must be only once on a pack!" +msgstr "Produkten får endast förekomma en gång per pack!" + +#. module: product_pack +#: model:ir.model,name:product_pack.model_product_pack_line +msgid "Product pack line" +msgstr "Produkt packrad" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_line_ids +#: model:ir.model.fields,help:product_pack.field_product_template__pack_line_ids +msgid "Products that are part of this pack." +msgstr "Produkter som tillhör detta pack." + +#. module: product_pack +#: model:ir.model.fields,field_description:product_pack.field_product_pack_line__quantity +msgid "Quantity" +msgstr "Kvantitet" + +#. module: product_pack +#: model:ir.model.fields,help:product_pack.field_product_product__pack_modifiable_invisible +#: model:ir.model.fields,help:product_pack.field_product_template__pack_modifiable_invisible +msgid "" +"Technical field in order to compute the availability of the Pack Modifiable " +"field" +msgstr "" +"Tekniskt fält för att beräkna tillgängligheten för paketet Modifierbart fält" + +#. module: product_pack +#: model:ir.model.fields.selection,name:product_pack.selection__product_template__pack_component_price__totalized +msgid "Totalized in main product" +msgstr "Summerade i huvudprodukten" + +#. module: product_pack +#. odoo-python +#: code:addons/product_pack/models/product_pack_line.py:0 +#, python-format +msgid "" +"You cannot set recursive packs.\n" +"Product id: %s" +msgstr "" +"Du kan inte sätta rekursiva pack.\n" +"Produkt id: %s" + +#. module: product_pack +#: model_terms:ir.ui.view,arch_db:product_pack.product_template_only_form_view +msgid "You must save first to add pack lines" +msgstr "Du måste spara innan du kan addera packrader" + +#~ msgid "Last Modified on" +#~ msgstr "Senast ändrad" + +#~ msgid "Product Template" +#~ msgstr "Produktmall" + +#~ msgid "Units" +#~ msgstr "Enheter" + +#~ msgid "Pack Product Lines" +#~ msgstr "Pack produktrader" + +#~ msgid "Pack component price" +#~ msgstr "Packpris för beståndsdel" diff --git a/product_pack/models/__init__.py b/product_pack/models/__init__.py new file mode 100644 index 00000000..37bee3ed --- /dev/null +++ b/product_pack/models/__init__.py @@ -0,0 +1,6 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import product_pack_line +from . import product_product +from . import product_template +from . import product_pricelist diff --git a/product_pack/models/product_pack_line.py b/product_pack/models/product_pack_line.py new file mode 100644 index 00000000..ae045625 --- /dev/null +++ b/product_pack/models/product_pack_line.py @@ -0,0 +1,87 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ProductPackLine(models.Model): + _name = "product.pack.line" + _description = "Product pack line" + _rec_name = "product_id" + + parent_product_id = fields.Many2one( + "product.product", + "Parent Product", + ondelete="cascade", + index=True, + required=True, + ) + quantity = fields.Float( + required=True, + default=1.0, + digits="Product UoS", + ) + product_id = fields.Many2one( + "product.product", + "Product", + ondelete="cascade", + index=True, + required=True, + ) + + # because on expand_pack_line we are searching for existing product, we + # need to enforce this condition + _sql_constraints = [ + ( + "product_uniq", + "unique(parent_product_id, product_id)", + "Product must be only once on a pack!", + ), + ] + + @api.constrains("product_id") + def _check_recursion(self): + """Check recursion on packs.""" + for line in self: + parent_product = line.parent_product_id + pack_lines = line + while pack_lines: + if parent_product in pack_lines.mapped("product_id"): + raise ValidationError( + _("You cannot set recursive packs.\nProduct id: %s") + % parent_product.id + ) + pack_lines = pack_lines.mapped("product_id.pack_line_ids") + + def _get_pack_line_price(self, pricelist, quantity, uom=None, date=False, **kwargs): + self.ensure_one() + if self.product_id._is_pack_to_be_handled(): + price = pricelist._get_product_price( + self.product_id, quantity, uom=uom, date=date, **kwargs + ) + else: + price = pricelist._compute_price_rule( + self.product_id, quantity, uom=uom, date=date, **kwargs + )[self.product_id.id][0] + return price * self.quantity + + def _pack_line_price_compute( + self, price_type, uom=False, currency=False, company=False, date=False + ): + packs, no_packs = self.product_id.split_pack_products() + + pack_prices = {} + # If the component is a pack + for pack in packs: + pack_prices[pack.id] = pack.lst_price + # else + no_pack_prices = no_packs._price_compute( + price_type, uom, currency, company, date + ) + + prices = {**pack_prices, **no_pack_prices} + for line in self: + prices[line.product_id.id] *= line.quantity + + return prices diff --git a/product_pack/models/product_pricelist.py b/product_pack/models/product_pricelist.py new file mode 100644 index 00000000..6ac82113 --- /dev/null +++ b/product_pack/models/product_pricelist.py @@ -0,0 +1,43 @@ +from odoo import models + + +class Pricelist(models.Model): + _inherit = "product.pricelist" + + def _get_product_price(self, product, *args, **kwargs): + """Compute the pricelist price for the specified pack product, qty & uom. + + :returns: unit price of the pack product + components, + considering pricelist rules + """ + self and self.ensure_one() + if product._is_pack_to_be_handled(): + # NOTE: This exception is to avoid adding the list price of the packs + # "totalized" and "non detailed". Should be removed to solve the issue #169. + if ( + product.pack_type == "non_detailed" + or product.pack_component_price == "totalized" + ): + pack_price = 0 + else: + pack_price = self._compute_price_rule(product, *args, **kwargs)[ + product.id + ][0] + + for line in product.sudo().pack_line_ids: + pack_price += line._get_pack_line_price(self, *args, **kwargs) + return pack_price + else: + return super()._get_product_price(product, *args, **kwargs) + + def _get_products_price(self, products, *args, **kwargs): + """Compute the pricelist price for the specified pack product, qty & uom. + + :returns: unit price of the pack product + components, + considering pricelist rules + """ + packs, no_packs = products.split_pack_products() + res = super()._get_products_price(no_packs, *args, **kwargs) + for pack in packs: + res[pack.id] = self._get_product_price(pack, *args, **kwargs) + return res diff --git a/product_pack/models/product_product.py b/product_pack/models/product_product.py new file mode 100644 index 00000000..f2edebb6 --- /dev/null +++ b/product_pack/models/product_product.py @@ -0,0 +1,61 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + pack_line_ids = fields.One2many( + "product.pack.line", + "parent_product_id", + "Pack Products", + help="Products that are part of this pack.", + ) + used_in_pack_line_ids = fields.One2many( + "product.pack.line", + "product_id", + "Found in packs", + help="Packs where product is used.", + ) + + def get_pack_lines(self): + """Returns the content (lines) of the packs. + By default, return all the pack_line_ids, but that function + can be overloaded to introduce filtering function by date, etc...""" + return self.mapped("pack_line_ids") + + def _is_pack_to_be_handled(self): + return self.product_tmpl_id._is_pack_to_be_handled() + + def split_pack_products(self): + packs = self.filtered(lambda p: p.product_tmpl_id._is_pack_to_be_handled()) + return packs, (self - packs) + + @api.depends("list_price", "price_extra") + def _compute_product_lst_price(self): + packs, no_packs = self.with_context(whole_pack_price=True).split_pack_products() + ret_val = super(ProductProduct, no_packs)._compute_product_lst_price() + uom = self._context.get("uom", False) + if uom: + uom = self.env["uom.uom"].browse([uom]) + for product in packs: + # NOTE: This exception is to avoid adding the list price of the packs + # "totalized" and "non detailed". Should be removed to solve the issue #169. + if ( + product.pack_type == "non_detailed" + or product.pack_component_price == "totalized" + ): + list_price = 0 + else: + list_price = product._price_compute("list_price", uom=uom).get( + product.id + ) + list_price += sum( + product.pack_line_ids._pack_line_price_compute( + "list_price", uom=uom + ).values() + ) + product.lst_price = list_price + product.price_extra + return ret_val diff --git a/product_pack/models/product_template.py b/product_pack/models/product_template.py new file mode 100644 index 00000000..f1afebc8 --- /dev/null +++ b/product_pack/models/product_template.py @@ -0,0 +1,137 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + pack_type = fields.Selection( + [("detailed", "Detailed"), ("non_detailed", "Non Detailed")], + string="Pack Display Type", + help="On sale orders or purchase orders:\n" + "* Detailed: Display components individually in the sale order.\n" + "* Non Detailed: Do not display components individually in the" + " sale order.", + ) + pack_component_price = fields.Selection( + [ + ("detailed", "Detailed per component"), + ("totalized", "Totalized in main product"), + ("ignored", "Ignored"), + ], + help="On sale orders or purchase orders:\n" + "* Detailed per component: Detail lines with prices.\n" + "* Totalized in main product: Detail lines merging " + "lines prices on pack (don't show component prices).\n" + "* Ignored: Use product pack price (ignore detail line prices).", + ) + pack_ok = fields.Boolean( + "Is Pack?", + help="Is a Product Pack?", + ) + pack_line_ids = fields.One2many( + related="product_variant_ids.pack_line_ids", + ) + used_in_pack_line_ids = fields.One2many( + related="product_variant_ids.used_in_pack_line_ids", + readonly=True, + ) + pack_modifiable = fields.Boolean( + help="If you check this field yo will be able to edit " + "sale/purchase order line relate to its component", + ) + pack_modifiable_invisible = fields.Boolean( + compute="_compute_pack_modifiable_invisible", + help="Technical field in order to compute the availability of the " + "Pack Modifiable field", + ) + + def _get_pack_modifiable_invisible_depends(self): + return ["pack_type", "pack_component_price"] + + @api.depends(lambda self: self._get_pack_modifiable_invisible_depends()) + def _compute_pack_modifiable_invisible(self): + """ + The pack modifiable field should be invisible when: + - pack details are not displayed or + - pack component prices are not detailed + + """ + for product in self: + product.pack_modifiable_invisible = ( + product.pack_type != "detailed" + or product.pack_component_price != "detailed" + ) + + @api.onchange("pack_type", "pack_component_price") + def onchange_pack_type(self): + products = self.filtered( + lambda x: x.pack_modifiable + and (x.pack_type != "detailed" or x.pack_component_price != "detailed") + ) + for rec in products: + rec.pack_modifiable = False + + @api.constrains("company_id", "product_variant_ids") + def _check_pack_line_company(self): + """Check packs are related to packs of same company.""" + for rec in self: + for line in rec.pack_line_ids: + if ( + line.product_id.company_id and rec.company_id + ) and line.product_id.company_id != rec.company_id: + raise ValidationError( + _( + "Pack lines products company must be the same as the " + "parent product company" + ) + ) + for line in rec.used_in_pack_line_ids: + if ( + line.product_id.company_id and rec.company_id + ) and line.parent_product_id.company_id != rec.company_id: + raise ValidationError( + _( + "Pack lines products company must be the same as the " + "parent product company" + ) + ) + + def write(self, vals): + """We remove from product.product to avoid error.""" + _vals = vals.copy() + if vals.get("pack_line_ids", False): + self.product_variant_ids.write({"pack_line_ids": vals.get("pack_line_ids")}) + _vals.pop("pack_line_ids") + return super().write(_vals) + + def _is_pack_to_be_handled(self): + """Method for getting if a template is a computable pack. + + :return: True or False. + """ + self.ensure_one() + is_pack = False + if self.env.context.get("whole_pack_price"): + # We could need to check the price of the whole pack (e.g.: e-commerce) + is_pack = ( + self.pack_ok + and self.pack_type == "detailed" + and self.pack_component_price == "detailed" + ) + is_pack |= self.pack_ok and ( + (self.pack_type == "detailed" and self.pack_component_price == "totalized") + or self.pack_type == "non_detailed" + ) + return is_pack + + def split_pack_products(self): + """Split products and the pack in 2 separate recordsets. + + :return: [packs, no_packs] + """ + packs = self.filtered(lambda p: p._is_pack_to_be_handled()) + return packs, (self - packs) diff --git a/product_pack/pyproject.toml b/product_pack/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/product_pack/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_pack/readme/CONTRIBUTORS.md b/product_pack/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..cda0fbc4 --- /dev/null +++ b/product_pack/readme/CONTRIBUTORS.md @@ -0,0 +1,15 @@ +- [ADHOC SA](https://www.adhoc.com.ar): + - Juan José Scarafía + - Nicolas Mac Rouillon + - Katherine Zaoral + - Bruno Zanotti +- [NaN·TIC](http://www.nan-tic.com) +- [Tecnativa](https://www.tecnativa.com): + - Ernesto Tejeda + - Pedro M. Baeza + - Jairo Llopis + - Sergio Teruel +- [Sygel](https://www.sygel.es): + - Manuel Regidor +- [Acsone](https://www.acsone.eu/): + - Maxime Franco diff --git a/product_pack/readme/CONTRIBUTORS.rst b/product_pack/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..ce8814b0 --- /dev/null +++ b/product_pack/readme/CONTRIBUTORS.rst @@ -0,0 +1,22 @@ +* `ADHOC SA `_: + + * Juan José Scarafía + * Nicolas Mac Rouillon + * Katherine Zaoral + * Bruno Zanotti + * Augusto Weiss + * Nicolas Col +* `NaN·TIC `_ +* `Tecnativa `_: + + * Ernesto Tejeda + * Pedro M. Baeza + * Jairo Llopis + * Sergio Teruel +* `Sygel `_: + + * Manuel Regidor + +* `Acsone `_: + + * Maxime Franco diff --git a/product_pack/readme/ROADMAP.md b/product_pack/readme/ROADMAP.md new file mode 100644 index 00000000..4bdd1727 --- /dev/null +++ b/product_pack/readme/ROADMAP.md @@ -0,0 +1,4 @@ +- It could add another *Pack Type* called maybe *merged* in *Packs*, in + which the calculation of the related sale order line *Unit Price* is + equal to *main product Pack price* + *sum of all its component* +- Make *product.pack.line* multi-company diff --git a/product_pack/readme/ROADMAP.rst b/product_pack/readme/ROADMAP.rst new file mode 100644 index 00000000..b279fd9c --- /dev/null +++ b/product_pack/readme/ROADMAP.rst @@ -0,0 +1,4 @@ +* It could add another *Pack Type* called maybe *merged* in *Packs*, in which + the calculation of the related sale order line *Unit Price* is equal to + *main product Pack price* + *sum of all its component* +* Make *product.pack.line* multi-company diff --git a/product_pack/readme/USAGE.md b/product_pack/readme/USAGE.md new file mode 100644 index 00000000..0fb0cbdd --- /dev/null +++ b/product_pack/readme/USAGE.md @@ -0,0 +1,32 @@ +To use this module, you need to: + +1. Go to *Sales \> Products \> Products*, create a product and set "Is + Pack?". +2. Set *Pack Type* and *Pack component price*. +3. Then choose the products to include in the pack. + +Product pack is a base module for sale_product_pack and other modules +that needs to use packs. Pack type and Pack component price are used to +define the behavior that the packs will have when it is selected in the +sales order lines (if sale_product_pack module is installed). The +options of this field are the followings: + +\`Pack type\`: + +> - Detailed: It allows you to select an option defined in Pack +> component price field. +> - Non Detailed: Will not show the components information, only the +> pack product and the price will be the its price plus the sum of all +> the components prices. + +\`Pack component price\`: + +> - Detailed per component: will show each components and its prices, +> including the pack product itself with its price. +> - Totalized in main product: will show each component but will not +> show components prices. The pack product will be the only one that +> has price and this one will be its price plus the sum of all the +> components prices. +> - Ignored: will show each components but will not show components +> prices. The pack product will be the only one that has price and +> this one will be the price set in the pack product. diff --git a/product_pack/readme/USAGE.rst b/product_pack/readme/USAGE.rst new file mode 100644 index 00000000..ce7f542c --- /dev/null +++ b/product_pack/readme/USAGE.rst @@ -0,0 +1,45 @@ +To use this module, you need to: + +#. Go to *Sales > Products > Products*, create a product and set "Is Pack?". +#. Set *Pack Type* and *Pack component price*. +#. Then choose the products to include in the pack. + +`Product pack` is a base module for `sale_product_pack` and other modules that +needs to use packs. `Pack type` and `Pack component price` are used to define +the behavior that the packs will have when it is selected in the sales order +lines (if `sale_product_pack` module is installed). +The options of this field are the followings: + +`Pack type`: + + * Detailed: It allows you to select an option defined in + `Pack component price` field. + * Non Detailed: Will not show the components information, + only the pack product and the price will be the its price plus the sum of + all the components prices. + +`Pack component price`: + + * Detailed per component: will show each components and its prices, + including the pack product itself with its price. + * Totalized in main product: will show each component but will not show + components prices. The pack product will be the only one that has price + and this one will be its price plus the sum of all the components prices. + * Ignored: will show each components but will not show + components prices. The pack product will be the only one that has price + and this one will be the price set in the pack product. + ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **Pack type** | **Show components on SO?** | **Sale price** | **Discount** | **Can be modified?** | ++=============================+=============================+=================================+=========================================+======================+ +| **Detailed per components** | Yes, with their prices | Components + Pack | Applies to the price of the pack and | Yes, configurable | +| | | | the components | | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **Detailed - Totalized** | Yes, with their prices at 0 | Components | Applies to the total (pack + components)| No | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **Detailed - Ignored** | Yes, with their prices at 0 | Only Pack | Applies to the pack | No | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ +| **No detailed** | No | Components | Applies to the total (pack + components)| No | ++-----------------------------+-----------------------------+---------------------------------+-----------------------------------------+----------------------+ + +**Note:** If pricelist enabled, Odoo will display the price according to the corresponding pricelist. In the case of a pricelist with discount policy "Show public price & discount to the customer" keep in mind that the "Non Detailed" and "Detailed - Totalized in main product" packs do not display the discount. diff --git a/product_pack/security/ir.model.access.csv b/product_pack/security/ir.model.access.csv new file mode 100644 index 00000000..3f4dab2c --- /dev/null +++ b/product_pack/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_pack_line_user,product.pack.line,model_product_pack_line,base.group_user,1,0,0,0 +access_product_pack_line_system,product.pack.line,model_product_pack_line,base.group_system,1,1,1,1 diff --git a/product_pack/static/description/icon.png b/product_pack/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/product_pack/static/description/icon.png differ diff --git a/product_pack/static/description/index.html b/product_pack/static/description/index.html new file mode 100644 index 00000000..8d025100 --- /dev/null +++ b/product_pack/static/description/index.html @@ -0,0 +1,542 @@ + + + + + +Product Pack + + + +
+

Product Pack

+ + +

Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runboat

+

This module allows you to define a product as a Product Pack. Each +Product Pack has a list of products that are part of this pack.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Sales > Products > Products, create a product and set “Is Pack?”.
  2. +
  3. Set Pack Type and Pack component price.
  4. +
  5. Then choose the products to include in the pack.
  6. +
+

Product pack is a base module for sale_product_pack and other modules that +needs to use packs. Pack type and Pack component price are used to define +the behavior that the packs will have when it is selected in the sales order +lines (if sale_product_pack module is installed). +The options of this field are the followings:

+

Pack type:

+
+
    +
  • Detailed: It allows you to select an option defined in +Pack component price field.
  • +
  • Non Detailed: Will not show the components information, +only the pack product and the price will be the its price plus the sum of +all the components prices.
  • +
+
+

Pack component price:

+
+
    +
  • Detailed per component: will show each components and its prices, +including the pack product itself with its price.
  • +
  • Totalized in main product: will show each component but will not show +components prices. The pack product will be the only one that has price +and this one will be its price plus the sum of all the components prices.
  • +
  • Ignored: will show each components but will not show +components prices. The pack product will be the only one that has price +and this one will be the price set in the pack product.
  • +
+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pack typeShow components on SO?Sale priceDiscountCan be modified?
Detailed per componentsYes, with their pricesComponents + PackApplies to the price of the pack and +the componentsYes, configurable
Detailed - TotalizedYes, with their prices at 0ComponentsApplies to the total (pack + components)No
Detailed - IgnoredYes, with their prices at 0Only PackApplies to the packNo
No detailedNoComponentsApplies to the total (pack + components)No
+

Note: If pricelist enabled, Odoo will display the price according to the corresponding pricelist. In the case of a pricelist with discount policy “Show public price & discount to the customer” keep in mind that the “Non Detailed” and “Detailed - Totalized in main product” packs do not display the discount.

+
+
+

Known issues / Roadmap

+
    +
  • It could add another Pack Type called maybe merged in Packs, in which +the calculation of the related sale order line Unit Price is equal to +main product Pack price + sum of all its component
  • +
  • Make product.pack.line multi-company
  • +
+
+
+

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

+
    +
  • NaN·tic
  • +
  • ADHOC SA
  • +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • ADHOC SA:
      +
    • Juan José Scarafía
    • +
    • Nicolas Mac Rouillon
    • +
    • Katherine Zaoral
    • +
    • Bruno Zanotti
    • +
    • Augusto Weiss
    • +
    • Nicolas Col
    • +
    +
  • +
  • NaN·TIC
  • +
  • Tecnativa:
      +
    • Ernesto Tejeda
    • +
    • Pedro M. Baeza
    • +
    • Jairo Llopis
    • +
    • Sergio Teruel
    • +
    +
  • +
  • Sygel:
      +
    • Manuel Regidor
    • +
    +
  • +
  • Acsone:
      +
    • Maxime Franco
    • +
    +
  • +
+
+
+

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:

+

ernestotejeda

+

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

+

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

+
+
+
+ + diff --git a/product_pack/tests/__init__.py b/product_pack/tests/__init__.py new file mode 100644 index 00000000..a88756fc --- /dev/null +++ b/product_pack/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_pack diff --git a/product_pack/tests/common.py b/product_pack/tests/common.py new file mode 100644 index 00000000..b16cb490 --- /dev/null +++ b/product_pack/tests/common.py @@ -0,0 +1,33 @@ +# Copyright 2021 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + + +class ProductPackCommon: + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_pack_line_obj = cls.env["product.pack.line"] + cls.cpu_detailed = cls.env.ref( + "product_pack.product_pack_cpu_detailed_components" + ) + vals = { + "name": "Company Pack 2", + } + cls.company_2 = cls.env["res.company"].create(vals) + cls.discount_pricelist = cls.env["product.pricelist"].create( + { + "name": "Discount", + "company_id": cls.env.company.id, + "item_ids": [ + ( + 0, + 0, + { + "applied_on": "3_global", + "compute_price": "percentage", + "percent_price": 10, + }, + ) + ], + } + ) diff --git a/product_pack/tests/test_product_pack.py b/product_pack/tests/test_product_pack.py new file mode 100644 index 00000000..4a80af34 --- /dev/null +++ b/product_pack/tests/test_product_pack.py @@ -0,0 +1,150 @@ +# Copyright 2021 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from psycopg2 import IntegrityError + +from odoo.exceptions import ValidationError +from odoo.tests import Form +from odoo.tests.common import TransactionCase +from odoo.tools import mute_logger + +from .common import ProductPackCommon + + +class TestProductPack(ProductPackCommon, TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + def test_product_pack_recursion(self): + # Add pack product in its pack lines + # Check constraint raises + with self.assertRaises(ValidationError): + self.cpu_detailed.write( + { + "pack_line_ids": [ + ( + 0, + 0, + { + "product_id": self.cpu_detailed.id, + "quantity": 1.0, + }, + ) + ] + } + ) + + @mute_logger("odoo.sql_db") + def test_product_in_pack_unique(self): + # Add product that is already in the concerned pack + # Check constraint raises + product_line = self.env.ref("product.product_product_16") + with self.assertRaises(IntegrityError), self.env.cr.savepoint(): + self.cpu_detailed.write( + { + "pack_line_ids": [ + ( + 0, + 0, + { + "product_id": product_line.id, + "quantity": 1.0, + }, + ) + ] + } + ) + + def test_get_pack_line_price(self): + # Check pack line price from product one + component = self.env.ref("product_pack.pack_cpu_detailed_components_1") + component.product_id.list_price = 30.0 + self.assertEqual( + 30.0, + self.cpu_detailed.pack_line_ids.filtered( + lambda cmp: cmp.product_id == component.product_id + )._pack_line_price_compute("list_price")[component.product_id.id], + ) + + def test_get_pack_lst_price(self): + # Check pack lst_price if totalized from components + pack = self.env.ref("product_pack.product_pack_cpu_detailed_totalized") + component_1 = self.env.ref("product_pack.pack_cpu_detailed_totalized_1") + component_1.product_id.list_price = 30.0 + component_2 = self.env.ref("product_pack.pack_cpu_detailed_totalized_3") + component_2.product_id.list_price = 15.0 + component_3 = self.env.ref("product_pack.pack_cpu_detailed_components_4") + component_3.product_id.list_price = 5.0 + self.assertEqual(50.0, pack.lst_price) + + def test_pack_company(self): + # Try to assign pack lines with product that do not belong to pack + # company + component = self.env.ref("product_pack.pack_cpu_detailed_totalized_1") + with self.assertRaises(ValidationError), self.env.cr.savepoint(): + component.product_id.company_id = self.company_2 + + def test_pack_line_company(self): + # Try to assign pack lines with product that do not belong to pack + # company + pack = self.env.ref("product_pack.product_pack_cpu_detailed_totalized") + with self.assertRaises(ValidationError), self.env.cr.savepoint(): + pack.company_id = self.company_2 + + def test_pack_type(self): + # Change pack type from detailed to non detailed + pack = self.env.ref( + "product_pack.product_pack_cpu_detailed_components" + ).product_tmpl_id + pack.pack_modifiable = True + with Form(pack) as pack_form: + pack_form.pack_type = "non_detailed" + self.assertFalse(pack_form.pack_modifiable) + + def test_pack_modifiable(self): + # Pack is detailed with component price as detailed + # Pack modifiable invisible should be False + # Set the Pack as non detailed + # Pack modifiable invisible should be True + # Set the Pack as detailed with component price as totalized + # Pack modifiable invisible should be True + pack = self.env.ref( + "product_pack.product_pack_cpu_detailed_components" + ).product_tmpl_id + self.assertFalse(pack.pack_modifiable_invisible) + pack.pack_type = "non_detailed" + self.assertTrue(pack.pack_modifiable_invisible) + pack.pack_type = "detailed" + pack.pack_component_price = "totalized" + self.assertTrue(pack.pack_modifiable_invisible) + + def test_pack_price_with_pricelist_context(self): + # Apply pricelist by context only for product packs (no components) + + # Pack Detailed + pack = self.env.ref("product_pack.product_pack_cpu_detailed_components") + price = pack.with_context( + whole_pack_price=True, pricelist=self.discount_pricelist.id + )._get_contextual_price() + self.assertEqual(price, 2601.675) + + # Pack Totalized + pack = self.env.ref("product_pack.product_pack_cpu_detailed_totalized") + price = pack.with_context( + pricelist=self.discount_pricelist.id + )._get_contextual_price() + self.assertEqual(price, 2574.0) + + # Pack Ignored + pack = self.env.ref("product_pack.product_pack_cpu_detailed_ignored") + price = pack.with_context( + pricelist=self.discount_pricelist.id + )._get_contextual_price() + self.assertEqual(price, 27.675) + + # Pack Non detailed + pack = self.env.ref("product_pack.product_pack_cpu_non_detailed") + price = pack.with_context( + pricelist=self.discount_pricelist.id + )._get_contextual_price() + self.assertEqual(price, 2574.0) diff --git a/product_pack/views/product_pack_line_views.xml b/product_pack/views/product_pack_line_views.xml new file mode 100644 index 00000000..82540d2d --- /dev/null +++ b/product_pack/views/product_pack_line_views.xml @@ -0,0 +1,27 @@ + + + + + product.pack.line.form + product.pack.line + +
+ + + + +
+
+
+ + product.pack.line.tree + product.pack.line + + + + + + + +
diff --git a/product_pack/views/product_product_views.xml b/product_pack/views/product_product_views.xml new file mode 100644 index 00000000..865f4f2f --- /dev/null +++ b/product_pack/views/product_product_views.xml @@ -0,0 +1,17 @@ + + + + + product.product.pack.form + product.product + + + + + + + + + + diff --git a/product_pack/views/product_template_views.xml b/product_pack/views/product_template_views.xml new file mode 100644 index 00000000..d14f923b --- /dev/null +++ b/product_pack/views/product_template_views.xml @@ -0,0 +1,58 @@ + + + + + + product.template.pack.form + product.template + + +
+
+ +
+
+ + + + + + + + + + + + +
+
+ + + product.template.pack.form + product.template + + + + product_variant_count > 1 or not pack_ok + + + + +

You must save first to add pack lines

+
+ +
+
+
+