Added Groups option for report,wizard and act_window.

bzr revid: jvo@tinyerp.com-20080918140205-dod9qocp1n1u9q0b
This commit is contained in:
Jay Vora 2008-09-18 19:32:05 +05:30
parent deec1863f6
commit 34fcda731a
6 changed files with 119 additions and 51 deletions

View File

@ -148,6 +148,26 @@ class act_window(osv.osv):
_table = 'ir_act_window'
_sequence = 'ir_actions_id_seq'
# def search(self, cr, uid, args, offset=0, limit=2000, order=None,
# context=None, count=False):
# if context is None:
# context = {}
# ids = osv.orm.orm.search(self, cr, uid, args, offset, limit, order,
# context=context)
# if uid==1:
# return ids
# user_groups = self.pool.get('res.users').read(cr, uid, [uid])[0]['groups_id']
# result = []
# for act in self.browse(cr, uid, ids):
# if not len(act.groups_id):
# result.append(act.id)
# continue
# for g in act.groups_id:
# if g.id in user_groups:
# result.append(act.id)
# break
# return result
def _views_get_fnc(self, cr, uid, ids, name, arg, context={}):
res={}
for act in self.browse(cr, uid, ids):
@ -186,6 +206,8 @@ class act_window(osv.osv):
'limit': fields.integer('Limit', help='Default limit for the list view'),
'auto_refresh': fields.integer('Auto-Refresh',
help='Add an auto-refresh on the view'),
'groups_id': fields.many2many('res.groups', 'ir_act_window_group_rel',
'act_id', 'gid', 'Groups'),
}
_defaults = {
'type': lambda *a: 'ir.actions.act_window',

View File

@ -172,7 +172,6 @@ class ir_values(osv.osv):
# if not without_user:
where_opt.append('user_id=%d' % (uid,))
result = []
ok = True
while ok:
@ -233,20 +232,20 @@ class ir_values(osv.osv):
res = filter(bool, map(lambda x: _result_get(x, keys), list(result)))
res2 = res[:]
for r in res:
if type(r) == type([]):
if r[2]['type'] == 'ir.actions.report.xml' or r[2]['type'] == 'ir.actions.report.xml':
print
if r[2].has_key('groups_id'):
groups = r[2]['groups_id']
if len(groups) > 0:
group_ids = ','.join([ str(x) for x in r[2]['groups_id']])
cr.execute("select count(*) from res_groups_users_rel where gid in (%s) and uid='%s'" % (group_ids, uid))
gr_ids = cr.fetchall()
if not gr_ids[0][0] > 0:
res2.remove(r)
else:
#raise osv.except_osv('Error !','You have not permission to perform operation !!!')
res2.remove(r)
if r[2]['type'] in ('ir.actions.report.xml','ir.actions.act_window','ir.actions.wizard'):
if r[2].has_key('groups_id'):
groups = r[2]['groups_id']
if len(groups) > 0:
group_ids = ','.join([ str(x) for x in r[2]['groups_id']])
cr.execute("select count(*) from res_groups_users_rel where gid in (%s) and uid='%s'" % (group_ids, uid))
gr_ids = cr.fetchall()
if not gr_ids[0][0] > 0:
res2.remove(r)
if r[1]=='Menuitem' and not res2:
raise osv.except_osv('Error !','You do not have the permission to perform this operation !!!')
# else:
# #raise osv.except_osv('Error !','You have not permission to perform operation !!!')
# res2.remove(r)
return res2
ir_values()

View File

@ -86,6 +86,7 @@
<rng:optional><rng:attribute name="keyword" /></rng:optional>
<rng:optional><rng:attribute name="multi" /></rng:optional>
<rng:optional><rng:attribute name="client_action_multi" /></rng:optional>
<rng:optional> <rng:attribute name="groups"/> </rng:optional>
</rng:element>
</rng:define>
@ -104,6 +105,7 @@
<rng:optional> <rng:attribute name="auto" /> </rng:optional>
<rng:optional> <rng:attribute name="header" /> </rng:optional>
<rng:optional> <rng:attribute name="attachment" /> </rng:optional>
<rng:optional> <rng:attribute name="groups"/> </rng:optional>
<rng:empty />
</rng:element>
</rng:define>
@ -178,6 +180,7 @@
<rng:optional> <rng:attribute name="view_mode"/> </rng:optional>
<rng:optional> <rng:attribute name="multi"/> </rng:optional>
<rng:optional> <rng:attribute name="target"/> </rng:optional>
<rng:optional> <rng:attribute name="groups"/> </rng:optional>
<rng:empty />
</rng:element>
</rng:define>

View File

@ -269,6 +269,20 @@ form: module.record_id""" % (xml_id,)
res['multi'] = rec.hasAttribute('multi') and eval(rec.getAttribute('multi'))
xml_id = rec.getAttribute('id').encode('utf8')
self._test_xml_id(xml_id)
if rec.hasAttribute('groups'):
g_names = rec.getAttribute('groups').split(',')
groups_value = []
groups_obj = self.pool.get('res.groups')
for group in g_names:
if group.startswith('-'):
group_id = self.id_get(cr, 'res.groups', group[1:])
groups_value.append((3, group_id))
else:
group_id = self.id_get(cr, 'res.groups', group)
groups_value.append((4, group_id))
res['groups_id'] = groups_value
id = self.pool.get('ir.model.data')._update(cr, self.uid, "ir.actions.report.xml", self.module, res, xml_id, mode=self.mode)
self.idref[xml_id] = int(id)
if not rec.hasAttribute('menu') or eval(rec.getAttribute('menu')):
@ -296,6 +310,19 @@ form: module.record_id""" % (xml_id,)
multi = rec.hasAttribute('multi') and eval(rec.getAttribute('multi'))
res = {'name': string, 'wiz_name': name, 'multi':multi}
if rec.hasAttribute('groups'):
g_names = rec.getAttribute('groups').split(',')
groups_value = []
groups_obj = self.pool.get('res.groups')
for group in g_names:
if group.startswith('-'):
group_id = self.id_get(cr, 'res.groups', group[1:])
groups_value.append((3, group_id))
else:
group_id = self.id_get(cr, 'res.groups', group)
groups_value.append((4, group_id))
res['groups_id'] = groups_value
id = self.pool.get('ir.model.data')._update(cr, self.uid, "ir.actions.wizard", self.module, res, xml_id, mode=self.mode)
self.idref[xml_id] = int(id)
# ir_set
@ -347,6 +374,7 @@ form: module.record_id""" % (xml_id,)
limit = rec.hasAttribute('limit') and rec.getAttribute('limit').encode('utf-8')
auto_refresh = rec.hasAttribute('auto_refresh') \
and rec.getAttribute('auto_refresh').encode('utf-8')
# groups_id = rec.hasAttribute('groups') and rec.getAttribute('groups').encode('utf-8')
res = {
'name': name,
@ -361,7 +389,22 @@ form: module.record_id""" % (xml_id,)
'usage': usage,
'limit': limit,
'auto_refresh': auto_refresh,
# 'groups_id':groups_id,
}
if rec.hasAttribute('groups'):
g_names = rec.getAttribute('groups').split(',')
groups_value = []
groups_obj = self.pool.get('res.groups')
for group in g_names:
if group.startswith('-'):
group_id = self.id_get(cr, 'res.groups', group[1:])
groups_value.append((3, group_id))
else:
group_id = self.id_get(cr, 'res.groups', group)
groups_value.append((4, group_id))
res['groups_id'] = groups_value
if rec.hasAttribute('target'):
res['target'] = rec.getAttribute('target')
id = self.pool.get('ir.model.data')._update(cr, self.uid, 'ir.actions.act_window', self.module, res, xml_id, mode=self.mode)
@ -493,6 +536,7 @@ form: module.record_id""" % (xml_id,)
values['sequence'] = int(rec.getAttribute('sequence'))
if rec.hasAttribute('icon'):
values['icon'] = str(rec.getAttribute('icon'))
if rec.hasAttribute('groups'):
g_names = rec.getAttribute('groups').split(',')
groups_value = []