From aac1861009d4fcf3c867b1807949dd79ae784f93 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 12 Oct 2010 18:42:05 +0530 Subject: [PATCH] [FIX] project_issue: progress bar should update on task progress bzr revid: hmo@tinyerp.com-20101012131205-3ea7dnljgxwlzx1j --- addons/project_issue/project_issue.py | 36 ++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 888ca29c3d6..f58cc9f1d20 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -141,6 +141,35 @@ class project_issue(crm.crm_case, osv.osv): else: res[issue.id][field] = abs(float(duration)) return res + + def _get_issue_task(self, cr, uid, ids, context=None): + if context is None: + context = {} + issues = [] + issue_pool = self.pool.get('project.issue') + for task in self.pool.get('project.task').browse(cr, uid, ids, context=context): + issues += issue_pool.search(cr, uid, [('task_id','=',task.id)]) + return issues + + def _get_issue_work(self, cr, uid, ids, context=None): + if context is None: + context = {} + issues = [] + issue_pool = self.pool.get('project.issue') + for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context): + if work.task_id: + issues += issue_pool.search(cr, uid, [('task_id','=',work.task_id.id)]) + return issues + + def _hours_get(self, cr, uid, ids, field_names, args, context=None): + task_pool = self.pool.get('project.task') + res = {} + for issue in self.browse(cr, uid, ids, context=context): + progress = 0.0 + if issue.task_id: + progress = task_pool._hours_get(cr, uid, [issue.task_id.id], field_names, args, context=context)[issue.task_id.id]['progress'] + res[issue.id] = {'progress' : progress} + return res _columns = { 'id': fields.integer('ID'), @@ -193,7 +222,12 @@ class project_issue(crm.crm_case, osv.osv): 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]), 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), - 'progress': fields.related('task_id', 'progress', string='Progress (%)',group_operator="avg", store=True), + 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.", + store = { + 'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['task_id'], 10), + 'project.task': (_get_issue_task, ['progress'], 10), + 'project.task.work': (_get_issue_work, ['hours'], 10), + }), } def _get_project(self, cr, uid, context):