[FIX] timer, hr_timesheet: Fix _compute_display_timer_buttons

mixin method should not return in the middle of the loop
Use the value updated on the record instead

super() is called with self at every iteration
which is not very efficient and can be wrong

Solution call super for each specific record
and only when needed

write is not a good practice in compute method

closes odoo/odoo#52858

X-original-commit: 7e19ed98d18305370b5c14edd3d310cfea5df714
Related: odoo/enterprise#11100
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
Thibault Francois
2020-06-11 14:00:06 +00:00
parent a8ed0c000d
commit ab48798229
2 changed files with 17 additions and 15 deletions
+16 -13
View File
@@ -142,24 +142,27 @@ class Task(models.Model):
@api.depends('display_timesheet_timer', 'timer_start', 'timer_pause', 'total_hours_spent')
def _compute_display_timer_buttons(self):
for task in self:
displays = super()._compute_display_timer_buttons()
start_p, start_s, stop, pause, resume = displays['start_p'], displays['start_p'], displays['stop'], displays['pause'], displays['resume']
if not task.display_timesheet_timer:
start_p, start_s, stop, pause, resume = False, False, False, False, False
task.update({
'display_timer_start_primary': False,
'display_timer_start_secondary': False,
'display_timer_stop': False,
'display_timer_pause': False,
'display_timer_resume': False,
})
else:
super(Task, task)._compute_display_timer_buttons()
task.display_timer_start_secondary = task.display_timer_start_primary
if not task.timer_start:
stop, pause, resume = False, False, False
task.update({
'display_timer_stop': False,
'display_timer_pause': False,
'display_timer_resume': False,
})
if not task.total_hours_spent:
start_s = False
task.display_timer_start_secondary = False
else:
start_p = False
task.write({
'display_timer_start_primary': start_p,
'display_timer_start_secondary': start_s,
'display_timer_stop': stop,
'display_timer_pause': pause,
'display_timer_resume': resume,
})
task.display_timer_start_primary = False
@api.depends('project_id.analytic_account_id.active')
def _compute_analytic_account_active(self):
+1 -2
View File
@@ -119,13 +119,12 @@ class TimerMixin(models.AbstractModel):
pause = False
else:
resume = False
record.write({
record.update({
'display_timer_start_primary': start_p,
'display_timer_stop': stop,
'display_timer_pause': pause,
'display_timer_resume': resume,
})
return {'start_p': start_p, 'stop': stop, 'pause': pause, 'resume': resume}
@api.model
def _timer_rounding(self, minutes_spent, minimum, rounding):