Skip to content
Snippets Groups Projects
Commit a0e6bc87 authored by Hoang Tran's avatar Hoang Tran Committed by Tiffany Chang (tic)
Browse files

[FIX] stock: avoid write on move when create return line


When creating a wizard `stock.return.picking` and call
`_onchange_picking_id`, the creation of return picking line will perform
a write on move linked with it, due to `uom_id` being set as related with
`readonly=False`. Set `readonly` to `True` to avoid it

closes odoo/odoo#77154

X-original-commit: c92b3657f659ca21cd5e0a1a2a2121dee28c25ee
Signed-off-by: default avatarTiffany Chang <tic@odoo.com>
parent 820df9ee
No related branches found
No related tags found
No related merge requests found
......@@ -18,3 +18,4 @@ from . import test_proc_rule
from . import test_wise_operator
from . import test_report
from . import test_report_stock_quantity
from . import test_stock_return_picking
# -*- coding: utf-8 -*-
from odoo.addons.stock.tests.common import TestStockCommon
class TestReturnPicking(TestStockCommon):
def test_stock_return_picking_line_creation(self):
StockReturnObj = self.env['stock.return.picking']
picking_out = self.PickingObj.create({
'picking_type_id': self.picking_type_out,
'location_id': self.stock_location,
'location_dest_id': self.customer_location})
move_1 = self.MoveObj.create({
'name': self.UnitA.name,
'product_id': self.UnitA.id,
'product_uom_qty': 2,
'product_uom': self.uom_unit.id,
'picking_id': picking_out.id,
'location_id': self.stock_location,
'location_dest_id': self.customer_location})
move_2 = self.MoveObj.create({
'name': self.UnitA.name,
'product_id': self.UnitA.id,
'product_uom_qty': 1,
'product_uom': self.uom_dozen.id,
'picking_id': picking_out.id,
'location_id': self.stock_location,
'location_dest_id': self.customer_location})
picking_out.action_confirm()
picking_out.action_assign()
move_1.quantity_done = 2
move_2.quantity_done = 1
picking_out.button_validate()
return_wizard = StockReturnObj.with_context(active_id=picking_out.id, active_ids=picking_out.ids).create({
'location_id': self.stock_location,
'picking_id': picking_out.id,
})
return_wizard._onchange_picking_id()
ReturnPickingLineObj = self.env['stock.return.picking.line']
# Check return line of uom_unit move
return_line = ReturnPickingLineObj.search([('move_id', '=', move_1.id), ('wizard_id.picking_id', '=', picking_out.id)], limit=1)
self.assertEqual(return_line.product_id.id, self.UnitA.id, 'Return line should have exact same product as outgoing move')
self.assertEqual(return_line.uom_id.id, self.uom_unit.id, 'Return line should have exact same uom as product uom')
# Check return line of uom_dozen move
return_line = ReturnPickingLineObj.search([('move_id', '=', move_2.id), ('wizard_id.picking_id', '=', picking_out.id)], limit=1)
self.assertEqual(return_line.product_id.id, self.UnitA.id, 'Return line should have exact same product as outgoing move')
self.assertEqual(return_line.uom_id.id, self.uom_unit.id, 'Return line should have exact same uom as product uom')
......@@ -13,7 +13,7 @@ class ReturnPickingLine(models.TransientModel):
product_id = fields.Many2one('product.product', string="Product", required=True, domain="[('id', '=', product_id)]")
quantity = fields.Float("Quantity", digits='Product Unit of Measure', required=True)
uom_id = fields.Many2one('uom.uom', string='Unit of Measure', related='move_id.product_uom', readonly=False)
uom_id = fields.Many2one('uom.uom', string='Unit of Measure', related='product_id.uom_id')
wizard_id = fields.Many2one('stock.return.picking', string="Wizard")
move_id = fields.Many2one('stock.move', "Move")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment