diff --git a/product_standard_margin/README.rst b/product_standard_margin/README.rst new file mode 100644 index 000000000..60895ebae --- /dev/null +++ b/product_standard_margin/README.rst @@ -0,0 +1,116 @@ +============================== +Product Margin and Margin Rate +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:fabfa924e777dbded2cd92955a1fa804c4ad0f5afa6157ea2f3a7facde8c37e4 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmargin--analysis-lightgray.png?logo=github + :target: https://github.com/OCA/margin-analysis/tree/17.0/product_standard_margin + :alt: OCA/margin-analysis +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/margin-analysis-17-0/margin-analysis-17-0-product_standard_margin + :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/margin-analysis&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Add 2 fields on the product form that compute the standard (or +theorical) margin and markup based on the current values of sale and +standard price present in the product form. We take care of taxe +included or excluded. + +It will just compute it as follow: Margin : (Sale Price without tax - +Standard Price) / Sale Price without tax Markup : (Sale Price without +tax - Standard Price) / Standard Price + +|image1| + +**Note:** + +As this module will base his simple computation on sale and cost prices, +it suppose you have them both in the same currency (the price type must +of the same currency for both of them). Remember this is the default +OpenERP configuration (price type of all product price fields are set as +the same as the company currency). We don't take care of it cause +otherwise we should have added a dependency on sale module. + +.. |image1| image:: https://raw.githubusercontent.com/OCA/margin-analysis/17.0/product_standard_margin/static/description/product_form.png + +**Table of contents** + +.. contents:: + :local: + +Known issues / Roadmap +====================== + +- This module will not work properly if used in a multicompany context + with product prices depending on the company. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Camptocamp +* GRAP + +Contributors +------------ + +- Alexandre Fayolle +- Yannick Vaucher +- Joël Grand-Guillaume +- Sylvain Le Gal (https://twitter.com/legalsylvain) +- Cyril Vinh-Tung +- Christian Doñate + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px + :target: https://github.com/legalsylvain + :alt: legalsylvain + +Current `maintainer `__: + +|maintainer-legalsylvain| + +This module is part of the `OCA/margin-analysis `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_standard_margin/__init__.py b/product_standard_margin/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/product_standard_margin/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_standard_margin/__manifest__.py b/product_standard_margin/__manifest__.py new file mode 100644 index 000000000..765499493 --- /dev/null +++ b/product_standard_margin/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright (C) 2012 - Today: Camptocamp SA +# @author: Joel Grand-Guillaume +# Copyright (C) 2019 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Product Margin and Margin Rate", + "version": "17.0.1.0.0", + "author": "Camptocamp,GRAP,Odoo Community Association (OCA)", + "category": "Product", + "depends": ["account"], + "maintainers": ["legalsylvain"], + "website": "https://github.com/OCA/margin-analysis", + "data": ["views/view_product_product.xml", "views/view_product_template.xml"], + "license": "AGPL-3", + "installable": True, + "images": ["static/description/product_form.png"], +} diff --git a/product_standard_margin/i18n/de.po b/product_standard_margin/i18n/de.po new file mode 100644 index 000000000..f30879975 --- /dev/null +++ b/product_standard_margin/i18n/de.po @@ -0,0 +1,117 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-11-20 18:43+0000\n" +"Last-Translator: André Volksdorf \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "Produkt" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "Verkaufspreis ohne Mehrwertsteuer" + +#~ msgid "" +#~ "Margin rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "Der Margensatz ist [ Theoretische Marge / Verkaufspreis (Ohne Steuern) ] " +#~ "des Produkts (nicht auf historischen Werten basierend), wobei darauf zu " +#~ "achten ist, Steuern ein- und auszuschließen. Wenn kein Verkaufspreis " +#~ "festgelegt wurde, wird 999.0 angezeigt" + +#~ msgid "Theorical Margin" +#~ msgstr "Theoretische Marge" + +#~ msgid "Theorical Margin (%)" +#~ msgstr "Theoretische Marge (%)" + +#~ msgid "" +#~ "Theorical Margin is [ sale price (Wo Tax) - cost price ] of the product " +#~ "form (not based on historical values). Take care of tax include and " +#~ "exclude. If no sale price, the margin will be negativ." +#~ msgstr "" +#~ "Theoretische Gewinnmarge ist [ Verkaufspreis (Ohne Steuern) - " +#~ "Einkaufspreis ] des Produkts (nicht auf historischen Werten basierend). " +#~ "Achten Sie darauf, Steuern ein- und auszuschließen. Wenn kein " +#~ "Verkaufspreis angegeben wird, ist die Marge negativ." + +#~ msgid "" +#~ "Markup rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "Der Aufschlagssatz ist [ Theoretische Marge / Verkaufspreis (Ohne " +#~ "Steuern) ] des Produkts (nicht auf historischen Werten basierend), mit " +#~ "und ohne Steuer. Wenn kein Verkaufspreis festgelegt wurde, wird 999.0 " +#~ "angezeigt" + +#~ msgid "Product Template" +#~ msgstr "Produktvorlage" diff --git a/product_standard_margin/i18n/es.po b/product_standard_margin/i18n/es.po new file mode 100644 index 000000000..b83bc4ecd --- /dev/null +++ b/product_standard_margin/i18n/es.po @@ -0,0 +1,118 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-06-05 09:26+0000\n" +"PO-Revision-Date: 2023-06-05 11:27+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "Producto" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "Variante de producto" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "Precio de venta sin impuestos" + +#~ msgid "" +#~ "Margin rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "La tasa de margen es [ Margen teórico / precio de venta (sin impuestos) ] " +#~ "de la ficha del producto (no basado en valores históricos). Tenga cuidado " +#~ "de impuestos incluidos y excluidos. Si no hay precio de venta establecido " +#~ "mostrará 999.0" + +#~ msgid "" +#~ "Markup rate is [ Theorical Margin / cost price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no cost price set, will display 999.0" +#~ msgstr "" +#~ "La tasa de Markup es [ Margen teórico / precio de coste (sin impuestos) ] " +#~ "de la ficha del producto (no basado en valores históricos). Tenga cuidado " +#~ "de impuestos incluidos y excluidos. Si no hay precio de coste establecido " +#~ "mostrará 999.0" + +#~ msgid "Theorical Margin" +#~ msgstr "Margen teórico" + +#~ msgid "Theorical Margin (%)" +#~ msgstr "Margen teórico (%)" + +#~ msgid "" +#~ "Theorical Margin is [ sale price (Wo Tax) - cost price ] of the product " +#~ "form (not based on historical values). Take care of tax include and " +#~ "exclude. If no sale price, the margin will be negativ." +#~ msgstr "" +#~ "El margen teórico es [ precio de venta (sin impuestos) - precio de " +#~ "coste ] de la ficha del producto (no basado en valores históricos). Tenga " +#~ "cuidado de impuestos incluidos y excluidos. Si no hay precio de venta el " +#~ "margen será negativo." + +#~ msgid "Theorical Markup (%)" +#~ msgstr "Markup teórico (%)" diff --git a/product_standard_margin/i18n/fr.po b/product_standard_margin/i18n/fr.po new file mode 100644 index 000000000..0baa2beb6 --- /dev/null +++ b/product_standard_margin/i18n/fr.po @@ -0,0 +1,148 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-23 19:48+0000\n" +"PO-Revision-Date: 2025-12-09 22:30+0000\n" +"Last-Translator: Sylvain LE GAL \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "Marge" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "Taux de marque (%)" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" +"La marge commerciale est [ prix de vente (HT) - coût ] du produit (tel " +"qu'affiché sur la vue formulaire, pas basé sur l'historique des valeurs). " +"Prend en compte les taxes inclues / exclues. Si le prix de vente n'est pas " +"renseigné, la marge sera négative." + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" +"Le taux de marge est [ marge / prix de vente ] du produit (tel qu'affiché " +"sur la vue formulaire, pas basé sur l'historique des valeurs). Prend en " +"compte les taxes inclues / exclues. Si le prix de vente n'est pas renseigné, " +"le taux sera de 999.0 %" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "Marge (%)" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" +"Le taux de marge est [ marge / coût (HT) ] du produit (tel qu'affiché sur la " +"vue formulaire, pas basé sur l'historique des valeurs). Prend en compte les " +"taxes inclues / exclues. Si le prix de vente n'est pas renseigné, le taux de " +"majoration sera 999.0" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "Article" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "Variantes de produit" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "Prix de vente (HT)" + +#~ msgid "" +#~ "Margin rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "Taux de marque théorique [ (PV unitaire - Coût unitaire ) / PV unitaire " +#~ "du formulaire Produit] (ne tient pas compte de la facturation effective). " +#~ "Ce taux tient compte des PV TTC (TVA incluse). Si aucun PV n'a été saisi, " +#~ "le taux sera de 999.0" + +#~ msgid "" +#~ "Markup rate is [ Theorical Margin / cost price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no cost price set, will display 999.0" +#~ msgstr "" +#~ "Taux de marge théorique [ (PV unitaire - Coût unitaire ) / Coût unitaire " +#~ "du formulaire Produit] (ne tient pas compte de la facturation effective). " +#~ "Ce taux tient compte des PV TTC (TVA incluse). Si aucun coût n'a été " +#~ "saisi, le taux sera de 999.0" + +#~ msgid "Theorical Margin" +#~ msgstr "Marge Théorique" + +#~ msgid "Theorical Margin (%)" +#~ msgstr "Taux de marque Théorique (%)" + +#~ msgid "" +#~ "Theorical Margin is [ sale price (Wo Tax) - cost price ] of the product " +#~ "form (not based on historical values). Take care of tax include and " +#~ "exclude. If no sale price, the margin will be negativ." +#~ msgstr "" +#~ "Marge théorique [ Vente unitaire HT - coût unitaire ] du produit (ne " +#~ "tient pas compte de la facturation effective). Ce taux tient compte des " +#~ "PV TTC (TVA incluse). Si aucun PV n'a été saisi, la marge sera négative." + +#~ msgid "Theorical Markup (%)" +#~ msgstr "Taux de marge Théorique (%)" + +#~ msgid "" +#~ "Markup rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "Taux de marge théorique [ (PV unitaire - Coût unitaire ) / Coût unitaire " +#~ "du formulaire Produit] (ne tient pas compte de la facturation effective). " +#~ "Ce taux tient compte des PV TTC (TVA incluse). Si aucun coût n'a été " +#~ "saisi, le taux sera de 999.0" + +#~ msgid "Product Template" +#~ msgstr "Modèle d'article" + +#~ msgid "Display Name" +#~ msgstr "Nom affiché" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" diff --git a/product_standard_margin/i18n/hr.po b/product_standard_margin/i18n/hr.po new file mode 100644 index 000000000..213eb69a4 --- /dev/null +++ b/product_standard_margin/i18n/hr.po @@ -0,0 +1,91 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-02-24 15:06+0000\n" +"Last-Translator: uvid-gordana \n" +"Language-Team: none\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "Profitna marža" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "Profitna marža (%)" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" +"Profitna marža je [ prodajna cijena (bez poreza) - nabavna cijena ] na " +"obrascu proizvoda (nije temeljeno na povijesnim vrijednostima). Obratite " +"pažnju na uključivanje i isključivanje poreza. Ako nema prodajne cijene, " +"marža će biti negativna." + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" +"Stopa Profitne marže je [ Profitna marža / prodajna cijena (bez poreza) ] na " +"obrascu proizvoda (nije temeljeno na povijesnim vrijednostima). Obratite " +"pažnju na uključivanje i isključivanje poreza. Ako nije postavljena prodajna " +"cijena, prikazat će se 999.0" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "Marža" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" +"Stopa Marže je [ Profitna marža / nabavna cijena (bez poreza) ] na obrascu " +"proizvoda (nije temeljeno na povijesnim vrijednostima). Obratite pažnju na " +"uključivanje i isključivanje poreza. Ako nije postavljena nabavna cijena, " +"prikazat će se 999.0." + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "Proizvod" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "Varijanta proizvoda" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "Prodajna cijena bez PDV-a" diff --git a/product_standard_margin/i18n/it.po b/product_standard_margin/i18n/it.po new file mode 100644 index 000000000..65922bf70 --- /dev/null +++ b/product_standard_margin/i18n/it.po @@ -0,0 +1,127 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-10-21 10:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "Margine" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "Margine (%)" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" +"Il margine è [ prezzo di vendita (esc. imposte) - costo ] della maschera del " +"prodotto (non basato su valori storici). Fare attenzione all'inclusione o " +"meno delle imposte. Se non è presente il prezzo, il margine sarà negativo." + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" +"Il tasso di margine è [ Margine / prezzo di vendita (esc. imposte) ] della " +"maschera del prodotto (non basato su valori storici). Fare attenzione " +"all'inclusione o meno delle imposte. Se non è impostato il prezzo, " +"visualizzerà 999,0" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "Ricarico (%)" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" +"Il tasso di ricarico è [ Margine / costo (esc. imposte) ] della maschera del " +"prodotto (non basato su valori storici). Fare attenzione all'inclusione o " +"meno delle imposte. Se non è impostato il costo, visualizzerà 999,0" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "Prodotto" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "Variante prodotto" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "Prezzo di vendita IVA esclusa" + +#~ msgid "" +#~ "Margin rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "Il tasso di margine è [ Margine teorico / prezzo di vendita (esc. " +#~ "tasse) ] del modulo prodotto (non basato su valori storici). Fare " +#~ "attenzione all'inclusione o meno delle tasse. Se non è impostato il " +#~ "prezzo, visualizzerà 999,0" + +#~ msgid "" +#~ "Markup rate is [ Theorical Margin / cost price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no cost price set, will display 999.0" +#~ msgstr "" +#~ "Il tasso di ricarico è [ Margine teorico / costo (esc. tasse) ] del " +#~ "modulo prodotto (non basato su valori storici). Fare attenzione " +#~ "all'inclusione o meno delle tasse. Se non è impostato il costo, " +#~ "visualizzerà 999,0" + +#~ msgid "Theorical Margin" +#~ msgstr "Margine teorico" + +#~ msgid "Theorical Margin (%)" +#~ msgstr "Margine teorico (%)" + +#~ msgid "" +#~ "Theorical Margin is [ sale price (Wo Tax) - cost price ] of the product " +#~ "form (not based on historical values). Take care of tax include and " +#~ "exclude. If no sale price, the margin will be negativ." +#~ msgstr "" +#~ "Il margine teorico è [ prezzo di vendita (esc. tasse) - costo ] del " +#~ "modulo del prodotto (non basato su valori storici). Fare attenzione " +#~ "all'inclusione o meno delle tasse. Se non è presente il prezzo, il " +#~ "margine sarà negativo." + +#~ msgid "Theorical Markup (%)" +#~ msgstr "Ricarico teorico (%)" diff --git a/product_standard_margin/i18n/nl.po b/product_standard_margin/i18n/nl.po new file mode 100644 index 000000000..9a00057fc --- /dev/null +++ b/product_standard_margin/i18n/nl.po @@ -0,0 +1,125 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-12-23 12:04+0000\n" +"PO-Revision-Date: 2012-12-23 13:35+0100\n" +"Last-Translator: Erwin van der Ploeg | Endian Solutions " +"\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.5.4\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "Marge" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "Product" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "" + +#, fuzzy +#~ msgid "" +#~ "Margin rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "Theoretische marge (%) is [ Theoretische marge / Verkoopprijs (excl. " +#~ "BTW) ] van het product (niet gebaseerd op historische waardes). Het veld " +#~ "houdt rekening met prijzen incl. en excl. BTW. Indien geen verkooprijs is " +#~ "ingevoerd, wordt 999,0 weergegeven." + +#~ msgid "Theorical Margin" +#~ msgstr "Theoretische marge" + +#~ msgid "Theorical Margin (%)" +#~ msgstr "Theoretische marge (%)" + +#, fuzzy +#~ msgid "" +#~ "Theorical Margin is [ sale price (Wo Tax) - cost price ] of the product " +#~ "form (not based on historical values). Take care of tax include and " +#~ "exclude. If no sale price, the margin will be negativ." +#~ msgstr "" +#~ "Theoretische marge is [ Verkoopprijs (excl. BTW) - Kostprijs) ] van het " +#~ "product (niet gebaseerd op historische waardes). Het veld houdt rekening " +#~ "met prijzen incl. en excl. BTW. Indien geen verkooprijs is ingevoerd, zal " +#~ "de marge negatief zijn." + +#~ msgid "" +#~ "Markup rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "Theoretische marge (%) is [ Theoretische marge / Verkoopprijs (excl. " +#~ "BTW) ] van het product (niet gebaseerd op historische waardes). Het veld " +#~ "houdt rekening met prijzen incl. en excl. BTW. Indien geen verkooprijs is " +#~ "ingevoerd, wordt 999,0 weergegeven." + +#, fuzzy +#~ msgid "Product Template" +#~ msgstr "Product" + +#~ msgid "Error: Invalid ean code" +#~ msgstr "Fout: ongeldige ean code" diff --git a/product_standard_margin/i18n/product_standard_margin.pot b/product_standard_margin/i18n/product_standard_margin.pot new file mode 100644 index 000000000..0fe9f8f92 --- /dev/null +++ b/product_standard_margin/i18n/product_standard_margin.pot @@ -0,0 +1,75 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "" diff --git a/product_standard_margin/i18n/pt.po b/product_standard_margin/i18n/pt.po new file mode 100644 index 000000000..39b71d1a9 --- /dev/null +++ b/product_standard_margin/i18n/pt.po @@ -0,0 +1,76 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "" diff --git a/product_standard_margin/i18n/pt_BR.po b/product_standard_margin/i18n/pt_BR.po new file mode 100644 index 000000000..764d1ef24 --- /dev/null +++ b/product_standard_margin/i18n/pt_BR.po @@ -0,0 +1,127 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_standard_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-11-13 19:06+0000\n" +"Last-Translator: Rodrigo Sottomaior Macedo " +"\n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin +msgid "Margin" +msgstr "Margem" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_margin_rate +msgid "Margin (%)" +msgstr "Margem (%)" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin +msgid "" +"Margin is [ sale price (Wo Tax) - cost price ] of the product form (not " +"based on historical values). Take care of tax include and exclude. If no " +"sale price, the margin will be negativ." +msgstr "" +"Margem é [ preço de venda (Wo Tax) - preço de custo ] do produto (não " +"baseado em valores históricos). Tome cuidado com impostos inclusos e " +"excluídos. Se não houver preço de venda, a margem será negativa." + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_margin_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_margin_rate +msgid "" +"Margin rate is [ Margin / sale price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"sale price set, will display 999.0" +msgstr "" +"A taxa de margem é [ Margin / sale price (Wo Tax) ] do formulário do produto " +"(não com base em valores históricos). Tome cuidado com a inclusão e exclusão " +"de impostos. Se nenhum preço de venda for definido, será exibido 999,0" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__standard_markup_rate +msgid "Markup (%)" +msgstr "Marcação (%)" + +#. module: product_standard_margin +#: model:ir.model.fields,help:product_standard_margin.field_product_product__standard_markup_rate +#: model:ir.model.fields,help:product_standard_margin.field_product_template__standard_markup_rate +msgid "" +"Markup rate is [ Margin / cost price (Wo Tax) ] of the product form (not " +"based on historical values).Take care of tax include and exclude.. If no " +"cost price set, will display 999.0" +msgstr "" +"A taxa de marcação é [ Margin / cost price (Wo Tax) ] do formulário do " +"produto (não com base em valores históricos). Tome cuidado com a inclusão e " +"exclusão de impostos. Se nenhum preço de custo for definido, será exibido " +"999,0" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_template +msgid "Product" +msgstr "Produto" + +#. module: product_standard_margin +#: model:ir.model,name:product_standard_margin.model_product_product +msgid "Product Variant" +msgstr "Variante do Produto" + +#. module: product_standard_margin +#: model:ir.model.fields,field_description:product_standard_margin.field_product_product__list_price_vat_excl +#: model:ir.model.fields,field_description:product_standard_margin.field_product_template__list_price_vat_excl +msgid "Sale Price VAT Excluded" +msgstr "Preço de venda sem IVA" + +#~ msgid "" +#~ "Margin rate is [ Theorical Margin / sale price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no sale price set, will display 999.0" +#~ msgstr "" +#~ "A taxa de margem é [Margem teórica / preço de venda (Wo Tax)] do " +#~ "formulário do produto (não baseado em valores históricos). Tome cuidado " +#~ "com os impostos incluídos e excluídos. Se nenhum preço de venda for " +#~ "definido, será exibido 999,0" + +#~ msgid "" +#~ "Markup rate is [ Theorical Margin / cost price (Wo Tax) ] of the product " +#~ "form (not based on historical values).Take care of tax include and " +#~ "exclude.. If no cost price set, will display 999.0" +#~ msgstr "" +#~ "A taxa de markup é [Margem Teórica / preço de custo (Wo Imposto)] do " +#~ "formulário do produto (não baseado em valores históricos). Tome cuidado " +#~ "com o imposto incluído e excluído. Se nenhum preço de custo definido, " +#~ "exibirá 999,0" + +#~ msgid "Theorical Margin" +#~ msgstr "Margem Teórica" + +#~ msgid "Theorical Margin (%)" +#~ msgstr "Margem Teórica (%)" + +#~ msgid "" +#~ "Theorical Margin is [ sale price (Wo Tax) - cost price ] of the product " +#~ "form (not based on historical values). Take care of tax include and " +#~ "exclude. If no sale price, the margin will be negativ." +#~ msgstr "" +#~ "A Margem Teórica é [preço de venda (Wo Tax) - preço de custo] da forma do " +#~ "produto (não baseada em valores históricos). Cuide de incluir e excluir " +#~ "impostos. Se não houver preço de venda, a margem será negativa." + +#~ msgid "Theorical Markup (%)" +#~ msgstr "Marcação Teórica (%)" diff --git a/product_standard_margin/models/__init__.py b/product_standard_margin/models/__init__.py new file mode 100644 index 000000000..18b37e853 --- /dev/null +++ b/product_standard_margin/models/__init__.py @@ -0,0 +1,2 @@ +from . import product_product +from . import product_template diff --git a/product_standard_margin/models/product_product.py b/product_standard_margin/models/product_product.py new file mode 100644 index 000000000..bc1ede620 --- /dev/null +++ b/product_standard_margin/models/product_product.py @@ -0,0 +1,85 @@ +# Copyright (C) 2012 - Today: Camptocamp SA +# @author: Joel Grand-Guillaume +# Copyright (C) 2019 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + # Column Section + list_price_vat_excl = fields.Float( + compute="_compute_margin", + string="Sale Price VAT Excluded", + store=True, + digits="Product Price", + ) + + standard_margin = fields.Float( + compute="_compute_margin", + string="Margin", + store=True, + digits="Product Price", + help="Margin is [ sale price (Wo Tax) - cost price ] " + "of the product form (not based on historical values). " + "Take care of tax include and exclude. If no sale price, " + "the margin will be negativ.", + ) + + standard_margin_rate = fields.Float( + compute="_compute_margin", + string="Margin (%)", + store=True, + digits="Product Price", + help="Margin rate is [ Margin / sale price (Wo Tax) ] " + "of the product form (not based on historical values)." + "Take care of tax include and exclude.. If no sale price " + "set, will display 999.0", + ) + standard_markup_rate = fields.Float( + compute="_compute_margin", + string="Markup (%)", + store=True, + digits="Product Price", + help="Markup rate is [ Margin / cost price (Wo Tax) ] " + "of the product form (not based on historical values)." + "Take care of tax include and exclude.. If no cost price " + "set, will display 999.0", + ) + + # Compute Section + @api.depends( + "lst_price", + "product_tmpl_id.list_price", + "standard_price", + "taxes_id.price_include", + "taxes_id.amount", + "taxes_id.include_base_amount", + ) + def _compute_margin(self): + for product in self: + product.list_price_vat_excl = product.taxes_id.compute_all( + product.lst_price, product=product + )["total_excluded"] + product.standard_margin = ( + product.list_price_vat_excl - product.standard_price + ) + if product.list_price_vat_excl == 0: + product.standard_margin_rate = 999.0 + else: + product.standard_margin_rate = ( + (product.list_price_vat_excl - product.standard_price) + / product.list_price_vat_excl + * 100 + ) + if product.standard_price == 0: + product.standard_markup_rate = 999.0 + else: + product.standard_markup_rate = ( + (product.list_price_vat_excl - product.standard_price) + / product.standard_price + * 100 + ) diff --git a/product_standard_margin/models/product_template.py b/product_standard_margin/models/product_template.py new file mode 100644 index 000000000..8ff848885 --- /dev/null +++ b/product_standard_margin/models/product_template.py @@ -0,0 +1,83 @@ +# Copyright (C) 2012 - Today: Camptocamp SA +# @author: Joel Grand-Guillaume +# Copyright (C) 2019 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + # Column Section + list_price_vat_excl = fields.Float( + compute="_compute_margin", + string="Sale Price VAT Excluded", + digits="Product Price", + ) + + standard_margin = fields.Float( + compute="_compute_margin", + string="Margin", + digits="Product Price", + help="Margin is [ sale price (Wo Tax) - cost price ] " + "of the product form (not based on historical values). " + "Take care of tax include and exclude. If no sale price, " + "the margin will be negativ.", + ) + + standard_margin_rate = fields.Float( + compute="_compute_margin", + string="Margin (%)", + digits="Product Price", + help="Margin rate is [ Margin / sale price (Wo Tax) ] " + "of the product form (not based on historical values)." + "Take care of tax include and exclude.. If no sale price " + "set, will display 999.0", + ) + standard_markup_rate = fields.Float( + compute="_compute_margin", + string="Markup (%)", + digits="Product Price", + help="Markup rate is [ Margin / cost price (Wo Tax) ] " + "of the product form (not based on historical values)." + "Take care of tax include and exclude.. If no cost price " + "set, will display 999.0", + ) + + # Compute Section + @api.depends( + "list_price", + "standard_price", + "taxes_id.price_include", + "taxes_id.amount", + "taxes_id.include_base_amount", + ) + def _compute_margin(self): + # The code is duplicated from product.product model + # because otherwise, the recomputation is not done correctly + # when the product datas are changed from the template view + for template in self: + template.list_price_vat_excl = template.taxes_id.compute_all( + template.list_price, product=template + )["total_excluded"] + template.standard_margin = ( + template.list_price_vat_excl - template.standard_price + ) + if template.list_price_vat_excl == 0: + template.standard_margin_rate = 999.0 + else: + template.standard_margin_rate = ( + (template.list_price_vat_excl - template.standard_price) + / template.list_price_vat_excl + * 100 + ) + if template.standard_price == 0: + template.standard_markup_rate = 999.0 + else: + template.standard_markup_rate = ( + (template.list_price_vat_excl - template.standard_price) + / template.standard_price + * 100 + ) diff --git a/product_standard_margin/pyproject.toml b/product_standard_margin/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/product_standard_margin/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_standard_margin/readme/CONTRIBUTORS.md b/product_standard_margin/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..9f3c99262 --- /dev/null +++ b/product_standard_margin/readme/CONTRIBUTORS.md @@ -0,0 +1,6 @@ +- Alexandre Fayolle \<\> +- Yannick Vaucher \<\> +- Joël Grand-Guillaume \<\> +- Sylvain Le Gal () +- Cyril Vinh-Tung \<\> +- Christian Doñate \<\> diff --git a/product_standard_margin/readme/DESCRIPTION.md b/product_standard_margin/readme/DESCRIPTION.md new file mode 100644 index 000000000..042bbbcbe --- /dev/null +++ b/product_standard_margin/readme/DESCRIPTION.md @@ -0,0 +1,19 @@ +Add 2 fields on the product form that compute the standard (or +theorical) margin and markup based on the current values of sale and +standard price present in the product form. We take care of taxe +included or excluded. + +It will just compute it as follow: Margin : (Sale Price without tax - +Standard Price) / Sale Price without tax Markup : (Sale Price without +tax - Standard Price) / Standard Price + +![](../static/description/product_form.png) + +**Note:** + +As this module will base his simple computation on sale and cost prices, +it suppose you have them both in the same currency (the price type must +of the same currency for both of them). Remember this is the default +OpenERP configuration (price type of all product price fields are set as +the same as the company currency). We don't take care of it cause +otherwise we should have added a dependency on sale module. diff --git a/product_standard_margin/readme/ROADMAP.md b/product_standard_margin/readme/ROADMAP.md new file mode 100644 index 000000000..d4d7bb69f --- /dev/null +++ b/product_standard_margin/readme/ROADMAP.md @@ -0,0 +1,2 @@ +- This module will not work properly if used in a multicompany context + with product prices depending on the company. diff --git a/product_standard_margin/static/description/icon.png b/product_standard_margin/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/product_standard_margin/static/description/icon.png differ diff --git a/product_standard_margin/static/description/index.html b/product_standard_margin/static/description/index.html new file mode 100644 index 000000000..522f3a322 --- /dev/null +++ b/product_standard_margin/static/description/index.html @@ -0,0 +1,453 @@ + + + + + +Product Margin and Margin Rate + + + +
+

