diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index 5dbadcd26e1..a3556653516 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -26,19 +26,17 @@
+ required="1" /> - + - For progress rate + planned time + Time spent - cr.execute('''SELECT prpc.id AS id from account_analytic_account AS p - JOIN account_analytic_account AS c ON p.id = c.parent_id - JOIN project_project AS prp ON prp.analytic_account_id = p.id - JOIN project_project AS prpc ON prpc.analytic_account_id = c.id - WHERE prp.id IN %s''',(tuple(ids),)) - - child_ids = cr.fetchall() - if child_ids: - child_ids = [x[0] for x in child_ids] - child_ids = self.get_all_child_projects(cr, uid, child_ids) - return ids + child_ids - def _get_user_and_default_uom_ids(self, cr, uid): users_obj = self.pool.get('res.users') model_data_obj = self.pool.get('ir.model.data') @@ -102,17 +90,33 @@ class project(osv.osv): return user_uom, default_uom def _progress_rate(self, cr, uid, ids, names, arg, context=None): + def _get_all_child_projects(ids): + """Recursively get child project ids""" + child_ids = flatten([project_hierarchy.get(idn, []) for idn in ids]) + if child_ids: + child_ids = _get_all_child_projects(child_ids) + return ids + child_ids + # END _get_all_child_projects + res = {}.fromkeys(ids, 0.0) progress = {} if not ids: return res - par_child_projects={} + par_child_projects = {} all_projects = list(ids) + # get project hierarchy: + cr.execute('''SELECT prp.id AS pr_parent_id, prpc.id AS pr_child_id + FROM account_analytic_account AS p + JOIN account_analytic_account AS c ON p.id = c.parent_id + JOIN project_project AS prp ON prp.analytic_account_id = p.id + JOIN project_project AS prpc ON prpc.analytic_account_id = c.id''') + + project_hierarchy = dict((k, list(set([v[1] for v in itr]))) for k, itr in groupby(cr.fetchall(), itemgetter(0))) + for id in ids: - child_projects = self.get_all_child_projects(cr, uid, [id], context) - child_projects = [x for x in child_projects] + child_projects = _get_all_child_projects([id]) par_child_projects[id] = child_projects all_projects.extend(child_projects) @@ -466,7 +470,7 @@ class task(osv.osv): cr.execute('SELECT DISTINCT task_id '\ 'FROM project_task_parent_rel '\ 'WHERE parent_id IN %s', (tuple(ids),)) - child_ids = map(itemgetter(0), cr.fetchall()) + child_ids = map(lambda x: x[0], cr.fetchall()) c_ids = child_ids if (list(set(parent_ids).intersection(set(c_ids)))) or (obj_task.id in c_ids): return False diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py index a80a31ff257..d4be8ebe450 100644 --- a/addons/project_scrum/project_scrum.py +++ b/addons/project_scrum/project_scrum.py @@ -140,7 +140,7 @@ class project_scrum_sprint(osv.osv): if default is None: default = {} default.update({'backlog_ids': [], 'meeting_ids': []}) - return super(scrum_sprint, self).copy(cr, uid, id, default=default, context=context) + return super(project_scrum_sprint, self).copy(cr, uid, id, default=default, context=context) def onchange_project_id(self, cr, uid, ids, project_id=False): v = {}