[FIX] point_of_sale: Correctly set owner on picking create from POS

Current behavior:
If you create a product tracked by serial number and set an owner on the
product. If you make an order from the PoS with this product, the owner
wouldn't be set correctly on the picking created from the PoS.

Steps to reproduce:
- Create product A, tracked by serial number, storable, and available in
    the PoS.
- Add some quantity of product A with an owner (e.g. "Owner A").
- Create a PoS order with product A.
- Validate the order.
- Close the PoS session, go to the picking created from the PoS order
  there will not be any owner set on the picking.

opw-3206618

closes odoo/odoo#116919

X-original-commit: d6c44280eb8a86925392e87cf1a35bfe8b00177e
Signed-off-by: Engels Robin (roen) <roen@odoo.com>
This commit is contained in:
roen-odoo
2023-03-29 14:26:04 +02:00
parent 7b9a705f71
commit 37edaca7af
2 changed files with 61 additions and 1 deletions
+2 -1
View File
@@ -261,7 +261,8 @@ class StockMove(models.Model):
)
ml_vals.update({
'lot_id': existing_lot.id,
'location_id': quant.location_id.id or move.location_id.id
'location_id': quant.location_id.id or move.location_id.id,
'owner_id': quant.owner_id.id or False,
})
else:
ml_vals.update({'lot_name': lot.lot_name})
@@ -1412,3 +1412,62 @@ class TestPointOfSaleFlow(TestPointOfSaleCommon):
order_payment.with_context(**payment_context).check()
current_session.action_pos_session_closing_control()
self.assertEqual(current_session.move_id.line_ids[0].account_id.id, account.id)
def test_tracked_product_with_owner(self):
# open pos session
self.pos_config.open_ui()
current_session = self.pos_config.current_session_id
# set up product iwith SN tracing and create two lots (1001, 1002)
self.stock_location = self.company_data['default_warehouse'].lot_stock_id
self.product2 = self.env['product.product'].create({
'name': 'Product A',
'type': 'product',
'tracking': 'serial',
'categ_id': self.env.ref('product.product_category_all').id,
})
lot1 = self.env['stock.lot'].create({
'name': '1001',
'product_id': self.product2.id,
'company_id': self.env.company.id,
})
self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 1, lot_id=lot1, owner_id=self.partner1)
# create pos order with the two SN created before
order = self.PosOrder.create({
'company_id': self.env.company.id,
'session_id': current_session.id,
'partner_id': self.partner1.id,
'lines': [(0, 0, {
'name': "OL/0001",
'id': 1,
'product_id': self.product2.id,
'price_unit': 6,
'discount': 0,
'qty': 1,
'tax_ids': [[6, False, []]],
'price_subtotal': 6,
'price_subtotal_incl': 6,
'pack_lot_ids': [
[0, 0, {'lot_name': '1001'}],
]
})],
'amount_paid': 6.0,
'amount_total': 6.0,
'amount_tax': 0.0,
'amount_return': 0.0,
'to_invoice': False,
})
payment_context = {"active_ids": order.ids, "active_id": order.id}
order_payment = self.PosMakePayment.with_context(**payment_context).create({
'amount': order.amount_total,
'payment_method_id': self.cash_payment_method.id
})
order_payment.with_context(**payment_context).check()
current_session.action_pos_session_closing_control()
self.assertEqual(current_session.picking_ids.move_line_ids.owner_id.id, self.partner1.id)