From 2f6cec820da9eb802a59d4469fb41807873d802f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 17 Sep 2008 10:57:46 +0200 Subject: [PATCH] Add validation of the states required like for domain --- trytond/osv/orm.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/trytond/osv/orm.py b/trytond/osv/orm.py index 8f18261129..1868fdc722 100644 --- a/trytond/osv/orm.py +++ b/trytond/osv/orm.py @@ -1156,6 +1156,7 @@ class ORM(object): context.update(ctx_pref) records = self.browse(cursor, user, ids, context=context) for field_name, field in self._columns.iteritems(): + # validate domain if field._type in ('many2one', 'many2many', 'one2many') \ and field._domain: relation_obj = self.pool.get(field._obj) @@ -1201,8 +1202,31 @@ class ORM(object): field._domain, ], context=context) if not set(relation_ids) == set(find_ids): - self.raise_user_error(cursor, 'domain_' + field_name, - context=context) + self.raise_user_error(cursor, + 'domain_' + field_name, context=context) + # validate states required + if field.states and 'required' in field.states: + if isinstance(field.states['required'], basestring): + ctx = context.copy() + ctx.update(ctx_pref) + for record in records: + env = EvalEnvironment(record, self) + env.update(ctx) + env['current_date'] = datetime.datetime.today() + env['time'] = time + env['context'] = context + env['active_id'] = record.id + required = eval(field.states['required'], env) + if required and not record[field_name]: + self.raise_user_error(cursor, + 'required_' + field_name, context=context) + else: + if field.states['required']: + for record in records: + if not record[field_name]: + self.raise_user_error(cursor, + 'required_' + field_name, + context=context) def default_get(self, cursor, user, fields_names, context=None): '''