From 8414e6b9fde7bfcd0977fbb85464a73ab6f61a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Voet=20=28ryv=29?= Date: Tue, 14 Apr 2020 12:13:54 +0000 Subject: [PATCH] [IMP] stock: handle multi-warehouse with the same logic of multi-company Activate the multi-warehouse automatically when there is more than 1 in a company. Then remove the multi-warehouse setting in the config, and allow to create warehouse. Because create a warehouse can change groups of the user, we reload the page when there is any modification. Update warehouse demo data accordingly (remove the second warehouse of the second company). task-2196687 closes odoo/odoo#49625 Related: odoo/upgrade#1253 Related: odoo/enterprise#9934 Signed-off-by: Simon Lejeune (sle) --- addons/stock/data/stock_demo.xml | 67 +++++++++---------- addons/stock/models/res_config_settings.py | 7 -- addons/stock/models/stock_warehouse.py | 20 ++++++ addons/stock/static/src/js/basic_model.js | 16 +++++ .../stock/views/res_config_settings_views.xml | 17 ----- addons/stock/views/stock_template.xml | 1 + addons/stock/views/stock_warehouse_views.xml | 28 +------- .../views/res_config_settings_views.xml | 2 +- 8 files changed, 73 insertions(+), 85 deletions(-) create mode 100644 addons/stock/static/src/js/basic_model.js diff --git a/addons/stock/data/stock_demo.xml b/addons/stock/data/stock_demo.xml index 94678cdf3c4..51bb53d5469 100644 --- a/addons/stock/data/stock_demo.xml +++ b/addons/stock/data/stock_demo.xml @@ -185,20 +185,19 @@ My Company (San Francisco) - - - - + + + - - Chicago 2 + + Chicago 1 + CHIC1 - - CHIC2 @@ -215,31 +214,31 @@ - - Starting Inventory - - + + Starting Inventory + + - - - - - 100.0 - - + + + + + 200.0 + + - - - - - - + + + + + + diff --git a/addons/stock/models/res_config_settings.py b/addons/stock/models/res_config_settings.py index 886c24a48a3..2b135322358 100644 --- a/addons/stock/models/res_config_settings.py +++ b/addons/stock/models/res_config_settings.py @@ -41,19 +41,12 @@ class ResConfigSettings(models.TransientModel): module_delivery_easypost = fields.Boolean("Easypost Connector") group_stock_multi_locations = fields.Boolean('Storage Locations', implied_group='stock.group_stock_multi_locations', help="Store products in specific locations of your warehouse (e.g. bins, racks) and to track inventory accordingly.") - group_stock_multi_warehouses = fields.Boolean('Multi-Warehouses', implied_group='stock.group_stock_multi_warehouses') @api.onchange('group_stock_multi_locations') def _onchange_group_stock_multi_locations(self): if not self.group_stock_multi_locations: - self.group_stock_multi_warehouses = False self.group_stock_adv_location = False - @api.onchange('group_stock_multi_warehouses') - def _onchange_group_stock_multi_warehouses(self): - if self.group_stock_multi_warehouses: - self.group_stock_multi_locations = True - @api.onchange('group_stock_production_lot') def _onchange_group_stock_production_lot(self): if not self.group_stock_production_lot: diff --git a/addons/stock/models/stock_warehouse.py b/addons/stock/models/stock_warehouse.py index f83d4bd030f..ead232b7cdd 100644 --- a/addons/stock/models/stock_warehouse.py +++ b/addons/stock/models/stock_warehouse.py @@ -122,6 +122,9 @@ class Warehouse(models.Model): # update partner data if partner assigned if vals.get('partner_id'): self._update_partner_data(vals['partner_id'], vals.get('company_id')) + + self._check_multiwarehouse_group() + return warehouse def write(self, vals): @@ -246,6 +249,23 @@ class Warehouse(models.Model): to_disable_route_ids.toggle_active() return res + def unlink(self): + res = super().unlink() + self._check_multiwarehouse_group() + return res + + def _check_multiwarehouse_group(self): + cnt_by_company = self.env['stock.warehouse'].sudo().read_group([('active', '=', True)], ['company_id'], groupby=['company_id']) + if cnt_by_company: + max_cnt = max(cnt_by_company, key=lambda k: k['company_id_count']) + group_user = self.env.ref('base.group_user') + group_stock_multi_warehouses = self.env.ref('stock.group_stock_multi_warehouses') + if max_cnt['company_id_count'] <= 1 and group_stock_multi_warehouses in group_user.implied_ids: + group_user.write({'implied_ids': [(3, group_stock_multi_warehouses.id)]}) + group_stock_multi_warehouses.write({'users': [(3, user.id) for user in group_user.users]}) + if max_cnt['company_id_count'] > 1 and group_stock_multi_warehouses not in group_user.implied_ids: + group_user.write({'implied_ids': [(4, group_stock_multi_warehouses.id), (4, self.env.ref('stock.group_stock_multi_locations').id)]}) + @api.model def _update_partner_data(self, partner_id, company_id): if not partner_id: diff --git a/addons/stock/static/src/js/basic_model.js b/addons/stock/static/src/js/basic_model.js new file mode 100644 index 00000000000..6a5653c6314 --- /dev/null +++ b/addons/stock/static/src/js/basic_model.js @@ -0,0 +1,16 @@ +odoo.define('stock.BasicModel', function (require) { +"use strict"; + +var BasicModel = require('web.BasicModel'); +var localStorage = require('web.local_storage'); + +BasicModel.include({ + + _invalidateCache: function (dataPoint) { + this._super.apply(this, arguments); + if (dataPoint.model === 'stock.warehouse' && !localStorage.getItem('running_tour')) { + this.do_action('reload_context'); + } + } +}); +}); diff --git a/addons/stock/views/res_config_settings_views.xml b/addons/stock/views/res_config_settings_views.xml index 3a9a1b89384..860f7f56e7a 100644 --- a/addons/stock/views/res_config_settings_views.xml +++ b/addons/stock/views/res_config_settings_views.xml @@ -346,23 +346,6 @@ -
-
- -
-
-
-
diff --git a/addons/stock/views/stock_template.xml b/addons/stock/views/stock_template.xml index 92c47e7ccf4..2e9be903377 100644 --- a/addons/stock/views/stock_template.xml +++ b/addons/stock/views/stock_template.xml @@ -15,6 +15,7 @@ + diff --git a/addons/stock/views/stock_warehouse_views.xml b/addons/stock/views/stock_warehouse_views.xml index 4b213ea7d82..c25df973d78 100644 --- a/addons/stock/views/stock_warehouse_views.xml +++ b/addons/stock/views/stock_warehouse_views.xml @@ -5,7 +5,7 @@ stock.warehouse stock.warehouse -
+