details:   https://code.tryton.org/tryton/commit/c55d0522026f
branch:    default
user:      Cédric Krier <[email protected]>
date:      Mon Oct 05 18:03:10 2026 +0200
description:
        Use default value when copying "updated" fields of stock move

        Since 6c611c520744, the readonly of field is enforced so the copied 
value of
        boolean field must be the default value for readonly fields.

        Closes #15148
diffstat:

 modules/production/stock.py       |  12 ++++++++++++
 modules/stock/move.py             |   2 ++
 modules/stock_conversion/stock.py |  12 ++++++++++++
 3 files changed, 26 insertions(+), 0 deletions(-)

diffs (67 lines):

diff -r 381e3d082ecd -r c55d0522026f modules/production/stock.py
--- a/modules/production/stock.py       Mon Oct 05 16:41:04 2026 +0200
+++ b/modules/production/stock.py       Mon Oct 05 18:03:10 2026 +0200
@@ -157,6 +157,10 @@
             ('production_output' + nested, operator, operand, *extra),
             ]
 
+    @classmethod
+    def default_production_cost_price_updated(cls):
+        return False
+
     def set_effective_date(self):
         if not self.effective_date and self.production_input:
             self.effective_date = self.production_input.effective_start_date
@@ -175,6 +179,14 @@
     def _rec_name_origin(self):
         return super()._rec_name_origin() or self.production
 
+    @classmethod
+    def copy(cls, moves, default=None):
+        default = default.copy() if default is not None else {}
+        default.setdefault(
+            'production_cost_price_updated',
+            cls.default_production_cost_price_updated())
+        return super().copy(moves, default=default)
+
 
 class ProductQuantitiesByWarehouseMove(metaclass=PoolMeta):
     __name__ = 'stock.product_quantities_warehouse.move'
diff -r 381e3d082ecd -r c55d0522026f modules/stock/move.py
--- a/modules/stock/move.py     Mon Oct 05 16:41:04 2026 +0200
+++ b/modules/stock/move.py     Mon Oct 05 18:03:10 2026 +0200
@@ -1035,6 +1035,8 @@
         default.setdefault('internal_quantity', 0)
         default.setdefault('cost_price')
         default.setdefault('outcome_moves', None)
+        default.setdefault(
+            'unit_price_updated', cls.default_unit_price_updated())
         return super().copy(moves, default=default)
 
     def compute_fields(self, field_names=None):
diff -r 381e3d082ecd -r c55d0522026f modules/stock_conversion/stock.py
--- a/modules/stock_conversion/stock.py Mon Oct 05 16:41:04 2026 +0200
+++ b/modules/stock_conversion/stock.py Mon Oct 05 18:03:10 2026 +0200
@@ -602,6 +602,10 @@
         cls._allow_modify_closed_period.add('conversion_cost_price_updated')
 
     @classmethod
+    def default_conversion_cost_price_updated(cls):
+        return False
+
+    @classmethod
     def _get_origin(cls):
         return [*super()._get_origin(), 'stock.conversion']
 
@@ -616,3 +620,11 @@
                     if m.state == 'done'
                     and isinstance(m.origin, Conversion)],
                 {'conversion_cost_price_updated': True})
+
+    @classmethod
+    def copy(cls, moves, default=None):
+        default = default.copy() if default is not None else {}
+        default.setdefault(
+            'conversion_cost_price_updated',
+            cls.default_conversion_cost_price_updated())
+        return super().copy(moves, default=default)

Reply via email to