Nimesh Contractor(Open ERP) has proposed merging
lp:~openerp-dev/openobject-addons/trunk-mail_groups_menu_entries-atp-virtual_menu-nco
into lp:~openerp-dev/openobject-addons/trunk-mail_groups_menu_entries-atp.
Requested reviews:
Atul Patel(OpenERP) (atp-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-mail_groups_menu_entries-atp-virtual_menu-nco/+merge/118940
Hello sir,
Added virtual menu for the all groups.
Thanks,
NCO.
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-mail_groups_menu_entries-atp-virtual_menu-nco/+merge/118940
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/trunk-mail_groups_menu_entries-atp.
=== modified file 'mail/mail_group.py'
--- mail/mail_group.py 2012-08-07 12:03:35 +0000
+++ mail/mail_group.py 2012-08-09 12:39:26 +0000
@@ -45,7 +45,7 @@
_description = 'Discussion group'
_name = 'mail.group'
- _inherit = ['mail.thread']
+ _inherit = 'mail.thread'
_inherits = {'mail.alias': 'alias_id'}
def _get_image(self, cr, uid, ids, name, args, context=None):
@@ -88,6 +88,47 @@
image_path = openerp.modules.get_module_resource('mail', 'static/src/img', 'groupdefault.png')
return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64'))
+ def _action(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ ir_values_obj = self.pool.get('ir.values')
+ value_ids = ir_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 ir_values_obj.browse(cursor, user, value_ids, context=context):
+ values_action[value.res_id] = value.value
+ for mail_group_id in ids:
+ res[mail_group_id] = values_action.get(mail_group_id, False)
+ return res
+
+ def _action_inv(self, cursor, user, mail_group_id, name, value, arg, context=None):
+ if context is None:
+ context = {}
+ ctx = context.copy()
+ if self.CONCURRENCY_CHECK_FIELD in ctx:
+ del ctx[self.CONCURRENCY_CHECK_FIELD]
+ ir_values_obj = self.pool.get('ir.values')
+ values_ids = ir_values_obj.search(cursor, user, [
+ ('model', '=', self._name), ('key', '=', 'action'),
+ ('key2', '=', 'tree_but_open'), ('res_id', '=', mail_group_id)],
+ context=context)
+ if value and values_ids:
+ ir_values_obj.write(cursor, user, values_ids, {'value': value}, context=ctx)
+ elif value:
+ # no values_ids, create binding
+ ir_values_obj.create(cursor, user, {
+ 'name': 'Menuitem',
+ 'model': self._name,
+ 'value': value,
+ 'key': 'action',
+ 'key2': 'tree_but_open',
+ 'res_id': mail_group_id,
+ }, context=ctx)
+ elif values_ids:
+ # value is False, remove existing binding
+ ir_values_obj.unlink(cursor, user, values_ids, context=ctx)
+
_columns = {
'name': fields.char('Name', size=64, required=True),
'description': fields.text('Description'),
@@ -129,6 +170,15 @@
string='Joined', multi='get_member_ids'),
'last_month_msg_nbr': fields.function(get_last_month_msg_nbr, type='integer',
string='Messages count for last month'),
+ 'action': fields.function(_action, fnct_inv=_action_inv, type='reference', string='Action',
+ selection=[
+ ('ir.actions.report.xml', 'ir.actions.report.xml'),
+ ('ir.actions.act_window', 'ir.actions.act_window'),
+ ('ir.actions.wizard', 'ir.actions.wizard'),
+ ('ir.actions.url', 'ir.actions.url'),
+ ('ir.actions.server', 'ir.actions.server'),
+ ('ir.actions.client', 'ir.actions.client'),
+ ]),
'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True,
help="The email address associated with this group. New emails received will automatically "
"create new topics."),
@@ -139,7 +189,7 @@
'responsible_id': (lambda s, cr, uid, ctx: uid),
'image': _get_default_image,
}
-
+
def _subscribe_user_with_group_m2m_command(self, cr, uid, ids, group_ids_command, context=None):
# form: {'group_ids': [(3, 10), (3, 3), (4, 10), (4, 3)]} or {'group_ids': [(6, 0, [ids]}
user_group_ids = [command[1] for command in group_ids_command if command[0] == 4]
@@ -153,6 +203,8 @@
return self.message_subscribe(cr, uid, ids, user_ids, context=context)
def create(self, cr, uid, vals, context=None):
+ mod_obj = self.pool.get('ir.model.data')
+ act_obj = self.pool.get('ir.actions.act_window')
alias_pool = self.pool.get('mail.alias')
if not vals.get('alias_id'):
name = vals.get('alias_name') or vals['name']
@@ -162,7 +214,18 @@
vals['alias_id'] = alias_id
mail_group_id = super(mail_group, self).create(cr, uid, vals, context)
alias_pool.write(cr, uid, [vals['alias_id']], {"alias_force_thread_id": mail_group_id}, context)
-
+ group_view_id = mod_obj.get_object_reference(cr, uid, 'mail', 'view_group_form')
+ action_vals = {
+ 'name': vals.get('name'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_id': mail_group_id,
+ 'res_model': self._name,
+ 'views': [(group_view_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ }
+ act_id = act_obj.create(cr, uid, action_vals, context=None)
+ self.write(cr, uid, mail_group_id, {'action': 'ir.actions.act_window,' +str(act_id)})
if vals.get('group_ids'):
self._subscribe_user_with_group_m2m_command(cr, uid, [mail_group_id], vals.get('group_ids'), context=context)
@@ -186,3 +249,67 @@
def action_group_leave(self, cr, uid, ids, context=None):
return self.message_unsubscribe(cr, uid, ids, context=context)
+
+class mail_thread(osv.Model):
+ _inherit = 'mail.thread'
+ def message_get_followed_res_ids(self, cr, uid, model_name, context=None):
+ mail_sub_obj = self.pool.get('mail.subscription')
+ mail_sub_ids = mail_sub_obj.search(cr, uid, [('user_id','=', uid),('res_model','=',model_name)],context=context)
+ return map(lambda x: x.res_id, mail_sub_obj.browse(cr, uid, mail_sub_ids, context))
+
+
+class ir_ui_menu(osv.osv):
+ _inherit = 'ir.ui.menu'
+ def _read_flat(self, cr, uid, ids, fields, context=None, load='_classic_read'):
+ mod_obj = self.pool.get('ir.model.data')
+ thread_obj = self.pool.get('mail.thread')
+ mail_group_obj = self.pool.get('mail.group')
+ origin_ids = [x for x in ids if not str(x).startswith('group_')]
+ res = super(ir_ui_menu, self)._read_flat(cr, uid, origin_ids, fields, context=context, load=load)
+ data_ids = mod_obj.search(cr, uid, [('name','=','mail_allgroups')])
+ if not data_ids:
+ return res
+ group_menu = mod_obj.get_object(cr, uid, 'mail', 'mail_allgroups')
+ mail_group_action = mod_obj.get_object(cr, uid, 'mail', 'action_view_groups')
+ mail_group_ids = [int(x.replace('group_','')) for x in ids if str(x).startswith('group_')] #thread_obj.message_get_followed_res_ids(cr, uid, "mail.group", context)
+
+ if mail_group_ids:
+ origin_menu_fields = []
+ if res:
+ origin_menu_fields = res[0].keys()
+ virtual_menues = []
+
+ for mail_group in mail_group_obj.browse(cr, uid, mail_group_ids, context=context):
+ virtual_menues.append({
+ 'id': 'group_'+ str(mail_group.id),
+ 'name': mail_group.name,
+ 'parent_id': (group_menu.id, group_menu.name),
+ 'sequence': 10,
+ 'groups_id': [], #To set same as mail_group.group_ids ?
+ 'complete_name': group_menu.complete_name + '/' + mail_group.name,
+ 'action': '%s,%s' % (mail_group.action.type, mail_group.action.id)
+ })
+ for virtual_menu in virtual_menues:
+ final = {}
+ for menu_key in virtual_menu:
+ if menu_key in origin_menu_fields:
+ final[menu_key] = virtual_menu[menu_key]
+ res.append(final)
+ return res
+
+ def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
+ thread_obj = self.pool.get('mail.thread')
+ mod_obj = self.pool.get('ir.model.data')
+ res = super(ir_ui_menu, self).search(cr, uid, args=args, offset=offset,
+ limit=limit, order=order, context=context, count=count)
+ for arg in args:
+ if arg[0] == 'parent_id' and arg[2] == False:
+ return res
+ data_ids = mod_obj.search(cr, uid, [('name','=','mail_allgroups')])
+ if not data_ids:
+ return res
+ group_menu = mod_obj.get_object(cr, uid, 'mail', 'mail_allgroups')
+ mail_group_ids = thread_obj.message_get_followed_res_ids(cr, uid, "mail.group", context)
+ res += map(lambda x: 'group_'+str(x), mail_group_ids)
+ return res
+ir_ui_menu()
\ No newline at end of file
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp