[FIX] stock,purchase_stock: multi-company issue on routes with a single company

Step to follow

Do not activate multiple companies, keep it standard to 1
Enable multi-locations and routes
Create a second location for raw materials and a new Receipt operation type with the new location as destination location
Go to routes -> edit the buy route -> add a second rule with "Buy" and save.

Cause of the issue

When a stock rule is created from a stock route, the default company
cannot be found as there is none assigned to the stock route.

Solution

Override the default_get method for stock rules in order to use the
current company

opw-2578984

closes odoo/odoo#74380

X-original-commit: 2b8d7d76adceeca16f97e394a6734bb5be633c3b
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
This commit is contained in:
Hubert (huvw)
2021-07-28 16:30:39 +00:00
parent 9aab080c1c
commit 81519aa84b
3 changed files with 61 additions and 0 deletions
+1
View File
@@ -17,3 +17,4 @@ from . import test_replenish_wizard
from . import test_reordering_rule
from . import test_move_cancel_propagation
from . import test_product_template
from . import test_routes
@@ -0,0 +1,53 @@
from odoo.tests.common import TransactionCase, Form
class TestRoutes(TransactionCase):
def test_allow_rule_creation_for_route_without_company(self):
self.env['res.config.settings'].write({
'group_stock_adv_location': True,
'group_stock_multi_locations': True,
})
warehouse = self.env['stock.warehouse'].search([('company_id', '=', self.env.company.id)], limit=1)
location_1 = self.env['stock.location'].create({
'name': 'loc1',
'location_id': warehouse.id
})
location_2 = self.env['stock.location'].create({
'name': 'loc2',
'location_id': warehouse.id
})
receipt_1 = self.env['stock.picking.type'].create({
'name': 'Receipts from loc1',
'sequence_code': 'IN1',
'code': 'incoming',
'warehouse_id': warehouse.id,
'default_location_dest_id': location_1.id,
})
receipt_2 = self.env['stock.picking.type'].create({
'name': 'Receipts from loc2',
'sequence_code': 'IN2',
'code': 'incoming',
'warehouse_id': warehouse.id,
'default_location_dest_id': location_2.id,
})
route = self.env['stock.location.route'].create({
'name': 'Buy',
'company_id': False
})
with Form(route) as r:
with r.rule_ids.new() as line:
line.name = 'first rule'
line.action = 'buy'
line.picking_type_id = receipt_1
with r.rule_ids.new() as line:
line.name = 'second rule'
line.action = 'buy'
line.picking_type_id = receipt_2
+7
View File
@@ -34,6 +34,13 @@ class StockRule(models.Model):
_order = "sequence, id"
_check_company_auto = True
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
if 'company_id' in fields_list and not res['company_id']:
res['company_id'] = self.env.company.id
return res
name = fields.Char(
'Name', required=True, translate=True,
help="This field will fill the packing origin and the name of its moves")