[FIX] stock: copy reservation_date in split moves

steps to reproduce:
- activate Settings > Reception Report
- Create new storable product
- Create + confirm planned delivery of 5 of the product
- Create + confirm planned receipt of 2 of the product
- Open reception report (Allocation button) in receipt
- Assign the 2 products to the delivery
- create +confirm a new delivery with 2 products
- create + confirm a new receipt with 2 products
- Open reception report in new receipt

Expected result:
The stock.move in the original delivery will be split into 2 moves, with
Demand qtys of 2 and 3 respectively. Opening the new receipt's reception
report will allow you to assign to the remaining 2 in the original
delivery

Actual result:
Only the new delivery is displayed rather than the old delivery

Issue was due to the `reservation_date` not being copied into the newly
split move even though we would expect it to be the same (instead it is
`False` since the default reservation method for operation types is
`at_confirm` and the new move does not have `action_confirm` called on
it, so the date is never set). Since we usually don't want this date to
be copied, we only manually do it in the reception report splits.

Part-of: odoo/odoo#126791
This commit is contained in:
Tiffany Chang (tic)
2023-10-24 12:38:05 +00:00
parent 715a87ce20
commit 5f816d635a
@@ -222,7 +222,10 @@ class ReceptionReport(models.AbstractModel):
new_move_vals = []
for out, qty_to_link in zip(outs, qtys):
if float_compare(out.product_qty, qty_to_link, precision_rounding=out.product_id.uom_id.rounding) == 1:
new_move_vals += out._split(out.product_qty - qty_to_link)
new_move = out._split(out.product_qty - qty_to_link)
if new_move:
new_move[0]['reservation_date'] = out.reservation_date
new_move_vals += new_move
out_to_new_out[out.id] = self.env['stock.move']
new_outs = self.env['stock.move'].create(new_move_vals)
# don't do action confirm to avoid creating additional unintentional reservations
@@ -301,6 +304,7 @@ class ReceptionReport(models.AbstractModel):
new_move_vals = out._split(out.product_qty - total_still_linked)
if new_move_vals:
new_move_vals[0]['procure_method'] = 'make_to_order'
new_move_vals[0]['reservation_date'] = out.reservation_date
new_out = self.env['stock.move'].create(new_move_vals)
# don't do action confirm to avoid creating additional unintentional reservations
new_out.write({'state': 'confirmed'})