From 156511fdf8c8d4cda8283409271ae66efd2b3b93 Mon Sep 17 00:00:00 2001 From: flotho Date: Sun, 15 Nov 2015 15:33:22 +0100 Subject: [PATCH 1/3] Initiate migration process : * set intallable * Change API in some files --- mass_editing/__openerp__.py | 4 +- mass_editing/models/ir_model_fields.py | 22 ++-- mass_editing/models/mass_object.py | 131 +++++++++++------------ mass_editing/views/mass_editing_view.xml | 4 +- 4 files changed, 82 insertions(+), 79 deletions(-) diff --git a/mass_editing/__openerp__.py b/mass_editing/__openerp__.py index 4b66b14e48a..650e86db4da 100644 --- a/mass_editing/__openerp__.py +++ b/mass_editing/__openerp__.py @@ -21,7 +21,7 @@ ############################################################################## { "name": "Mass Editing", - "version": "8.0.1.3.0", + "version": "9.0.1.1.0", "author": "Serpent Consulting Services,Odoo Community Association (OCA)", "contributors": [ "Oihane Crucelaegui ", @@ -45,7 +45,7 @@ "security/ir.model.access.csv", 'views/mass_editing_view.xml', ], - 'installable': False, + 'installable': True, 'application': True, 'auto_install': False, } diff --git a/mass_editing/models/ir_model_fields.py b/mass_editing/models/ir_model_fields.py index b1413fe0dee..49aea573664 100644 --- a/mass_editing/models/ir_model_fields.py +++ b/mass_editing/models/ir_model_fields.py @@ -20,15 +20,16 @@ # ############################################################################## -from openerp.osv import orm +import logging +from openerp import models, fields, api, _ +_logger = logging.getLogger(__name__) -class IrModelFields(orm.Model): +class IrModelFields(models.Model): _inherit = 'ir.model.fields' - def search( - self, cr, uid, args, offset=0, limit=0, order=None, context=None, - count=False): + @api.model + def search(self, args, offset=0, limit=None, order=None, count=False): model_domain = [] for domain in args: if (len(domain) > 2 and @@ -39,7 +40,10 @@ def search( ] else: model_domain.append(domain) - return super(IrModelFields, self).search( - cr, uid, model_domain, offset=offset, limit=limit, order=order, - context=context, count=count - ) + + _logger.debug("DOMAIN TO SEARCH") + _logger.debug(model_domain) + _logger.debug(args) + return super(IrModelFields, self).search(model_domain, offset=offset, + limit=limit, order=order, count=count + ) diff --git a/mass_editing/models/mass_object.py b/mass_editing/models/mass_object.py index d859ea776cd..6401c432bdf 100644 --- a/mass_editing/models/mass_object.py +++ b/mass_editing/models/mass_object.py @@ -20,60 +20,65 @@ # ############################################################################## +import logging from openerp import SUPERUSER_ID -from openerp.osv import orm, fields from openerp.tools.translate import _ +from openerp import models, fields, api +_logger = logging.getLogger(__name__) -class MassObject(orm.Model): +class MassObject(models.Model): _name = "mass.object" - _columns = { - 'name': fields.char("Name", size=64, required=True, select=1), - 'model_id': fields.many2one( - 'ir.model', 'Model', required=True, select=1), - 'field_ids': fields.many2many( - 'ir.model.fields', 'mass_field_rel', 'mass_id', 'field_id', - 'Fields'), - 'ref_ir_act_window': fields.many2one( - 'ir.actions.act_window', 'Sidebar Action', readonly=True, + + + name = fields.Char("Name", size=64, required=True, select=1) + model_id = fields.Many2one(comodel_name='ir.model', string='Model', + required=True, index=True) + field_ids = fields.Many2many(comodel_name='ir.model.fields', + relation='mass_field_rel', column1='mass_id', + column2='field_id', string='Fields') + ref_ir_act_window = fields.Many2one(comodel_name='ir.actions.act_window', + string='Sidebar Action', readonly=True, help="Sidebar action to make this template available on records \ - of the related document model"), - 'ref_ir_value': fields.many2one( - 'ir.values', 'Sidebar Button', readonly=True, - help="Sidebar button to open the sidebar action"), - 'model_ids': fields.many2many('ir.model', string='Model List') - } + of the related document model") + ref_ir_value = fields.Many2one(comodel_name='ir.values', + string='Sidebar Button', readonly=True, + help="Sidebar button to open the sidebar action") + model_ids = fields.Many2many(comodel_name='ir.model', string='Model List') + _sql_constraints = [ ('name_uniq', 'unique (name)', _('Name must be unique!')), ] - def onchange_model_id(self, cr, uid, ids, model_id, context=None): - if context is None: - context = {} - if not model_id: + @api.onchange('model_id') + def onchange_model_id(self): +# if context is None: +# context = {} + if not self.model_id: return {'value': {'model_ids': [(6, 0, [])]}} - model_ids = [model_id] - model_obj = self.pool['ir.model'] - active_model_obj = self.pool.get(model_obj.browse( - cr, uid, model_id).model) + model_ids = [self.model_id] + model_obj = self.env['ir.model'] + _logger.debug("MODEL") + _logger.debug(model_obj.browse(self.model_id.id).model) + active_model_obj = self.env[model_obj.browse(self.model_id.id).model] + if active_model_obj._inherits: for key, val in active_model_obj._inherits.items(): - found_model_ids = model_obj.search( - cr, uid, [('model', '=', key)], context=context) + found_model_ids = model_obj.search([('model', '=', key)]) model_ids += found_model_ids return {'value': {'model_ids': [(6, 0, model_ids)]}} - def create_action(self, cr, uid, ids, context=None): + @api.multi + def create_action(self): vals = {} - action_obj = self.pool['ir.actions.act_window'] - ir_values_obj = self.pool['ir.values'] - for data in self.browse(cr, uid, ids, context=context): + action_obj = self.env['ir.actions.act_window'] + ir_values_obj = self.env['ir.values'] + for data in self : src_obj = data.model_id.model button_name = _('Mass Editing (%s)') % data.name - vals['ref_ir_act_window'] = action_obj.create( - cr, SUPERUSER_ID, + vals['ref_ir_act_window'] = action_obj.sudo().create( { 'name': button_name, 'type': 'ir.actions.act_window', @@ -84,10 +89,8 @@ def create_action(self, cr, uid, ids, context=None): 'view_mode': 'form,tree', 'target': 'new', 'auto_refresh': 1, - }, - context) - vals['ref_ir_value'] = ir_values_obj.create( - cr, SUPERUSER_ID, + }) + vals['ref_ir_value'] = ir_values_obj.sudo().create( { 'name': button_name, 'model': src_obj, @@ -96,43 +99,39 @@ def create_action(self, cr, uid, ids, context=None): "ir.actions.act_window," + str(vals['ref_ir_act_window'])), 'object': True, - }, - context) + }) self.write( - cr, uid, ids, { 'ref_ir_act_window': vals.get('ref_ir_act_window', False), 'ref_ir_value': vals.get('ref_ir_value', False), - }, - context) + }) return True - def unlink_action(self, cr, uid, ids, context=None): - for template in self.browse(cr, uid, ids, context=context): - try: - if template.ref_ir_act_window: - act_window_obj = self.pool['ir.actions.act_window'] - act_window_obj.unlink( - cr, SUPERUSER_ID, [template.ref_ir_act_window.id], - context=context) - if template.ref_ir_value: - ir_values_obj = self.pool['ir.values'] - ir_values_obj.unlink( - cr, SUPERUSER_ID, template.ref_ir_value.id, - context=context) - except: - raise orm.except_orm( - _("Warning"), - _("Deletion of the action record failed.")) + @api.one + def unlink_action(self): +# for template in self.browse(cr, uid, ids, context=context): + template = self + try: + if template.ref_ir_act_window: + act_window_obj = self.pool['ir.actions.act_window'] + act_window_obj.sudo().unlink([template.ref_ir_act_window.id]) + if template.ref_ir_value: + ir_values_obj = self.pool['ir.values'] + ir_values_obj.sudo().unlink(template.ref_ir_value.id) + except: + raise orm.except_orm( + _("Warning"), + _("Deletion of the action record failed.")) return True + + @api.one + def unlink(self): + self.unlink_action() + return super(MassObject, self).unlink() - def unlink(self, cr, uid, ids, context=None): - self.unlink_action(cr, uid, ids, context=context) - return super(MassObject, self).unlink(cr, uid, ids, context=context) - - def copy(self, cr, uid, record_id, default=None, context=None): + @api.one + def copy(self, default=None): if default is None: default = {} default.update({'name': '', 'field_ids': []}) - return super(MassObject, self).copy( - cr, uid, record_id, default, context=context) + return super(MassObject, self).copy(record_id, default) diff --git a/mass_editing/views/mass_editing_view.xml b/mass_editing/views/mass_editing_view.xml index 1ab945f79e4..dcafe03cb94 100644 --- a/mass_editing/views/mass_editing_view.xml +++ b/mass_editing/views/mass_editing_view.xml @@ -14,8 +14,8 @@ - + + From 4ac14c594a37f80259bf56ae99e6bc853a8db166 Mon Sep 17 00:00:00 2001 From: "florent.thomas" Date: Mon, 16 Nov 2015 09:23:28 +0100 Subject: [PATCH 2/3] New API fixes : * Return appropriate list on onchange --- mass_editing/models/ir_model_fields.py | 8 ++--- mass_editing/models/mass_object.py | 43 +++++++++++++------------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/mass_editing/models/ir_model_fields.py b/mass_editing/models/ir_model_fields.py index 49aea573664..099560510e2 100644 --- a/mass_editing/models/ir_model_fields.py +++ b/mass_editing/models/ir_model_fields.py @@ -29,7 +29,7 @@ class IrModelFields(models.Model): _inherit = 'ir.model.fields' @api.model - def search(self, args, offset=0, limit=None, order=None, count=False): + def search(self, args, offset=0, limit=0, order=None, count=False): model_domain = [] for domain in args: if (len(domain) > 2 and @@ -41,9 +41,5 @@ def search(self, args, offset=0, limit=None, order=None, count=False): else: model_domain.append(domain) - _logger.debug("DOMAIN TO SEARCH") - _logger.debug(model_domain) - _logger.debug(args) return super(IrModelFields, self).search(model_domain, offset=offset, - limit=limit, order=order, count=count - ) + limit=limit, order=order, count=count ) diff --git a/mass_editing/models/mass_object.py b/mass_editing/models/mass_object.py index 6401c432bdf..89f7739f8c9 100644 --- a/mass_editing/models/mass_object.py +++ b/mass_editing/models/mass_object.py @@ -54,11 +54,10 @@ class MassObject(models.Model): @api.onchange('model_id') def onchange_model_id(self): -# if context is None: -# context = {} if not self.model_id: - return {'value': {'model_ids': [(6, 0, [])]}} - model_ids = [self.model_id] + self.model_ids = [(6, 0, [])] + return self + model_ids = [self.model_id.id] model_obj = self.env['ir.model'] _logger.debug("MODEL") _logger.debug(model_obj.browse(self.model_id.id).model) @@ -67,8 +66,10 @@ def onchange_model_id(self): if active_model_obj._inherits: for key, val in active_model_obj._inherits.items(): found_model_ids = model_obj.search([('model', '=', key)]) - model_ids += found_model_ids - return {'value': {'model_ids': [(6, 0, model_ids)]}} + _logger.debug("found_model_ids" ) + _logger.debug(found_model_ids) + model_ids += [m.id for m in found_model_ids] + self.model_ids = [(6, 0, model_ids)] @api.multi def create_action(self): @@ -107,24 +108,24 @@ def create_action(self): }) return True - @api.one + @api.multi def unlink_action(self): -# for template in self.browse(cr, uid, ids, context=context): - template = self - try: - if template.ref_ir_act_window: - act_window_obj = self.pool['ir.actions.act_window'] - act_window_obj.sudo().unlink([template.ref_ir_act_window.id]) - if template.ref_ir_value: - ir_values_obj = self.pool['ir.values'] - ir_values_obj.sudo().unlink(template.ref_ir_value.id) - except: - raise orm.except_orm( - _("Warning"), - _("Deletion of the action record failed.")) + for template in self: + template = self + try: + if template.ref_ir_act_window: + act_window_obj = self.pool['ir.actions.act_window'] + act_window_obj.sudo().unlink([template.ref_ir_act_window.id]) + if template.ref_ir_value: + ir_values_obj = self.pool['ir.values'] + ir_values_obj.sudo().unlink(template.ref_ir_value.id) + except: + raise orm.except_orm( + _("Warning"), + _("Deletion of the action record failed.")) return True - @api.one + @api.multi def unlink(self): self.unlink_action() return super(MassObject, self).unlink() From 99930bb08ec9aab29b2487dbc0313075b0de3298 Mon Sep 17 00:00:00 2001 From: "florent.thomas" Date: Mon, 16 Nov 2015 09:49:03 +0100 Subject: [PATCH 3/3] Some API 9.0 migrations --- mass_editing/__openerp__.py | 1 + mass_editing/models/mass_object.py | 6 ++++-- mass_editing/views/mass_editing_view.xml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mass_editing/__openerp__.py b/mass_editing/__openerp__.py index 650e86db4da..a6ee22e33e5 100644 --- a/mass_editing/__openerp__.py +++ b/mass_editing/__openerp__.py @@ -25,6 +25,7 @@ "author": "Serpent Consulting Services,Odoo Community Association (OCA)", "contributors": [ "Oihane Crucelaegui ", + "Florent Thomas " ], "category": "Tools", "website": "http://www.serpentcs.com", diff --git a/mass_editing/models/mass_object.py b/mass_editing/models/mass_object.py index 89f7739f8c9..9a843cbd7ea 100644 --- a/mass_editing/models/mass_object.py +++ b/mass_editing/models/mass_object.py @@ -90,7 +90,7 @@ def create_action(self): 'view_mode': 'form,tree', 'target': 'new', 'auto_refresh': 1, - }) + }).id vals['ref_ir_value'] = ir_values_obj.sudo().create( { 'name': button_name, @@ -100,7 +100,9 @@ def create_action(self): "ir.actions.act_window," + str(vals['ref_ir_act_window'])), 'object': True, - }) + }).id + _logger.debug("VALS") + _logger.debug(vals) self.write( { 'ref_ir_act_window': vals.get('ref_ir_act_window', False), diff --git a/mass_editing/views/mass_editing_view.xml b/mass_editing/views/mass_editing_view.xml index dcafe03cb94..3cdc26707f2 100644 --- a/mass_editing/views/mass_editing_view.xml +++ b/mass_editing/views/mass_editing_view.xml @@ -15,7 +15,6 @@ - @@ -43,6 +42,7 @@ +