Anup(OpenERP) has proposed merging
lp:~openerp-dev/openobject-addons/6.0-opw-6125-ach into
lp:openobject-addons/6.0.
Requested reviews:
Jay Vora (OpenERP) (jvo-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/6.0-opw-6125-ach/+merge/63838
Hello,
There is an issue with Task when Project Unit Time is other than Hour.
Steps to generate the problem.
1.Change the Project Unit Time to Day.
2.Create a Sale Order for a Service Product for 20 Days.
3.A Task is created of 20 Days.
4.Enter Working entry for say 4 hours.
5.The Remaining Hours come as 16 Days.
This fixes the issue.
Thanks.
--
https://code.launchpad.net/~openerp-dev/openobject-addons/6.0-opw-6125-ach/+merge/63838
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/6.0-opw-6125-ach.
=== modified file 'project/project.py'
--- project/project.py 2011-01-18 22:45:39 +0000
+++ project/project.py 2011-06-08 10:01:20 +0000
@@ -320,14 +320,19 @@
# Compute: effective_hours, total_hours, progress
def _hours_get(self, cr, uid, ids, field_names, args, context=None):
res = {}
+ if context is None:
+ context = {}
cr.execute("SELECT task_id, COALESCE(SUM(hours),0) FROM project_task_work WHERE task_id IN %s GROUP BY task_id",(tuple(ids),))
hours = dict(cr.fetchall())
for task in self.browse(cr, uid, ids, context=context):
- res[task.id] = {'effective_hours': hours.get(task.id, 0.0), 'total_hours': (task.remaining_hours or 0.0) + hours.get(task.id, 0.0)}
+ rem_hours = task.remaining_hours
+ work_hours = self.pool.get('project.task.work').compute_worked_hours(cr, uid, hours.get(task.id, 0.0), task.id, context=context)
+ total_hours = rem_hours + work_hours
+ res[task.id] = {'effective_hours': work_hours, 'total_hours': total_hours}
res[task.id]['delay_hours'] = res[task.id]['total_hours'] - task.planned_hours
res[task.id]['progress'] = 0.0
- if (task.remaining_hours + hours.get(task.id, 0.0)):
- res[task.id]['progress'] = round(min(100.0 * hours.get(task.id, 0.0) / res[task.id]['total_hours'], 99.99),2)
+ if (rem_hours + work_hours):
+ res[task.id]['progress'] = round(min(100.0 * work_hours / res[task.id]['total_hours'], 99.99),2)
if task.state in ('done','cancelled'):
res[task.id]['progress'] = 100.0
return res
@@ -721,11 +726,28 @@
}
_order = "date desc"
+
+ def compute_worked_hours(self, cr, uid, worked_hours, task_id, context=None):
+ if context is None:
+ context = {}
+ task = self.pool.get('project.task').browse(cr, uid, task_id, context=context)
+ proj_time_unit = task.company_id.project_time_mode_id.name
+ if proj_time_unit != _('Hour'):
+ prod_uom_obj = self.pool.get('product.uom')
+ proj_time_unit_id = task.company_id.project_time_mode_id.id
+ task_uom_ids = prod_uom_obj.search(cr, uid, [('name','like','Hour')], context=context)
+ task_uom_id = task_uom_ids and task_uom_ids[0]
+ worked_hours = prod_uom_obj._compute_qty(cr, uid, task_uom_id, worked_hours, proj_time_unit_id)
+ return worked_hours
+
def create(self, cr, uid, vals, *args, **kwargs):
if 'hours' in vals and (not vals['hours']):
vals['hours'] = 0.00
if 'task_id' in vals:
- cr.execute('update project_task set remaining_hours=remaining_hours - %s where id=%s', (vals.get('hours',0.0), vals['task_id']))
+ worked_hours = vals.get('hours')
+ context = kwargs.get('context',{})
+ worked_hours = self.compute_worked_hours(cr, uid, worked_hours, vals.get('task_id'), context=context)
+ cr.execute('update project_task set remaining_hours=remaining_hours - %s where id=%s', (worked_hours, vals['task_id']))
return super(project_work,self).create(cr, uid, vals, *args, **kwargs)
def write(self, cr, uid, ids, vals, context=None):
@@ -733,12 +755,16 @@
vals['hours'] = 0.00
if 'hours' in vals:
for work in self.browse(cr, uid, ids, context=context):
- cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (vals.get('hours',0.0), work.hours, work.task_id.id))
+ worked_hours = self.compute_worked_hours(cr, uid, vals.get('hours'), work.task_id.id, context=context)
+ old_work_hours = self.compute_worked_hours(cr, uid, work.hours, work.task_id.id, context=context)
+ cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (worked_hours, old_work_hours, work.task_id.id))
return super(project_work,self).write(cr, uid, ids, vals, context)
def unlink(self, cr, uid, ids, *args, **kwargs):
for work in self.browse(cr, uid, ids):
- cr.execute('update project_task set remaining_hours=remaining_hours + %s where id=%s', (work.hours, work.task_id.id))
+ context = kwargs.get('context',{})
+ work_hours = self.compute_worked_hours(cr, uid, work.hours, work.task_id.id, context=context)
+ cr.execute('update project_task set remaining_hours=remaining_hours + %s where id=%s', (work_hours, work.task_id.id))
return super(project_work,self).unlink(cr, uid, ids,*args, **kwargs)
project_work()
_______________________________________________
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