diff --git a/CHANGELOG b/CHANGELOG index d8c3cca249..7c75ebe605 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Handle datetime_field in xxx2Many * Add new safe_eval * Ask previous password for set_preferences on password change * Add "Statusbar" option diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py index 0bd06c242b..115dd82503 100644 --- a/tryton/gui/window/view_form/model/field.py +++ b/tryton/gui/window/view_form/model/field.py @@ -460,7 +460,8 @@ class O2MField(CharField): from group import ModelRecordGroup mod = ModelRecordGroup(self.attrs['relation'], {}, model.window, parent=model, parent_name=self.attrs.get('relation_field', ''), - context=self.context) + context=self.context, + parent_datetime_field=self.attrs.get('datetime_field')) mod.signal_connect(mod, 'model-changed', self._model_changed) return mod @@ -518,7 +519,8 @@ class O2MField(CharField): from group import ModelRecordGroup mod = ModelRecordGroup(self.attrs['relation'], {}, model.window, parent=model, parent_name=self.attrs.get('relation_field', ''), - context=self.context) + context=self.context, + parent_datetime_field=self.attrs.get('datetime_field')) mod.signal_connect(mod, 'model-changed', self._model_changed) model.value[self.name] = mod #self.internal.signal_connect(self.internal, 'model-changed', @@ -550,7 +552,8 @@ class O2MField(CharField): model.value[self.name] = ModelRecordGroup( self.attrs['relation'], fields, model.window, parent=model, parent_name=self.attrs.get('relation_field', ''), - context=self.context) + context=self.context, + parent_datetime_field=self.attrs.get('datetime_field')) model.value[self.name].signal_connect(model.value[self.name], 'model-changed', self._model_changed) mod = None diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index 423a39f788..89de021465 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -73,11 +73,13 @@ class ModelList(list): class ModelRecordGroup(SignalEvent): def __init__(self, resource, fields, window, ids=None, parent=None, - parent_name='', context=None, readonly=False): + parent_name='', context=None, readonly=False, + parent_datetime_field=None): super(ModelRecordGroup, self).__init__() self.window = window self.parent = parent self.parent_name = parent_name + self.parent_datetime_field = parent_datetime_field self._context = context or {} self.resource = resource self.rpc = RPCProxy(resource) @@ -223,6 +225,9 @@ class ModelRecordGroup(SignalEvent): def _get_context(self): ctx = rpc.CONTEXT.copy() ctx.update(self._context) + if self.parent_datetime_field: + ctx['_datetime'] = self.parent.get_eval(check_load=False)\ + [self.parent_datetime_field] return ctx context = property(_get_context) diff --git a/tryton/gui/window/view_form/view/form_gtk/many2many.py b/tryton/gui/window/view_form/view/form_gtk/many2many.py index c8ae8277d6..3ffe9046f3 100644 --- a/tryton/gui/window/view_form/view/form_gtk/many2many.py +++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py @@ -146,7 +146,17 @@ class Many2Many(WidgetInterface): ids = [] if model_field: ids = model_field.get_client(model) - if ids != self.old: + reload = False + if self.attrs.get('datetime_field'): + datetime_field = model.get_eval(check_load=False)\ + [self.attrs['datetime_field']] + if self.screen.context.get('_datetime') != datetime_field: + self.screen.context['_datetime'] = datetime_field + reload = True + if self.screen.models.context.get('_datetime') != datetime_field: + self.screen.models._context['_datetime'] = datetime_field + reload = True + if ids != self.old or reload: self.screen.clear() self.screen.load(ids, set_cursor=False) self.old = ids diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py index dda701e104..3aa51b13d7 100644 --- a/tryton/gui/window/view_form/view/form_gtk/one2many.py +++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py @@ -579,7 +579,8 @@ class One2Many(WidgetInterface): domain = modelfield.domain_get(self._view.model) dia = Dialog(self.attrs['relation'], parent=self._view.model, model=self.screen.current_model, attrs=self.attrs, - window=self._window, readonly=readonly, domain=domain) + window=self._window, readonly=readonly, domain=domain, + model_ctx=self.screen.models.context) res, value = dia.run() dia.destroy()