From 59615135d22a2da2594ec16de7c0ac37e3dc6dcb Mon Sep 17 00:00:00 2001 From: Thibault Francois Date: Fri, 20 Oct 2017 11:22:04 +0200 Subject: [PATCH] [IMP] Can make mistake in status change, the counter change get revert and only the change needed by the new stage get applied --- beesdoo_shift/models/cooperative_status.py | 4 +++ beesdoo_shift/models/task.py | 36 +++++++++++++++++----- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/beesdoo_shift/models/cooperative_status.py b/beesdoo_shift/models/cooperative_status.py index 10955ee..6c9fe58 100644 --- a/beesdoo_shift/models/cooperative_status.py +++ b/beesdoo_shift/models/cooperative_status.py @@ -139,6 +139,10 @@ class CooperativeStatus(models.Model): self.cooperator_id.sudo().write({'subscribed_shift_ids' : [(5,0,0)]}) self.env['beesdoo.shift.shift'].sudo().unsubscribe_from_today([self.cooperator_id.id], today=self.today) + def _change_counter(self, data): + self.sc += data.get('sc', 0) + self.sr += data.get('sr', 0) + @api.multi def _write(self, vals): """ diff --git a/beesdoo_shift/models/task.py b/beesdoo_shift/models/task.py index 587bfa2..e90c7e9 100644 --- a/beesdoo_shift/models/task.py +++ b/beesdoo_shift/models/task.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from openerp import models, fields, api, _ from openerp.exceptions import UserError +import json class TaskStage(models.Model): _name = 'beesdoo.shift.stage' @@ -35,6 +36,7 @@ class Task(models.Model): color = fields.Integer(related="stage_id.color", readonly=True) is_regular = fields.Boolean(default=False) replaced_id = fields.Many2one('res.partner', track_visibility='onchange', domain=[('eater', '=', 'worker_eater')]) + revert_info = fields.Text() def message_auto_subscribe(self, updated_fields, values=None): self._add_follower(values) @@ -78,8 +80,25 @@ class Task(models.Model): rec._update_stage(rec.stage_id.id, vals['stage_id']) return super(Task, self).write(vals) + def _set_revert_info(self, data, status): + data = { + 'status_id': status.id, + 'data' : {k: data[k] * -1 for k in data.keys()} + } + self.write({'revert_info': json.dumps(data)}) + + def _revert(self): + if not self.revert_info: + return + try: + data = json.loads(self.revert_info) + self.env['cooperative.status'].browse(data['status_id'])._change_counter(data['data']) + except: + pass + def _update_stage(self, old_stage, new_stage): self.ensure_one() + self._revert() update = int(self.env['ir.config_parameter'].get_param('always_update', False)) if not (self.worker_id or self.replaced_id) or update: return @@ -95,20 +114,21 @@ class Task(models.Model): pass if new_stage == self.env.ref('beesdoo_shift.done') and not self.is_regular: if status.sr < 0: - data['sr'] = status.sr + 1 + data['sr'] = 1 elif status.sc < 0: - data['sc'] = status.sc + 1 + data['sc'] = 1 else: - data['sr'] = status.sr + 1 + data['sr'] = 1 if new_stage == self.env.ref('beesdoo_shift.absent') and not self.replaced_id: - data['sr'] = status.sr - 1 + data['sr'] = - 1 if status.sr <= 0: - data['sc'] = status.sc -1 + data['sc'] = -1 if new_stage == self.env.ref('beesdoo_shift.absent') and self.replaced_id: - data['sr'] = status.sr -1 + data['sr'] = -1 if new_stage == self.env.ref('beesdoo_shift.excused'): - data['sr'] = status.sr -1 + data['sr'] = -1 - status.sudo().write(data) + status.sudo()._change_counter(data) + self._set_revert_info(data, status)