86 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
| # © 2016 Serpent Consulting Services Pvt. Ltd. (support@serpentcs.com)
 | |
| # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 | |
| 
 | |
| from odoo import api, fields, models, _
 | |
| 
 | |
| 
 | |
| class MassObject(models.Model):
 | |
|     _name = "mass.object"
 | |
|     _description = "Mass Editing Object"
 | |
| 
 | |
|     name = fields.Char('Name', required=True, index=1)
 | |
|     model_id = fields.Many2one('ir.model', 'Model', required=True,
 | |
|                                ondelete="cascade",
 | |
|                                help="Model is used for Selecting Fields. "
 | |
|                                     "This is editable until Sidebar menu "
 | |
|                                     "is not created.")
 | |
|     field_ids = fields.Many2many('ir.model.fields', 'mass_field_rel',
 | |
|                                  'mass_id', 'field_id', 'Fields')
 | |
|     ref_ir_act_window_id = fields.Many2one('ir.actions.act_window',
 | |
|                                            'Sidebar action',
 | |
|                                            readonly=True,
 | |
|                                            help="Sidebar action to make this "
 | |
|                                                 "template available on "
 | |
|                                                 "records of the related "
 | |
|                                                 "document model.")
 | |
|     model_list = fields.Char('Model List')
 | |
| 
 | |
|     _sql_constraints = [
 | |
|         ('name_uniq', 'unique (name)', 'Name must be unique!'),
 | |
|     ]
 | |
| 
 | |
|     @api.onchange('model_id')
 | |
|     def _onchange_model_id(self):
 | |
|         self.field_ids = [(6, 0, [])]
 | |
|         model_list = []
 | |
|         if self.model_id:
 | |
|             model_obj = self.env['ir.model']
 | |
|             model_list = [self.model_id.id]
 | |
|             active_model_obj = self.env[self.model_id.model]
 | |
|             if active_model_obj._inherits:
 | |
|                 keys = list(active_model_obj._inherits.keys())
 | |
|                 inherits_model_list = model_obj.search([('model', 'in', keys)])
 | |
|                 model_list.extend((inherits_model_list and
 | |
|                                    inherits_model_list.ids or []))
 | |
|         self.model_list = model_list
 | |
| 
 | |
|     @api.multi
 | |
|     def create_action(self):
 | |
|         self.ensure_one()
 | |
|         vals = {}
 | |
|         action_obj = self.env['ir.actions.act_window']
 | |
|         src_obj = self.model_id.model
 | |
|         button_name = _('Mass Editing (%s)') % self.name
 | |
|         vals['ref_ir_act_window_id'] = action_obj.create({
 | |
|             'name': button_name,
 | |
|             'type': 'ir.actions.act_window',
 | |
|             'res_model': 'mass.editing.wizard',
 | |
|             'src_model': src_obj,
 | |
|             'view_type': 'form',
 | |
|             'context': "{'mass_editing_object' : %d}" % (self.id),
 | |
|             'view_mode': 'form, tree',
 | |
|             'target': 'new',
 | |
|             'binding_model_id': self.model_id.id,
 | |
|             'binding_type': 'action',
 | |
|             'multi': True,
 | |
|         }).id
 | |
|         self.write(vals)
 | |
|         return True
 | |
| 
 | |
|     @api.multi
 | |
|     def unlink_action(self):
 | |
|         self.mapped('ref_ir_act_window_id').unlink()
 | |
|         return True
 | |
| 
 | |
|     @api.multi
 | |
|     def unlink(self):
 | |
|         self.unlink_action()
 | |
|         return super(MassObject, self).unlink()
 | |
| 
 | |
|     @api.returns('self', lambda value: value.id)
 | |
|     def copy(self, default=None):
 | |
|         if default is None:
 | |
|             default = {}
 | |
|         default.update({'name': _("%s (copy)" % self.name), 'field_ids': []})
 | |
|         return super(MassObject, self).copy(default)
 |