diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml index b4202c4b163..fdeb93cc942 100644 --- a/bin/addons/base/ir/ir.xml +++ b/bin/addons/base/ir/ir.xml @@ -728,6 +728,8 @@ + + diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index 9297d566f02..7945aaf0a7d 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -46,13 +46,37 @@ class ir_model(osv.osv): 'model': fields.char('Object name', size=64, required=True), 'info': fields.text('Information'), 'field_id': fields.one2many('ir.model.fields', 'model_id', 'Fields', required=True), + 'state': fields.selection([('manual','Custom Field'),('base','Base Field')],'Manualy Created'), } _defaults = { 'name': lambda *a: 'No Name', + 'model': lambda *a: 'x_', + 'state': lambda self,cr,uid,ctx={}: (ctx and ctx.get('manual',False)) and 'manual' or 'base', } -ir_model() + def unlink(self, cr, user, ids, context=None): + for model in self.browse(cr, user, ids, context): + if model.state <> 'manual': + raise except_orm('Error', "You can not remove the model '%s' !" %(field.name,)) + return super(ir_model, self).unlink(cr, user, ids, context) -print 'MODEL' + def create(self, cr, user, vals, context=None): + if context and context.get('manual',False): + vals['state']='manual' + res = super(ir_model,self).create(cr, user, vals, context) + if vals.get('state','base')=='manual': + if not vals['name'].startswith('x_'): + raise except_orm('Error', "Custom models must have an object name that starts with 'x_' !") +# self.pool.get(vals['model']).__init__(self.pool, cr) +# self.pool.get(vals['model'])._auto_init(cr) + return res + +# def instanciate(self, cr, user, models): +# class inst_obj(osv.osv): +# def __init__(): +# pass +# for model in models: +# self.pool.add(model, inst_moed) +ir_model() class ir_model_fields(osv.osv): _name = 'ir.model.fields'