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