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 -
+