Turkesh Patel (openERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-bug-959219-tpa into 
lp:openobject-addons.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  Bug #959219 in OpenERP Addons: "[Trunk/6.1][project_long_term] Create new 
project based on template: tasks and phases wrongly linked to corresponding 
projects"
  https://bugs.launchpad.net/openobject-addons/+bug/959219

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-959219-tpa/+merge/107606

                   project_longterm

=============================================================

[FIX]: improved code for create new project based on template.
       


-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-959219-tpa/+merge/107606
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-bug-959219-tpa.
=== modified file 'project_long_term/project_long_term.py'
--- project_long_term/project_long_term.py	2012-07-26 04:23:16 +0000
+++ project_long_term/project_long_term.py	2012-08-23 09:45:46 +0000
@@ -198,6 +198,25 @@
             result += "\n"
 
         return result
+
+    def duplicate_phase(self, cr, uid, map_ids, context=None):
+        for new in map_ids.values():
+            phase = self.browse(cr, uid, new, context)
+            next_phase_ids = [ next.id for next in phase.next_phase_ids]
+            if phase.next_phase_ids:
+                for next in phase.next_phase_ids:
+                    if next.id in map_ids.keys():
+                        next_phase_ids.remove(next.id)
+                        next_phase_ids.append(map_ids[next.id])
+
+            previous_phase_ids = [ previous.id for previous in phase.previous_phase_ids]
+            if phase.previous_phase_ids:
+                for previous in phase.previous_phase_ids:
+                    if previous.id in map_ids.keys():
+                        previous_phase_ids.remove(previous.id)
+                        previous_phase_ids.append(map_ids[previous.id])
+            self.write(cr, uid, new, {'previous_phase_ids':[(6,0,set(previous_phase_ids))], 'next_phase_ids':[(6,0, set(next_phase_ids))]})
+
 project_phase()
 
 class project_user_allocation(osv.osv):
@@ -267,6 +286,49 @@
                     'date_end': p.end.strftime('%Y-%m-%d %H:%M:%S')
                 }, context=context)
         return True
+
+    def map_tasks(self, cr, uid, old_project_id, new_project_id, context=None):
+        map_task_id = {}
+        default = {}
+        task_obj = self.pool.get('project.task')
+        proj = self.browse(cr, uid, old_project_id, context=context)
+        for task in proj.tasks:
+            if not task.phase_id:
+                map_task_id[task.id] =  task_obj.copy(cr, uid, task.id, default, context=context)
+        self.write(cr, uid, [new_project_id], {'tasks':[(6,0, map_task_id.values())]})
+        task_obj.duplicate_task(cr, uid, map_task_id, context=context)
+        return True
+
+
+    def map_phase(self, cr, uid, old_project_id, new_project_id,context=None):
+        """ copy and map phases to new project """
+        if context is None:
+            context = {}
+        default = {}
+        map_phase_id = {}
+        default['task_ids'] = []
+        phase_obj = self.pool.get('project.phase')
+        task_obj = self.pool.get('project.task')
+        proj = self.browse(cr, uid, old_project_id, context=context)
+        for phase_id in proj.phase_ids:
+            default['name'] = False
+            map_phase_id[phase_id.id] =  phase_obj.copy(cr, uid, phase_id.id, default, context=context)
+        self.write(cr, uid, [new_project_id], {'phase_ids':[(6,0, map_phase_id.values())]})
+        phase_obj.duplicate_phase(cr, uid, map_phase_id, context=context)
+        for task in proj.tasks:
+            if task.phase_id:
+                default = {}
+                default['project_id'] = new_project_id
+                default['phase_id'] = map_phase_id.get(task.phase_id.id)
+                task_obj.copy(cr, uid, task.id, default, context=context)
+        return True
+
+    def copy(self, cr, uid, id, default={}, context=None):
+        default['phase_ids'] = []
+        res = super(project, self).copy(cr, uid, id, default, context)
+        self.map_phase(cr,uid,id,res,context)
+        return res
+
 project()
 
 class account_analytic_account(osv.osv):

_______________________________________________
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