Product Margin and Margin Rate

+ + +

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

+

Add 2 fields on the product form that compute the standard (or +theorical) margin and markup based on the current values of sale and +standard price present in the product form. We take care of taxe +included or excluded.

+

It will just compute it as follow: Margin : (Sale Price without tax - +Standard Price) / Sale Price without tax Markup : (Sale Price without +tax - Standard Price) / Standard Price

+

image1

+

Note:

+

As this module will base his simple computation on sale and cost prices, +it suppose you have them both in the same currency (the price type must +of the same currency for both of them). Remember this is the default +OpenERP configuration (price type of all product price fields are set as +the same as the company currency). We don’t take care of it cause +otherwise we should have added a dependency on sale module.

+

Table of contents

+ +
+

Known issues / Roadmap

+
    +
  • This module will not work properly if used in a multicompany context +with product prices depending on the company.
  • +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
  • GRAP
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

Current maintainer:

+

legalsylvain

+

This module is part of the OCA/margin-analysis project on GitHub.

+

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

+
+
+
+ + diff --git a/product_standard_margin/static/description/product_form.png b/product_standard_margin/static/description/product_form.png new file mode 100644 index 000000000..bd8146a0d Binary files /dev/null and b/product_standard_margin/static/description/product_form.png differ diff --git a/product_standard_margin/tests/__init__.py b/product_standard_margin/tests/__init__.py new file mode 100644 index 000000000..d9b96c4fa --- /dev/null +++ b/product_standard_margin/tests/__init__.py @@ -0,0 +1 @@ +from . import test_module diff --git a/product_standard_margin/tests/test_module.py b/product_standard_margin/tests/test_module.py new file mode 100644 index 000000000..6cfc73cae --- /dev/null +++ b/product_standard_margin/tests/test_module.py @@ -0,0 +1,66 @@ +# Copyright (C) 2020 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import TransactionCase + + +class TestModule(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.ProductProduct = cls.env["product.product"] + cls.ProductTemplate = cls.env["product.template"] + + # Custom Section + def _create_product(self, model, standard_price, sale_price, sale_tax_ids): + vals = { + "name": "Demo Product", + "standard_price": standard_price, + "taxes_id": [(6, 0, sale_tax_ids)], + } + if model == "product": + ModelObj = self.ProductProduct + vals.update({"lst_price": sale_price}) + else: + ModelObj = self.ProductTemplate + vals.update({"list_price": sale_price}) + + return ModelObj.create(vals) + + # Test Section + def test_01_classic_margin(self): + for model in ["product", "template"]: + product = self._create_product(model, 50, 200, []) + self.assertEqual(product.standard_margin, 150, "Incorrect Standard Margin") + self.assertEqual( + product.standard_margin_rate, 75.0, "Incorrect Standard Margin Rate" + ) + + def test_02_margin_without_standard_price(self): + for model in ["product", "template"]: + product = self._create_product(model, 0, 200, []) + self.assertEqual( + product.standard_margin, + 200, + "Incorrect Standard Margin (without standard price)", + ) + self.assertEqual( + product.standard_margin_rate, + 100.0, + "Incorrect Standard Margin Rate (without standard price)", + ) + + def test_03_margin_without_sale_price(self): + for model in ["product", "template"]: + product = self._create_product(model, 50, 0, []) + self.assertEqual( + product.standard_margin, + -50, + "Incorrect Standard Margin (without sale price)", + ) + self.assertEqual( + product.standard_margin_rate, + 999.0, + "Incorrect Standard Margin Rate (without sale price)", + ) diff --git a/product_standard_margin/views/view_product_product.xml b/product_standard_margin/views/view_product_product.xml new file mode 100644 index 000000000..6e7fa19bc --- /dev/null +++ b/product_standard_margin/views/view_product_product.xml @@ -0,0 +1,48 @@ + + + + + product.product + + + + + + + + + + + + + + + product.product + + + + + + + + + + + + + + + product.product + + + + + + + + + + diff --git a/product_standard_margin/views/view_product_template.xml b/product_standard_margin/views/view_product_template.xml new file mode 100644 index 000000000..c657d221d --- /dev/null +++ b/product_standard_margin/views/view_product_template.xml @@ -0,0 +1,52 @@ + + + + + product.template + + + + + + + + + + + product.template + + + + + + + + + +