From 73e53b4dc9e4222a9a4ef52fdb5d3a80f7be4834 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Tue, 30 Jan 2018 16:24:58 +0100 Subject: [PATCH 01/13] multicompany_property_stock_account --- .../README.rst | 27 +++++ .../__init__.py | 5 + .../__manifest__.py | 23 ++++ .../models/__init__.py | 6 + .../models/product.py | 89 ++++++++++++++ .../models/product_category.py | 114 ++++++++++++++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../tests/__init__.py | 5 + .../tests/test_multicompany.py | 10 ++ .../views/product.xml | 13 ++ .../views/product_category.xml | 26 ++++ .../views/res_company_view.xml | 4 + 12 files changed, 322 insertions(+) create mode 100644 multicompany_property_stock_account/README.rst create mode 100644 multicompany_property_stock_account/__init__.py create mode 100644 multicompany_property_stock_account/__manifest__.py create mode 100644 multicompany_property_stock_account/models/__init__.py create mode 100644 multicompany_property_stock_account/models/product.py create mode 100644 multicompany_property_stock_account/models/product_category.py create mode 100644 multicompany_property_stock_account/static/description/icon.png create mode 100644 multicompany_property_stock_account/tests/__init__.py create mode 100644 multicompany_property_stock_account/tests/test_multicompany.py create mode 100644 multicompany_property_stock_account/views/product.xml create mode 100644 multicompany_property_stock_account/views/product_category.xml create mode 100644 multicompany_property_stock_account/views/res_company_view.xml diff --git a/multicompany_property_stock_account/README.rst b/multicompany_property_stock_account/README.rst new file mode 100644 index 00000000..9b35d83e --- /dev/null +++ b/multicompany_property_stock_account/README.rst @@ -0,0 +1,27 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-blue.png + :target: https://www.gnu.org/licenses/lgpl + :alt: License: LGPL-3 + +=================================== +Multicompany Property Stock Account +=================================== + +This module is part of a set of modules that are intended to make sure that +the property fields are consistent in a multi-company environment. + +Installation +============ + +To install this module, simply follow the standard install process. + +Credits +======= + +Contributors +------------ + +* Enric Tobella +* Jordi Ballester +* Miquel Raïch + +Do not contact contributors directly about support or help with technical issues. diff --git a/multicompany_property_stock_account/__init__.py b/multicompany_property_stock_account/__init__.py new file mode 100644 index 00000000..56b694d7 --- /dev/null +++ b/multicompany_property_stock_account/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from . import models diff --git a/multicompany_property_stock_account/__manifest__.py b/multicompany_property_stock_account/__manifest__.py new file mode 100644 index 00000000..9ffcc1c1 --- /dev/null +++ b/multicompany_property_stock_account/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +{ + 'name': 'Multi Company Stock Account', + 'version': '11.0.1.0.0', + 'summary': 'Stock Account Company Properties', + 'author': 'Creu Blanca, Eficent, Odoo Community Association (OCA)', + 'sequence': 30, + 'license': 'LGPL-3', + 'website': 'http://www.eficent.com', + 'depends': ['multicompany_property_account', + 'multicompany_property_stock'], + 'data': [ + 'views/product.xml', + 'views/product_category.xml', + 'views/res_company_view.xml' + ], + 'installable': True, + 'application': False, + 'auto_install': True, +} diff --git a/multicompany_property_stock_account/models/__init__.py b/multicompany_property_stock_account/models/__init__.py new file mode 100644 index 00000000..c0efd643 --- /dev/null +++ b/multicompany_property_stock_account/models/__init__.py @@ -0,0 +1,6 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from . import product_category +from . import product diff --git a/multicompany_property_stock_account/models/product.py b/multicompany_property_stock_account/models/product.py new file mode 100644 index 00000000..56744ef6 --- /dev/null +++ b/multicompany_property_stock_account/models/product.py @@ -0,0 +1,89 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import models, api, fields + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + property_valuation = fields.Selection(readonly=True) + property_cost_method = fields.Selection(readonly=True) + property_stock_account_input = fields.Many2one(readonly=True) + property_stock_account_output = fields.Many2one(readonly=True) + + +class ProductProperty(models.TransientModel): + _inherit = 'product.property' + + property_valuation = fields.Selection([ + ('manual_periodic', 'Periodic (manual)'), + ('real_time', 'Perpetual (automated)')], string='Inventory Valuation', + compute='_compute_property_fields', + readonly=False, + help="If perpetual valuation is enabled for a product, " + "the system will automatically create journal entries " + "corresponding to stock moves, with product price " + "as specified by the 'Costing Method'" + "The inventory variation account set on the product " + "category will represent the current inventory value, " + "and the stock input and stock output account will " + "hold the counterpart moves for incoming and outgoing products.") + + property_cost_method = fields.Selection([ + ('standard', 'Standard Price'), + ('average', 'Average Price'), + ('real', 'Real Price')], string='Costing Method', + compute='_compute_property_fields', + readonly=False, + help="""Standard Price: The cost price is manually updated + at the end of a specific period (usually once a year). + Average Price: The cost price is recomputed at each incoming shipment + and used for the product valuation. Real Price: The cost price + displayed is the price of the last outgoing product (will be use in + case of inventory loss for example).""") + property_stock_account_input = fields.Many2one( + 'account.account', 'Stock Input Account', + domain=[('deprecated', '=', False)], + compute='_compute_property_fields', + readonly=False, + help="When doing real-time inventory valuation, counterpart " + "journal items for all incoming stock moves will be " + "posted in this account, unless " + "there is a specific valuation account set on the source " + "location. When not set on the product, the one from the " + "product category is used.") + property_stock_account_output = fields.Many2one( + 'account.account', 'Stock Output Account', + domain=[('deprecated', '=', False)], + compute='_compute_property_fields', + readonly=False, + help="When doing real-time inventory valuation, counterpart " + "journal items for all outgoing stock moves will be posted " + "in this account, unless " + "there is a specific valuation account set on the " + "destination location. When not set on the product, " + "the one from the product category is used.") + + @api.multi + def get_property_fields(self, object, properties): + super(ProductProperty, self).get_property_fields(object, properties) + for rec in self: + rec.property_valuation = rec.get_property_value( + 'property_valuation', object, properties) + rec.property_cost_method = rec.get_property_value( + 'property_cost_method', object, properties) + rec.property_stock_account_input = rec.get_property_value( + 'property_stock_account_input', object, properties) + rec.property_stock_account_output = rec.get_property_value( + 'property_stock_account_output', object, properties) + + @api.multi + def get_property_fields_list(self): + res = super(ProductProperty, self).get_property_fields_list() + res.append('property_valuation') + res.append('property_cost_method') + res.append('property_stock_account_input') + res.append('property_stock_account_output') + return res diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py new file mode 100644 index 00000000..15a43617 --- /dev/null +++ b/multicompany_property_stock_account/models/product_category.py @@ -0,0 +1,114 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import models, fields, api + + +class ProductCategory(models.Model): + _inherit = 'product.category' + + property_valuation = fields.Selection(readonly=True) + property_cost_method = fields.Selection(readonly=True) + property_stock_journal = fields.Many2one(readonly=True) + property_stock_account_input_categ_id = fields.Many2one(readonly=True) + property_stock_account_output_categ_id = fields.Many2one(readonly=True) + property_stock_valuation_account_id = fields.Many2one(readonly=True) + + +class ProductCategoryProperty(models.TransientModel): + _inherit = 'product.category.property' + + property_valuation = fields.Selection([ + ('manual_periodic', 'Periodic (manual)'), + ('real_time', 'Perpetual (automated)')], string='Inventory Valuation', + compute='_compute_property_fields', + readonly=False, + help="If perpetual valuation is enabled for a product, the system " + "will automatically create journal entries corresponding to " + "stock moves, with product price as specified by the 'Costing " + "Method'. The inventory variation account set on the product " + "category will represent the current inventory value, and the " + "stock input and stock output account will hold the counterpart " + "moves for incoming and outgoing products.") + + property_cost_method = fields.Selection([ + ('standard', 'Standard Price'), + ('average', 'Average Price'), + ('real', 'Real Price')], string="Costing Method", + compute='_compute_property_fields', + readonly=False, + help="Standard Price: The cost price is manually updated at the end " + "of a specific period (usually once a year).\nAverage Price: " + "The cost price is recomputed at each incoming shipment and " + "used for the product valuation.\nReal Price: The cost price " + "displayed is the price of the last outgoing product (will be " + "used in case of inventory loss for example).""") + property_stock_journal = fields.Many2one( + 'account.journal', 'Stock Journal', + compute='_compute_property_fields', + readonly=False, + help="When doing real-time inventory valuation, this is " + "the Accounting Journal in which entries will be " + "automatically posted when stock moves are processed.") + property_stock_account_input_categ_id = fields.Many2one( + 'account.account', 'Stock Input Account', + domain=[('deprecated', '=', False)], + compute='_compute_property_fields', + readonly=False, + help="When doing real-time inventory valuation, counterpart " + "journal items for all incoming stock moves will be posted " + "in this account, unless " + "there is a specific valuation account set on the " + "source location. This is the default value for all products " + "in this category. It " + "can also directly be set on each product") + property_stock_account_output_categ_id = fields.Many2one( + 'account.account', 'Stock Output Account', + domain=[('deprecated', '=', False)], + compute='_compute_property_fields', + readonly=False, + help="When doing real-time inventory valuation, counterpart journal " + "items for all outgoing stock moves will be posted in this " + "account, unless there is a specific valuation account set " + "on the destination location. This is the default value " + "for all products in this category. It " + "can also directly be set on each product") + property_stock_valuation_account_id = fields.Many2one( + 'account.account', 'Stock Valuation Account', + compute='_compute_property_fields', + readonly=False, + domain=[('deprecated', '=', False)], + help="When real-time inventory valuation is enabled " + "on a product, this account will hold the current " + "value of the products.", ) + + @api.multi + def get_property_fields(self, object, properties): + super(ProductCategoryProperty, self).get_property_fields( + object, properties) + for rec in self: + rec.property_valuation = rec.get_property_value( + 'property_valuation', object, properties) + rec.property_cost_method = rec.get_property_value( + 'property_cost_method', object, properties) + rec.property_stock_journal = rec.get_property_value( + 'property_stock_journal', object, properties) + rec.property_stock_account_input_categ_id = rec.get_property_value( + 'property_stock_account_input_categ_id', object, properties) + rec.property_stock_account_output_categ_id = rec.\ + get_property_value('property_stock_account_output_categ_id', + object, properties) + rec.property_stock_valuation_account_id = rec.get_property_value( + 'property_stock_valuation_account_id', object, properties) + + @api.multi + def get_property_fields_list(self): + res = super(ProductCategoryProperty, self).get_property_fields_list() + res.append('property_valuation') + res.append('property_cost_method') + res.append('property_stock_journal') + res.append('property_stock_account_input_categ_id') + res.append('property_stock_account_output_categ_id') + res.append('property_stock_valuation_account_id') + return res diff --git a/multicompany_property_stock_account/static/description/icon.png b/multicompany_property_stock_account/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/multicompany_property_stock_account/tests/__init__.py b/multicompany_property_stock_account/tests/__init__.py new file mode 100644 index 00000000..0b7f9294 --- /dev/null +++ b/multicompany_property_stock_account/tests/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from . import test_multicompany \ No newline at end of file diff --git a/multicompany_property_stock_account/tests/test_multicompany.py b/multicompany_property_stock_account/tests/test_multicompany.py new file mode 100644 index 00000000..81237146 --- /dev/null +++ b/multicompany_property_stock_account/tests/test_multicompany.py @@ -0,0 +1,10 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo.addons.multicompany_property_account.tests import test_multicompany + + +class TestMulticompanyProperty(test_multicompany.TestMulticompanyProperty): + def test_product(self): + super().test_product() diff --git a/multicompany_property_stock_account/views/product.xml b/multicompany_property_stock_account/views/product.xml new file mode 100644 index 00000000..5fe81c5d --- /dev/null +++ b/multicompany_property_stock_account/views/product.xml @@ -0,0 +1,13 @@ + + + + product.template.form + product.template + + + + 1 + + + + diff --git a/multicompany_property_stock_account/views/product_category.xml b/multicompany_property_stock_account/views/product_category.xml new file mode 100644 index 00000000..d2c40170 --- /dev/null +++ b/multicompany_property_stock_account/views/product_category.xml @@ -0,0 +1,26 @@ + + + + product.category.property.form + product.category.property + + + + + + + + + + + + + + + + + + + + + diff --git a/multicompany_property_stock_account/views/res_company_view.xml b/multicompany_property_stock_account/views/res_company_view.xml new file mode 100644 index 00000000..1d77a6b3 --- /dev/null +++ b/multicompany_property_stock_account/views/res_company_view.xml @@ -0,0 +1,4 @@ + + + + From e9b5535d1878758d0e92285de6cb723252e86e7c Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 28 Mar 2018 21:57:42 +0200 Subject: [PATCH 02/13] Several fixes and constrains improvement --- multicompany_property_stock_account/tests/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multicompany_property_stock_account/tests/__init__.py b/multicompany_property_stock_account/tests/__init__.py index 0b7f9294..d0138beb 100644 --- a/multicompany_property_stock_account/tests/__init__.py +++ b/multicompany_property_stock_account/tests/__init__.py @@ -2,4 +2,4 @@ # Copyright 2017 Eficent Business and IT Consulting Services, S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). -from . import test_multicompany \ No newline at end of file +from . import test_multicompany From f8328f73168dc934338dfadad07942eb831b6bf0 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Tue, 10 Apr 2018 14:11:31 +0200 Subject: [PATCH 03/13] - Property fields are readonly only in views. - Update readme and style --- .../README.rst | 35 ++++++++++++++++--- .../__manifest__.py | 6 ++-- .../models/__init__.py | 4 --- .../models/product_category.py | 11 ------ .../tests/__init__.py | 4 --- .../views/product.xml | 13 ------- ...ategory.xml => product_category_views.xml} | 27 ++++++++++++++ .../views/product_views.xml | 34 ++++++++++++++++++ ...company_view.xml => res_company_views.xml} | 0 9 files changed, 94 insertions(+), 40 deletions(-) delete mode 100644 multicompany_property_stock_account/views/product.xml rename multicompany_property_stock_account/views/{product_category.xml => product_category_views.xml} (54%) create mode 100644 multicompany_property_stock_account/views/product_views.xml rename multicompany_property_stock_account/views/{res_company_view.xml => res_company_views.xml} (100%) diff --git a/multicompany_property_stock_account/README.rst b/multicompany_property_stock_account/README.rst index 9b35d83e..a5639bdd 100644 --- a/multicompany_property_stock_account/README.rst +++ b/multicompany_property_stock_account/README.rst @@ -6,13 +6,22 @@ Multicompany Property Stock Account =================================== -This module is part of a set of modules that are intended to make sure that -the property fields are consistent in a multi-company environment. +This module is part of a set of modules that allow to set property fields on +a given model for multiple companies simultaneously. Specifically this module: -Installation -============ +* Allows to define the company-specific stock account fields of the product + and product category in the new 'Multi company' page of the product form + view. + + + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/133/11.0 -To install this module, simply follow the standard install process. Credits ======= @@ -25,3 +34,19 @@ Contributors * Miquel Raïch Do not contact contributors directly about support or help with technical issues. + + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://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 https://odoo-community.org. diff --git a/multicompany_property_stock_account/__manifest__.py b/multicompany_property_stock_account/__manifest__.py index 9ffcc1c1..34db6174 100644 --- a/multicompany_property_stock_account/__manifest__.py +++ b/multicompany_property_stock_account/__manifest__.py @@ -13,9 +13,9 @@ 'depends': ['multicompany_property_account', 'multicompany_property_stock'], 'data': [ - 'views/product.xml', - 'views/product_category.xml', - 'views/res_company_view.xml' + 'views/product_views.xml', + 'views/product_category_views.xml', + 'views/res_company_views.xml' ], 'installable': True, 'application': False, diff --git a/multicompany_property_stock_account/models/__init__.py b/multicompany_property_stock_account/models/__init__.py index c0efd643..533c5a5a 100644 --- a/multicompany_property_stock_account/models/__init__.py +++ b/multicompany_property_stock_account/models/__init__.py @@ -1,6 +1,2 @@ -# Copyright 2017 Creu Blanca -# Copyright 2017 Eficent Business and IT Consulting Services, S.L. -# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). - from . import product_category from . import product diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py index 15a43617..42dc575c 100644 --- a/multicompany_property_stock_account/models/product_category.py +++ b/multicompany_property_stock_account/models/product_category.py @@ -5,17 +5,6 @@ from odoo import models, fields, api -class ProductCategory(models.Model): - _inherit = 'product.category' - - property_valuation = fields.Selection(readonly=True) - property_cost_method = fields.Selection(readonly=True) - property_stock_journal = fields.Many2one(readonly=True) - property_stock_account_input_categ_id = fields.Many2one(readonly=True) - property_stock_account_output_categ_id = fields.Many2one(readonly=True) - property_stock_valuation_account_id = fields.Many2one(readonly=True) - - class ProductCategoryProperty(models.TransientModel): _inherit = 'product.category.property' diff --git a/multicompany_property_stock_account/tests/__init__.py b/multicompany_property_stock_account/tests/__init__.py index d0138beb..cf2eadf3 100644 --- a/multicompany_property_stock_account/tests/__init__.py +++ b/multicompany_property_stock_account/tests/__init__.py @@ -1,5 +1 @@ -# Copyright 2017 Creu Blanca -# Copyright 2017 Eficent Business and IT Consulting Services, S.L. -# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). - from . import test_multicompany diff --git a/multicompany_property_stock_account/views/product.xml b/multicompany_property_stock_account/views/product.xml deleted file mode 100644 index 5fe81c5d..00000000 --- a/multicompany_property_stock_account/views/product.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - product.template.form - product.template - - - - 1 - - - - diff --git a/multicompany_property_stock_account/views/product_category.xml b/multicompany_property_stock_account/views/product_category_views.xml similarity index 54% rename from multicompany_property_stock_account/views/product_category.xml rename to multicompany_property_stock_account/views/product_category_views.xml index d2c40170..3b120a6e 100644 --- a/multicompany_property_stock_account/views/product_category.xml +++ b/multicompany_property_stock_account/views/product_category_views.xml @@ -1,5 +1,32 @@ + + + product.category.stock.property.form.inherit + product.category + + + + True + + + True + + + True + + + True + + + True + + + True + + + + product.category.property.form product.category.property diff --git a/multicompany_property_stock_account/views/product_views.xml b/multicompany_property_stock_account/views/product_views.xml new file mode 100644 index 00000000..9a01dfdc --- /dev/null +++ b/multicompany_property_stock_account/views/product_views.xml @@ -0,0 +1,34 @@ + + + + + product.template.stock.property.form.inherit + product.template + + + + True + + + True + + + True + + + True + + + + + + product.template.form + product.template + + + + 1 + + + + diff --git a/multicompany_property_stock_account/views/res_company_view.xml b/multicompany_property_stock_account/views/res_company_views.xml similarity index 100% rename from multicompany_property_stock_account/views/res_company_view.xml rename to multicompany_property_stock_account/views/res_company_views.xml From d950dfa639328aab884428af8d6bef9565269d35 Mon Sep 17 00:00:00 2001 From: Jaime Arroyo Date: Thu, 27 Jun 2019 12:41:56 +0200 Subject: [PATCH 04/13] mc property --- multicompany_property_stock_account/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multicompany_property_stock_account/__manifest__.py b/multicompany_property_stock_account/__manifest__.py index 34db6174..8707d4e7 100644 --- a/multicompany_property_stock_account/__manifest__.py +++ b/multicompany_property_stock_account/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Multi Company Stock Account', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'summary': 'Stock Account Company Properties', 'author': 'Creu Blanca, Eficent, Odoo Community Association (OCA)', 'sequence': 30, From d09a19f1c142e823c94a38949e68f65c7c12fd38 Mon Sep 17 00:00:00 2001 From: Jaime Arroyo Date: Tue, 10 Mar 2020 14:26:20 +0100 Subject: [PATCH 05/13] group changes --- .../views/product_category_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multicompany_property_stock_account/views/product_category_views.xml b/multicompany_property_stock_account/views/product_category_views.xml index 3b120a6e..7cd25d4a 100644 --- a/multicompany_property_stock_account/views/product_category_views.xml +++ b/multicompany_property_stock_account/views/product_category_views.xml @@ -43,7 +43,7 @@ - + From a10dca0fd3324ca4156053ff3868475ba9d03b74 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Date: Wed, 14 Apr 2021 08:59:52 +0200 Subject: [PATCH 06/13] Migrate multicompany_property modules to 13.0 --- .../models/__init__.py | 1 - .../models/product.py | 89 ----------- .../models/product_category.py | 151 ++++++++++-------- .../views/product_views.xml | 43 ++--- 4 files changed, 96 insertions(+), 188 deletions(-) delete mode 100644 multicompany_property_stock_account/models/product.py diff --git a/multicompany_property_stock_account/models/__init__.py b/multicompany_property_stock_account/models/__init__.py index 533c5a5a..53553f3f 100644 --- a/multicompany_property_stock_account/models/__init__.py +++ b/multicompany_property_stock_account/models/__init__.py @@ -1,2 +1 @@ from . import product_category -from . import product diff --git a/multicompany_property_stock_account/models/product.py b/multicompany_property_stock_account/models/product.py deleted file mode 100644 index 56744ef6..00000000 --- a/multicompany_property_stock_account/models/product.py +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright 2017 Creu Blanca -# Copyright 2017 Eficent Business and IT Consulting Services, S.L. -# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). - -from odoo import models, api, fields - - -class ProductTemplate(models.Model): - _inherit = 'product.template' - - property_valuation = fields.Selection(readonly=True) - property_cost_method = fields.Selection(readonly=True) - property_stock_account_input = fields.Many2one(readonly=True) - property_stock_account_output = fields.Many2one(readonly=True) - - -class ProductProperty(models.TransientModel): - _inherit = 'product.property' - - property_valuation = fields.Selection([ - ('manual_periodic', 'Periodic (manual)'), - ('real_time', 'Perpetual (automated)')], string='Inventory Valuation', - compute='_compute_property_fields', - readonly=False, - help="If perpetual valuation is enabled for a product, " - "the system will automatically create journal entries " - "corresponding to stock moves, with product price " - "as specified by the 'Costing Method'" - "The inventory variation account set on the product " - "category will represent the current inventory value, " - "and the stock input and stock output account will " - "hold the counterpart moves for incoming and outgoing products.") - - property_cost_method = fields.Selection([ - ('standard', 'Standard Price'), - ('average', 'Average Price'), - ('real', 'Real Price')], string='Costing Method', - compute='_compute_property_fields', - readonly=False, - help="""Standard Price: The cost price is manually updated - at the end of a specific period (usually once a year). - Average Price: The cost price is recomputed at each incoming shipment - and used for the product valuation. Real Price: The cost price - displayed is the price of the last outgoing product (will be use in - case of inventory loss for example).""") - property_stock_account_input = fields.Many2one( - 'account.account', 'Stock Input Account', - domain=[('deprecated', '=', False)], - compute='_compute_property_fields', - readonly=False, - help="When doing real-time inventory valuation, counterpart " - "journal items for all incoming stock moves will be " - "posted in this account, unless " - "there is a specific valuation account set on the source " - "location. When not set on the product, the one from the " - "product category is used.") - property_stock_account_output = fields.Many2one( - 'account.account', 'Stock Output Account', - domain=[('deprecated', '=', False)], - compute='_compute_property_fields', - readonly=False, - help="When doing real-time inventory valuation, counterpart " - "journal items for all outgoing stock moves will be posted " - "in this account, unless " - "there is a specific valuation account set on the " - "destination location. When not set on the product, " - "the one from the product category is used.") - - @api.multi - def get_property_fields(self, object, properties): - super(ProductProperty, self).get_property_fields(object, properties) - for rec in self: - rec.property_valuation = rec.get_property_value( - 'property_valuation', object, properties) - rec.property_cost_method = rec.get_property_value( - 'property_cost_method', object, properties) - rec.property_stock_account_input = rec.get_property_value( - 'property_stock_account_input', object, properties) - rec.property_stock_account_output = rec.get_property_value( - 'property_stock_account_output', object, properties) - - @api.multi - def get_property_fields_list(self): - res = super(ProductProperty, self).get_property_fields_list() - res.append('property_valuation') - res.append('property_cost_method') - res.append('property_stock_account_input') - res.append('property_stock_account_output') - return res diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py index 42dc575c..26606f5c 100644 --- a/multicompany_property_stock_account/models/product_category.py +++ b/multicompany_property_stock_account/models/product_category.py @@ -2,102 +2,121 @@ # Copyright 2017 Eficent Business and IT Consulting Services, S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). -from odoo import models, fields, api +from odoo import fields, models class ProductCategoryProperty(models.TransientModel): - _inherit = 'product.category.property' + _inherit = "product.category.property" - property_valuation = fields.Selection([ - ('manual_periodic', 'Periodic (manual)'), - ('real_time', 'Perpetual (automated)')], string='Inventory Valuation', - compute='_compute_property_fields', + property_valuation = fields.Selection( + [ + ("manual_periodic", "Periodic (manual)"), + ("real_time", "Perpetual (automated)"), + ], + string="Inventory Valuation", + compute="_compute_property_fields", readonly=False, help="If perpetual valuation is enabled for a product, the system " - "will automatically create journal entries corresponding to " - "stock moves, with product price as specified by the 'Costing " - "Method'. The inventory variation account set on the product " - "category will represent the current inventory value, and the " - "stock input and stock output account will hold the counterpart " - "moves for incoming and outgoing products.") + "will automatically create journal entries corresponding to " + "stock moves, with product price as specified by the 'Costing " + "Method'. The inventory variation account set on the product " + "category will represent the current inventory value, and the " + "stock input and stock output account will hold the counterpart " + "moves for incoming and outgoing products.", + ) - property_cost_method = fields.Selection([ - ('standard', 'Standard Price'), - ('average', 'Average Price'), - ('real', 'Real Price')], string="Costing Method", - compute='_compute_property_fields', + property_cost_method = fields.Selection( + [ + ("standard", "Standard Price"), + ("average", "Average Price"), + ("real", "Real Price"), + ], + string="Costing Method", + compute="_compute_property_fields", readonly=False, help="Standard Price: The cost price is manually updated at the end " - "of a specific period (usually once a year).\nAverage Price: " - "The cost price is recomputed at each incoming shipment and " - "used for the product valuation.\nReal Price: The cost price " - "displayed is the price of the last outgoing product (will be " - "used in case of inventory loss for example).""") + "of a specific period (usually once a year).\nAverage Price: " + "The cost price is recomputed at each incoming shipment and " + "used for the product valuation.\nReal Price: The cost price " + "displayed is the price of the last outgoing product (will be " + "used in case of inventory loss for example)." + "", + ) property_stock_journal = fields.Many2one( - 'account.journal', 'Stock Journal', - compute='_compute_property_fields', + "account.journal", + "Stock Journal", + compute="_compute_property_fields", readonly=False, help="When doing real-time inventory valuation, this is " - "the Accounting Journal in which entries will be " - "automatically posted when stock moves are processed.") + "the Accounting Journal in which entries will be " + "automatically posted when stock moves are processed.", + ) property_stock_account_input_categ_id = fields.Many2one( - 'account.account', 'Stock Input Account', - domain=[('deprecated', '=', False)], - compute='_compute_property_fields', + "account.account", + "Stock Input Account", + domain=[("deprecated", "=", False)], + compute="_compute_property_fields", readonly=False, help="When doing real-time inventory valuation, counterpart " - "journal items for all incoming stock moves will be posted " - "in this account, unless " - "there is a specific valuation account set on the " - "source location. This is the default value for all products " - "in this category. It " - "can also directly be set on each product") + "journal items for all incoming stock moves will be posted " + "in this account, unless " + "there is a specific valuation account set on the " + "source location. This is the default value for all products " + "in this category. It " + "can also directly be set on each product", + ) property_stock_account_output_categ_id = fields.Many2one( - 'account.account', 'Stock Output Account', - domain=[('deprecated', '=', False)], - compute='_compute_property_fields', + "account.account", + "Stock Output Account", + domain=[("deprecated", "=", False)], + compute="_compute_property_fields", readonly=False, help="When doing real-time inventory valuation, counterpart journal " - "items for all outgoing stock moves will be posted in this " - "account, unless there is a specific valuation account set " - "on the destination location. This is the default value " - "for all products in this category. It " - "can also directly be set on each product") + "items for all outgoing stock moves will be posted in this " + "account, unless there is a specific valuation account set " + "on the destination location. This is the default value " + "for all products in this category. It " + "can also directly be set on each product", + ) property_stock_valuation_account_id = fields.Many2one( - 'account.account', 'Stock Valuation Account', - compute='_compute_property_fields', + "account.account", + "Stock Valuation Account", + compute="_compute_property_fields", readonly=False, - domain=[('deprecated', '=', False)], + domain=[("deprecated", "=", False)], help="When real-time inventory valuation is enabled " - "on a product, this account will hold the current " - "value of the products.", ) + "on a product, this account will hold the current " + "value of the products.", + ) - @api.multi def get_property_fields(self, object, properties): - super(ProductCategoryProperty, self).get_property_fields( - object, properties) + super(ProductCategoryProperty, self).get_property_fields(object, properties) for rec in self: rec.property_valuation = rec.get_property_value( - 'property_valuation', object, properties) + "property_valuation", object, properties + ) rec.property_cost_method = rec.get_property_value( - 'property_cost_method', object, properties) + "property_cost_method", object, properties + ) rec.property_stock_journal = rec.get_property_value( - 'property_stock_journal', object, properties) + "property_stock_journal", object, properties + ) rec.property_stock_account_input_categ_id = rec.get_property_value( - 'property_stock_account_input_categ_id', object, properties) - rec.property_stock_account_output_categ_id = rec.\ - get_property_value('property_stock_account_output_categ_id', - object, properties) + "property_stock_account_input_categ_id", object, properties + ) + rec.property_stock_account_output_categ_id = rec.get_property_value( + "property_stock_account_output_categ_id", object, properties + ) rec.property_stock_valuation_account_id = rec.get_property_value( - 'property_stock_valuation_account_id', object, properties) + "property_stock_valuation_account_id", object, properties + ) - @api.multi def get_property_fields_list(self): res = super(ProductCategoryProperty, self).get_property_fields_list() - res.append('property_valuation') - res.append('property_cost_method') - res.append('property_stock_journal') - res.append('property_stock_account_input_categ_id') - res.append('property_stock_account_output_categ_id') - res.append('property_stock_valuation_account_id') + res.append("property_valuation") + res.append("property_cost_method") + res.append("property_stock_journal") + res.append("property_stock_account_input_categ_id") + res.append("property_stock_account_output_categ_id") + res.append("property_stock_valuation_account_id") return res diff --git a/multicompany_property_stock_account/views/product_views.xml b/multicompany_property_stock_account/views/product_views.xml index 9a01dfdc..e17ff6cf 100644 --- a/multicompany_property_stock_account/views/product_views.xml +++ b/multicompany_property_stock_account/views/product_views.xml @@ -1,34 +1,13 @@ - + - - - product.template.stock.property.form.inherit - product.template - - - - True - - - True - - - True - - - True - - - - - - product.template.form - product.template - - - - 1 - - - + + product.template.form + product.template + + + + 1 + + + From 4367e64dc4666525dc6b48302d6f4e755dca4e38 Mon Sep 17 00:00:00 2001 From: mreficent Date: Wed, 14 Apr 2021 18:13:34 +0200 Subject: [PATCH 07/13] multicompany_property_*: full update to v13 --- .../README.rst | 4 +- .../__init__.py | 2 +- .../__manifest__.py | 33 +++-- .../models/product_category.py | 18 ++- .../tests/test_multicompany.py | 2 +- .../views/product_category_views.xml | 118 ++++++++++-------- .../views/res_company_views.xml | 2 +- 7 files changed, 96 insertions(+), 83 deletions(-) diff --git a/multicompany_property_stock_account/README.rst b/multicompany_property_stock_account/README.rst index a5639bdd..5b3e6152 100644 --- a/multicompany_property_stock_account/README.rst +++ b/multicompany_property_stock_account/README.rst @@ -30,8 +30,8 @@ Contributors ------------ * Enric Tobella -* Jordi Ballester -* Miquel Raïch +* Jordi Ballester +* Miquel Raïch Do not contact contributors directly about support or help with technical issues. diff --git a/multicompany_property_stock_account/__init__.py b/multicompany_property_stock_account/__init__.py index 56b694d7..82ebbf3b 100644 --- a/multicompany_property_stock_account/__init__.py +++ b/multicompany_property_stock_account/__init__.py @@ -1,5 +1,5 @@ # Copyright 2017 Creu Blanca -# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# Copyright 2017 ForgeFlow, S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). from . import models diff --git a/multicompany_property_stock_account/__manifest__.py b/multicompany_property_stock_account/__manifest__.py index 8707d4e7..a646c4fc 100644 --- a/multicompany_property_stock_account/__manifest__.py +++ b/multicompany_property_stock_account/__manifest__.py @@ -1,23 +1,22 @@ # Copyright 2017 Creu Blanca -# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# Copyright 2017 ForgeFlow, S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). { - 'name': 'Multi Company Stock Account', - 'version': '12.0.1.0.0', - 'summary': 'Stock Account Company Properties', - 'author': 'Creu Blanca, Eficent, Odoo Community Association (OCA)', - 'sequence': 30, - 'license': 'LGPL-3', - 'website': 'http://www.eficent.com', - 'depends': ['multicompany_property_account', - 'multicompany_property_stock'], - 'data': [ - 'views/product_views.xml', - 'views/product_category_views.xml', - 'views/res_company_views.xml' + "name": "Multi Company Stock Account", + "version": "13.0.1.0.0", + "summary": "Stock Account Company Properties", + "author": "Creu Blanca, ForgeFlow, Odoo Community Association (OCA)", + "sequence": 30, + "license": "LGPL-3", + "website": "http://www.forgeflow.com", + "depends": ["multicompany_property_account", "multicompany_property_stock"], + "data": [ + "views/product_views.xml", + "views/product_category_views.xml", + "views/res_company_views.xml", ], - 'installable': True, - 'application': False, - 'auto_install': True, + "installable": True, + "application": False, + "auto_install": True, } diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py index 26606f5c..20344a1c 100644 --- a/multicompany_property_stock_account/models/product_category.py +++ b/multicompany_property_stock_account/models/product_category.py @@ -1,5 +1,5 @@ # Copyright 2017 Creu Blanca -# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# Copyright 2017 ForgeFlow, S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). from odoo import fields, models @@ -28,19 +28,17 @@ class ProductCategoryProperty(models.TransientModel): property_cost_method = fields.Selection( [ ("standard", "Standard Price"), - ("average", "Average Price"), - ("real", "Real Price"), + ("fifo", "First In First Out (FIFO)"), + ("average", "Average Cost (AVCO)"), ], string="Costing Method", compute="_compute_property_fields", readonly=False, - help="Standard Price: The cost price is manually updated at the end " - "of a specific period (usually once a year).\nAverage Price: " - "The cost price is recomputed at each incoming shipment and " - "used for the product valuation.\nReal Price: The cost price " - "displayed is the price of the last outgoing product (will be " - "used in case of inventory loss for example)." - "", + help="Standard Price: The products are valued at their standard cost " + "defined on the product.\nAverage Cost (AVCO): The products are valued " + "at weighted average cost.\nFirst In First Out (FIFO): The products " + "are valued supposing those that enter the company first will also " + "leave it first.", ) property_stock_journal = fields.Many2one( "account.journal", diff --git a/multicompany_property_stock_account/tests/test_multicompany.py b/multicompany_property_stock_account/tests/test_multicompany.py index 81237146..ff904a5b 100644 --- a/multicompany_property_stock_account/tests/test_multicompany.py +++ b/multicompany_property_stock_account/tests/test_multicompany.py @@ -1,5 +1,5 @@ # Copyright 2017 Creu Blanca -# Copyright 2017 Eficent Business and IT Consulting Services, S.L. +# Copyright 2017 ForgeFlow, S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). from odoo.addons.multicompany_property_account.tests import test_multicompany diff --git a/multicompany_property_stock_account/views/product_category_views.xml b/multicompany_property_stock_account/views/product_category_views.xml index 7cd25d4a..f0d6a254 100644 --- a/multicompany_property_stock_account/views/product_category_views.xml +++ b/multicompany_property_stock_account/views/product_category_views.xml @@ -1,53 +1,69 @@ - + - - - product.category.stock.property.form.inherit - product.category - - - - True - - - True - - - True - - - True - - - True - - - True - - - - - - product.category.property.form - product.category.property - - - - - - - - - - - - - - - - - - - - + + product.category.stock.property.form.inherit + product.category + + + + True + + + True + + + True + + + True + + + True + + + True + + + + + product.category.property.form + product.category.property + + + + + + + + + + + + + + + + + + + + diff --git a/multicompany_property_stock_account/views/res_company_views.xml b/multicompany_property_stock_account/views/res_company_views.xml index 1d77a6b3..3f4d29e0 100644 --- a/multicompany_property_stock_account/views/res_company_views.xml +++ b/multicompany_property_stock_account/views/res_company_views.xml @@ -1,4 +1,4 @@ - + From 204136c7a96a16889e17d950912d622b7d409ca8 Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 18 May 2020 16:29:13 +0200 Subject: [PATCH 08/13] *: Migration to 13.0 --- .../static/description/icon.png | Bin 9455 -> 0 bytes .../tests/__init__.py | 1 - 2 files changed, 1 deletion(-) delete mode 100644 multicompany_property_stock_account/static/description/icon.png delete mode 100644 multicompany_property_stock_account/tests/__init__.py diff --git a/multicompany_property_stock_account/static/description/icon.png b/multicompany_property_stock_account/static/description/icon.png deleted file mode 100644 index 3a0328b516c4980e8e44cdb63fd945757ddd132d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I diff --git a/multicompany_property_stock_account/tests/__init__.py b/multicompany_property_stock_account/tests/__init__.py deleted file mode 100644 index cf2eadf3..00000000 --- a/multicompany_property_stock_account/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_multicompany From 806cbefd47dd410e97002220606f3590cd231d40 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Tue, 29 Jun 2021 15:38:30 +0200 Subject: [PATCH 09/13] mcfix_*: Finish migration [IMP] github actions: Improve management [IMP] multicompany_property: pre-commit, fixing licenses --- .../models/product_category.py | 16 ++++++++-------- .../static/description/icon.png | Bin 0 -> 9455 bytes .../tests/__init__.py | 1 + .../views/product_category_views.xml | 5 +---- 4 files changed, 10 insertions(+), 12 deletions(-) create mode 100644 multicompany_property_stock_account/static/description/icon.png create mode 100644 multicompany_property_stock_account/tests/__init__.py diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py index 20344a1c..b3320837 100644 --- a/multicompany_property_stock_account/models/product_category.py +++ b/multicompany_property_stock_account/models/product_category.py @@ -87,26 +87,26 @@ class ProductCategoryProperty(models.TransientModel): "value of the products.", ) - def get_property_fields(self, object, properties): - super(ProductCategoryProperty, self).get_property_fields(object, properties) + def get_property_fields(self, obj, properties): + super(ProductCategoryProperty, self).get_property_fields(obj, properties) for rec in self: rec.property_valuation = rec.get_property_value( - "property_valuation", object, properties + "property_valuation", obj, properties ) rec.property_cost_method = rec.get_property_value( - "property_cost_method", object, properties + "property_cost_method", obj, properties ) rec.property_stock_journal = rec.get_property_value( - "property_stock_journal", object, properties + "property_stock_journal", obj, properties ) rec.property_stock_account_input_categ_id = rec.get_property_value( - "property_stock_account_input_categ_id", object, properties + "property_stock_account_input_categ_id", obj, properties ) rec.property_stock_account_output_categ_id = rec.get_property_value( - "property_stock_account_output_categ_id", object, properties + "property_stock_account_output_categ_id", obj, properties ) rec.property_stock_valuation_account_id = rec.get_property_value( - "property_stock_valuation_account_id", object, properties + "property_stock_valuation_account_id", obj, properties ) def get_property_fields_list(self): diff --git a/multicompany_property_stock_account/static/description/icon.png b/multicompany_property_stock_account/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/multicompany_property_stock_account/tests/__init__.py b/multicompany_property_stock_account/tests/__init__.py new file mode 100644 index 00000000..cf2eadf3 --- /dev/null +++ b/multicompany_property_stock_account/tests/__init__.py @@ -0,0 +1 @@ +from . import test_multicompany diff --git a/multicompany_property_stock_account/views/product_category_views.xml b/multicompany_property_stock_account/views/product_category_views.xml index f0d6a254..45208070 100644 --- a/multicompany_property_stock_account/views/product_category_views.xml +++ b/multicompany_property_stock_account/views/product_category_views.xml @@ -56,10 +56,7 @@ - + From b588384f9709b018e42fa4cecf5f931fb032a370 Mon Sep 17 00:00:00 2001 From: AaronHForgeFlow Date: Thu, 3 Mar 2022 13:47:40 +0100 Subject: [PATCH 10/13] multicompany_property_stock_account: property_valuation and property_cost_method are required in the product category so it should be required for all companies. Otherwise, if you leave any of those fields empty for a company and you save then you will not be able to edit anything else in the product category, you will get all the time an error saying "Missing required fields". And you will not be able to going back because there is no way to change those fields in the category itself. --- multicompany_property_stock_account/models/product_category.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py index b3320837..76f75a2d 100644 --- a/multicompany_property_stock_account/models/product_category.py +++ b/multicompany_property_stock_account/models/product_category.py @@ -16,6 +16,7 @@ class ProductCategoryProperty(models.TransientModel): string="Inventory Valuation", compute="_compute_property_fields", readonly=False, + required=True, help="If perpetual valuation is enabled for a product, the system " "will automatically create journal entries corresponding to " "stock moves, with product price as specified by the 'Costing " @@ -34,6 +35,7 @@ class ProductCategoryProperty(models.TransientModel): string="Costing Method", compute="_compute_property_fields", readonly=False, + required=True, help="Standard Price: The products are valued at their standard cost " "defined on the product.\nAverage Cost (AVCO): The products are valued " "at weighted average cost.\nFirst In First Out (FIFO): The products " From 811991cd2b4e56828fd50d65edbc154a28d10f4c Mon Sep 17 00:00:00 2001 From: AaronHForgeFlow Date: Fri, 25 Mar 2022 09:09:50 +0100 Subject: [PATCH 11/13] multicompany_property_stock_account: property_stock_journal and property_stock_account_/input/output_categ_id and property_stock_valuation_account_id are required in the product category so it should be required for all companies. Otherwise, if you leave any of those fields empty for a company and you save then you will not be able to edit anything else in the product category, you will get all the time an error saying "Missing required fields". And you will not be able to going back because there is no way to change those fields in the category itself. --- .../models/product_category.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py index 76f75a2d..f7401671 100644 --- a/multicompany_property_stock_account/models/product_category.py +++ b/multicompany_property_stock_account/models/product_category.py @@ -47,6 +47,7 @@ class ProductCategoryProperty(models.TransientModel): "Stock Journal", compute="_compute_property_fields", readonly=False, + required=True, help="When doing real-time inventory valuation, this is " "the Accounting Journal in which entries will be " "automatically posted when stock moves are processed.", @@ -57,6 +58,7 @@ class ProductCategoryProperty(models.TransientModel): domain=[("deprecated", "=", False)], compute="_compute_property_fields", readonly=False, + required=True, help="When doing real-time inventory valuation, counterpart " "journal items for all incoming stock moves will be posted " "in this account, unless " @@ -71,6 +73,7 @@ class ProductCategoryProperty(models.TransientModel): domain=[("deprecated", "=", False)], compute="_compute_property_fields", readonly=False, + required=True, help="When doing real-time inventory valuation, counterpart journal " "items for all outgoing stock moves will be posted in this " "account, unless there is a specific valuation account set " @@ -83,6 +86,7 @@ class ProductCategoryProperty(models.TransientModel): "Stock Valuation Account", compute="_compute_property_fields", readonly=False, + required=True, domain=[("deprecated", "=", False)], help="When real-time inventory valuation is enabled " "on a product, this account will hold the current " From 95e547e03598a2de76bbe5a76359066afd5b942a Mon Sep 17 00:00:00 2001 From: Juany Davila Date: Wed, 3 Aug 2022 13:11:06 -0500 Subject: [PATCH 12/13] [IMP] multicompany_property_stock_account: black, isort, prettier --- .../__manifest__.py | 2 +- .../views/product_category_views.xml | 30 +++++++++---------- .../multicompany_property_stock_account | 1 + .../setup.py | 6 ++++ 4 files changed, 23 insertions(+), 16 deletions(-) create mode 120000 setup/multicompany_property_stock_account/odoo/addons/multicompany_property_stock_account create mode 100644 setup/multicompany_property_stock_account/setup.py diff --git a/multicompany_property_stock_account/__manifest__.py b/multicompany_property_stock_account/__manifest__.py index a646c4fc..a2dad47d 100644 --- a/multicompany_property_stock_account/__manifest__.py +++ b/multicompany_property_stock_account/__manifest__.py @@ -9,7 +9,7 @@ "author": "Creu Blanca, ForgeFlow, Odoo Community Association (OCA)", "sequence": 30, "license": "LGPL-3", - "website": "http://www.forgeflow.com", + "website": "https://github.com/ForgeFlow/multicompany-fixes", "depends": ["multicompany_property_account", "multicompany_property_stock"], "data": [ "views/product_views.xml", diff --git a/multicompany_property_stock_account/views/product_category_views.xml b/multicompany_property_stock_account/views/product_category_views.xml index 45208070..eaaa0840 100644 --- a/multicompany_property_stock_account/views/product_category_views.xml +++ b/multicompany_property_stock_account/views/product_category_views.xml @@ -29,28 +29,28 @@ product.category.property.form product.category.property + name="inherit_id" + ref="multicompany_property_account.view_product_category_property_form" + /> + name="property_stock_account_input_categ_id" + domain="[('deprecated', '=', False),('company_id','=',company_id)]" + /> + name="property_stock_account_output_categ_id" + domain="[('deprecated', '=', False),('company_id','=',company_id)]" + /> + name="property_stock_valuation_account_id" + domain="[('deprecated', '=', False),('company_id','=',company_id)]" + /> + name="property_stock_journal" + domain="[('company_id','=',company_id)]" + /> diff --git a/setup/multicompany_property_stock_account/odoo/addons/multicompany_property_stock_account b/setup/multicompany_property_stock_account/odoo/addons/multicompany_property_stock_account new file mode 120000 index 00000000..fc90bd03 --- /dev/null +++ b/setup/multicompany_property_stock_account/odoo/addons/multicompany_property_stock_account @@ -0,0 +1 @@ +../../../../multicompany_property_stock_account \ No newline at end of file diff --git a/setup/multicompany_property_stock_account/setup.py b/setup/multicompany_property_stock_account/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/multicompany_property_stock_account/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 7b6305698ce2bde8fe7402f3ec5d1bca5a67d35e Mon Sep 17 00:00:00 2001 From: Juany Davila Date: Wed, 3 Aug 2022 13:13:16 -0500 Subject: [PATCH 13/13] [MIG] multicompany_property_stock_account: Migration to 15.0 --- .../__manifest__.py | 2 +- .../models/product_category.py | 3 +- .../tests/test_multicompany.py | 2 +- .../views/product_category_views.xml | 111 ++++++++++-------- .../views/product_views.xml | 2 +- 5 files changed, 68 insertions(+), 52 deletions(-) diff --git a/multicompany_property_stock_account/__manifest__.py b/multicompany_property_stock_account/__manifest__.py index a2dad47d..33c20df7 100644 --- a/multicompany_property_stock_account/__manifest__.py +++ b/multicompany_property_stock_account/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Multi Company Stock Account", - "version": "13.0.1.0.0", + "version": "15.0.1.0.0", "summary": "Stock Account Company Properties", "author": "Creu Blanca, ForgeFlow, Odoo Community Association (OCA)", "sequence": 30, diff --git a/multicompany_property_stock_account/models/product_category.py b/multicompany_property_stock_account/models/product_category.py index f7401671..88b6a2fd 100644 --- a/multicompany_property_stock_account/models/product_category.py +++ b/multicompany_property_stock_account/models/product_category.py @@ -94,7 +94,7 @@ class ProductCategoryProperty(models.TransientModel): ) def get_property_fields(self, obj, properties): - super(ProductCategoryProperty, self).get_property_fields(obj, properties) + res = super(ProductCategoryProperty, self).get_property_fields(obj, properties) for rec in self: rec.property_valuation = rec.get_property_value( "property_valuation", obj, properties @@ -114,6 +114,7 @@ def get_property_fields(self, obj, properties): rec.property_stock_valuation_account_id = rec.get_property_value( "property_stock_valuation_account_id", obj, properties ) + return res def get_property_fields_list(self): res = super(ProductCategoryProperty, self).get_property_fields_list() diff --git a/multicompany_property_stock_account/tests/test_multicompany.py b/multicompany_property_stock_account/tests/test_multicompany.py index ff904a5b..2b34b33a 100644 --- a/multicompany_property_stock_account/tests/test_multicompany.py +++ b/multicompany_property_stock_account/tests/test_multicompany.py @@ -7,4 +7,4 @@ class TestMulticompanyProperty(test_multicompany.TestMulticompanyProperty): def test_product(self): - super().test_product() + return super().test_product() diff --git a/multicompany_property_stock_account/views/product_category_views.xml b/multicompany_property_stock_account/views/product_category_views.xml index eaaa0840..c5112e0d 100644 --- a/multicompany_property_stock_account/views/product_category_views.xml +++ b/multicompany_property_stock_account/views/product_category_views.xml @@ -1,66 +1,81 @@ - - product.category.stock.property.form.inherit - product.category - - - - True - - - True - - - True - - - True - - - True - - - True - - - - - product.category.property.form - product.category.property - + product.category.stock.property.form.inherit + product.category + + + + True + + + True + + + True + + + True + + + + + + product.category.stock.property.form.inherit + product.category + + + + True + + + True + + + + + + product.category.property.form + product.category.property + - - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/multicompany_property_stock_account/views/product_views.xml b/multicompany_property_stock_account/views/product_views.xml index e17ff6cf..b4d01a31 100644 --- a/multicompany_property_stock_account/views/product_views.xml +++ b/multicompany_property_stock_account/views/product_views.xml @@ -3,7 +3,7 @@ product.template.form product.template - + 1