From b9beb3076e7d838960abf20dcf904586a533e6c5 Mon Sep 17 00:00:00 2001 From: "RGA (OpenERP)" Date: Mon, 20 Sep 2010 14:40:37 +0530 Subject: [PATCH 1/3] [IMP]when create new filter it should be modified if same name filter already exist otherwise create new one bzr revid: rga@tinyerp.com-20100920091037-tyheqqfx72b3cbm2 --- bin/addons/base/ir/ir_filters.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/bin/addons/base/ir/ir_filters.py b/bin/addons/base/ir/ir_filters.py index 2821d0c94b7..272d1c718c1 100644 --- a/bin/addons/base/ir/ir_filters.py +++ b/bin/addons/base/ir/ir_filters.py @@ -36,6 +36,20 @@ class ir_filters(osv.osv): act_ids = self.search(cr,uid,[('model_id','=',model),('user_id','=',uid)]) my_acts = self.read(cr, uid, act_ids, ['name', 'domain','context']) return my_acts + + def create_or_replace(self, cr, uid, vals, context=None): + if context is None: + context = {} + is_filter_exist = False + for filter in self.get_filters(cr, uid, vals['model_id']): + if filter['name'].lower() == vals['name'].lower(): + is_filter_exist = filter['id'] + break + if is_filter_exist: + return super(ir_filters, self).write(cr, uid, is_filter_exist, vals, context) + else: + return super(ir_filters, self).create(cr, uid, vals, context) + _columns = { 'name': fields.char('Action Name', size=64, translate=True, required=True), From 9b0e0fa9d834c26fa93c97d92b727eae231a669b Mon Sep 17 00:00:00 2001 From: "RGA (OpenERP)" Date: Wed, 29 Sep 2010 13:07:41 +0530 Subject: [PATCH 2/3] Add UNIQUE constraint in ir.filters + refactor code bzr revid: rga@tinyerp.com-20100929073741-kpnvws23uvj3g00e --- bin/addons/base/ir/ir_filters.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/bin/addons/base/ir/ir_filters.py b/bin/addons/base/ir/ir_filters.py index 272d1c718c1..c9cdf16d31e 100644 --- a/bin/addons/base/ir/ir_filters.py +++ b/bin/addons/base/ir/ir_filters.py @@ -38,17 +38,14 @@ class ir_filters(osv.osv): return my_acts def create_or_replace(self, cr, uid, vals, context=None): - if context is None: - context = {} - is_filter_exist = False + filter_id = None for filter in self.get_filters(cr, uid, vals['model_id']): if filter['name'].lower() == vals['name'].lower(): - is_filter_exist = filter['id'] + filter_id = filter['id'] break - if is_filter_exist: - return super(ir_filters, self).write(cr, uid, is_filter_exist, vals, context) - else: - return super(ir_filters, self).create(cr, uid, vals, context) + if filter_id: + return self.write(cr, uid, filter_id, vals, context) + return self.create(cr, uid, vals, context) _columns = { @@ -58,6 +55,11 @@ class ir_filters(osv.osv): 'context': fields.text('Context Value', required=True), 'model_id': fields.selection(_list_all_models, 'Model', required=True), } + + _sql_constraints = [ + ('name_model_uid_uniq', 'UNIQUE(name, model_id, user_id)', 'Filter name must be unique!'), + ] + ir_filters() From d935a5d80efa93d9b79d61ce5c0b66e26111c47f Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 6 Oct 2010 11:40:03 +0200 Subject: [PATCH 3/3] [IMP] ir.filters: improve create_or_replace() and make unique constraint case insensitive bzr revid: odo@openerp.com-20101006094003-dlj24xrmotnbwvhv --- bin/addons/base/ir/ir_filters.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/bin/addons/base/ir/ir_filters.py b/bin/addons/base/ir/ir_filters.py index c9cdf16d31e..541dbdb60c6 100644 --- a/bin/addons/base/ir/ir_filters.py +++ b/bin/addons/base/ir/ir_filters.py @@ -20,6 +20,7 @@ ############################################################################## from osv import osv, fields +from tools.translate import _ class ir_filters(osv.osv): ''' @@ -36,30 +37,31 @@ class ir_filters(osv.osv): act_ids = self.search(cr,uid,[('model_id','=',model),('user_id','=',uid)]) my_acts = self.read(cr, uid, act_ids, ['name', 'domain','context']) return my_acts - + def create_or_replace(self, cr, uid, vals, context=None): filter_id = None - for filter in self.get_filters(cr, uid, vals['model_id']): - if filter['name'].lower() == vals['name'].lower(): - filter_id = filter['id'] - break - if filter_id: - return self.write(cr, uid, filter_id, vals, context) + lower_name = vals['name'].lower() + matching_filters = [x for x in self.get_filters(cr, uid, vals['model_id']) + if x['name'].lower() == lower_name] + if matching_filters: + self.write(cr, uid, matching_filters[0]['id'], vals, context) + return False return self.create(cr, uid, vals, context) + def _auto_init(self, cr, context={}): + super(ir_filters, self)._auto_init(cr, context) + # Use unique index to implement unique constraint on the lowercase name (not possible using a constraint) + cr.execute("SELECT indexname FROM pg_indexes WHERE indexname = 'ir_filters_name_model_uid_unique_index'") + if not cr.fetchone(): + cr.execute('CREATE UNIQUE INDEX "ir_filters_name_model_uid_unique_index" ON ir_filters (lower(name), model_id, user_id)') _columns = { 'name': fields.char('Action Name', size=64, translate=True, required=True), 'user_id':fields.many2one('res.users', 'User', help='False means for every user'), 'domain': fields.text('Domain Value', required=True), 'context': fields.text('Context Value', required=True), - 'model_id': fields.selection(_list_all_models, 'Model', required=True), + 'model_id': fields.selection(_list_all_models, 'Object', required=True), } - - _sql_constraints = [ - ('name_model_uid_uniq', 'UNIQUE(name, model_id, user_id)', 'Filter name must be unique!'), - ] - ir_filters()