from odoo import models, fields INSTRUCTOR_GENDER = [ ("male", "Male"), ("female", "Female"), ] class EncoachAssignment(models.Model): _name = "encoach.assignment" _description = "EnCoach Assignment" name = fields.Char(required=True) assigner_id = fields.Many2one( "res.users", string="Assigner", default=lambda self: self.env.uid, ) assignee_ids = fields.Many2many( "res.users", "encoach_assignment_assignee_rel", "assignment_id", "user_id", string="Assignees", ) exam_ids = fields.Many2many( "encoach.exam", "encoach_assignment_exam_rel", "assignment_id", "exam_id", string="Exams", ) results = fields.Json( help="Array of {user, type, stats} result objects per assignee", ) instructor_gender = fields.Selection(INSTRUCTOR_GENDER) start_date = fields.Datetime() end_date = fields.Datetime() teacher_ids = fields.Many2many( "res.users", "encoach_assignment_teacher_rel", "assignment_id", "user_id", string="Teachers", ) archived = fields.Boolean(default=False) released = fields.Boolean(default=False) started = fields.Boolean(default=False) auto_start = fields.Boolean(default=False) entity_id = fields.Many2one("encoach.entity", index=True) legacy_id = fields.Char(index=True) def action_start(self): for rec in self: rec.started = True def action_release(self): for rec in self: rec.released = True def action_archive(self): for rec in self: rec.archived = True def action_unarchive(self): for rec in self: rec.archived = False def to_encoach_dict(self): self.ensure_one() exams = [] for exam in self.exam_ids: exams.append({ "id": exam.id, "module": exam.module, "assignee": None, }) return { "id": self.id, "name": self.name, "assigner": self.assigner_id.id if self.assigner_id else None, "assignees": self.assignee_ids.ids, "results": self.results or [], "exams": exams, "instructorGender": self.instructor_gender, "startDate": ( self.start_date.isoformat() if self.start_date else None ), "endDate": ( self.end_date.isoformat() if self.end_date else None ), "teachers": self.teacher_ids.ids, "archived": self.archived, "released": self.released, "start": self.started, "autoStart": self.auto_start, "entity": self.entity_id.id if self.entity_id else None, }