Improve ir.values
- add view - allow to update the pickled value - add link from ir.ui.menu to action bzr revid: ced-4854bd92b7fb982545fc5e45102455f3a44ba1a5
This commit is contained in:
parent
b01e404138
commit
cd8df58ba4
|
@ -1,6 +1,56 @@
|
|||
<?xml version="1.0"?>
|
||||
<terp>
|
||||
<data>
|
||||
|
||||
<!-- Values -->
|
||||
|
||||
<record model="ir.ui.view" id="values_view_form">
|
||||
<field name="name">ir.values.form</field>
|
||||
<field name="model">ir.values</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Values">
|
||||
<field name="name" select="1"/>
|
||||
<field name="model" select="1"/>
|
||||
<field name="key" select="1"/>
|
||||
<field name="key2" select="2"/>
|
||||
<field name="object" select="2"/>
|
||||
<field name="res_id"/>
|
||||
<field name="user_id" select="2"/>
|
||||
<field name="company_id" select="2"/>
|
||||
<field name="value_unpickle"/>
|
||||
<field name="meta_unpickle"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="values_view_tree">
|
||||
<field name="name">ir.values.tree</field>
|
||||
<field name="model">ir.values</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Values">
|
||||
<field name="name"/>
|
||||
<field name="model"/>
|
||||
<field name="key"/>
|
||||
<field name="key2"/>
|
||||
<field name="user_id"/>
|
||||
<field name="company_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="act_values_form">
|
||||
<field name="name">Values</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">ir.values</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="values_view_tree"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Administration/Custom/Low Level/Base/Values"
|
||||
action="act_values_form" id="menu_values_form"/>
|
||||
|
||||
==========================================================
|
||||
Sequences
|
||||
==========================================================
|
||||
|
@ -821,6 +871,7 @@
|
|||
<field name="name" select="1"/>
|
||||
<field name="sequence"/>
|
||||
<field name="parent_id" colspan="4" select="1"/>
|
||||
<field name="action"/>
|
||||
<field name="groups_id" colspan="4"/>
|
||||
<field name="icon"/>
|
||||
</form>
|
||||
|
|
|
@ -119,14 +119,64 @@ class ir_ui_menu(osv.osv):
|
|||
new_id = self.pool.get('ir.values').copy(cr, uid, iv.id, default={'res_id':res}, context=context)
|
||||
return res
|
||||
|
||||
def _action(self, cursor, user, ids, name, arg, context=None):
|
||||
res = {}
|
||||
values_obj = self.pool.get('ir.values')
|
||||
value_ids = values_obj.search(cursor, user, [
|
||||
('model', '=', self._name), ('key', '=', 'action'),
|
||||
('key2', '=', 'tree_but_open'), ('res_id', 'in', ids)],
|
||||
context=context)
|
||||
values_action = {}
|
||||
for value in values_obj.browse(cursor, user, value_ids,
|
||||
context=context):
|
||||
values_action[value.res_id] = value.value
|
||||
for menu_id in ids:
|
||||
res[menu_id] = values_action.get(menu_id, False)
|
||||
return res
|
||||
|
||||
def _action_inv(self, cursor, user, menu_id, name, value, arg, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
ctx = context.copy()
|
||||
if 'read_delta' in ctx:
|
||||
del ctx['read_delta']
|
||||
values_obj = self.pool.get('ir.values')
|
||||
values_ids = values_obj.search(cursor, user, [
|
||||
('model', '=', self._name), ('key', '=', 'action'),
|
||||
('key2', '=', 'tree_but_open'), ('res_id', '=', menu_id)],
|
||||
context=context)
|
||||
if values_ids:
|
||||
values_obj.write(cursor, user, values_ids[0], {'value': value},
|
||||
context=ctx)
|
||||
else:
|
||||
values_obj.create(cursor, user, {
|
||||
'name': 'Menuitem',
|
||||
'model': self._name,
|
||||
'value': value,
|
||||
'object': True,
|
||||
'key': 'action',
|
||||
'key2': 'tree_but_open',
|
||||
'res_id': menu_id,
|
||||
}, context=ctx)
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Menu', size=64, required=True, translate=True),
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'child_id' : fields.one2many('ir.ui.menu', 'parent_id','Child ids'),
|
||||
'parent_id': fields.many2one('ir.ui.menu', 'Parent Menu', select=True),
|
||||
'groups_id': many2many_unique('res.groups', 'ir_ui_menu_group_rel', 'menu_id', 'gid', 'Groups'),
|
||||
'complete_name': fields.function(_get_full_name, method=True, string='Complete Name', type='char', size=128),
|
||||
'icon': fields.selection(icons, 'Icon', size=64)
|
||||
'groups_id': many2many_unique('res.groups', 'ir_ui_menu_group_rel',
|
||||
'menu_id', 'gid', 'Groups'),
|
||||
'complete_name': fields.function(_get_full_name, method=True,
|
||||
string='Complete Name', type='char', size=128),
|
||||
'icon': fields.selection(icons, 'Icon', size=64),
|
||||
'action': fields.function(_action, fnct_inv=_action_inv,
|
||||
method=True, type='reference', string='Action',
|
||||
selection=[
|
||||
('ir.actions.report.custom', 'ir.actions.report.custom'),
|
||||
('ir.actions.report.xml', 'ir.actions.report.xml'),
|
||||
('ir.actions.act_window', 'ir.actions.act_window'),
|
||||
('ir.actions.wizard', 'ir.actions.wizard'),
|
||||
]),
|
||||
}
|
||||
_defaults = {
|
||||
'icon' : lambda *a: 'STOCK_OPEN',
|
||||
|
|
|
@ -31,14 +31,41 @@ import pickle
|
|||
|
||||
class ir_values(osv.osv):
|
||||
_name = 'ir.values'
|
||||
|
||||
def _value_unpickle(self, cursor, user, ids, name, arg, context=None):
|
||||
res = {}
|
||||
for report in self.browse(cursor, user, ids, context=context):
|
||||
value = report[name[:-9]]
|
||||
if not report.object and value:
|
||||
try:
|
||||
value = str(pickle.loads(value))
|
||||
except:
|
||||
pass
|
||||
res[report.id] = value
|
||||
return res
|
||||
|
||||
def _value_pickle(self, cursor, user, id, name, value, arg, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
ctx = context.copy()
|
||||
if 'read_delta' in ctx:
|
||||
del ctx['read_delta']
|
||||
if not self.browse(cursor, user, id, context=context).object:
|
||||
value = pickle.dumps(eval(value))
|
||||
self.write(cursor, user, id, {name[:-9]: value}, context=ctx)
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=128),
|
||||
'model': fields.char('Name', size=128),
|
||||
'model': fields.char('Model', size=128),
|
||||
'value': fields.text('Value'),
|
||||
'value_unpickle': fields.function(_value_unpickle, fnct_inv=_value_pickle,
|
||||
method=True, type='text', string='Value'),
|
||||
'object': fields.boolean('Is Object'),
|
||||
'key': fields.char('Name', size=128),
|
||||
'key': fields.char('Type', size=128),
|
||||
'key2': fields.char('Value', size=256),
|
||||
'meta': fields.text('Meta Datas'),
|
||||
'meta_unpickle': fields.function(_value_unpickle, fnct_inv=_value_pickle,
|
||||
method=True, type='text', string='Meta Datas'),
|
||||
'res_id': fields.integer('Resource ID'),
|
||||
'user_id': fields.many2one('res.users', 'User', ondelete='cascade'),
|
||||
'company_id': fields.many2one('res.company', 'Company')
|
||||
|
|
Loading…
Reference in New Issue