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'