From 30c3756211fb703b891216c4e1fa34146120d4c0 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 24 Jul 2015 07:27:39 +0200 Subject: [PATCH 01/27] [ADD] V8. product_replenishment_cost - move product_get_cost_field from unported folder to root folder; rename module; [PORT] various changes realized in v7 branch; specially 7f3f6294444e4de51c180db5bf26ca707d9ad60c [REF] OCA convention about folders; [PORT] V8 api; [ADD] demo data; [FIX] set replenishment_cost as a stored field; --- product_replenishment_cost/README.rst | 50 +++++++++++++++++++ product_replenishment_cost/__init__.py | 22 ++++++++ product_replenishment_cost/__openerp__.py | 38 ++++++++++++++ .../demo/res_groups.yml | 28 +++++++++++ product_replenishment_cost/i18n/fr.po | 34 +++++++++++++ product_replenishment_cost/i18n/nl.po | 37 ++++++++++++++ .../i18n/product_replenishment_cost.pot | 34 +++++++++++++ product_replenishment_cost/models/__init__.py | 22 ++++++++ .../models/product_product.py | 44 ++++++++++++++++ .../test/cost_price_update.yml | 50 +++++++++++++++++++ product_replenishment_cost/views/view.xml | 15 ++++++ 11 files changed, 374 insertions(+) create mode 100644 product_replenishment_cost/README.rst create mode 100644 product_replenishment_cost/__init__.py create mode 100644 product_replenishment_cost/__openerp__.py create mode 100644 product_replenishment_cost/demo/res_groups.yml create mode 100644 product_replenishment_cost/i18n/fr.po create mode 100644 product_replenishment_cost/i18n/nl.po create mode 100644 product_replenishment_cost/i18n/product_replenishment_cost.pot create mode 100644 product_replenishment_cost/models/__init__.py create mode 100644 product_replenishment_cost/models/product_product.py create mode 100644 product_replenishment_cost/test/cost_price_update.yml create mode 100644 product_replenishment_cost/views/view.xml diff --git a/product_replenishment_cost/README.rst b/product_replenishment_cost/README.rst new file mode 100644 index 000000000..93128cca9 --- /dev/null +++ b/product_replenishment_cost/README.rst @@ -0,0 +1,50 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +Product Replenishment Cost +========================== + +Provides an overridable method on product which compute the Replenishment cost +of a product. By default it just returns the value of "Cost price" field, but +using the product_cost_incl_bom module, it will return the costing from the +bom. + +As it is a generic module, you can also setup your own way of computing the +replenishment_cost for your product. + +All OCA modules to compute margins are based on it, so you'll be able to use +them in your own way. + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback +`here `_. + +Credits +======= + +Contributors +------------ + +* Alexandre Fayolle +* Yannick Vaucher +* Joël Grand-Guillaume +* Sylvain Le Gal (https://twitter.com/legalsylvain) + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit http://odoo-community.org. + diff --git a/product_replenishment_cost/__init__.py b/product_replenishment_cost/__init__.py new file mode 100644 index 000000000..aaf3afe2e --- /dev/null +++ b/product_replenishment_cost/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author: Alexandre Fayolle, Joel Grand-Guillaume +# Copyright 2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import models diff --git a/product_replenishment_cost/__openerp__.py b/product_replenishment_cost/__openerp__.py new file mode 100644 index 000000000..1f7238dcf --- /dev/null +++ b/product_replenishment_cost/__openerp__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author: Alexandre Fayolle +# Copyright 2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + 'name': 'Replenishment cost', + 'version': '2.0', + 'author': "Camptocamp,GRAP,Odoo Community Association (OCA)", + 'category': 'Products', + 'depends': [ + 'product', + ], + 'website': 'http://www.camptocamp.com/', + 'data': [ + 'views/view.xml', + 'demo/res_groups.yml', + ], + 'test': [ + 'test/cost_price_update.yml', + ], + 'license': 'AGPL-3', +} diff --git a/product_replenishment_cost/demo/res_groups.yml b/product_replenishment_cost/demo/res_groups.yml new file mode 100644 index 000000000..f420e810e --- /dev/null +++ b/product_replenishment_cost/demo/res_groups.yml @@ -0,0 +1,28 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +- !record {model: res.groups, id: base.group_no_one}: + users: + - base.user_root + +- !record {model: res.groups, id: base.group_sale_manager}: + users: + - base.user_root diff --git a/product_replenishment_cost/i18n/fr.po b/product_replenishment_cost/i18n/fr.po new file mode 100644 index 000000000..97740e0a4 --- /dev/null +++ b/product_replenishment_cost/i18n/fr.po @@ -0,0 +1,34 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-30 16:52+0000\n" +"PO-Revision-Date: 2014-10-30 16:52+0000\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_replenishment_cost +#: field:product.product,cost_price:0 +msgid "Replenishment cost" +msgstr "Coût de réapprovisionnement" + +#. module: product_replenishment_cost +#: code:_description:0 +#: model:ir.model,name:product_replenishment_cost.model_product_product +#, python-format +msgid "Product" +msgstr "Article" + +#. module: product_replenishment_cost +#: help:product.product,cost_price:0 +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "Le coût que vous devez prendre en charge pour produire ou acquerir la marchandise. Selon les modules installés, le calcul de ce coût peut s'appuyer sur diverses informations : par exemple les nomenclatures ou les derniers achats. Par défaut, le coût de réapprovisionnement est le même que le Prix de revient." + diff --git a/product_replenishment_cost/i18n/nl.po b/product_replenishment_cost/i18n/nl.po new file mode 100644 index 000000000..1d17b6f8a --- /dev/null +++ b/product_replenishment_cost/i18n/nl.po @@ -0,0 +1,37 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-12-23 10:21+0000\n" +"PO-Revision-Date: 2012-12-23 11:28+0100\n" +"Last-Translator: Erwin van der Ploeg | Endian Solutions " +"\n" +"Language-Team: \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_replenishment_cost +#: help:product.product,cost_price:0 +msgid "" +"The cost price is the standard price or, if the product has a bom, the sum " +"of all standard price of its components. it take also care of the bom " +"costing like cost per cylce." +msgstr "Dit is de kostprijs, inclusief eventuele kosten." + +#. module: product_replenishment_cost +#: model:ir.model,name:product_replenishment_cost.model_product_product +msgid "Product" +msgstr "Product" + +#. module: product_replenishment_cost +#: field:product.product,cost_price:0 +msgid "Cost Price (incl. BoM)" +msgstr "Kostprijs (incl. kosten)" + diff --git a/product_replenishment_cost/i18n/product_replenishment_cost.pot b/product_replenishment_cost/i18n/product_replenishment_cost.pot new file mode 100644 index 000000000..e093d8f7c --- /dev/null +++ b/product_replenishment_cost/i18n/product_replenishment_cost.pot @@ -0,0 +1,34 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-30 16:51+0000\n" +"PO-Revision-Date: 2014-10-30 16:51+0000\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_replenishment_cost +#: field:product.product,cost_price:0 +msgid "Replenishment cost" +msgstr "" + +#. module: product_replenishment_cost +#: code:_description:0 +#: model:ir.model,name:product_replenishment_cost.model_product_product +#, python-format +msgid "Product" +msgstr "" + +#. module: product_replenishment_cost +#: help:product.product,cost_price:0 +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" + diff --git a/product_replenishment_cost/models/__init__.py b/product_replenishment_cost/models/__init__.py new file mode 100644 index 000000000..4859eca20 --- /dev/null +++ b/product_replenishment_cost/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author: Alexandre Fayolle, Joel Grand-Guillaume +# Copyright 2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import product_product diff --git a/product_replenishment_cost/models/product_product.py b/product_replenishment_cost/models/product_product.py new file mode 100644 index 000000000..78c04325c --- /dev/null +++ b/product_replenishment_cost/models/product_product.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author: Alexandre Fayolle +# Copyright 2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import fields, api +from openerp.models import Model + +import openerp.addons.decimal_precision as dp + + +class ProductProduct(Model): + _inherit = 'product.product' + + @api.one + @api.depends('product_tmpl_id.standard_price') + def _get_replenishment_cost(self): + self.replenishment_cost = self.standard_price + + replenishment_cost = fields.Float( + compute=_get_replenishment_cost, store=True, + digits_compute=dp.get_precision('Product Price'), + help="The cost that you have to support in order to produce or " + "acquire the goods. Depending on the modules installed, " + "this cost may be computed based on various pieces of " + "information, for example Bills of Materials or latest " + "Purchases. By default, the Replenishment cost is the same " + "as the Cost Price.") diff --git a/product_replenishment_cost/test/cost_price_update.yml b/product_replenishment_cost/test/cost_price_update.yml new file mode 100644 index 000000000..7889744db --- /dev/null +++ b/product_replenishment_cost/test/cost_price_update.yml @@ -0,0 +1,50 @@ +- + Test the following with user admin +- + !context + uid: 'base.user_root' +- + Create a wine A product +- + !record {model: product.product, id: product_product_a}: + categ_id: product.product_category_1 + name: Wine A01 + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit + company_id: 0 + standard_price: 50.0 + list_price: 75.0 +- + Test the prices are updated correctly +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_a')) + assert product.standard_price == 50.0, "01 The standard_price has not been recorded correctly" + assert product.replenishment_cost == 50.0, "01 The replenishment_cost has not been recorded correctly" +- + Modify product A set new prices +- + !python {model: product.product}: | + self.write(cr, uid, ref('product_product_a'), {'standard_price':70}) +- + Test price are update accordingly +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_a')) + assert product.standard_price == 70.0, "02 The standard_price has not been recorded correctly" + assert product.replenishment_cost == 70.0, "02 The replenishment_cost has not been recorded correctly" +- + Modify product A using the template object and set new prices +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_a')) + prod_tmpl_id = product.product_tmpl_id.id + self.pool.get('product.template').write(cr, uid, [prod_tmpl_id], {'standard_price':100}) +- + Test replenishment_cost is update accordingly +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_a')) + assert product.standard_price == 100.0, "03 The standard_price has not been recorded correctly" + assert product.replenishment_cost == 100.0, "03 The replenishment_cost has not been recorded correctly" + diff --git a/product_replenishment_cost/views/view.xml b/product_replenishment_cost/views/view.xml new file mode 100644 index 000000000..122e1d809 --- /dev/null +++ b/product_replenishment_cost/views/view.xml @@ -0,0 +1,15 @@ + + + + + product.product + + + + + + + + + + From 9b2d7efd04c2c040c016ca0941e765440af15e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Fri, 9 Oct 2015 10:01:49 +0200 Subject: [PATCH 02/27] [UPD] prefix versions with 8.0 --- product_replenishment_cost/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_replenishment_cost/__openerp__.py b/product_replenishment_cost/__openerp__.py index 1f7238dcf..647e01f29 100644 --- a/product_replenishment_cost/__openerp__.py +++ b/product_replenishment_cost/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { 'name': 'Replenishment cost', - 'version': '2.0', + 'version': '8.0.2.0.0', 'author': "Camptocamp,GRAP,Odoo Community Association (OCA)", 'category': 'Products', 'depends': [ From cdab8d3af1b70f56c0bd98487b6ea5a8e3557d35 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 14 Oct 2015 03:30:30 +0200 Subject: [PATCH 03/27] [MIG] Make modules uninstallable --- product_replenishment_cost/__openerp__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/product_replenishment_cost/__openerp__.py b/product_replenishment_cost/__openerp__.py index 647e01f29..a523c163f 100644 --- a/product_replenishment_cost/__openerp__.py +++ b/product_replenishment_cost/__openerp__.py @@ -35,4 +35,5 @@ 'test/cost_price_update.yml', ], 'license': 'AGPL-3', + 'installable': False, } From 4907743b8d857b62b90473e826fc37ac92f05331 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 15:56:23 +0200 Subject: [PATCH 04/27] [MIG] Rename manifest files --- product_replenishment_cost/{__openerp__.py => __manifest__.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename product_replenishment_cost/{__openerp__.py => __manifest__.py} (100%) diff --git a/product_replenishment_cost/__openerp__.py b/product_replenishment_cost/__manifest__.py similarity index 100% rename from product_replenishment_cost/__openerp__.py rename to product_replenishment_cost/__manifest__.py From cc5a2eac922acbc394792b4ef95d53a11ddf7cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Fri, 15 Jun 2018 23:32:06 +0200 Subject: [PATCH 05/27] remove obsolete .pot files [ci skip] --- .../i18n/product_replenishment_cost.pot | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 product_replenishment_cost/i18n/product_replenishment_cost.pot diff --git a/product_replenishment_cost/i18n/product_replenishment_cost.pot b/product_replenishment_cost/i18n/product_replenishment_cost.pot deleted file mode 100644 index e093d8f7c..000000000 --- a/product_replenishment_cost/i18n/product_replenishment_cost.pot +++ /dev/null @@ -1,34 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * product_replenishment_cost -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-30 16:51+0000\n" -"PO-Revision-Date: 2014-10-30 16:51+0000\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_replenishment_cost -#: field:product.product,cost_price:0 -msgid "Replenishment cost" -msgstr "" - -#. module: product_replenishment_cost -#: code:_description:0 -#: model:ir.model,name:product_replenishment_cost.model_product_product -#, python-format -msgid "Product" -msgstr "" - -#. module: product_replenishment_cost -#: help:product.product,cost_price:0 -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." -msgstr "" - From 95cc70dbf1048de6f445b9072abeada8ab38d2b3 Mon Sep 17 00:00:00 2001 From: Nicolas Mac Rouillon Date: Wed, 2 Nov 2016 14:39:41 -0300 Subject: [PATCH 06/27] migrate product_replenishment_cost to v9 --- product_replenishment_cost/README.rst | 59 +++++++++++++++--- product_replenishment_cost/__manifest__.py | 10 +-- .../models/product_product.py | 2 +- .../static/description/icon.png | Bin 0 -> 9455 bytes .../views/{view.xml => product_view.xml} | 7 +-- 5 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 product_replenishment_cost/static/description/icon.png rename product_replenishment_cost/views/{view.xml => product_view.xml} (77%) diff --git a/product_replenishment_cost/README.rst b/product_replenishment_cost/README.rst index 93128cca9..7278bfd1c 100644 --- a/product_replenishment_cost/README.rst +++ b/product_replenishment_cost/README.rst @@ -1,25 +1,59 @@ .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License: AGPL-3 + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +========================== Product Replenishment Cost ========================== -Provides an overridable method on product which compute the Replenishment cost -of a product. By default it just returns the value of "Cost price" field, but -using the product_cost_incl_bom module, it will return the costing from the -bom. +Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of "Cost price" field, but using the product_cost_incl_bom module, it will return the costing from the bom. + +As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product. + +All OCA modules to compute margins are based on it, so you'll be able to use them in your own way. + + +Installation +============ + +To install this module, you need to: + +#. Just install module. + +Configuration +============= + +To configure this module, you need to: -As it is a generic module, you can also setup your own way of computing the -replenishment_cost for your product. +#. No configuration needed. -All OCA modules to compute margins are based on it, so you'll be able to use -them in your own way. +.. figure:: path/to/local/image.png + :alt: alternative description + :width: 600 px +Usage +===== + +To use this module, you need to: + +#. Go to ... + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/{repo_id}/{branch} + +.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt +.. branch is "8.0" for example + +Known issues / Roadmap +====================== + +* ... Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. @@ -27,6 +61,11 @@ If you spotted it first, help us smashing it by providing a detailed and welcome Credits ======= +Images +------ + +* Odoo Community Association: `Icon `_. + Contributors ------------ diff --git a/product_replenishment_cost/__manifest__.py b/product_replenishment_cost/__manifest__.py index a523c163f..97a308b2d 100644 --- a/product_replenishment_cost/__manifest__.py +++ b/product_replenishment_cost/__manifest__.py @@ -19,21 +19,21 @@ # ############################################################################## { - 'name': 'Replenishment cost', - 'version': '8.0.2.0.0', + 'name': 'Replenishment Cost', + 'version': '9.0.1.0.0', 'author': "Camptocamp,GRAP,Odoo Community Association (OCA)", + 'license': 'AGPL-3', 'category': 'Products', 'depends': [ 'product', ], 'website': 'http://www.camptocamp.com/', 'data': [ - 'views/view.xml', + 'views/product_view.xml', 'demo/res_groups.yml', ], 'test': [ 'test/cost_price_update.yml', ], - 'license': 'AGPL-3', - 'installable': False, + 'installable': True, } diff --git a/product_replenishment_cost/models/product_product.py b/product_replenishment_cost/models/product_product.py index 78c04325c..45b5e6455 100644 --- a/product_replenishment_cost/models/product_product.py +++ b/product_replenishment_cost/models/product_product.py @@ -29,7 +29,7 @@ class ProductProduct(Model): _inherit = 'product.product' @api.one - @api.depends('product_tmpl_id.standard_price') + @api.depends('product_tmpl_id.standard_price', 'standard_price') def _get_replenishment_cost(self): self.replenishment_cost = self.standard_price diff --git a/product_replenishment_cost/static/description/icon.png b/product_replenishment_cost/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_replenishment_cost/views/view.xml b/product_replenishment_cost/views/product_view.xml similarity index 77% rename from product_replenishment_cost/views/view.xml rename to product_replenishment_cost/views/product_view.xml index 122e1d809..d54b2df29 100644 --- a/product_replenishment_cost/views/view.xml +++ b/product_replenishment_cost/views/product_view.xml @@ -5,11 +5,10 @@ product.product - + - + - - + \ No newline at end of file From a71670781fbf431d4ada5431c1a0adf88de4a65f Mon Sep 17 00:00:00 2001 From: "@PlanetaTIC" <@PlanetaTIC> Date: Wed, 31 Jul 2019 13:28:38 +0200 Subject: [PATCH 07/27] [MIG] product_replenishment_cost: Migration to 10.0 --- product_replenishment_cost/README.rst | 107 ++--- product_replenishment_cost/__manifest__.py | 19 +- .../demo/res_groups.xml | 14 + .../demo/res_groups.yml | 28 -- product_replenishment_cost/i18n/es.po | 43 ++ product_replenishment_cost/i18n/fr.po | 29 +- product_replenishment_cost/i18n/nl.po | 21 +- .../i18n/product_replenishment_cost.pot | 30 ++ .../models/product_product.py | 10 +- .../readme/CONTRIBUTORS.rst | 5 + .../readme/DESCRIPTION.rst | 5 + .../static/description/index.html | 426 ++++++++++++++++++ .../test/cost_price_update.yml | 14 +- .../views/product_view.xml | 26 +- 14 files changed, 644 insertions(+), 133 deletions(-) create mode 100644 product_replenishment_cost/demo/res_groups.xml delete mode 100644 product_replenishment_cost/demo/res_groups.yml create mode 100644 product_replenishment_cost/i18n/es.po create mode 100644 product_replenishment_cost/i18n/product_replenishment_cost.pot create mode 100644 product_replenishment_cost/readme/CONTRIBUTORS.rst create mode 100644 product_replenishment_cost/readme/DESCRIPTION.rst create mode 100644 product_replenishment_cost/static/description/index.html diff --git a/product_replenishment_cost/README.rst b/product_replenishment_cost/README.rst index 7278bfd1c..41ddab341 100644 --- a/product_replenishment_cost/README.rst +++ b/product_replenishment_cost/README.rst @@ -1,10 +1,29 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - -========================== -Product Replenishment Cost -========================== +================== +Replenishment Cost +================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmargin--analysis-lightgray.png?logo=github + :target: https://github.com/OCA/margin-analysis/tree/10.0/product_replenishment_cost + :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-10-0/margin-analysis-10-0-product_replenishment_cost + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/132/10.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of "Cost price" field, but using the product_cost_incl_bom module, it will return the costing from the bom. @@ -12,78 +31,52 @@ As it is a generic module, you can also setup your own way of computing the repl All OCA modules to compute margins are based on it, so you'll be able to use them in your own way. +**Table of contents** -Installation -============ - -To install this module, you need to: - -#. Just install module. - -Configuration -============= - -To configure this module, you need to: - -#. No configuration needed. - -.. figure:: path/to/local/image.png - :alt: alternative description - :width: 600 px - -Usage -===== - -To use this module, you need to: - -#. Go to ... - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/{repo_id}/{branch} - -.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt -.. branch is "8.0" for example - -Known issues / Roadmap -====================== - -* ... +.. 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 smashing it by providing a detailed and welcomed feedback -`here `_. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* Camptocamp +* GRAP Contributors ------------- +~~~~~~~~~~~~ * Alexandre Fayolle * Yannick Vaucher * Joël Grand-Guillaume * Sylvain Le Gal (https://twitter.com/legalsylvain) +* Marc Poch Mallandrich -Maintainer ----------- - -.. image:: http://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: http://odoo-community.org +Maintainers +~~~~~~~~~~~ This module is maintained by the OCA. -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. +.. 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. -To contribute to this module, please visit http://odoo-community.org. +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_replenishment_cost/__manifest__.py b/product_replenishment_cost/__manifest__.py index 97a308b2d..c1e135da6 100644 --- a/product_replenishment_cost/__manifest__.py +++ b/product_replenishment_cost/__manifest__.py @@ -20,17 +20,30 @@ ############################################################################## { 'name': 'Replenishment Cost', - 'version': '9.0.1.0.0', + 'version': '10.0.1.0.0', 'author': "Camptocamp,GRAP,Odoo Community Association (OCA)", 'license': 'AGPL-3', 'category': 'Products', 'depends': [ 'product', + 'sales_team', ], - 'website': 'http://www.camptocamp.com/', + 'description': """ +Provides an overridable method on product which compute the Replenishment cost +of a product. By default it just returns the value of "Cost price" field, but +using the product_cost_incl_bom module, it will return the costing from the +bom. + +As it is a generic module, you can also setup your own way of computing the +replenishment_cost for your product. + +All OCA modules to compute margins are based on it, so you'll be able to use +them in your own way. +""", + 'website': 'https://github.com/OCA/margin-analysis', 'data': [ 'views/product_view.xml', - 'demo/res_groups.yml', + 'demo/res_groups.xml', ], 'test': [ 'test/cost_price_update.yml', diff --git a/product_replenishment_cost/demo/res_groups.xml b/product_replenishment_cost/demo/res_groups.xml new file mode 100644 index 000000000..3cf0bf35d --- /dev/null +++ b/product_replenishment_cost/demo/res_groups.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/product_replenishment_cost/demo/res_groups.yml b/product_replenishment_cost/demo/res_groups.yml deleted file mode 100644 index f420e810e..000000000 --- a/product_replenishment_cost/demo/res_groups.yml +++ /dev/null @@ -1,28 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2015-Today GRAP (http://www.grap.coop) -# @author Sylvain LE GAL (https://twitter.com/legalsylvain) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -- !record {model: res.groups, id: base.group_no_one}: - users: - - base.user_root - -- !record {model: res.groups, id: base.group_sale_manager}: - users: - - base.user_root diff --git a/product_replenishment_cost/i18n/es.po b/product_replenishment_cost/i18n/es.po new file mode 100644 index 000000000..aa239ac1b --- /dev/null +++ b/product_replenishment_cost/i18n/es.po @@ -0,0 +1,43 @@ +# # Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +# Translators: +# PlanetaTIC - Marc Poch , 2019 +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-30 16:52+0000\n" +"PO-Revision-Date: 2014-10-30 16:52+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_replenishment_cost +#: model:ir.model,name:product_replenishment_cost.model_product_product +msgid "Product" +msgstr "Producto" + +#. module: product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +msgid "Replenishment cost" +msgstr "Coste de reposición" + +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" +"El coste que tiene que pagar para producir o adquirir los bienes. " +"Dependiendo de los módulos instalados, este coste puede calcularse en " +"función de diversos datos, por ejemplo, listas de materiales o compras más " +"recientes. De forma predeterminada, el coste de reposición es el mismo que " +"el precio de coste." diff --git a/product_replenishment_cost/i18n/fr.po b/product_replenishment_cost/i18n/fr.po index 97740e0a4..0d81258c1 100644 --- a/product_replenishment_cost/i18n/fr.po +++ b/product_replenishment_cost/i18n/fr.po @@ -1,6 +1,6 @@ # Translation of OpenERP Server. # This file contains the translation of the following modules: -# * product_replenishment_cost +# * product_replenishment_cost # msgid "" msgstr "" @@ -10,25 +10,32 @@ msgstr "" "PO-Revision-Date: 2014-10-30 16:52+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" #. module: product_replenishment_cost -#: field:product.product,cost_price:0 -msgid "Replenishment cost" -msgstr "Coût de réapprovisionnement" - -#. module: product_replenishment_cost -#: code:_description:0 #: model:ir.model,name:product_replenishment_cost.model_product_product -#, python-format msgid "Product" msgstr "Article" #. module: product_replenishment_cost -#: help:product.product,cost_price:0 -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." -msgstr "Le coût que vous devez prendre en charge pour produire ou acquerir la marchandise. Selon les modules installés, le calcul de ce coût peut s'appuyer sur diverses informations : par exemple les nomenclatures ou les derniers achats. Par défaut, le coût de réapprovisionnement est le même que le Prix de revient." +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +msgid "Replenishment cost" +msgstr "Coût de réapprovisionnement" +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" +"Le coût que vous devez prendre en charge pour produire ou acquerir la " +"marchandise. Selon les modules installés, le calcul de ce coût peut " +"s'appuyer sur diverses informations : par exemple les nomenclatures ou les " +"derniers achats. Par défaut, le coût de réapprovisionnement est le même que " +"le Prix de revient." diff --git a/product_replenishment_cost/i18n/nl.po b/product_replenishment_cost/i18n/nl.po index 1d17b6f8a..633c7dff3 100644 --- a/product_replenishment_cost/i18n/nl.po +++ b/product_replenishment_cost/i18n/nl.po @@ -11,27 +11,28 @@ msgstr "" "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_replenishment_cost -#: help:product.product,cost_price:0 -msgid "" -"The cost price is the standard price or, if the product has a bom, the sum " -"of all standard price of its components. it take also care of the bom " -"costing like cost per cylce." -msgstr "Dit is de kostprijs, inclusief eventuele kosten." - #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product msgid "Product" msgstr "Product" #. module: product_replenishment_cost -#: field:product.product,cost_price:0 -msgid "Cost Price (incl. BoM)" +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +msgid "Replenishment cost" msgstr "Kostprijs (incl. kosten)" +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "Dit is de kostprijs, inclusief eventuele kosten." diff --git a/product_replenishment_cost/i18n/product_replenishment_cost.pot b/product_replenishment_cost/i18n/product_replenishment_cost.pot new file mode 100644 index 000000000..9bc8184b5 --- /dev/null +++ b/product_replenishment_cost/i18n/product_replenishment_cost.pot @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.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_replenishment_cost +#: model:ir.model,name:product_replenishment_cost.model_product_product +msgid "Product" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +msgid "Replenishment cost" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" + diff --git a/product_replenishment_cost/models/product_product.py b/product_replenishment_cost/models/product_product.py index 45b5e6455..27ac12477 100644 --- a/product_replenishment_cost/models/product_product.py +++ b/product_replenishment_cost/models/product_product.py @@ -19,10 +19,10 @@ # ############################################################################## -from openerp import fields, api -from openerp.models import Model +from odoo import fields, api +from odoo.models import Model -import openerp.addons.decimal_precision as dp +import odoo.addons.decimal_precision as dp class ProductProduct(Model): @@ -34,8 +34,8 @@ def _get_replenishment_cost(self): self.replenishment_cost = self.standard_price replenishment_cost = fields.Float( - compute=_get_replenishment_cost, store=True, - digits_compute=dp.get_precision('Product Price'), + string='Replenishment cost', compute='_get_replenishment_cost', + store=True, digits=dp.get_precision('Product Price'), help="The cost that you have to support in order to produce or " "acquire the goods. Depending on the modules installed, " "this cost may be computed based on various pieces of " diff --git a/product_replenishment_cost/readme/CONTRIBUTORS.rst b/product_replenishment_cost/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..f863ad159 --- /dev/null +++ b/product_replenishment_cost/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Alexandre Fayolle +* Yannick Vaucher +* Joël Grand-Guillaume +* Sylvain Le Gal (https://twitter.com/legalsylvain) +* Marc Poch Mallandrich \ No newline at end of file diff --git a/product_replenishment_cost/readme/DESCRIPTION.rst b/product_replenishment_cost/readme/DESCRIPTION.rst new file mode 100644 index 000000000..fc3f34f70 --- /dev/null +++ b/product_replenishment_cost/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of "Cost price" field, but using the product_cost_incl_bom module, it will return the costing from the bom. + +As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product. + +All OCA modules to compute margins are based on it, so you'll be able to use them in your own way. \ No newline at end of file diff --git a/product_replenishment_cost/static/description/index.html b/product_replenishment_cost/static/description/index.html new file mode 100644 index 000000000..36d380327 --- /dev/null +++ b/product_replenishment_cost/static/description/index.html @@ -0,0 +1,426 @@ + + + + + + +Replenishment Cost + + + +
+

