Full backend implementation with custom Odoo modules: - encoach_api: Core API, user management, JWT auth - encoach_exam: Exam generation (reading, writing, listening, speaking) - encoach_evaluate: AI-powered evaluation (writing, speaking) - encoach_training: Training tips and walkthrough - encoach_storage: File storage management - encoach_payment: Stripe, PayPal, Paymob integration - encoach_mail: Email notifications Made-with: Cursor
88 lines
2.7 KiB
Python
88 lines
2.7 KiB
Python
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,
|
|
}
|