import json from datetime import datetime, timedelta from odoo import _, api, fields, models from odoo.exceptions import UserError, ValidationError class Task(models.Model): _inherit = 'beesdoo.shift.shift' ################################# # State Definition # ################################# def _get_selection_status(self): return [ ("open","Confirmed"), ("done","Attended"), ("absent_2","Absent - 2 compensations"), ("absent_1","Absent - 1 compensation"), ("absent_0","Absent - 0 compensation"), ("cancel","Cancelled") ] def _get_color_mapping(state): return { "draft": 0, "open": 1, "done": 5, "absent_2": 2, "absent_1": 7, "absent_0": 3, "cancel": 9, }[state] def _get_final_state(): return ["done", "absent_2", "absent_1", "absent_0"] ############################################## # Change counter when state change # ############################################## def _get_counter_date_state_change(self, new_state): data = {} if self.worker_id.working_mode == 'regular': if not self.replaced_id: #No replacement case status = self.worker_id.cooperative_status_ids[0] else: status = self.replaced_id.cooperative_status_ids[0] if new_state == "done" and not self.is_regular: # Regular counter is always updated first if status.sr < 0: data['sr'] = 1 elif status.sc < 0: data['sc'] = 1 # Bonus shift case else: data['sr'] = 1 if new_state == "absent_2": data['sr'] = -1 data['sc'] = -1 if new_state == "absent_1": data['sr'] = -1 elif self.worker_id.working_mode == 'irregular': status = self.worker_id.cooperative_status_ids[0] if new_state == "done" or new_state == "absent_0": data['sr'] = 1 data['irregular_absence_date'] = False data['irregular_absence_counter'] = 1 if status.irregular_absence_counter < 0 else 0 if new_state == "absent_2" or new_state == "absent_1": if new_state == "absent_2": data['sr'] = -1 data['irregular_absence_date'] = self.start_time.date() data['irregular_absence_counter'] = -1 return data