diff --git a/issue11077.diff b/issue11077.diff new file mode 100644 index 0000000..f5977e4 --- /dev/null +++ b/issue11077.diff @@ -0,0 +1,92 @@ +diff --git a/trytond/trytond/model/multivalue.py b/trytond/trytond/model/multivalue.py +index 5cf45d4a..f3765dd6 100644 +--- a/trytond/trytond/model/multivalue.py ++++ b/trytond/trytond/model/multivalue.py +@@ -3,6 +3,7 @@ + from ..pool import Pool + from .model import Model + from .match import MatchMixin ++from .fields import MultiValue + + + class MultiValueMixin(object): +@@ -32,7 +33,15 @@ class MultiValueMixin(object): + pattern = pattern.copy() + pattern[fname] = self + break +- return Value(**pattern) ++ record = Value(**pattern) ++ for oname, ofield in self._fields.items(): ++ if (oname != field ++ and isinstance(ofield, MultiValue) ++ and self.multivalue_model(oname) == Value): ++ func = getattr(self, 'default_%s' % oname, None) ++ if func: ++ setattr(record, oname, func(**pattern)) ++ return record + + def __values(self, field, pattern, match_none=True): + Value = self.multivalue_model(field) +diff --git a/trytond/trytond/tests/multivalue.py b/trytond/trytond/tests/multivalue.py +index 45fb3863..f303a019 100644 +--- a/trytond/trytond/tests/multivalue.py ++++ b/trytond/trytond/tests/multivalue.py +@@ -8,13 +8,25 @@ class ModelMultiValue(ModelSQL, MultiValueMixin): + "Model MultiValue" + __name__ = 'test.model_multivalue' + value = fields.MultiValue(fields.Char("Value")) ++ value_default = fields.MultiValue(fields.Char("Value Default")) + values = fields.One2Many( + 'test.model_multivalue.value', 'record', "Values") + ++ @classmethod ++ def multivalue_model(cls, field): ++ pool = Pool() ++ if field == 'value_default': ++ return pool.get('test.model_multivalue.value') ++ return super().multivalue_model(field) ++ + @classmethod + def default_value(cls, **pattern): + return "default" + ++ @classmethod ++ def default_value_default(cls, **pattern): ++ return "other default" ++ + + class ModelValue(ModelSQL, ValueMixin): + "Model Value" +@@ -23,6 +35,7 @@ class ModelValue(ModelSQL, ValueMixin): + 'test.model_multivalue', "Record") + condition = fields.Char("Condition") + value = fields.Char("Value") ++ value_default = fields.Char("Value Default") + + + def register(module): +diff --git a/trytond/trytond/tests/test_multivalue.py b/trytond/trytond/tests/test_multivalue.py +index 73722978..5b97232a 100644 +--- a/trytond/trytond/tests/test_multivalue.py ++++ b/trytond/trytond/tests/test_multivalue.py +@@ -13,6 +13,20 @@ class MultiValueTestCase(unittest.TestCase): + def setUpClass(cls): + activate_module('tests') + ++ @with_transaction() ++ def test_set_multivalue_other_default(self): ++ "Test set_multivalue with other default" ++ pool = Pool() ++ ModelMultiValue = pool.get('test.model_multivalue') ++ ModelValue = pool.get('test.model_multivalue.value') ++ ++ record = ModelMultiValue() ++ record.save() ++ record.set_multivalue('value', "test") ++ ++ value, = ModelValue.search([]) ++ self.assertEqual(value.value_default, "other default") ++ + @with_transaction() + def test_get_multivalue(self): + "Test get_multivalue" \ No newline at end of file diff --git a/series b/series index d479125..e44fd87 100644 --- a/series +++ b/series @@ -115,4 +115,6 @@ issue9004.diff # [product] Make product code unique # worker_logger.diff #[trytond] Move exception handling into transaction to keep the database name -deactivable_product_supplier.diff # [purchase] Allow product supplier to be dactivated [#048267] Remove on 6.0 \ No newline at end of file +deactivable_product_supplier.diff # [purchase] Allow product supplier to be dactivated [#048267] Remove on 6.0 + +issue11077.diff # [trytond] Fill Value of MultiValue with the other default values [#048483] Remove on 6.0