[FIX] stock: lost history after unpack

In Inventory Settings activate packages and storage locations.
Create a storable product [TEST] with tracking by lot
Create a PO for [TEST] with a [QTY] larger than one.
Receive the products (lot [A]) and put them in a package [PKG].
Create and process an internal transfer of the whole package [PKG]
  from the input location to any location.
Unpack [PKG].
Go to Stock > Reporting > Locations
Locate the received product, hit 'History'

Issue: traceability is empty.
This occurs because the 'unpack' operation clean the information
relative to the package from the stock quant.
When accessing the history, the system lookup for move lines having the
same package (none in this case), so nothing is found

opw-3769752

closes odoo/odoo#158949

X-original-commit: 314d44b400717f392bfbb70f66ef9605c1f31041
Signed-off-by: William Henrotin (whe) <whe@odoo.com>
Signed-off-by: Andrea Grazioso (agr) <agr@odoo.com>
This commit is contained in:
Andrea Grazioso (agr-odoo)
2024-03-25 14:39:18 +00:00
parent 3a5c85fe19
commit a5a206f8a8
2 changed files with 62 additions and 3 deletions
+6 -3
View File
@@ -354,10 +354,13 @@ class StockQuant(models.Model):
('location_id', '=', self.location_id.id),
('location_dest_id', '=', self.location_id.id),
('lot_id', '=', self.lot_id.id),
'|',
('package_id', '=', self.package_id.id),
('result_package_id', '=', self.package_id.id),
]
if self.package_id:
action['domain'] += [
'|',
('package_id', '=', self.package_id.id),
('result_package_id', '=', self.package_id.id),
]
action['context'] = literal_eval(action.get('context'))
action['context']['search_default_product_id'] = self.product_id.id
return action
+56
View File
@@ -1061,6 +1061,62 @@ class StockQuant(TransactionCase):
self.assertEqual(destruction_move_line.location_dest_id.id, creation_move_line.location_id.id)
self.assertEqual(dummy_quant.quantity, 0)
def test_unpack_and_quants_history(self):
"""
Test that after unpacking the quant history is preserved
"""
product = self.env['product.product'].create({
'name': 'Product',
'type': 'product',
'tracking': 'lot',
})
lot_a = self.env['stock.lot'].create({
'name': 'A',
'product_id': product.id,
'product_qty': 5,
})
package = self.env['stock.quant.package'].create({
'name': 'Super Package',
})
stock_location = self.env['stock.warehouse'].search([], limit=1).lot_stock_id
dst_location = stock_location.child_ids[0]
picking_type = self.env.ref('stock.picking_type_internal')
self.env['stock.quant']._update_available_quantity(product, stock_location, 5.0, lot_id=lot_a, package_id=package)
picking = self.env['stock.picking'].create({
'picking_type_id': picking_type.id,
'location_id': dst_location.id,
'location_dest_id': stock_location.id,
'move_ids': [(0, 0, {
'name': 'In 5 x %s' % product.name,
'product_id': product.id,
'location_id': stock_location.id,
'location_dest_id': dst_location.id,
'product_uom_qty': 5,
'product_uom': product.uom_id.id,
})],
})
picking.action_confirm()
picking.move_ids.move_line_ids.write({
'quantity': 5,
'lot_id': lot_a.id,
'package_id': package.id,
'result_package_id': package.id,
})
picking.button_validate()
package.unpack()
quant = self.env['stock.quant'].search([
('product_id', '=', product.id),
('location_id', '=', dst_location.id),
])
action = quant.action_view_stock_moves()
history = self.env['stock.move.line'].search(action['domain'])
self.assertTrue(history)
class StockQuantRemovalStrategy(TransactionCase):
def setUp(self):
super().setUp()