diff --git a/sale_order_line_date/models/sale_order.py b/sale_order_line_date/models/sale_order.py index 0553da50e0a..e47f211e810 100644 --- a/sale_order_line_date/models/sale_order.py +++ b/sale_order_line_date/models/sale_order.py @@ -6,7 +6,7 @@ # Copyright 2018 Camptocamp SA # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) -from odoo import api, models +from odoo import models class SaleOrder(models.Model): diff --git a/sale_order_line_date/models/sale_order_line.py b/sale_order_line_date/models/sale_order_line.py index d0129e85dbb..c844aaad1a3 100644 --- a/sale_order_line_date/models/sale_order_line.py +++ b/sale_order_line_date/models/sale_order_line.py @@ -35,15 +35,19 @@ def _prepare_procurement_values(self, group_id=False): return vals def write(self, vals): + """Propagate a new commitment date to pending stock moves""" res = super().write(vals) - moves_to_upd = set() if "commitment_date" in vals: - for line in self: - for move in line.move_ids: - if move.state not in ["cancel", "done"]: - moves_to_upd.add(move.id) - if moves_to_upd: - self.env["stock.move"].browse(moves_to_upd).write( - {"date_deadline": vals.get("commitment_date")} - ) + if vals.get("commitment_date"): + self.move_ids.filtered( + lambda sm: sm.state not in ["cancel", "done"] + ).write({"date_deadline": vals.get("commitment_date")}) + else: + for line in self: + date_deadline = ( + line.order_id.commitment_date or line._expected_date() + ) + line.move_ids.filtered( + lambda sm: sm.state not in ["cancel", "done"] + ).write({"date_deadline": date_deadline}) return res diff --git a/sale_order_line_date/tests/test_sale_order_line_date.py b/sale_order_line_date/tests/test_sale_order_line_date.py index 55a36271f3e..d13bd1effd1 100644 --- a/sale_order_line_date/tests/test_sale_order_line_date.py +++ b/sale_order_line_date/tests/test_sale_order_line_date.py @@ -166,3 +166,14 @@ def test_03_line_commitment_date_picking_propagation(self): self._assert_equal_dates( self.sale_line1.commitment_date, self.sale_line1.move_ids.date_deadline ) + + def test_04_line_commitment_date_removal(self): + self.sale1.commitment_date = False + self.sale1.action_confirm() + self._assert_equal_dates( + self.sale_line1.commitment_date, self.sale_line1.move_ids.date_deadline + ) + self.sale_line1.commitment_date = False + self._assert_equal_dates( + self.sale_line1._expected_date(), self.sale_line1.move_ids.date_deadline + )