[FIX] project_issue: progress bar should update on task progress
authorHarry (OpenERP) <hmo@tinyerp.com>
Tue, 12 Oct 2010 13:12:05 +0000 (18:42 +0530)
committerHarry (OpenERP) <hmo@tinyerp.com>
Tue, 12 Oct 2010 13:12:05 +0000 (18:42 +0530)
bzr revid: hmo@tinyerp.com-20101012131205-3ea7dnljgxwlzx1j

addons/project_issue/project_issue.py

index 888ca29..f58cc9f 100644 (file)
@@ -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):