diff --git a/addons/hr_timesheet/models/project.py b/addons/hr_timesheet/models/project.py index 710274e2380..e4ebc4d3389 100644 --- a/addons/hr_timesheet/models/project.py +++ b/addons/hr_timesheet/models/project.py @@ -120,6 +120,17 @@ class Task(models.Model): raise UserError(_('This task must be part of a project because there are some timesheets linked to it.')) return super(Task, self).write(values) + def name_get(self): + if self.env.context.get('hr_timesheet_display_remaining_hours'): + name_mapping = dict(super().name_get()) + for task in self: + if task.allow_timesheets and task.planned_hours > 0: + hours, mins = (str(int(duration)).rjust(2, '0') for duration in divmod(abs(task.remaining_hours) * 60, 60)) + hours_left = _("(%s%s:%s remaining)") % ('-' if task.remaining_hours < 0 else '', hours, mins) + name_mapping[task.id] = name_mapping.get(task.id, '') + " ‒ " + hours_left + return list(name_mapping.items()) + return super().name_get() + @api.model def _fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): """ Set the correct label for `unit_amount`, depending on company UoM """ diff --git a/addons/hr_timesheet/static/src/js/task_with_hours.js b/addons/hr_timesheet/static/src/js/task_with_hours.js new file mode 100644 index 00000000000..d2ed5a64d06 --- /dev/null +++ b/addons/hr_timesheet/static/src/js/task_with_hours.js @@ -0,0 +1,36 @@ +odoo.define('hr_timesheet.task_with_hours', function (require) { +"use strict"; + +var field_registry = require('web.field_registry'); +var relational_fields = require('web.relational_fields'); +var FieldMany2One = relational_fields.FieldMany2One; + +var TaskWithHours = FieldMany2One.extend({ + /** + * @override + */ + init: function () { + this._super.apply(this, arguments); + this.additionalContext.hr_timesheet_display_remaining_hours = true; + }, + /** + * @override + */ + _getDisplayNameWithoutHours: function (value) { + return value.split(' ‒ ')[0]; + }, + /** + * @override + * @private + */ + _renderEdit: function (){ + this.m2o_value = this._getDisplayNameWithoutHours(this.m2o_value); + this._super.apply(this, arguments); + }, +}); + +field_registry.add('task_with_hours', TaskWithHours); + +return TaskWithHours; + +}); \ No newline at end of file diff --git a/addons/hr_timesheet/views/assets.xml b/addons/hr_timesheet/views/assets.xml index bc14570e60e..54a2b0af002 100644 --- a/addons/hr_timesheet/views/assets.xml +++ b/addons/hr_timesheet/views/assets.xml @@ -3,6 +3,7 @@ diff --git a/addons/hr_timesheet/views/hr_timesheet_views.xml b/addons/hr_timesheet/views/hr_timesheet_views.xml index 0cbd6536f1b..eaf5013e498 100644 --- a/addons/hr_timesheet/views/hr_timesheet_views.xml +++ b/addons/hr_timesheet/views/hr_timesheet_views.xml @@ -25,7 +25,7 @@ - + @@ -83,7 +83,7 @@ - +