From 4d52a46dfea61abdba2394dc7ee77cedd11ced2a Mon Sep 17 00:00:00 2001 From: Martin Maes Date: Thu, 2 Mar 2023 08:10:09 +0000 Subject: [PATCH] [FIX] mrp: review and workorder wizard modification The workorder wizard helping to track the time spend on the workorders has been automated. The name of the employee will automatically be the name of the admin of the session. The productivity will also be updated based on the duration The duration, start date and end date will update based on the two other ones. This changes will ease the addition of time trackings. closes odoo/odoo#107473 Related: odoo/enterprise#34786 Signed-off-by: William Henrotin (whe) --- addons/mrp/models/mrp_workcenter.py | 22 ++++++++++++++++++++++ addons/mrp/models/mrp_workorder.py | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/addons/mrp/models/mrp_workcenter.py b/addons/mrp/models/mrp_workcenter.py index d15d7c8fa31..74d387c79e6 100644 --- a/addons/mrp/models/mrp_workcenter.py +++ b/addons/mrp/models/mrp_workcenter.py @@ -419,6 +419,21 @@ class MrpWorkcenterProductivity(models.Model): else: blocktime.duration = 0.0 + @api.onchange('duration') + def _duration_changed(self): + self.date_end = self.date_start + timedelta(minutes=self.duration) + self._loss_type_change() + + @api.onchange('date_start') + def _date_start_changed(self): + self.date_end = self.date_start + timedelta(minutes=self.duration) + self._loss_type_change() + + @api.onchange('date_end') + def _date_end_changed(self): + self.date_start = self.date_end - timedelta(minutes=self.duration) + self._loss_type_change() + @api.constrains('workorder_id') def _check_open_time_ids(self): for workorder in self.workorder_id: @@ -430,6 +445,13 @@ class MrpWorkcenterProductivity(models.Model): self.ensure_one() self.workcenter_id.order_ids.end_all() + def _loss_type_change(self): + self.ensure_one() + if self.workorder_id.duration > self.workorder_id.duration_expected: + self.loss_id = self.env.ref("mrp.block_reason4").id + else: + self.loss_id = self.env.ref("mrp.block_reason7").id + def _close(self): underperformance_timers = self.env['mrp.workcenter.productivity'] for timer in self: diff --git a/addons/mrp/models/mrp_workorder.py b/addons/mrp/models/mrp_workorder.py index dc146fff471..513297f525e 100644 --- a/addons/mrp/models/mrp_workorder.py +++ b/addons/mrp/models/mrp_workorder.py @@ -887,4 +887,4 @@ class MrpWorkorder(models.Model): if wo.duration == 0.0: wo.duration = wo.duration_expected wo.duration_percent = 100 - wo.state = 'done' + wo.state = 'done'