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
This commit is contained in:
Cédric Krier
2026-10-05 18:03:10 +02:00
parent 5a85ab48a8
commit 0cc22fcd25
3 changed files with 26 additions and 0 deletions
+12
View File
@@ -157,6 +157,10 @@ class Move(metaclass=PoolMeta):
('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 @@ class Move(metaclass=PoolMeta):
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'
+2
View File
@@ -1035,6 +1035,8 @@ class Move(Workflow, ModelSQL, ModelView):
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):
+12
View File
@@ -601,6 +601,10 @@ class Move(metaclass=PoolMeta):
super().__setup__()
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 @@ class Move(metaclass=PoolMeta):
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)