- Backend: AI generation fallbacks when OpenAI not configured, full exam submission saving all params (difficulty, rubric, entity, grading system, approval workflow) and creating linked question records per section - Backend: new exam session controller with get_session, autosave, submit, status, and results endpoints; student attempt/answer/score models - Backend: new controllers for entities, approval workflows, exam schedules - Frontend: exam session split-layout with passage panel, question types (MCQ, T/F/NG, gap-fill, writing, speaking), timer, and review dialog - Frontend: results page with percentage score, per-answer breakdown table - Frontend: generation page dynamic dropdowns, full payload submission - Frontend: updated types for ExamSessionSection, ExamQuestion options Made-with: Cursor
20 lines
614 B
Python
20 lines
614 B
Python
from odoo import models, fields
|
|
|
|
|
|
class EncoachRubric(models.Model):
|
|
_name = 'encoach.rubric'
|
|
_description = 'Scoring Rubric'
|
|
|
|
name = fields.Char(size=200, required=True)
|
|
skill = fields.Selection([
|
|
('writing', 'Writing'),
|
|
('speaking', 'Speaking'),
|
|
], required=True)
|
|
criteria = fields.Text(required=True)
|
|
levels = fields.Text(help='JSON list of CEFR levels, e.g. ["A1","A2","B1","B2","C1","C2"]')
|
|
exam_type = fields.Selection([
|
|
('academic', 'Academic'),
|
|
('general_training', 'General Training'),
|
|
('general_english', 'General English'),
|
|
])
|