[FIX] project_long_term: avoid bad duplication of phases
When we duplicate a project, the related phases need to be duplicated as well but keeping references between each other. e.g. 'project 1' with 'phase A' follwed by 'phase B' should become 'project 1 (copy)' with 'phase A (copy)' followed by 'phase B (copy)'. Fixing bug lp:1212860, opw 607062
This commit is contained in:
parent
8f0392b490
commit
faa0df809f
|
@ -267,7 +267,44 @@ class project(osv.osv):
|
|||
'date_end': p.end.strftime('%Y-%m-%d %H:%M:%S')
|
||||
}, context=context)
|
||||
return True
|
||||
project()
|
||||
|
||||
def map_phase(self, cr, uid, old_project_id, new_project_id, context=None):
|
||||
""" copy and map phases from old to new project while keeping order relations """
|
||||
project_phase = self.pool['project.phase']
|
||||
project_task = self.pool['project.task']
|
||||
# mapping source and copy ids to recreate m2m links
|
||||
phase_ids_mapping = {}
|
||||
project = self.browse(cr, uid, old_project_id, context=context)
|
||||
if project.phase_ids:
|
||||
for phase in project.phase_ids:
|
||||
phase_default = {
|
||||
'project_id': new_project_id,
|
||||
'previous_phase_ids': [],
|
||||
'next_phase_ids': [],
|
||||
'task_ids': [],
|
||||
}
|
||||
# adding relationships with already copied phases
|
||||
for previous_phase in phase.previous_phase_ids:
|
||||
if previous_phase.id in phase_ids_mapping:
|
||||
phase_default['previous_phase_ids'].append((4, phase_ids_mapping[previous_phase.id]))
|
||||
for next_phase in phase.next_phase_ids:
|
||||
if next_phase.id in phase_ids_mapping:
|
||||
phase_default['previous_phase_ids'].append((4, phase_ids_mapping[next_phase.id]))
|
||||
phase_ids_mapping[phase.id] = project_phase.copy(cr, uid, phase.id, phase_default, context=context)
|
||||
if project.tasks:
|
||||
# if has copied tasks, need to update phase_id
|
||||
for task in self.browse(cr, uid, new_project_id, context=context).tasks:
|
||||
if task.phase_id and task.phase_id.id in phase_ids_mapping:
|
||||
project_task.write(cr, uid, task.id, {'phase_id': phase_ids_mapping[phase.id]}, context=context)
|
||||
return True
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
default.update(phase_ids=[])
|
||||
new_project_id = super(project, self).copy(cr, uid, id, default, context)
|
||||
self.map_phase(cr, uid, id, new_project_id, context=context)
|
||||
return new_project_id
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_inherit = 'account.analytic.account'
|
||||
|
|
Loading…
Reference in New Issue