← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-addons/trunk-bug-713367-jam into lp:openobject-addons

 

tfr (Openerp) has proposed merging lp:~openerp-dev/openobject-addons/trunk-bug-713367-jam into lp:openobject-addons.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  #713367 Project Template Duplication Error
  https://bugs.launchpad.net/bugs/713367

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-713367-jam/+merge/51871
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-713367-jam/+merge/51871
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/trunk-bug-713367-jam.
=== modified file 'project/project.py'
--- project/project.py	2011-02-21 14:05:10 +0000
+++ project/project.py	2011-03-02 10:03:15 +0000
@@ -219,6 +219,7 @@
         if context is None:
             context = {}
         project_obj = self.pool.get('project.project')
+        task_pool = self.pool.get('project.task')
         data_obj = self.pool.get('ir.model.data')
         result = []
         for proj in self.browse(cr, uid, ids, context=context):
@@ -238,6 +239,11 @@
                                     'date':new_date_end,
                                     'parent_id':parent_id}, context=context)
             result.append(new_id)
+            new_project = self.browse(cr, uid, new_id, context)
+            if new_project.tasks:
+                new_ids = [task.id for task in new_project.tasks]
+                old_ids = [task.id for task in proj.tasks]
+                task_pool.duplicate_task(cr, uid, new_ids, old_ids, new_id ,context)
 
             child_ids = self.search(cr, uid, [('parent_id','=', proj.analytic_account_id.id)], context=context)
             parent_id = self.read(cr, uid, new_id, ['analytic_account_id'])['analytic_account_id'][0]
@@ -349,6 +355,30 @@
             return int(context['project_id'])
         return False
 
+    def duplicate_task(self, cr, uid, new_ids, old_ids, project_id, context=None):
+        project_pool = self.pool.get("project.project")
+        new_proj = project_pool.browse(cr, uid, project_id, context)
+        for new in new_ids:
+            task = self.browse(cr, uid, new, context)   
+            child_ids = [ ch.id for ch in task.child_ids]
+            if task.child_ids:
+                for child in task.child_ids:
+                    if child.id in old_ids:
+                        relate = self.search(cr, uid, [('project_id','=',project_id),('name','=',child.name)])
+                        child_ids.remove(child.id)
+                        child_ids.extend(relate)
+            self.write(cr, uid, new, {'child_ids':[(6,0,child_ids)]})
+            
+            parent_ids = [ ch.id for ch in task.parent_ids]
+            if task.parent_ids:
+                for parent in task.parent_ids:
+                    if parent.id in old_ids:
+                        relate = self.search(cr, uid, [('project_id','=',project_id),('name','=',parent.name)])
+                        parent_ids.remove(parent.id)
+                        parent_ids.extend(relate)
+            self.write(cr, uid, new, {'child_ids':[(6,0,child_ids)]})
+        return True
+    
     def copy_data(self, cr, uid, id, default={}, context=None):
         default = default or {}
         default.update({'work_ids':[], 'date_start': False, 'date_end': False, 'date_deadline': False})
@@ -384,7 +414,7 @@
         for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context):
             if work.task_id: result[work.task_id.id] = True
         return result.keys()
-
+    
     _columns = {
         'active': fields.function(_is_template, method=True, store=True, string='Not a Template Task', type='boolean', help="This field is computed automatically and have the same behavior than the boolean 'active' field: if the task is linked to a template or unactivated project, it will be hidden unless specifically asked."),
         'name': fields.char('Task Summary', size=128, required=True),


Follow ups