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

Reply via email to