Replenishment Cost

+ + +

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

+

Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of “Cost price” field, but using the product_cost_incl_bom module, it will return the costing from the bom.

+

As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product.

+

All OCA modules to compute margins are based on it, so you’ll be able to use them in your own way.

+

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 smashing 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.

+

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_replenishment_cost/test/cost_price_update.yml b/product_replenishment_cost/test/cost_price_update.yml index 7889744db..cf1405cac 100644 --- a/product_replenishment_cost/test/cost_price_update.yml +++ b/product_replenishment_cost/test/cost_price_update.yml @@ -18,33 +18,35 @@ Test the prices are updated correctly - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_product_a')) + product = self.browse(ref('product_product_a')) assert product.standard_price == 50.0, "01 The standard_price has not been recorded correctly" assert product.replenishment_cost == 50.0, "01 The replenishment_cost has not been recorded correctly" - Modify product A set new prices - !python {model: product.product}: | - self.write(cr, uid, ref('product_product_a'), {'standard_price':70}) + product = self.browse(ref('product_product_a')) + product.write({'standard_price':70}) - Test price are update accordingly - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_product_a')) + product = self.browse(ref('product_product_a')) assert product.standard_price == 70.0, "02 The standard_price has not been recorded correctly" assert product.replenishment_cost == 70.0, "02 The replenishment_cost has not been recorded correctly" - Modify product A using the template object and set new prices - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_product_a')) + product = self.browse(ref('product_product_a')) prod_tmpl_id = product.product_tmpl_id.id - self.pool.get('product.template').write(cr, uid, [prod_tmpl_id], {'standard_price':100}) + prod_template = self.env['product.template'].browse(prod_tmpl_id) + prod_template.write({'standard_price':100}) - Test replenishment_cost is update accordingly - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_product_a')) + product = self.browse(ref('product_product_a')) assert product.standard_price == 100.0, "03 The standard_price has not been recorded correctly" assert product.replenishment_cost == 100.0, "03 The replenishment_cost has not been recorded correctly" diff --git a/product_replenishment_cost/views/product_view.xml b/product_replenishment_cost/views/product_view.xml index d54b2df29..2e6aaa510 100644 --- a/product_replenishment_cost/views/product_view.xml +++ b/product_replenishment_cost/views/product_view.xml @@ -1,14 +1,14 @@ - - - - product.product - - - - - - - - - \ No newline at end of file + + + + product.product + + + + + + + + + From 3ecc3d531b9f8f16b954c0bd4f8e3ff99191c73b Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 9 Aug 2019 19:00:59 +0200 Subject: [PATCH 08/27] [PORT][12.0] product_replenishment_cost --- product_replenishment_cost/README.rst | 25 ++++++--- product_replenishment_cost/__init__.py | 21 -------- product_replenishment_cost/__manifest__.py | 47 +++-------------- .../demo/res_groups.xml | 14 ----- product_replenishment_cost/i18n/fr.po | 21 +++----- .../i18n/product_replenishment_cost.pot | 6 +-- product_replenishment_cost/models/__init__.py | 21 -------- .../models/product_product.py | 33 ++++-------- product_replenishment_cost/readme/ROADMAP.rst | 5 ++ .../static/description/index.html | 40 ++++++++------ .../test/cost_price_update.yml | 52 ------------------- product_replenishment_cost/tests/__init__.py | 1 + .../tests/test_module.py | 30 +++++++++++ 13 files changed, 105 insertions(+), 211 deletions(-) delete mode 100644 product_replenishment_cost/demo/res_groups.xml create mode 100644 product_replenishment_cost/readme/ROADMAP.rst delete mode 100644 product_replenishment_cost/test/cost_price_update.yml create mode 100644 product_replenishment_cost/tests/__init__.py create mode 100644 product_replenishment_cost/tests/test_module.py diff --git a/product_replenishment_cost/README.rst b/product_replenishment_cost/README.rst index 41ddab341..c1631c71a 100644 --- a/product_replenishment_cost/README.rst +++ b/product_replenishment_cost/README.rst @@ -1,6 +1,6 @@ -================== -Replenishment Cost -================== +========================== +Product Replenishment Cost +========================== .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! @@ -14,13 +14,13 @@ Replenishment Cost :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/10.0/product_replenishment_cost + :target: https://github.com/OCA/margin-analysis/tree/12.0/product_replenishment_cost :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-10-0/margin-analysis-10-0-product_replenishment_cost + :target: https://translation.odoo-community.org/projects/margin-analysis-12-0/margin-analysis-12-0-product_replenishment_cost :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/132/10.0 + :target: https://runbot.odoo-community.org/runbot/132/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -36,13 +36,22 @@ All OCA modules to compute margins are based on it, so you'll be able to use the .. contents:: :local: +Known issues / Roadmap +====================== + +Due to framework limitation, the field ``replenishment_cost`` is not +company dependent, while ``standard_price`` is. (in the recent Odoo versions) + +It is due to the current impossibility to make working computed field between +two field ``company_dependent=True``. + Bug Tracker =========== Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -77,6 +86,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/margin-analysis `_ project on GitHub. +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_replenishment_cost/__init__.py b/product_replenishment_cost/__init__.py index aaf3afe2e..0650744f6 100644 --- a/product_replenishment_cost/__init__.py +++ b/product_replenishment_cost/__init__.py @@ -1,22 +1 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Alexandre Fayolle, Joel Grand-Guillaume -# Copyright 2012 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - from . import models diff --git a/product_replenishment_cost/__manifest__.py b/product_replenishment_cost/__manifest__.py index c1e135da6..ee190637e 100644 --- a/product_replenishment_cost/__manifest__.py +++ b/product_replenishment_cost/__manifest__.py @@ -1,52 +1,21 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Alexandre Fayolle -# Copyright 2012 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright (C) 2012 - Today: Camptocamp SA +# Copyright (C) 2016 - Today: GRAP (http://www.grap.coop) +# @author: Alexandre Fayolle +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Replenishment Cost', - 'version': '10.0.1.0.0', + 'name': 'Product Replenishment Cost', + 'summary': "Provides an overridable method on product which compute" + "the Replenishment cost of a product", + 'version': '12.0.1.0.0', 'author': "Camptocamp,GRAP,Odoo Community Association (OCA)", 'license': 'AGPL-3', 'category': 'Products', 'depends': [ 'product', - 'sales_team', ], - 'description': """ -Provides an overridable method on product which compute the Replenishment cost -of a product. By default it just returns the value of "Cost price" field, but -using the product_cost_incl_bom module, it will return the costing from the -bom. - -As it is a generic module, you can also setup your own way of computing the -replenishment_cost for your product. - -All OCA modules to compute margins are based on it, so you'll be able to use -them in your own way. -""", 'website': 'https://github.com/OCA/margin-analysis', 'data': [ 'views/product_view.xml', - 'demo/res_groups.xml', - ], - 'test': [ - 'test/cost_price_update.yml', ], 'installable': True, } diff --git a/product_replenishment_cost/demo/res_groups.xml b/product_replenishment_cost/demo/res_groups.xml deleted file mode 100644 index 3cf0bf35d..000000000 --- a/product_replenishment_cost/demo/res_groups.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - diff --git a/product_replenishment_cost/i18n/fr.po b/product_replenishment_cost/i18n/fr.po index 0d81258c1..742113d5f 100644 --- a/product_replenishment_cost/i18n/fr.po +++ b/product_replenishment_cost/i18n/fr.po @@ -1,16 +1,15 @@ -# Translation of OpenERP Server. +# Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_replenishment_cost +# * product_replenishment_cost # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-30 16:52+0000\n" -"PO-Revision-Date: 2014-10-30 16:52+0000\n" +"POT-Creation-Date: 2019-08-09 17:05+0000\n" +"PO-Revision-Date: 2019-08-09 17:05+0000\n" "Last-Translator: <>\n" "Language-Team: \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -22,17 +21,13 @@ msgid "Product" msgstr "Article" #. module: product_replenishment_cost -#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost msgid "Replenishment cost" msgstr "Coût de réapprovisionnement" #. module: product_replenishment_cost -#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost -msgid "" -"The cost that you have to support in order to produce or acquire the goods. " -"Depending on the modules installed, this cost may be computed based on " -"various pieces of information, for example Bills of Materials or latest " -"Purchases. By default, the Replenishment cost is the same as the Cost Price." +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" "Le coût que vous devez prendre en charge pour produire ou acquerir la " "marchandise. Selon les modules installés, le calcul de ce coût peut " diff --git a/product_replenishment_cost/i18n/product_replenishment_cost.pot b/product_replenishment_cost/i18n/product_replenishment_cost.pot index 9bc8184b5..ecea8fb07 100644 --- a/product_replenishment_cost/i18n/product_replenishment_cost.pot +++ b/product_replenishment_cost/i18n/product_replenishment_cost.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -19,12 +19,12 @@ msgid "Product" msgstr "" #. module: product_replenishment_cost -#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost msgid "Replenishment cost" msgstr "" #. module: product_replenishment_cost -#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" diff --git a/product_replenishment_cost/models/__init__.py b/product_replenishment_cost/models/__init__.py index 4859eca20..5c74c8c30 100644 --- a/product_replenishment_cost/models/__init__.py +++ b/product_replenishment_cost/models/__init__.py @@ -1,22 +1 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Alexandre Fayolle, Joel Grand-Guillaume -# Copyright 2012 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - from . import product_product diff --git a/product_replenishment_cost/models/product_product.py b/product_replenishment_cost/models/product_product.py index 27ac12477..add263f0f 100644 --- a/product_replenishment_cost/models/product_product.py +++ b/product_replenishment_cost/models/product_product.py @@ -1,23 +1,8 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Alexandre Fayolle -# Copyright 2012 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright (C) 2012 - Today: Camptocamp SA +# Copyright (C) 2016 - Today: GRAP (http://www.grap.coop) +# @author: Alexandre Fayolle +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from odoo import fields, api from odoo.models import Model @@ -28,13 +13,13 @@ class ProductProduct(Model): _inherit = 'product.product' - @api.one @api.depends('product_tmpl_id.standard_price', 'standard_price') - def _get_replenishment_cost(self): - self.replenishment_cost = self.standard_price + def _compute_replenishment_cost(self): + for product in self: + product.replenishment_cost = product.standard_price replenishment_cost = fields.Float( - string='Replenishment cost', compute='_get_replenishment_cost', + string='Replenishment cost', compute='_compute_replenishment_cost', store=True, digits=dp.get_precision('Product Price'), help="The cost that you have to support in order to produce or " "acquire the goods. Depending on the modules installed, " diff --git a/product_replenishment_cost/readme/ROADMAP.rst b/product_replenishment_cost/readme/ROADMAP.rst new file mode 100644 index 000000000..e9b545d67 --- /dev/null +++ b/product_replenishment_cost/readme/ROADMAP.rst @@ -0,0 +1,5 @@ +Due to framework limitation, the field ``replenishment_cost`` is not +company dependent, while ``standard_price`` is. (in the recent Odoo versions) + +It is due to the current impossibility to make working computed field between +two field ``company_dependent=True``. diff --git a/product_replenishment_cost/static/description/index.html b/product_replenishment_cost/static/description/index.html index 36d380327..d447fe7a1 100644 --- a/product_replenishment_cost/static/description/index.html +++ b/product_replenishment_cost/static/description/index.html @@ -4,7 +4,7 @@ -Replenishment Cost +Product Replenishment Cost -
-

Replenishment Cost

+
+

Product Replenishment Cost

-

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

+

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

Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of “Cost price” field, but using the product_cost_incl_bom module, it will return the costing from the bom.

As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product.

All OCA modules to compute margins are based on it, so you’ll be able to use them in your own way.

Table of contents

+
+

Known issues / Roadmap

+

Due to framework limitation, the field replenishment_cost is not +company dependent, while standard_price is. (in the recent Odoo versions)

+

It is due to the current impossibility to make working computed field between +two field company_dependent=True.

+
-

Bug Tracker

+

Bug Tracker

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

+feedback.

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
  • GRAP
-

Contributors

+

Contributors

-

Maintainers

+

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/margin-analysis project on GitHub.

+

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_replenishment_cost/test/cost_price_update.yml b/product_replenishment_cost/test/cost_price_update.yml deleted file mode 100644 index cf1405cac..000000000 --- a/product_replenishment_cost/test/cost_price_update.yml +++ /dev/null @@ -1,52 +0,0 @@ -- - Test the following with user admin -- - !context - uid: 'base.user_root' -- - Create a wine A product -- - !record {model: product.product, id: product_product_a}: - categ_id: product.product_category_1 - name: Wine A01 - uom_id: product.product_uom_unit - uom_po_id: product.product_uom_unit - company_id: 0 - standard_price: 50.0 - list_price: 75.0 -- - Test the prices are updated correctly -- - !python {model: product.product}: | - product = self.browse(ref('product_product_a')) - assert product.standard_price == 50.0, "01 The standard_price has not been recorded correctly" - assert product.replenishment_cost == 50.0, "01 The replenishment_cost has not been recorded correctly" -- - Modify product A set new prices -- - !python {model: product.product}: | - product = self.browse(ref('product_product_a')) - product.write({'standard_price':70}) -- - Test price are update accordingly -- - !python {model: product.product}: | - product = self.browse(ref('product_product_a')) - assert product.standard_price == 70.0, "02 The standard_price has not been recorded correctly" - assert product.replenishment_cost == 70.0, "02 The replenishment_cost has not been recorded correctly" -- - Modify product A using the template object and set new prices -- - !python {model: product.product}: | - product = self.browse(ref('product_product_a')) - prod_tmpl_id = product.product_tmpl_id.id - prod_template = self.env['product.template'].browse(prod_tmpl_id) - prod_template.write({'standard_price':100}) -- - Test replenishment_cost is update accordingly -- - !python {model: product.product}: | - product = self.browse(ref('product_product_a')) - assert product.standard_price == 100.0, "03 The standard_price has not been recorded correctly" - assert product.replenishment_cost == 100.0, "03 The replenishment_cost has not been recorded correctly" - diff --git a/product_replenishment_cost/tests/__init__.py b/product_replenishment_cost/tests/__init__.py new file mode 100644 index 000000000..d9b96c4fa --- /dev/null +++ b/product_replenishment_cost/tests/__init__.py @@ -0,0 +1 @@ +from . import test_module diff --git a/product_replenishment_cost/tests/test_module.py b/product_replenishment_cost/tests/test_module.py new file mode 100644 index 000000000..a0ba89648 --- /dev/null +++ b/product_replenishment_cost/tests/test_module.py @@ -0,0 +1,30 @@ +# 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 openerp.tests.common import TransactionCase + + +class TestModule(TransactionCase): + + def setUp(self): + super(TestModule, self).setUp() + self.ProductProduct = self.env['product.product'] + + # Test Section + def test_create_or_update(self): + # Test compute on creation + product = self.ProductProduct.create({ + 'name': 'Wine A01', + 'standard_price': 50, + }) + self.assertEqual(product.replenishment_cost, 50.0) + + # Test Update + product.standard_price = 70.0 + + self.assertEqual(product.replenishment_cost, 70.0) + + # Test Update via template + product.product_tmpl_id.standard_price = 100.0 + self.assertEqual(product.replenishment_cost, 100.0) From dffd55091508662e5efb28dea8fbca143ffb66c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Wed, 18 Sep 2019 17:07:57 +0000 Subject: [PATCH 09/27] Added translation using Weblate (Chinese (Simplified)) --- product_replenishment_cost/i18n/zh_CN.po | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 product_replenishment_cost/i18n/zh_CN.po diff --git a/product_replenishment_cost/i18n/zh_CN.po b/product_replenishment_cost/i18n/zh_CN.po new file mode 100644 index 000000000..81190be73 --- /dev/null +++ b/product_replenishment_cost/i18n/zh_CN.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +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: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: product_replenishment_cost +#: model:ir.model,name:product_replenishment_cost.model_product_product +msgid "Product" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost +msgid "Replenishment cost" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" From e9e1cb667f77c357b26d4eb9e862e863ddeee14e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Wed, 18 Sep 2019 17:08:07 +0000 Subject: [PATCH 10/27] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (3 of 3 strings) Translation: margin-analysis-12.0/margin-analysis-12.0-product_replenishment_cost Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-12-0/margin-analysis-12-0-product_replenishment_cost/zh_CN/ --- product_replenishment_cost/i18n/es.po | 4 ++-- product_replenishment_cost/i18n/fr.po | 7 ++++++- product_replenishment_cost/i18n/nl.po | 4 ++-- product_replenishment_cost/i18n/zh_CN.po | 10 ++++++---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/product_replenishment_cost/i18n/es.po b/product_replenishment_cost/i18n/es.po index aa239ac1b..b72eda4a6 100644 --- a/product_replenishment_cost/i18n/es.po +++ b/product_replenishment_cost/i18n/es.po @@ -24,12 +24,12 @@ msgid "Product" msgstr "Producto" #. module: product_replenishment_cost -#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost msgid "Replenishment cost" msgstr "Coste de reposición" #. module: product_replenishment_cost -#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost msgid "" "The cost that you have to support in order to produce or acquire the goods. " "Depending on the modules installed, this cost may be computed based on " diff --git a/product_replenishment_cost/i18n/fr.po b/product_replenishment_cost/i18n/fr.po index 742113d5f..532ec25cd 100644 --- a/product_replenishment_cost/i18n/fr.po +++ b/product_replenishment_cost/i18n/fr.po @@ -10,6 +10,7 @@ msgstr "" "PO-Revision-Date: 2019-08-09 17:05+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -27,7 +28,11 @@ msgstr "Coût de réapprovisionnement" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" "Le coût que vous devez prendre en charge pour produire ou acquerir la " "marchandise. Selon les modules installés, le calcul de ce coût peut " diff --git a/product_replenishment_cost/i18n/nl.po b/product_replenishment_cost/i18n/nl.po index 633c7dff3..ab2cdb9a9 100644 --- a/product_replenishment_cost/i18n/nl.po +++ b/product_replenishment_cost/i18n/nl.po @@ -24,12 +24,12 @@ msgid "Product" msgstr "Product" #. module: product_replenishment_cost -#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost msgid "Replenishment cost" msgstr "Kostprijs (incl. kosten)" #. module: product_replenishment_cost -#: model:ir.model.fields,help:product_replenishment_cost.field_product_product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost msgid "" "The cost that you have to support in order to produce or acquire the goods. " "Depending on the modules installed, this cost may be computed based on " diff --git a/product_replenishment_cost/i18n/zh_CN.po b/product_replenishment_cost/i18n/zh_CN.po index 81190be73..b3bf9d2ea 100644 --- a/product_replenishment_cost/i18n/zh_CN.po +++ b/product_replenishment_cost/i18n/zh_CN.po @@ -6,25 +6,27 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2019-09-18 19:24+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\n" "Language-Team: none\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.8\n" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product msgid "Product" -msgstr "" +msgstr "产品" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost msgid "Replenishment cost" -msgstr "" +msgstr "补货成本" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." -msgstr "" +msgstr "为生产或获得货物而必须支付的费用。根据安装的模块,此成本可根据各种信息(例如物料清单或最新采购)计算。默认情况下,补货成本与成本价相同。" From 6590a5ef7750542525619e6bb0d2071158bb1911 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Sun, 14 Mar 2021 21:38:31 +0000 Subject: [PATCH 11/27] Added translation using Weblate (Portuguese (Brazil)) --- product_replenishment_cost/i18n/pt_BR.po | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 product_replenishment_cost/i18n/pt_BR.po diff --git a/product_replenishment_cost/i18n/pt_BR.po b/product_replenishment_cost/i18n/pt_BR.po new file mode 100644 index 000000000..73047fd43 --- /dev/null +++ b/product_replenishment_cost/i18n/pt_BR.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +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_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" + +#. module: product_replenishment_cost +#: model:ir.model,name:product_replenishment_cost.model_product_product +msgid "Product" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost +msgid "Replenishment cost" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" From 5d5cdd7a353dc289016e4e593f9ccbab211b181c Mon Sep 17 00:00:00 2001 From: alvarorib Date: Mon, 12 Apr 2021 13:58:57 +0000 Subject: [PATCH 12/27] Added translation using Weblate (Portuguese) --- product_replenishment_cost/i18n/pt.po | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 product_replenishment_cost/i18n/pt.po diff --git a/product_replenishment_cost/i18n/pt.po b/product_replenishment_cost/i18n/pt.po new file mode 100644 index 000000000..7e6649e8c --- /dev/null +++ b/product_replenishment_cost/i18n/pt.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +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_replenishment_cost +#: model:ir.model,name:product_replenishment_cost.model_product_product +msgid "Product" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost +msgid "Replenishment cost" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" From a1a69455812dad9ac61e92024a0c09247c2ed366 Mon Sep 17 00:00:00 2001 From: alvarorib Date: Mon, 12 Apr 2021 13:59:50 +0000 Subject: [PATCH 13/27] Translated using Weblate (Portuguese) Currently translated at 100.0% (3 of 3 strings) Translation: margin-analysis-12.0/margin-analysis-12.0-product_replenishment_cost Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-12-0/margin-analysis-12-0-product_replenishment_cost/pt/ --- product_replenishment_cost/i18n/pt.po | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/product_replenishment_cost/i18n/pt.po b/product_replenishment_cost/i18n/pt.po index 7e6649e8c..33e9b0f4f 100644 --- a/product_replenishment_cost/i18n/pt.po +++ b/product_replenishment_cost/i18n/pt.po @@ -6,25 +6,31 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-04-12 16:46+0000\n" +"Last-Translator: alvarorib \n" "Language-Team: none\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product msgid "Product" -msgstr "" +msgstr "Produto" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost msgid "Replenishment cost" -msgstr "" +msgstr "Custo de Reposição" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" +"O custo que deverá suportar para produzir ou adquirir os bens. Dependendo " +"dos módulos instalados, esse custo pode ser calculado com base em várias " +"informações, por exemplo, listas de materiais ou compras mais recentes. Por " +"pré definição, o custo de Reposição é igual ao Preço de custo." From c4a470a2bcc2b206d60d48ca6f6dce0ff3316f82 Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 28 Dec 2022 18:46:12 +0000 Subject: [PATCH 14/27] Added translation using Weblate (Italian) --- product_replenishment_cost/i18n/it.po | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 product_replenishment_cost/i18n/it.po diff --git a/product_replenishment_cost/i18n/it.po b/product_replenishment_cost/i18n/it.po new file mode 100644 index 000000000..8f786cd7a --- /dev/null +++ b/product_replenishment_cost/i18n/it.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_replenishment_cost +# +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: 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" + +#. module: product_replenishment_cost +#: model:ir.model,name:product_replenishment_cost.model_product_product +msgid "Product" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost +msgid "Replenishment cost" +msgstr "" + +#. module: product_replenishment_cost +#: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost +msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" From 599c9cbe4daf652cf4676fea50cbe5c769fe699c Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 28 Dec 2022 18:46:49 +0000 Subject: [PATCH 15/27] Translated using Weblate (Italian) Currently translated at 100.0% (3 of 3 strings) Translation: margin-analysis-12.0/margin-analysis-12.0-product_replenishment_cost Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-12-0/margin-analysis-12-0-product_replenishment_cost/it/ --- product_replenishment_cost/i18n/it.po | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/product_replenishment_cost/i18n/it.po b/product_replenishment_cost/i18n/it.po index 8f786cd7a..c5e6ddf6f 100644 --- a/product_replenishment_cost/i18n/it.po +++ b/product_replenishment_cost/i18n/it.po @@ -6,25 +6,31 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-12-28 21:45+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product msgid "Product" -msgstr "" +msgstr "Prodotto" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost msgid "Replenishment cost" -msgstr "" +msgstr "Costo rifornimento" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" +"Il costo che si sostiene per produrre o acquistare il bene. In funzione dei " +"moduli installati, questo costo può essere calcolato in base a varie " +"informazioni, per esempio distinte base o gli ultimi acquisti. Il costo di " +"rifornimento predefinito è lo stesso del prezzo di costo." From 40f02d993d8322291bd1bf29eb599257dc3e9e43 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Tue, 3 Jan 2023 12:19:00 +0100 Subject: [PATCH 16/27] [REF] apply pre-commit fixes --- product_replenishment_cost/__manifest__.py | 2 +- product_replenishment_cost/readme/CONTRIBUTORS.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/product_replenishment_cost/__manifest__.py b/product_replenishment_cost/__manifest__.py index ee190637e..50b30e5d0 100644 --- a/product_replenishment_cost/__manifest__.py +++ b/product_replenishment_cost/__manifest__.py @@ -6,7 +6,7 @@ 'name': 'Product Replenishment Cost', 'summary': "Provides an overridable method on product which compute" "the Replenishment cost of a product", - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', 'author': "Camptocamp,GRAP,Odoo Community Association (OCA)", 'license': 'AGPL-3', 'category': 'Products', diff --git a/product_replenishment_cost/readme/CONTRIBUTORS.rst b/product_replenishment_cost/readme/CONTRIBUTORS.rst index f863ad159..1bf74e807 100644 --- a/product_replenishment_cost/readme/CONTRIBUTORS.rst +++ b/product_replenishment_cost/readme/CONTRIBUTORS.rst @@ -2,4 +2,4 @@ * Yannick Vaucher * Joël Grand-Guillaume * Sylvain Le Gal (https://twitter.com/legalsylvain) -* Marc Poch Mallandrich \ No newline at end of file +* Marc Poch Mallandrich From 5bb7fac7528be2925f9f6b3a834d64840f973ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro?= Date: Mon, 5 Jun 2023 12:23:09 +0200 Subject: [PATCH 17/27] [IMP] product_replenishment_cost: pre-commit stuff --- product_replenishment_cost/__manifest__.py | 26 +++++++++---------- .../models/product_product.py | 23 +++++++++------- .../readme/DESCRIPTION.rst | 2 +- .../tests/test_module.py | 13 +++++----- .../views/product_view.xml | 9 ++++--- 5 files changed, 40 insertions(+), 33 deletions(-) diff --git a/product_replenishment_cost/__manifest__.py b/product_replenishment_cost/__manifest__.py index 50b30e5d0..1ea848c6a 100644 --- a/product_replenishment_cost/__manifest__.py +++ b/product_replenishment_cost/__manifest__.py @@ -3,19 +3,19 @@ # @author: Alexandre Fayolle # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Product Replenishment Cost', - 'summary': "Provides an overridable method on product which compute" - "the Replenishment cost of a product", - 'version': '12.0.1.0.1', - 'author': "Camptocamp,GRAP,Odoo Community Association (OCA)", - 'license': 'AGPL-3', - 'category': 'Products', - 'depends': [ - 'product', + "name": "Product Replenishment Cost", + "summary": "Provides an overridable method on product which compute" + "the Replenishment cost of a product", + "version": "12.0.1.0.1", + "author": "Camptocamp,GRAP,Odoo Community Association (OCA)", + "license": "AGPL-3", + "category": "Products", + "depends": [ + "product", ], - 'website': 'https://github.com/OCA/margin-analysis', - 'data': [ - 'views/product_view.xml', + "website": "https://github.com/OCA/margin-analysis", + "data": [ + "views/product_view.xml", ], - 'installable': True, + "installable": True, } diff --git a/product_replenishment_cost/models/product_product.py b/product_replenishment_cost/models/product_product.py index add263f0f..93c920e55 100644 --- a/product_replenishment_cost/models/product_product.py +++ b/product_replenishment_cost/models/product_product.py @@ -4,26 +4,29 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, api +from odoo import api, fields from odoo.models import Model import odoo.addons.decimal_precision as dp class ProductProduct(Model): - _inherit = 'product.product' + _inherit = "product.product" - @api.depends('product_tmpl_id.standard_price', 'standard_price') + @api.depends("product_tmpl_id.standard_price", "standard_price") def _compute_replenishment_cost(self): for product in self: product.replenishment_cost = product.standard_price replenishment_cost = fields.Float( - string='Replenishment cost', compute='_compute_replenishment_cost', - store=True, digits=dp.get_precision('Product Price'), + string="Replenishment cost", + compute="_compute_replenishment_cost", + store=True, + digits=dp.get_precision("Product Price"), help="The cost that you have to support in order to produce or " - "acquire the goods. Depending on the modules installed, " - "this cost may be computed based on various pieces of " - "information, for example Bills of Materials or latest " - "Purchases. By default, the Replenishment cost is the same " - "as the Cost Price.") + "acquire the goods. Depending on the modules installed, " + "this cost may be computed based on various pieces of " + "information, for example Bills of Materials or latest " + "Purchases. By default, the Replenishment cost is the same " + "as the Cost Price.", + ) diff --git a/product_replenishment_cost/readme/DESCRIPTION.rst b/product_replenishment_cost/readme/DESCRIPTION.rst index fc3f34f70..a8df8c606 100644 --- a/product_replenishment_cost/readme/DESCRIPTION.rst +++ b/product_replenishment_cost/readme/DESCRIPTION.rst @@ -2,4 +2,4 @@ Provides an overridable method on product which compute the Replenishment cost o As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product. -All OCA modules to compute margins are based on it, so you'll be able to use them in your own way. \ No newline at end of file +All OCA modules to compute margins are based on it, so you'll be able to use them in your own way. diff --git a/product_replenishment_cost/tests/test_module.py b/product_replenishment_cost/tests/test_module.py index a0ba89648..addecae34 100644 --- a/product_replenishment_cost/tests/test_module.py +++ b/product_replenishment_cost/tests/test_module.py @@ -6,18 +6,19 @@ class TestModule(TransactionCase): - def setUp(self): super(TestModule, self).setUp() - self.ProductProduct = self.env['product.product'] + self.ProductProduct = self.env["product.product"] # Test Section def test_create_or_update(self): # Test compute on creation - product = self.ProductProduct.create({ - 'name': 'Wine A01', - 'standard_price': 50, - }) + product = self.ProductProduct.create( + { + "name": "Wine A01", + "standard_price": 50, + } + ) self.assertEqual(product.replenishment_cost, 50.0) # Test Update diff --git a/product_replenishment_cost/views/product_view.xml b/product_replenishment_cost/views/product_view.xml index 2e6aaa510..f803787f9 100644 --- a/product_replenishment_cost/views/product_view.xml +++ b/product_replenishment_cost/views/product_view.xml @@ -1,12 +1,15 @@ - + product.product - - + + From 341a4cdb93de1e7455d5eee9ee4434917d06e92e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro?= Date: Mon, 5 Jun 2023 12:59:19 +0200 Subject: [PATCH 18/27] [MIG] product_replenishment_cost: Migration to 16.0 --- product_replenishment_cost/__manifest__.py | 2 +- product_replenishment_cost/models/product_product.py | 4 +--- product_replenishment_cost/tests/test_module.py | 9 +++++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/product_replenishment_cost/__manifest__.py b/product_replenishment_cost/__manifest__.py index 1ea848c6a..40166484e 100644 --- a/product_replenishment_cost/__manifest__.py +++ b/product_replenishment_cost/__manifest__.py @@ -6,7 +6,7 @@ "name": "Product Replenishment Cost", "summary": "Provides an overridable method on product which compute" "the Replenishment cost of a product", - "version": "12.0.1.0.1", + "version": "16.0.1.0.0", "author": "Camptocamp,GRAP,Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Products", diff --git a/product_replenishment_cost/models/product_product.py b/product_replenishment_cost/models/product_product.py index 93c920e55..78007a708 100644 --- a/product_replenishment_cost/models/product_product.py +++ b/product_replenishment_cost/models/product_product.py @@ -7,8 +7,6 @@ from odoo import api, fields from odoo.models import Model -import odoo.addons.decimal_precision as dp - class ProductProduct(Model): _inherit = "product.product" @@ -22,7 +20,7 @@ def _compute_replenishment_cost(self): string="Replenishment cost", compute="_compute_replenishment_cost", store=True, - digits=dp.get_precision("Product Price"), + digits="Product Price", help="The cost that you have to support in order to produce or " "acquire the goods. Depending on the modules installed, " "this cost may be computed based on various pieces of " diff --git a/product_replenishment_cost/tests/test_module.py b/product_replenishment_cost/tests/test_module.py index addecae34..4ecbc616e 100644 --- a/product_replenishment_cost/tests/test_module.py +++ b/product_replenishment_cost/tests/test_module.py @@ -2,13 +2,14 @@ # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests.common import TransactionCase +from odoo.tests.common import TransactionCase class TestModule(TransactionCase): - def setUp(self): - super(TestModule, self).setUp() - self.ProductProduct = self.env["product.product"] + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.ProductProduct = cls.env["product.product"] # Test Section def test_create_or_update(self): From 3a287e40424ed241f1beb6fa6f55a2bf1d03a668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro?= Date: Tue, 6 Jun 2023 13:24:50 +0200 Subject: [PATCH 19/27] [UPD] DESCRIPTION.rst --- product_replenishment_cost/readme/DESCRIPTION.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/product_replenishment_cost/readme/DESCRIPTION.rst b/product_replenishment_cost/readme/DESCRIPTION.rst index a8df8c606..87fe0c8eb 100644 --- a/product_replenishment_cost/readme/DESCRIPTION.rst +++ b/product_replenishment_cost/readme/DESCRIPTION.rst @@ -1,5 +1,9 @@ Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of "Cost price" field, but using the product_cost_incl_bom module, it will return the costing from the bom. +"Cost price" is the cost assigned for each product in the warehouse and the "Replenishment cost" is the cost it would cost to buy a new product. They are different costs because the cost price depends on your valuation method and the operations you have performed while the replenishment cost is determined by the current market conditions. + +For example: The price of the product in the supplier's catalog is €15/piece. Therefore, if I want to buy a new unit, my replenishment cost would be €15. But if my stock comes from having bought it in a special offer that allowed me to buy it for €10, then my cost price is €10/piece. + As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product. All OCA modules to compute margins are based on it, so you'll be able to use them in your own way. From 2bf1c9a17d1a140cd849b274b746eb87b25e9f77 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 25 Jul 2023 11:56:51 +0000 Subject: [PATCH 20/27] [UPD] Update product_replenishment_cost.pot --- product_replenishment_cost/README.rst | 14 +++++++++----- .../i18n/product_replenishment_cost.pot | 15 +++++++++------ .../static/description/index.html | 8 +++++--- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/product_replenishment_cost/README.rst b/product_replenishment_cost/README.rst index c1631c71a..718f7774e 100644 --- a/product_replenishment_cost/README.rst +++ b/product_replenishment_cost/README.rst @@ -14,19 +14,23 @@ Product Replenishment Cost :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/12.0/product_replenishment_cost + :target: https://github.com/OCA/margin-analysis/tree/16.0/product_replenishment_cost :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-12-0/margin-analysis-12-0-product_replenishment_cost + :target: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-product_replenishment_cost :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/132/12.0 + :target: https://runbot.odoo-community.org/runbot/132/16.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of "Cost price" field, but using the product_cost_incl_bom module, it will return the costing from the bom. +"Cost price" is the cost assigned for each product in the warehouse and the "Replenishment cost" is the cost it would cost to buy a new product. They are different costs because the cost price depends on your valuation method and the operations you have performed while the replenishment cost is determined by the current market conditions. + +For example: The price of the product in the supplier's catalog is €15/piece. Therefore, if I want to buy a new unit, my replenishment cost would be €15. But if my stock comes from having bought it in a special offer that allowed me to buy it for €10, then my cost price is €10/piece. + As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product. All OCA modules to compute margins are based on it, so you'll be able to use them in your own way. @@ -51,7 +55,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -86,6 +90,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/margin-analysis `_ project on GitHub. +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_replenishment_cost/i18n/product_replenishment_cost.pot b/product_replenishment_cost/i18n/product_replenishment_cost.pot index ecea8fb07..5ba675bf0 100644 --- a/product_replenishment_cost/i18n/product_replenishment_cost.pot +++ b/product_replenishment_cost/i18n/product_replenishment_cost.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_replenishment_cost +# * product_replenishment_cost # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -15,7 +15,7 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" +msgid "Product Variant" msgstr "" #. module: product_replenishment_cost @@ -25,6 +25,9 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" - diff --git a/product_replenishment_cost/static/description/index.html b/product_replenishment_cost/static/description/index.html index d447fe7a1..4d7b538a8 100644 --- a/product_replenishment_cost/static/description/index.html +++ b/product_replenishment_cost/static/description/index.html @@ -367,8 +367,10 @@

