diff --git a/trytond/ir/__init__.py b/trytond/ir/__init__.py index ff40f639a9..89307f15f9 100644 --- a/trytond/ir/__init__.py +++ b/trytond/ir/__init__.py @@ -10,3 +10,4 @@ from exports import * from rule import * from property import * import module +from default import * diff --git a/trytond/ir/__tryton__.py b/trytond/ir/__tryton__.py index 2a93791783..9e8c49a9fd 100644 --- a/trytond/ir/__tryton__.py +++ b/trytond/ir/__tryton__.py @@ -19,5 +19,6 @@ 'module/module.xml', 'module/repository.xml', 'module/category.xml', + 'default.xml', ], } diff --git a/trytond/ir/default.py b/trytond/ir/default.py new file mode 100644 index 0000000000..2eed00125d --- /dev/null +++ b/trytond/ir/default.py @@ -0,0 +1,69 @@ +"Default" +from trytond.osv import fields, OSV + + +class Default(OSV): + "Default" + _name = 'ir.default' + _description = __doc__ + _rec_name = 'value' + _columns = { + 'model': fields.Many2One('ir.model', 'Model', required=True, + ondelete='cascade'), + 'field': fields.Many2One('ir.model.fields', 'Field', required=True, + ondelete='cascade'), + 'value': fields.Text('Value'), + 'clause': fields.Text('Clause'), + 'user': fields.Many2One('res.user', 'User', ondelete='cascade'), + } + + def get_default(self, cursor, user, model, clause, context=None): + res = {} + test_user = user + test_clause = clause + default_ids = [] + while True: + default_ids += self.search(cursor, user, [ + ('model.model', '=', model), + ('clause', '=', test_clause), + ('user', '=', test_user), + ], context=context) + if test_user: + test_user = False + continue + if test_clause: + test_clause = False + continue + break + for default in self.browse(cursor, user, default_ids, context=context): + if default.field.name not in res: + res[default.field.name] = default.value + return res + + def set_default(self, cursor, user, model, field, clause, value, + user_default, context=None): + model_obj = self.pool.get('ir.model') + field_obj = self.pool.get('ir.model.fields') + model_id = model_obj.search(cursor, user, [ + ('model', '=', model), + ], context=context)[0] + field_id = field_obj.search(cursor, user, [ + ('name', '=', field), + ], context=context)[0] + default_ids = self.search(cursor, user, [ + ('model', '=', model_id), + ('field', '=', field_id), + ('clause', '=', clause), + ('user', '=', user_default), + ], context=context) + if default_ids: + self.unlink(cursor, user, default_ids, context=context) + self.create(cursor, user, { + 'model': model_id, + 'field': field_id, + 'value': str(value), + 'clause': clause, + 'user': user_default, + }, context=context) + +Default() diff --git a/trytond/ir/default.xml b/trytond/ir/default.xml new file mode 100644 index 0000000000..00d957d4d2 --- /dev/null +++ b/trytond/ir/default.xml @@ -0,0 +1,52 @@ + + + + + ir.default + form + + + + + + + + + ]]> + + + + ir.default + tree + + + + + + + ]]> + + + + Defaults + ir.default + form + + + + + + + + + + + + + + diff --git a/trytond/osv/orm.py b/trytond/osv/orm.py index 6f0f24edc2..82e195cb2c 100644 --- a/trytond/osv/orm.py +++ b/trytond/osv/orm.py @@ -1124,9 +1124,12 @@ class ORM(object): # get the default values set by the user and override the default # values defined in the object - ir_values_obj = self.pool.get('ir.values') - res = ir_values_obj.get(cursor, user, 'default', False, [self._name]) - for value_id, field, field_value in res: + #ir_values_obj = self.pool.get('ir.values') + #res = ir_values_obj.get(cursor, user, 'default', False, [self._name]) + ir_default_obj = self.pool.get('ir.default') + defaults = ir_default_obj.get_default(cursor, user, + self._name, False, context=context) + for field, field_value in defaults.items(): if field in fields_names: fld_def = (field in self._columns) and self._columns[field] \ or self._inherit_fields[field][2] @@ -2024,9 +2027,11 @@ class ORM(object): table = arg[3] if arg[1] != 'in': if (arg[2] is False) and (arg[1] == '='): - qu1.append(arg[0] + ' is null') + qu1.append('(%s.%s IS NULL)' % \ + (table._table, arg[0])) elif (arg[2] is False) and (arg[1] == '<>' or arg[1] == '!='): - qu1.append(arg[0] + ' is not null') + qu1.append('(%s.%s IS NOT NULL)' % \ + (table._table, arg[0])) else: if arg[0] == 'id': if arg[1] == 'join':