Add time spent in each stage to the status bar
In Odoo 17, a mixin called MailTrackingDurationMixin has been
introduced. This mixin can be included in a model that has a
many2one field. Its functionality involves calculating the
time a record remains in each possible value of the many2one
field and storing this information in a JSON field named
duration_tracking.
class MailTrackingDurationMixin(models.AbstractModel):
_name = "mail.tracking.duration.mixin"
_description = "Mixin to compute the time a record has spent in each value a many2one field can take"
duration_tracking = fields.Json(
string="Status time", compute="_compute_duration_tracking",
help="JSON that maps ids from a many2one field to seconds spent")
The primary application of this mixin is with a newly
introduced field called StatusBarDurationField (with the
widget attribute set to 'statusbar_duration').
<field name="stage_id" widget="statusbar_duration" />
This field is designed to calculate and showcase the duration
a record has spent in each stage.It is specifically designed
for use in the form view's status bar. The
StatusBarDurationField inherits from the StatusBarField.
To define the field on which the computation should be
conducted, the model inheriting from this mixin must specify
_track_duration_field. For instance, _track_duration_field =
'stage_id'.
The computation relies on mail.tracking.value messages;
therefore, tracking must be enabled for the relevant field.
In the widget, time is displayed using a Luxon Duration
object, and the "narrow" setting ensures that time is
represented with a single character. Luxon is responsible for
handling translations.