[MERGE] mail.alias: updated views and simplified models
[odoo/odoo.git] / addons / project / project.py
index 0823295..1a8d38e 100644 (file)
@@ -165,7 +165,7 @@ class project(osv.osv):
             res[task.project_id.id] += 1
         return res
     def _get_alias_model(self, cr, uid, context=None):
-        return [('model_project_task', "Tasks")]
+        return [('project.task', "Tasks")]
 
     def _get_followers(self, cr, uid, ids, name, arg, context=None):
         '''
@@ -217,8 +217,11 @@ class project(osv.osv):
         'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
         'task_count': fields.function(_task_count, type='integer', string="Open Tasks"),
         'color': fields.integer('Color Index'),
-        'alias_id': fields.many2one('mail.alias', 'Mail Alias', ondelete="cascade", required=True),
-        'alias_model': fields.selection(_get_alias_model, "Alias Model",select="1", required=True),
+        'alias_id': fields.many2one('mail.alias', 'Mail Alias', ondelete="restrict", required=True, 
+                                    help="This Unique Mail Box Alias of the Project allows to manage the Seamless email communication between Mail Box and OpenERP," 
+                                        "This Alias MailBox also create and Manage the new Email Tasks/Issues for this Project and also manage the existing Task/Issue email communication."),
+        'alias_model': fields.selection(_get_alias_model, "Alias Model",select="1", required=True, 
+                                        help="Allows to select Model for the Mail alias .Based on selected model Task/issue will created for fetched mails or it will maintain communication for related Task/Issue."),
         'privacy_visibility': fields.selection([('public','Public'), ('followers','Followers Only')], 'Privacy / Visibility'),
         'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True,),
         'followers': fields.function(_get_followers, method=True, fnct_search=_search_followers,
@@ -239,7 +242,7 @@ class project(osv.osv):
         'priority': 1,
         'sequence': 10,
         'type_ids': _get_type_common,
-        'alias_model':'model_project_task',
+        'alias_model':'project.task',
     }
 
     # TODO: Why not using a SQL contraints ?
@@ -254,26 +257,6 @@ class project(osv.osv):
         (_check_dates, 'Error! project start-date must be lower then project end-date.', ['date_start', 'date'])
     ]
 
-    def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
-        res = super(project,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
-        if view_type == 'form' or view_type == 'kanban':
-            domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "mail.catchall.domain", context=context)
-            if not domain:
-                doc = etree.XML(res['arch'])
-                alias_node = doc.xpath("//field[@name='alias_id']")[0]
-                parent = alias_node.getparent()
-                parent.remove(alias_node)
-                if view_type == "form":
-                    model_node = doc.xpath("//field[@name='alias_model']")[0]
-                    parent = model_node.getparent()
-                    parent.remove(model_node)
-                else:
-                    model_node = doc.xpath("//field[@name='alias_id']")[0]
-                    parent = model_node.getparent()
-                    parent.remove(model_node)
-                res['arch'] = etree.tostring(doc)
-        return res
-    
     def set_template(self, cr, uid, ids, context=None):
         res = self.setActive(cr, uid, ids, value=False, context=context)
         return res
@@ -330,10 +313,11 @@ class project(osv.osv):
         context['active_test'] = False
         default['state'] = 'open'
         default['tasks'] = []
+        default['alias_id'] = False
         proj = self.browse(cr, uid, id, context=context)
         if not default.get('name', False):
             default['name'] = proj.name + _(' (copy)')
-
+        default['alias_name'] = default['name']
         res = super(project, self).copy(cr, uid, id, default, context)
         self.map_tasks(cr,uid,id,res,context)
         return res
@@ -514,15 +498,16 @@ def Project():
         return user_ids
 
     def create(self, cr, uid, vals, context=None):
-        model_pool = self.pool.get('ir.model.data')
         alias_pool = self.pool.get('mail.alias')
-        model, res_id = model_pool.get_object_reference( cr, uid, "project", vals.get('alias_model','model_project_task'))
-        vals.update({'alias_name':"project",
-                     'alias_model_id': res_id})
-        alias_pool.create_unique_alias(cr, uid, vals, context=context)
+        if not vals.get('alias_id'):
+            name = vals.get('alias_name') or vals['name']
+            alias_id = alias_pool.create_unique_alias(cr, uid, 
+                    {'alias_name': "project_"+name, 
+                    'alias_model_id': self._name}, context=context)
+            alias = alias_pool.read(cr, uid, alias_id, ['alias_name'],context)
+            vals.update({'alias_id': alias_id, 'alias_name': alias['alias_name']})
         res = super( project, self).create(cr, uid, vals, context)
-        record = self.read(cr, uid, res, context)
-        alias_pool.write(cr, uid, [record['alias_id']], {'alias_defaults':{'project_id': record['id']}}, context)
+        alias_pool.write(cr, uid, [vals['alias_id']], {'alias_defaults':{'project_id': res}}, context)
         self.create_send_note(cr, uid, [res], context=context)
         return res
 
@@ -546,16 +531,15 @@ def Project():
         return self.message_append_note(cr, uid, ids, body=message, context=context)
 
     def write(self, cr, uid, ids, vals, context=None):
-        model_pool = self.pool.get('ir.model.data')
+        model_pool = self.pool.get('ir.model')
         alias_pool = self.pool.get('mail.alias')
         # if alias_model have been changed then change alias_model_id of alias also.
         if vals.get('alias_model'):
-            model, res_id = model_pool.get_object_reference( cr, uid, "project", vals.get('alias_model','model_project_task'))
+            model_ids = model_pool.search(cr, uid, [('model', '=', vals.get('alias_model','project.task'))])
             alias_id = self.browse(cr, uid, ids[0], context).alias_id
-            alias_pool.write(cr, uid, [alias_id.id], {'alias_model_id': res_id}, context=context)
+            alias_pool.write(cr, uid, [alias_id.id], {'alias_model_id': model_ids[0]}, context=context)
         return super(project, self).write(cr, uid, ids, vals, context=context)
 
-
 class task(base_stage, osv.osv):
     _name = "project.task"
     _description = "Task"