diff --git a/product_pricelist_assortment/README.rst b/product_pricelist_assortment/README.rst new file mode 100644 index 00000000000..7a8ebc9591a --- /dev/null +++ b/product_pricelist_assortment/README.rst @@ -0,0 +1,82 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +============================ +Product Pricelist Assortment +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:124865629aa52c00d687f384f33440fd089ec104b617a375e0624037773fc957 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/19.0/product_pricelist_assortment + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-19-0/product-attribute-19-0-product_pricelist_assortment + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=19.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Creates dynamic pricelist items based on product assortments. + +**Table of contents** + +.. contents:: + :local: + +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 +------- + +* ACSONE SA/NV + +Contributors +------------ + +- Denis Roussel +- Cédric Pigeon +- François Honoré + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_pricelist_assortment/__init__.py b/product_pricelist_assortment/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_pricelist_assortment/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_pricelist_assortment/__manifest__.py b/product_pricelist_assortment/__manifest__.py new file mode 100644 index 00000000000..171d2918f32 --- /dev/null +++ b/product_pricelist_assortment/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Product Pricelist Assortment", + "summary": """ + Product assortment and pricelist""", + "version": "19.0.1.0.0", + "license": "AGPL-3", + "author": "ACSONE SA/NV, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/product-attribute", + "depends": ["product_assortment", "sales_team"], + "data": [ + "security/product_pricelist_assortment_item.xml", + "data/ir_cron.xml", + "views/product_pricelist.xml", + "views/product_pricelist_assortment_item.xml", + "views/product_pricelist_item.xml", + ], + "demo": [], +} diff --git a/product_pricelist_assortment/data/ir_cron.xml b/product_pricelist_assortment/data/ir_cron.xml new file mode 100644 index 00000000000..44dfeaafc8a --- /dev/null +++ b/product_pricelist_assortment/data/ir_cron.xml @@ -0,0 +1,20 @@ + + + + + Pricelist Assortment - Launch update + + + + code + 10 + minutes + model.cron_assortment_update() + + + diff --git a/product_pricelist_assortment/i18n/ca.po b/product_pricelist_assortment/i18n/ca.po new file mode 100644 index 00000000000..edc06932fc4 --- /dev/null +++ b/product_pricelist_assortment/i18n/ca.po @@ -0,0 +1,402 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pricelist_assortment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-02-25 12:45+0000\n" +"Last-Translator: claudiagn \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_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"Public Price - \n" +" Cost - \n" +" Other Pricelist - " +msgstr "" +" Preu " +"públic - \n" +" Cost - \n" +" Una altra llista de preus - " + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__active +msgid "Active" +msgstr "Actiu" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +msgid "Apply On" +msgstr "Aplicar a" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_filter_id +msgid "Assortment" +msgstr "Assortiment" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Assortment Filter" +msgstr "Filtre d'assortiment" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Assortment Items" +msgstr "Articles d'assortiment" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_item_id +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_item__assortment_item_id +msgid "Assortment item" +msgstr "Article d'assortiment" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist__item_assortment_ids +msgid "Assortment items" +msgstr "Articles d'assortiment" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "" +"Base price for computation.\n" +"Sales Price: The base price will be the Sales Price.\n" +"Cost Price : The base price will be the cost price.\n" +"Other Pricelist : Computation of the base price based on another Pricelist." +msgstr "" +"Preu base de càlcul.\n" +"Preu de venda: el preu base serà el preu de venda.\n" +"Preu de cost: el preu base serà el preu de cost.\n" +"Una altra llista de preus: càlcul del preu base basat en una altra llista de " +"preus." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "Based on" +msgstr "Basat en" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__company_id +msgid "Company" +msgstr "Empresa" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__compute_price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Compute Price" +msgstr "Preu calculat" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__currency_id +msgid "Currency" +msgstr "Moneda" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__display_name +msgid "Display Name" +msgstr "Nom visible" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "End Date" +msgstr "Data final" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "Ending valid for the pricelist item validation" +msgstr "Finalització vàlida per a la validació de l'element de preus" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__name +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price +msgid "Explicit rule name for this pricelist line." +msgstr "Nom de la regla explícita per a aquesta línia de preus." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__fixed_price +msgid "Fixed Price" +msgstr "Preu fixe" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "" +"For the rule to apply, bought/sold quantity must be greater than or equal to the minimum quantity specified in this field.\n" +"Expressed in the default unit of measure of the product." +msgstr "" +"Perquè s'apliqui la regla, la quantitat comprada / venuda ha de ser superior " +"o igual a la quantitat mínima especificada en aquest camp.\n" +"Expressat en la unitat de mesura per defecte del producte." + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Group By" +msgstr "Agrupar per" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__id +msgid "ID" +msgstr "ID" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__active +msgid "" +"If unchecked, it will allow you to hide the pricelist without removing it." +msgstr "" +"Si no està marcat, us permetrà amagar la llista de preus sense eliminar-la." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item____last_update +msgid "Last Modified on" +msgstr "Darrera modificació el" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_uid +msgid "Last Updated by" +msgstr "Darrera actualització per" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_date +msgid "Last Updated on" +msgstr "Darrera actualització el" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Launch assortment update" +msgstr "Inicia l'actualització de l'assortiment" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Max. Margin" +msgstr "Marge màxim" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Max. Price Margin" +msgstr "Preu de marge màxim" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Min. Margin" +msgstr "Marge mínim" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Min. Price Margin" +msgstr "Preu de marge mínim" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "Min. Quantity" +msgstr "Quantitat mínima" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__name +msgid "Name" +msgstr "Nom" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "New Price =" +msgstr "Nou preu =" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__multi_price_name +msgid "Other Price Name" +msgstr "Nom de l'altre preu" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base_pricelist_id +msgid "Other Pricelist" +msgstr "Altra tarifa" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__percent_price +msgid "Percentage Price" +msgstr "Preu de percentatge" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_tree +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Price" +msgstr "Preu" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Price Computation" +msgstr "Càlcul de preu" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_discount +msgid "Price Discount" +msgstr "Descompte de preu" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "Price Rounding" +msgstr "Arrodoniment de preus" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "Price Surcharge" +msgstr "Recàrrec de preu" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_id +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Pricelist" +msgstr "Tarifa" + +#. module: product_pricelist_assortment +#: model:ir.actions.server,name:product_pricelist_assortment.ir_cron_product_pricelist_assortment_ir_actions_server +#: model:ir.cron,cron_name:product_pricelist_assortment.ir_cron_product_pricelist_assortment +#: model:ir.cron,name:product_pricelist_assortment.ir_cron_product_pricelist_assortment +msgid "Pricelist Assortment - Launch update" +msgstr "Assortiment de llista de preus: actualització del llançament" + +#. module: product_pricelist_assortment +#: model:ir.actions.act_window,name:product_pricelist_assortment.product_pricelist_assortment_item_action +msgid "Pricelist Assortment Items" +msgstr "Assortiment de llista de preus" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist Item" +msgstr "Article de tarifa" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +msgid "Pricelist Item applicable on selected option" +msgstr "Article de la tarifa aplicable a l'opció seleccionada" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_item +msgid "Pricelist Rule" +msgstr "Regla de tarifa" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist items created automatically" +msgstr "Articles de tarifa creats automaticament" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "Product" +msgstr "Producte" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "Product Category" +msgstr "Categoria de producte" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_assortment_item +msgid "Product Pricelist Assortment Item" +msgstr "Article de la tarifa aplicable a l'opció seleccionada" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "Product Variant" +msgstr "Variant de producte" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Rounding Method" +msgstr "Mètode d'arrodoniment" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "" +"Sets the price so that it is a multiple of this value.\n" +"Rounding is applied after the discount and before the surcharge.\n" +"To have prices that end in 9.99, set rounding 10, surcharge -0.01" +msgstr "" +"Estableix el preu de manera que sigui un múltiple d’aquest valor.\n" +"L’arrodoniment s’aplica després del descompte i abans del recàrrec.\n" +"Per obtenir preus que acabin en 9,99, fixeu l'arrodoniment 10, recàrrec -0,01" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" +"Especifiqueu una categoria de producte si aquesta regla només s'aplica als " +"productes que pertanyen a aquesta categoria o a les seves categories " +"secundàries. Manteniu-ho buit en cas contrari." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" +"Especifiqueu un producte si aquesta regla només s'aplica a un producte. " +"Manteniu-ho buit en cas contrari." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" +"Especifiqueu una plantilla si aquesta regla només s'aplica a una plantilla " +"de producte. Manteniu-ho buit en cas contrari." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "" +"Specify the fixed amount to add or substract(if negative) to the amount " +"calculated with the discount." +msgstr "" +"Especifiqueu l'import fixat per afegir o restar (si és negatiu) a l'import " +"calculat amb el descompte." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Specify the maximum amount of margin over the base price." +msgstr "Especifiqueu la quantitat màxima de marge sobre el preu base." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Specify the minimum amount of margin over the base price." +msgstr "Especifiqueu la quantitat mínima de marge sobre el preu base." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "Start Date" +msgstr "Data d'inici" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "Starting date for the pricelist item validation" +msgstr "Data d'inici de la validació de l'element de preus" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"The computed price is expressed in the default Unit of Measure of the " +"product." +msgstr "" +"El preu calculat s’expressa en la unitat de mesura per defecte del producte." diff --git a/product_pricelist_assortment/i18n/es.po b/product_pricelist_assortment/i18n/es.po new file mode 100644 index 00000000000..d11093f4975 --- /dev/null +++ b/product_pricelist_assortment/i18n/es.po @@ -0,0 +1,408 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pricelist_assortment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-10-13 14:08+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"Public Price " +"- \n" +" Cost - \n" +" Other Pricelist - " +msgstr "" +"Precio público " +"- \n" +" Coste - \n" +" Otra tarifa - " + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__active +msgid "Active" +msgstr "Activo" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +msgid "Apply On" +msgstr "Aplicar en" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_filter_id +msgid "Assortment" +msgstr "Surtido" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Assortment Filter" +msgstr "Filtro de surtido" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Assortment Items" +msgstr "Elementos de surtido" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_item_id +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_item__assortment_item_id +msgid "Assortment item" +msgstr "Elemento de surtido" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist__item_assortment_ids +msgid "Assortment items" +msgstr "Elementos de surtido" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "" +"Base price for computation.\n" +"Sales Price: The base price will be the Sales Price.\n" +"Cost Price : The base price will be the cost price.\n" +"Other Pricelist : Computation of the base price based on another Pricelist." +msgstr "" +"Precio base para el cálculo.\n" +"Precio venta: El precio base será el precio de venta.\n" +"Precio de coste: El precio base será el precio de coste.\n" +"Otras tarifas: Cálculo del precio base basado en otra lista de precios." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "Based on" +msgstr "Basado en" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__company_id +msgid "Company" +msgstr "Compañia" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__compute_price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Compute Price" +msgstr "Calcular precio" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__currency_id +msgid "Currency" +msgstr "Moneda" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "End Date" +msgstr "Fecha final" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "Ending valid for the pricelist item validation" +msgstr "" +"Finalización válida para la validación del artículo de la lista de precios" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__name +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price +msgid "Explicit rule name for this pricelist line." +msgstr "Nombre de regla explícito para esta línea de lista de precios." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__fixed_price +msgid "Fixed Price" +msgstr "Precio fijo" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "" +"For the rule to apply, bought/sold quantity must be greater than or equal to " +"the minimum quantity specified in this field.\n" +"Expressed in the default unit of measure of the product." +msgstr "" +"Para que se aplique la regla, la cantidad comprada / vendida debe ser mayor " +"o igual a la cantidad mínima especificada en este campo.\n" +"Expresado en la unidad de medida predeterminada del producto." + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__id +msgid "ID" +msgstr "ID" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__active +msgid "" +"If unchecked, it will allow you to hide the pricelist without removing it." +msgstr "" +"Si no está marcada, le permitirá ocultar la lista de precios sin quitarla." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Launch assortment update" +msgstr "Lanzar actualización de surtido" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Max. Margin" +msgstr "Margen máximo" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Max. Price Margin" +msgstr "Máximo precio de margen" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Min. Margin" +msgstr "Margen mínimo" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Min. Price Margin" +msgstr "Precio de margen mínimo" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "Min. Quantity" +msgstr "Cantidad mínima" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__name +msgid "Name" +msgstr "Nombre" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "New Price =" +msgstr "Nuevo precio =" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__multi_price_name +msgid "Other Price Name" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base_pricelist_id +msgid "Other Pricelist" +msgstr "Otra tarifa" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__percent_price +msgid "Percentage Price" +msgstr "Precio de porcentaje" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_tree +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Price" +msgstr "Precio" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Price Computation" +msgstr "Cálculo de precio" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_discount +msgid "Price Discount" +msgstr "Descuento de precio" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "Price Rounding" +msgstr "Redondeo de precio" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "Price Surcharge" +msgstr "Recargo de precio" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_id +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Pricelist" +msgstr "Tarifa" + +#. module: product_pricelist_assortment +#: model:ir.actions.server,name:product_pricelist_assortment.ir_cron_product_pricelist_assortment_ir_actions_server +#: model:ir.cron,cron_name:product_pricelist_assortment.ir_cron_product_pricelist_assortment +#: model:ir.cron,name:product_pricelist_assortment.ir_cron_product_pricelist_assortment +msgid "Pricelist Assortment - Launch update" +msgstr "Surtido de listas de precios: actualización de lanzamiento" + +#. module: product_pricelist_assortment +#: model:ir.actions.act_window,name:product_pricelist_assortment.product_pricelist_assortment_item_action +msgid "Pricelist Assortment Items" +msgstr "Artículos de surtido de la lista de precios" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist Item" +msgstr "Elemento de tarifa" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +msgid "Pricelist Item applicable on selected option" +msgstr "Elemento de tarifa aplicable en la opción seleccionada" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_item +msgid "Pricelist Rule" +msgstr "Regla de tarifa" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist items created automatically" +msgstr "Elementos de tarifa creados automaticamente" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "Product" +msgstr "Producto" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "Product Category" +msgstr "Categoría de producto" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_assortment_item +msgid "Product Pricelist Assortment Item" +msgstr "Lista de precios del producto Artículo de surtido" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "Product Variant" +msgstr "Variante de producto" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Rounding Method" +msgstr "Método de redondeo" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "" +"Sets the price so that it is a multiple of this value.\n" +"Rounding is applied after the discount and before the surcharge.\n" +"To have prices that end in 9.99, set rounding 10, surcharge -0.01" +msgstr "" +"Establece el precio de modo que sea un múltiplo de este valor.\n" +"El redondeo se aplica después del descuento y antes del recargo.\n" +"Para tener precios que terminan en 9,99, establezca el redondeo de 10, " +"recargo -0,01" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" +"Especifique una categoría de producto si esta regla solo se aplica a los " +"productos que pertenecen a esta categoría o sus categorías secundarias. " +"Mantener vacío de lo contrario." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" +"Especifique un producto si esta regla solo se aplica a un producto. Mantener " +"vacío de lo contrario." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" +"Especifique una plantilla si esta regla solo se aplica a una plantilla de " +"producto. Mantener vacío de lo contrario." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "" +"Specify the fixed amount to add or substract(if negative) to the amount " +"calculated with the discount." +msgstr "" +"Especifique el monto fijo para sumar o restar (si es negativo) al monto " +"calculado con el descuento." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Specify the maximum amount of margin over the base price." +msgstr "Especifique la cantidad máxima de margen sobre el precio base." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Specify the minimum amount of margin over the base price." +msgstr "Especifique la cantidad mínima de margen sobre el precio base." + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "Start Date" +msgstr "Fecha inicial" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "Starting date for the pricelist item validation" +msgstr "Fecha de inicio de la validación del artículo de la lista de precios" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"The computed price is expressed in the default Unit of Measure of the " +"product." +msgstr "" +"El precio calculado se expresa en la Unidad de medida predeterminada del " +"producto." diff --git a/product_pricelist_assortment/i18n/it.po b/product_pricelist_assortment/i18n/it.po new file mode 100644 index 00000000000..f69edead4c7 --- /dev/null +++ b/product_pricelist_assortment/i18n/it.po @@ -0,0 +1,397 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pricelist_assortment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-11-22 16:44+0000\n" +"Last-Translator: Francesco Foresti \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"Sales Price - \n" +" Cost - \n" +" Other Pricelist - " +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"\n" +" New Price =\n" +" " +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__active +msgid "Active" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +msgid "Apply On" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_filter_id +msgid "Assortment" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Assortment Filter" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Assortment Items" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_item_id +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_item__assortment_item_id +msgid "Assortment item" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist__item_assortment_ids +msgid "Assortment items" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "" +"Base price for computation.\n" +"Sales Price: The base price will be the Sales Price.\n" +"Cost Price : The base price will be the cost price.\n" +"Other Pricelist : Computation of the base price based on another Pricelist." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "Based on" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__company_id +msgid "Company" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__compute_price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Compute Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_uid +msgid "Created by" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_date +msgid "Created on" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__currency_id +msgid "Currency" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist__display_name +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__display_name +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_item__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "End Date" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "" +"Ending datetime for the pricelist item validation\n" +"The displayed value depends on the timezone set in your preferences." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__name +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price +msgid "Explicit rule name for this pricelist line." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__fixed_price +msgid "Fixed Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "" +"For the rule to apply, bought/sold quantity must be greater than or equal to the minimum quantity specified in this field.\n" +"Expressed in the default unit of measure of the product." +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Group By" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist__id +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__id +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_item__id +msgid "ID" +msgstr "ID" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__active +msgid "" +"If unchecked, it will allow you to hide the pricelist without removing it." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__no_supplierinfo_min_quantity +msgid "Ignore Supplier Info Min. Quantity" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist____last_update +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item____last_update +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_item____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Launch assortment update" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Max. Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Max. Price Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Min. Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Min. Price Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "Min. Quantity" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__name +msgid "Name" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__filter_supplier_id +msgid "Only match prices from the selected supplier" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base_pricelist_id +msgid "Other Pricelist" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__percent_price +msgid "Percentage Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_tree +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Price Computation" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_discount +msgid "Price Discount" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "Price Rounding" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "Price Surcharge" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_id +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Pricelist" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.actions.server,name:product_pricelist_assortment.ir_cron_product_pricelist_assortment_ir_actions_server +#: model:ir.cron,cron_name:product_pricelist_assortment.ir_cron_product_pricelist_assortment +#: model:ir.cron,name:product_pricelist_assortment.ir_cron_product_pricelist_assortment +msgid "Pricelist Assortment - Launch update" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.actions.act_window,name:product_pricelist_assortment.product_pricelist_assortment_item_action +msgid "Pricelist Assortment Items" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist Item" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +msgid "Pricelist Item applicable on selected option" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_item +msgid "Pricelist Rule" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist items created automatically" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "Product" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "Product Category" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_assortment_item +msgid "Product Pricelist Assortment Item" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "Product Variant" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Rounding Method" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "" +"Sets the price so that it is a multiple of this value.\n" +"Rounding is applied after the discount and before the surcharge.\n" +"To have prices that end in 9.99, set rounding 10, surcharge -0.01" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "" +"Specify the fixed amount to add or substract(if negative) to the amount " +"calculated with the discount." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Specify the maximum amount of margin over the base price." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Specify the minimum amount of margin over the base price." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "Start Date" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "" +"Starting datetime for the pricelist item validation\n" +"The displayed value depends on the timezone set in your preferences." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__filter_supplier_id +msgid "Supplier filter" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"The computed price is expressed in the default Unit of Measure of the " +"product." +msgstr "" diff --git a/product_pricelist_assortment/i18n/product_pricelist_assortment.pot b/product_pricelist_assortment/i18n/product_pricelist_assortment.pot new file mode 100644 index 00000000000..5bfd45831a5 --- /dev/null +++ b/product_pricelist_assortment/i18n/product_pricelist_assortment.pot @@ -0,0 +1,496 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_pricelist_assortment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_variant_count +msgid "# Product Variants" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"\n" +" New Price =\n" +" " +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"\n" +" Sales Price - \n" +" \n" +" Cost - \n" +" \n" +" Other Pricelist - " +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "%" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__actual_currency_rate +msgid "Actual Currency Rate" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__alternative_pricelist_policy +msgid "Alternative Pricelist Policy" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +msgid "Apply On" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_filter_id +msgid "Assortment" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Assortment Filter" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Assortment Items" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__assortment_item_id +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_item__assortment_item_id +msgid "Assortment item" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist__item_assortment_ids +msgid "Assortment items" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "" +"Base price for computation.\n" +"Sales Price: The base price will be the Sales Price.\n" +"Cost Price: The base price will be the cost price.\n" +"Other Pricelist: Computation of the base price based on another Pricelist." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base +msgid "Based on" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__ignore_supplierinfo_margin +msgid "Based on supplierinfo price without sale margin applied" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "Category" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__company_id +msgid "Company" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__compute_price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Compute Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_uid +msgid "Created by" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__create_date +msgid "Created on" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__currency_id +msgid "Currency" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__currency_rate_tooltip +msgid "Currency Rate Tooltip" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__display_applied_on +msgid "Display Applied On" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__display_name +msgid "Display Name" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__do_inverse_currency_rate +msgid "Do Inverse Currency Rate" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "End Date" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_end +msgid "" +"Ending datetime for the pricelist item validation\n" +"The displayed value depends on the timezone set in your preferences." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__name +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price +msgid "Explicit rule name for this pricelist line." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "Extra Fee" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__fixed_currency_rate +msgid "Fixed Currency Rate" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__fixed_price +msgid "Fixed Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "" +"For the rule to apply, bought/sold quantity must be greater than or equal to the minimum quantity specified in this field.\n" +"Expressed in the default unit of measure of the product." +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Group By" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__id +msgid "ID" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__no_supplierinfo_discount +msgid "" +"If checked, the discount set on the supplier info will be ignored in price " +"calculation." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__fixed_currency_rate +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__inverse_fixed_currency_rate +msgid "" +"If set (different to 0.0), the currency conversion will ignore the actual " +"currency rate and always use the fixed currency rate." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__no_supplierinfo_discount +msgid "Ignore Supplier Info Discount" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__no_supplierinfo_min_quantity +msgid "Ignore Supplier Info Min. Quantity" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__ignore_supplierinfo_margin +msgid "Ignore Supplierinfo Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__inverse_actual_currency_rate +msgid "Inverse Actual Currency Rate" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__inverse_fixed_currency_rate +msgid "Inverse Fixed Currency Rate" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__is_fixed_currency_rate_applicable +msgid "Is Fixed Currency Rate Applicable" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_form_view +msgid "Launch assortment update" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_markup +msgid "Markup" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Max. Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Max. Price Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Min. Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Min. Price Margin" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__min_quantity +msgid "Min. Quantity" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__name +msgid "Name" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__filter_supplier_id +msgid "Only match prices from the selected supplier" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__multi_price_name +msgid "Other Price Name" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__base_pricelist_id +msgid "Other Pricelist" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__percent_price +msgid "Percentage Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_tree +msgid "Price" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Price Computation" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_discount +msgid "Price Discount" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "Price Rounding" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_id +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_search +msgid "Pricelist" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.actions.server,name:product_pricelist_assortment.ir_cron_product_pricelist_assortment_ir_actions_server +msgid "Pricelist Assortment - Launch update" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.actions.act_window,name:product_pricelist_assortment.product_pricelist_assortment_item_action +msgid "Pricelist Assortment Items" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist Item" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__applied_on +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__display_applied_on +msgid "Pricelist Item applicable on selected option" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_item +msgid "Pricelist Rule" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__pricelist_item_ids +msgid "Pricelist items created automatically" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "Product" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model,name:product_pricelist_assortment.model_product_pricelist_assortment_item +msgid "Product Pricelist Assortment Item" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "Rounding Method" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__rule_tip +msgid "Rule Tip" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_round +msgid "" +"Sets the price so that it is a multiple of this value.\n" +"Rounding is applied after the discount and before the surcharge.\n" +"To have prices that end in 9.99, round off to 10.00 and set an extra at -0.01" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__categ_id +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__product_tmpl_id +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_surcharge +msgid "" +"Specify the fixed amount to add or subtract (if negative) to the amount " +"calculated with the discount." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_max_margin +msgid "Specify the maximum amount of margin over the base price." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_min_margin +msgid "Specify the minimum amount of margin over the base price." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "Start Date" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__date_start +msgid "" +"Starting datetime for the pricelist item validation\n" +"The displayed value depends on the timezone set in your preferences." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__filter_supplier_id +msgid "Supplier filter" +msgstr "" + +#. module: product_pricelist_assortment +#: model_terms:ir.ui.view,arch_db:product_pricelist_assortment.product_pricelist_assortment_item_form_view +msgid "" +"The computed price is expressed in the default Unit of Measure of the " +"product." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_uom +msgid "Unit of Measure Name" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__compute_price +msgid "" +"Use the discount rules and activate the discount settings in order to show " +"discount to customer." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,field_description:product_pricelist_assortment.field_product_pricelist_assortment_item__product_id +msgid "Variant" +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__percent_price +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_discount +msgid "You can apply a mark-up by setting a negative discount." +msgstr "" + +#. module: product_pricelist_assortment +#: model:ir.model.fields,help:product_pricelist_assortment.field_product_pricelist_assortment_item__price_markup +msgid "You can apply a mark-up on the cost" +msgstr "" diff --git a/product_pricelist_assortment/models/__init__.py b/product_pricelist_assortment/models/__init__.py new file mode 100644 index 00000000000..c2ed8b83fbd --- /dev/null +++ b/product_pricelist_assortment/models/__init__.py @@ -0,0 +1,3 @@ +from . import product_pricelist +from . import product_pricelist_assortment_item +from . import product_pricelist_item diff --git a/product_pricelist_assortment/models/product_pricelist.py b/product_pricelist_assortment/models/product_pricelist.py new file mode 100644 index 00000000000..ec2977e6795 --- /dev/null +++ b/product_pricelist_assortment/models/product_pricelist.py @@ -0,0 +1,39 @@ +# Copyright 2021 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ProductPricelist(models.Model): + _inherit = "product.pricelist" + + item_assortment_ids = fields.One2many( + comodel_name="product.pricelist.assortment.item", + inverse_name="pricelist_id", + string="Assortment items", + ) + + def action_launch_assortment_update(self): + """ + Action to execute update of assortment items + :return: dict + """ + for item_assortment in self.mapped("item_assortment_ids"): + item_assortment._update_assortment_items() + return True + + @api.model + def _get_pricelist_assortment_to_update(self): + """ + Get every pricelists related to an assortment (and active)! + :return: self recordset + """ + return self.env["product.pricelist"].search( + [("item_assortment_ids", "!=", False)] + ) + + @api.model + def cron_assortment_update(self): + pricelists = self._get_pricelist_assortment_to_update() + pricelists.action_launch_assortment_update() + return True diff --git a/product_pricelist_assortment/models/product_pricelist_assortment_item.py b/product_pricelist_assortment/models/product_pricelist_assortment_item.py new file mode 100644 index 00000000000..9a72c817fe5 --- /dev/null +++ b/product_pricelist_assortment/models/product_pricelist_assortment_item.py @@ -0,0 +1,112 @@ +# Copyright 2021 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import fields, models + +_logger = logging.getLogger(__name__) + + +class ProductPricelistAssortmentItem(models.Model): + _name = "product.pricelist.assortment.item" + _description = "Product Pricelist Assortment Item" + _inherit = "product.pricelist.item" + + assortment_filter_id = fields.Many2one( + comodel_name="ir.filters", + domain=[("is_assortment", "=", True)], + string="Assortment", + ondelete="restrict", + required=True, + ) + pricelist_item_ids = fields.One2many( + comodel_name="product.pricelist.item", + inverse_name="assortment_item_id", + help="Pricelist items created automatically", + ) + + def _get_pricelist_item_name_price(self): + res = super()._get_pricelist_item_name_price() + for rec in self: + if rec.assortment_filter_id: + rec.name = rec.assortment_filter_id.name + return res + + def _get_pricelist_item_values(self): + """ + Get a list of values to create new product.pricelist.item + :return: list of dict + """ + self.ensure_one() + products = self._get_product_from_assortment() + list_values = [] + # fields to ignore to create pricelist item + blacklist = models.MAGIC_COLUMNS + blacklist.extend(["assortment_filter_id", "pricelist_item_ids"]) + default_values = { + k: self._fields.get(k).convert_to_write(self[k], self) + for k in self._fields.keys() + if k not in blacklist + } + for product in products: + values = default_values.copy() + values.update( + { + "pricelist_id": self.pricelist_id.id, + "assortment_item_id": self.id, + "applied_on": "0_product_variant", + "product_id": product.id, + } + ) + list_values.append(values) + return list_values + + def _get_product_from_assortment(self): + domain = self.assortment_filter_id._get_eval_domain() + products = self.env[self.assortment_filter_id.model_id].search(domain) + return products + + def _get_related_items(self): + return self.mapped("pricelist_item_ids") + + def _update_assortment_items(self): + """ + Update the pricelist with current assortment: + - Prepare values for new assorment items; + - Delete previous items. + - Create new assortments items; + + :return: bool + """ + self.ensure_one() + if not self.assortment_filter_id.active: + _logger.info( + "The assortment item %s is ignored because the " + "related assortment/filter is not active", + self.display_name, + ) + return False + item_obj = self.env["product.pricelist.item"] + items_values = self._get_pricelist_item_values() + new_product_ids = {item["product_id"] for item in items_values} + old_items = self._get_related_items() + old_product_ids = set(old_items.mapped("product_id").ids) + # Products to add + products_to_add_ids = new_product_ids - old_product_ids + # Products to remove + products_to_remove_ids = old_product_ids - new_product_ids + # Find the items to remove + items_to_remove = old_items.filtered( + lambda item: item.product_id.id in products_to_remove_ids + ) + items_to_remove.unlink() + # Create new items + items_to_create = [ + item_value + for item_value in items_values + if item_value["product_id"] in products_to_add_ids + ] + if items_to_create: + item_obj.create(items_to_create) + return True diff --git a/product_pricelist_assortment/models/product_pricelist_item.py b/product_pricelist_assortment/models/product_pricelist_item.py new file mode 100644 index 00000000000..3b08d5d2418 --- /dev/null +++ b/product_pricelist_assortment/models/product_pricelist_item.py @@ -0,0 +1,15 @@ +# Copyright 2021 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ProductPricelistItem(models.Model): + _inherit = "product.pricelist.item" + + assortment_item_id = fields.Many2one( + comodel_name="product.pricelist.assortment.item", + string="Assortment item", + readonly=True, + ondelete="cascade", + ) diff --git a/product_pricelist_assortment/pyproject.toml b/product_pricelist_assortment/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/product_pricelist_assortment/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_pricelist_assortment/readme/CONTRIBUTORS.md b/product_pricelist_assortment/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..96274f1f18f --- /dev/null +++ b/product_pricelist_assortment/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- Denis Roussel \<\> +- Cédric Pigeon \<\> +- François Honoré \<\> diff --git a/product_pricelist_assortment/readme/DESCRIPTION.md b/product_pricelist_assortment/readme/DESCRIPTION.md new file mode 100644 index 00000000000..1599c43e63f --- /dev/null +++ b/product_pricelist_assortment/readme/DESCRIPTION.md @@ -0,0 +1 @@ +Creates dynamic pricelist items based on product assortments. diff --git a/product_pricelist_assortment/security/product_pricelist_assortment_item.xml b/product_pricelist_assortment/security/product_pricelist_assortment_item.xml new file mode 100644 index 00000000000..e5182faa5bd --- /dev/null +++ b/product_pricelist_assortment/security/product_pricelist_assortment_item.xml @@ -0,0 +1,30 @@ + + + + + product.pricelist.assortment user + + + + + + + + + product.pricelist.assortment pricelist manager + + + + + + + + + product.pricelist.assortment.item company rule + + ['|', ('company_id','in',company_ids), ('company_id','=',False)] + + diff --git a/product_pricelist_assortment/static/description/icon.png b/product_pricelist_assortment/static/description/icon.png new file mode 100644 index 00000000000..3a0328b516c Binary files /dev/null and b/product_pricelist_assortment/static/description/icon.png differ diff --git a/product_pricelist_assortment/static/description/index.html b/product_pricelist_assortment/static/description/index.html new file mode 100644 index 00000000000..0bd1c081d89 --- /dev/null +++ b/product_pricelist_assortment/static/description/index.html @@ -0,0 +1,431 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Product Pricelist Assortment

+ +

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

+

Creates dynamic pricelist items based on product assortments.

+

Table of contents

+ +
+

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

+
    +
  • ACSONE SA/NV
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+
+ + diff --git a/product_pricelist_assortment/tests/__init__.py b/product_pricelist_assortment/tests/__init__.py new file mode 100644 index 00000000000..a0e4136b406 --- /dev/null +++ b/product_pricelist_assortment/tests/__init__.py @@ -0,0 +1 @@ +from . import test_pricelist_assortment diff --git a/product_pricelist_assortment/tests/test_pricelist_assortment.py b/product_pricelist_assortment/tests/test_pricelist_assortment.py new file mode 100644 index 00000000000..d41202b6db6 --- /dev/null +++ b/product_pricelist_assortment/tests/test_pricelist_assortment.py @@ -0,0 +1,241 @@ +# Copyright 2021 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from uuid import uuid4 + +from odoo import Command +from odoo.tests.common import tagged + +from odoo.addons.base.tests.common import BaseCommon + + +@tagged("post_install", "-at_install") +class TestPricelistAssortment(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.Pricelist = cls.env["product.pricelist"] + cls.PricelistItem = cls.env["product.pricelist.assortment.item"] + cls.Product = cls.env["product.product"] + cls.Assortment = cls.env["ir.filters"] + cls.default_codes = [str(uuid4()) for x in range(0, 10)] + cls.precision = 2 + cls.assortment = cls._create_assortment(cls) + cls.products_assortment = cls._create_products_assortment(cls) + # Multi company + cls.company_1 = cls.env.company + cls.company_2 = cls.env["res.company"].create( + {"name": "Test Comp 2", "email": "test_pricelist_assortment@test.com"} + ) + cls.user_cmp2 = cls.env["res.users"].create( + { + "name": "User Company 2 Ass", + "login": "ass_user_2", + "group_ids": [ + Command.link(cls.env.ref("base.group_system").id), + Command.link( + cls.env.ref( + "product_assortment.group_product_assortment_manager" + ).id + ), + ], + "email": "ass_user_2@example.com", + "company_id": cls.company_2.id, + "company_ids": [cls.company_2.id], + } + ) + cls.Product.create({"name": "Normal product", "default_code": "test1234"}) + + def _create_assortment(self): + """ + Create a new assortment + :return: ir.filters recordset + """ + values = { + "name": str(uuid4()), + "model_id": "product.product", + "domain": [("default_code", "in", self.default_codes)], + "user_ids": False, + "is_assortment": True, + } + return self.Assortment.create(values) + + def _create_products_assortment(self): + """ + Create some product.product matching with assortment. + :return: product.product recordset + """ + products = self.Product.browse() + for default_code in self.default_codes: + values = { + "name": str(uuid4()), + "default_code": default_code, + } + products |= self.Product.create(values) + return products + + def _get_pricelist_values(self): + """ + Get values to create a new pricelist + :return: dict + """ + fields_list = self.Pricelist.fields_get().keys() + values = self.Pricelist.default_get(fields_list) + values.update( + { + "name": str(uuid4()), + "active": True, + "company_id": self.Pricelist.env.company.id, + "item_ids": [Command.create({})], + } + ) + return values + + def _define_prices(self, normal_price=1.0, assortment_price=1.0): + self.normal_price = normal_price + self.assortment_price = assortment_price + + def _add_assortment_item_fixed_price(self, pricelist): + """ + - Add a new item assortment + - Check if action_launch_assortment_update is correct + - Check if the given product price is correct (concerned by assortment) + - Check if a normal product still correct + :param pricelist: product.pricelist recordset + :return: bool + """ + item_global = pricelist.item_ids.filtered(lambda i: i.applied_on == "3_global") + item_global.write({"compute_price": "fixed", "fixed_price": self.normal_price}) + item_values = { + "assortment_filter_id": self.assortment.id, + "compute_price": "fixed", + "fixed_price": self.assortment_price, + "pricelist_id": pricelist.id, + } + self.assortment_item = self.PricelistItem.create(item_values) + self.existing_items = pricelist.item_ids + return True + + def _update_assortment(self, pricelist): + pricelist.action_launch_assortment_update() + + def _test_values(self, pricelist): + new_items = pricelist.item_ids - self.existing_items + self.assertEqual(len(pricelist.item_assortment_ids), 1) + # Check items created + ensure_product_in = self.products_assortment + self.assertTrue(bool(new_items)) + for item in new_items: + self.assertIn(item.product_id, ensure_product_in) + ensure_product_in -= item.product_id + self.assertEqual(item.assortment_item_id, self.assortment_item) + products_assortment = self.products_assortment.with_context( + pricelist=pricelist.id + ) + self.assertTrue(bool(products_assortment)) + for product in products_assortment: + price = pricelist._get_product_price(product, 1.0) + self.assertAlmostEqual(price, self.assortment_price, places=self.precision) + normal_product = self.Product.search( + [("id", "not in", self.products_assortment.ids)], limit=1 + ) + price = pricelist._get_product_price(normal_product, 1.0) + self.assertAlmostEqual(price, self.normal_price, places=self.precision) + + def test_pricelist_assortment(self): + """ + Check if prices are correctly returned for a product into an + assortment. + :return: + """ + self._define_prices(normal_price=111.111, assortment_price=526.369) + pricelist_values = self._get_pricelist_values() + pricelist = self.Pricelist.create(pricelist_values) + self._add_assortment_item_fixed_price(pricelist) + self._update_assortment(pricelist) + self._test_values(pricelist) + return + + def test_cron(self): + """ + * Create a new pricelist + * Create a new pricelist assortment item + * Launch cron update + * New pricelist items should have been created + """ + self._define_prices(normal_price=111.111, assortment_price=526.369) + pricelist_values = self._get_pricelist_values() + pricelist = self.Pricelist.create(pricelist_values) + self._add_assortment_item_fixed_price(pricelist) + pricelist.flush_recordset() + self.env["product.pricelist"].cron_assortment_update() + self._test_values(pricelist) + + def test_cron_multicompany(self): + """ + * Create a new pricelist with company 2 + * Create a new pricelist assortment item + * Launch cron update + * New pricelist items should have been created + """ + self.products_assortment.write({"company_id": self.company_2}) + self.Pricelist = self.Pricelist.with_user(self.user_cmp2).with_company( + self.company_2 + ) + self._define_prices(normal_price=111.111, assortment_price=526.369) + pricelist_values = self._get_pricelist_values() + pricelist = self.Pricelist.create(pricelist_values) + self._add_assortment_item_fixed_price(pricelist) + pricelist.flush_recordset() + self.env["product.pricelist"].with_user(self.user_cmp2).with_company( + self.company_2 + ).cron_assortment_update() + self._test_values(pricelist) + + def test_update_pricelist_assortment(self): + """ + Check if prices are correctly updated for a product into an + assortment. + - An item is modified manually -> do not update it + - An item is removed from the assortment -> Remove it + - An item is added to the assortment -> Add it + :return: + """ + self._define_prices(normal_price=111.111, assortment_price=526.369) + pricelist_values = self._get_pricelist_values() + pricelist = self.Pricelist.create(pricelist_values) + self._add_assortment_item_fixed_price(pricelist) + self._update_assortment(pricelist) + self._test_values(pricelist) + # 1. Manual edition of an item + items = pricelist.item_ids.filtered( + lambda i: i.product_id and i.assortment_item_id + ) + manual_item = items[0] + manual_item.fixed_price = 999.99 + # 2. Add a new product into the assortment + new_product = self.Product.create( + { + "name": str(uuid4()), + "default_code": "NEW", + } + ) + self.default_codes.append("NEW") + # 3. Remove a product from the assortment + product_to_remove = self.products_assortment[0] + self.default_codes.remove(product_to_remove.default_code) + + self.assortment.domain = [("default_code", "in", self.default_codes)] + self._update_assortment(pricelist) + items = pricelist.item_ids.filtered( + lambda i: i.product_id and i.assortment_item_id + ) + # Check if the manually modified item is still there with the correct + # price + self.assertIn(manual_item, items) + self.assertAlmostEqual(manual_item.fixed_price, 999.99, places=self.precision) + # Check if the new product has been added + self.assertIn(new_product, items.mapped("product_id")) + # Check if the old product has been removed + self.assertNotIn(product_to_remove, items.mapped("product_id")) diff --git a/product_pricelist_assortment/views/product_pricelist.xml b/product_pricelist_assortment/views/product_pricelist.xml new file mode 100644 index 00000000000..16946abe0c1 --- /dev/null +++ b/product_pricelist_assortment/views/product_pricelist.xml @@ -0,0 +1,52 @@ + + + + + product.pricelist.form (in product_pricelist_assortment) + product.pricelist + + + + + [('assortment_item_id', '=', False)] + + + + + + +