Product Replenishment Cost

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of “Cost price” field, but using the product_cost_incl_bom module, it will return the costing from the bom.

+

“Cost price” is the cost assigned for each product in the warehouse and the “Replenishment cost” is the cost it would cost to buy a new product. They are different costs because the cost price depends on your valuation method and the operations you have performed while the replenishment cost is determined by the current market conditions.

+

For example: The price of the product in the supplier’s catalog is €15/piece. Therefore, if I want to buy a new unit, my replenishment cost would be €15. But if my stock comes from having bought it in a special offer that allowed me to buy it for €10, then my cost price is €10/piece.

As it is a generic module, you can also setup your own way of computing the replenishment_cost for your product.

All OCA modules to compute margins are based on it, so you’ll be able to use them in your own way.

Table of contents

@@ -396,7 +398,7 @@

Bug Tracker

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

+feedback.

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

@@ -425,7 +427,7 @@

Maintainers

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/margin-analysis project on GitHub.

+

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.

From 96a37ff533891abd228e7079c566d12505365a92 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 25 Jul 2023 15:09:38 +0000 Subject: [PATCH 21/27] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: margin-analysis-16.0/margin-analysis-16.0-product_replenishment_cost Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-product_replenishment_cost/ --- product_replenishment_cost/i18n/es.po | 7 +++++-- product_replenishment_cost/i18n/fr.po | 7 +++++-- product_replenishment_cost/i18n/it.po | 15 +++++++++++---- product_replenishment_cost/i18n/nl.po | 7 +++++-- product_replenishment_cost/i18n/pt.po | 15 +++++++++++---- product_replenishment_cost/i18n/pt_BR.po | 10 +++++++--- product_replenishment_cost/i18n/zh_CN.po | 19 ++++++++++++++----- 7 files changed, 58 insertions(+), 22 deletions(-) diff --git a/product_replenishment_cost/i18n/es.po b/product_replenishment_cost/i18n/es.po index b72eda4a6..06a36907b 100644 --- a/product_replenishment_cost/i18n/es.po +++ b/product_replenishment_cost/i18n/es.po @@ -20,8 +20,8 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" -msgstr "Producto" +msgid "Product Variant" +msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost @@ -41,3 +41,6 @@ msgstr "" "función de diversos datos, por ejemplo, listas de materiales o compras más " "recientes. De forma predeterminada, el coste de reposición es el mismo que " "el precio de coste." + +#~ msgid "Product" +#~ msgstr "Producto" diff --git a/product_replenishment_cost/i18n/fr.po b/product_replenishment_cost/i18n/fr.po index 532ec25cd..0bc6bb599 100644 --- a/product_replenishment_cost/i18n/fr.po +++ b/product_replenishment_cost/i18n/fr.po @@ -18,8 +18,8 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" -msgstr "Article" +msgid "Product Variant" +msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost @@ -39,3 +39,6 @@ msgstr "" "s'appuyer sur diverses informations : par exemple les nomenclatures ou les " "derniers achats. Par défaut, le coût de réapprovisionnement est le même que " "le Prix de revient." + +#~ msgid "Product" +#~ msgstr "Article" diff --git a/product_replenishment_cost/i18n/it.po b/product_replenishment_cost/i18n/it.po index c5e6ddf6f..426ece26a 100644 --- a/product_replenishment_cost/i18n/it.po +++ b/product_replenishment_cost/i18n/it.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_replenishment_cost +# * product_replenishment_cost # msgid "" msgstr "" @@ -18,8 +18,8 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" -msgstr "Prodotto" +msgid "Product Variant" +msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost @@ -28,9 +28,16 @@ msgstr "Costo rifornimento" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" "Il costo che si sostiene per produrre o acquistare il bene. In funzione dei " "moduli installati, questo costo può essere calcolato in base a varie " "informazioni, per esempio distinte base o gli ultimi acquisti. Il costo di " "rifornimento predefinito è lo stesso del prezzo di costo." + +#~ msgid "Product" +#~ msgstr "Prodotto" diff --git a/product_replenishment_cost/i18n/nl.po b/product_replenishment_cost/i18n/nl.po index ab2cdb9a9..91f1a5384 100644 --- a/product_replenishment_cost/i18n/nl.po +++ b/product_replenishment_cost/i18n/nl.po @@ -20,8 +20,8 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" -msgstr "Product" +msgid "Product Variant" +msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost @@ -36,3 +36,6 @@ msgid "" "various pieces of information, for example Bills of Materials or latest " "Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "Dit is de kostprijs, inclusief eventuele kosten." + +#~ msgid "Product" +#~ msgstr "Product" diff --git a/product_replenishment_cost/i18n/pt.po b/product_replenishment_cost/i18n/pt.po index 33e9b0f4f..5eda83d72 100644 --- a/product_replenishment_cost/i18n/pt.po +++ b/product_replenishment_cost/i18n/pt.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_replenishment_cost +# * product_replenishment_cost # msgid "" msgstr "" @@ -18,8 +18,8 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" -msgstr "Produto" +msgid "Product Variant" +msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost @@ -28,9 +28,16 @@ msgstr "Custo de Reposição" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" "O custo que deverá suportar para produzir ou adquirir os bens. Dependendo " "dos módulos instalados, esse custo pode ser calculado com base em várias " "informações, por exemplo, listas de materiais ou compras mais recentes. Por " "pré definição, o custo de Reposição é igual ao Preço de custo." + +#~ msgid "Product" +#~ msgstr "Produto" diff --git a/product_replenishment_cost/i18n/pt_BR.po b/product_replenishment_cost/i18n/pt_BR.po index 73047fd43..e3d9dc7ea 100644 --- a/product_replenishment_cost/i18n/pt_BR.po +++ b/product_replenishment_cost/i18n/pt_BR.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_replenishment_cost +# * product_replenishment_cost # msgid "" msgstr "" @@ -16,7 +16,7 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" +msgid "Product Variant" msgstr "" #. module: product_replenishment_cost @@ -26,5 +26,9 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." msgstr "" diff --git a/product_replenishment_cost/i18n/zh_CN.po b/product_replenishment_cost/i18n/zh_CN.po index b3bf9d2ea..ba50a5379 100644 --- a/product_replenishment_cost/i18n/zh_CN.po +++ b/product_replenishment_cost/i18n/zh_CN.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * product_replenishment_cost +# * product_replenishment_cost # msgid "" msgstr "" @@ -18,8 +18,8 @@ msgstr "" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product -msgid "Product" -msgstr "产品" +msgid "Product Variant" +msgstr "" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost @@ -28,5 +28,14 @@ msgstr "补货成本" #. module: product_replenishment_cost #: model:ir.model.fields,help:product_replenishment_cost.field_product_product__replenishment_cost -msgid "The cost that you have to support in order to produce or acquire the goods. Depending on the modules installed, this cost may be computed based on various pieces of information, for example Bills of Materials or latest Purchases. By default, the Replenishment cost is the same as the Cost Price." -msgstr "为生产或获得货物而必须支付的费用。根据安装的模块,此成本可根据各种信息(例如物料清单或最新采购)计算。默认情况下,补货成本与成本价相同。" +msgid "" +"The cost that you have to support in order to produce or acquire the goods. " +"Depending on the modules installed, this cost may be computed based on " +"various pieces of information, for example Bills of Materials or latest " +"Purchases. By default, the Replenishment cost is the same as the Cost Price." +msgstr "" +"为生产或获得货物而必须支付的费用。根据安装的模块,此成本可根据各种信息(例如" +"物料清单或最新采购)计算。默认情况下,补货成本与成本价相同。" + +#~ msgid "Product" +#~ msgstr "产品" From 2cc557cbd06adfdf97e16f97d41d3234a6c85cbf Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Mon, 21 Aug 2023 15:21:30 +0000 Subject: [PATCH 22/27] Translated using Weblate (Spanish) Currently translated at 100.0% (3 of 3 strings) Translation: margin-analysis-16.0/margin-analysis-16.0-product_replenishment_cost Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-product_replenishment_cost/es/ --- product_replenishment_cost/README.rst | 15 +++++--- product_replenishment_cost/i18n/es.po | 11 +++--- .../static/description/index.html | 38 ++++++++++--------- 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/product_replenishment_cost/README.rst b/product_replenishment_cost/README.rst index 718f7774e..8e70c8358 100644 --- a/product_replenishment_cost/README.rst +++ b/product_replenishment_cost/README.rst @@ -2,10 +2,13 @@ Product Replenishment Cost ========================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:11c36c6abdc64d2df703b1e6a520296b6566111a90c1782d8093576c121677a1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Product Replenishment Cost .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-product_replenishment_cost :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/132/16.0 - :alt: Try me on Runbot +.. |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=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| Provides an overridable method on product which compute the Replenishment cost of a product. By default it just returns the value of "Cost price" field, but using the product_cost_incl_bom module, it will return the costing from the bom. @@ -54,7 +57,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed +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. diff --git a/product_replenishment_cost/i18n/es.po b/product_replenishment_cost/i18n/es.po index 06a36907b..2cda61c34 100644 --- a/product_replenishment_cost/i18n/es.po +++ b/product_replenishment_cost/i18n/es.po @@ -9,19 +9,20 @@ msgstr "" "Project-Id-Version: OpenERP Server 7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-10-30 16:52+0000\n" -"PO-Revision-Date: 2014-10-30 16:52+0000\n" -"Last-Translator: <>\n" +"PO-Revision-Date: 2023-09-02 18:17+0000\n" +"Last-Translator: Ivorra78 \n" "Language-Team: \n" -"Language: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: product_replenishment_cost #: model:ir.model,name:product_replenishment_cost.model_product_product msgid "Product Variant" -msgstr "" +msgstr "Variante del producto" #. module: product_replenishment_cost #: model:ir.model.fields,field_description:product_replenishment_cost.field_product_product__replenishment_cost diff --git a/product_replenishment_cost/static/description/index.html b/product_replenishment_cost/static/description/index.html index 4d7b538a8..4493986a6 100644 --- a/product_replenishment_cost/static/description/index.html +++ b/product_replenishment_cost/static/description/index.html @@ -1,20 +1,20 @@ - + - + Product Replenishment Cost