from odoo import api, fields, models class CourseHomeworkSubmit(models.Model): _name = 'course.homework.submit' _description = '作业提交记录' _rec_name = 'display_name' _inherit = ['mail.thread'] _order = 'homework_id, student_id' display_name = fields.Char(string='显示名称', compute='_compute_display_name', store=True) student_id = fields.Many2one('student.info', string='学生', required=True) homework_id = fields.Many2one('course.homework', string='作业', required=True, ondelete='cascade') @api.depends('homework_id.name', 'student_id.stu_name') def _compute_display_name(self): for record in self: record.display_name = f"{record.student_id.stu_name} - {record.homework_id.name}" course_name = fields.Char(related="homework_id.course_id.name", string="课程名称", readonly=True) course_code = fields.Char(related="homework_id.course_id.code", string="课程代码", readonly=True) course_credit = fields.Float(related="homework_id.course_id.credit", string="学分", readonly=True) homework_name = fields.Char(related="homework_id.name", string="作业名称", readonly=True) homework_total_score = fields.Float(related="homework_id.total_score", string="作业总分", readonly=True) homework_deadline = fields.Datetime(related="homework_id.deadline", string="截止时间", readonly=True) homework_late_deadline = fields.Datetime(related="homework_id.late_deadline", string="补交截止时间", readonly=True) student_name = fields.Char(related="student_id.stu_name", string="姓名", readonly=True) student_no = fields.Char(related="student_id.stu_num", string="学号", readonly=True) student_class_id = fields.Many2one(related="student_id.class_id", string="班级", readonly=True) student_major_id = fields.Many2one(related="student_id.major_id", string="专业", readonly=True) student_phone = fields.Char(related="student_id.stu_phone", string="手机号", readonly=True) submit_file = fields.Binary(string='提交文件', attachment=True) submit_filename = fields.Char(string='文件名') submit_content = fields.Html(string='提交内容') submit_time = fields.Datetime(string='提交时间') score = fields.Float(string='得分') comment = fields.Html(string='批改评语') grader_id = fields.Many2one('res.users', string='批改人') grade_time = fields.Datetime(string='批改时间') state = fields.Selection([ ('submitted', '已提交'), ('graded', '已批改'), ], string='状态', default='submitted') is_late = fields.Boolean(string='是否逾期', compute='_compute_is_late') def _compute_is_late(self): for record in self: deadline = record.homework_id.deadline if deadline and record.submit_time: record.is_late = record.submit_time > deadline else: record.is_late = False def action_grade(self): self.state = 'graded' self.grade_time = fields.Datetime.now() def action_regrade(self): self.state = 'submitted' self.grade_time = False # 在 CourseHomeworkSubmit 类中添加 grade_level = fields.Selection([ ('A', '优秀(A)'), ('B', '良好(B)'), ('C', '中等(C)'), ('D', '及格(D)'), ('F', '不及格(F)'), ], string='等级', compute='_compute_grade_level', store=True) @api.depends('score', 'homework_id.total_score') def _compute_grade_level(self): for record in self: if record.score and record.homework_id.total_score: percent = record.score / record.homework_id.total_score * 100 if percent >= 90: record.grade_level = 'A' elif percent >= 80: record.grade_level = 'B' elif percent >= 70: record.grade_level = 'C' elif percent >= 60: record.grade_level = 'D' else: record.grade_level = 'F' else: record.grade_level = False # class CourseHomeworkSubmitBatchGrade(models.TransientModel): # _name = 'course.homework.submit.batch.grade' # _description = '作业批量批改向导' # # homework_id = fields.Many2one('course.homework', string='作业') # total_count = fields.Integer(string='待批改总数') # score = fields.Float(string='统一分数') # comment = fields.Text(string='统一评语') # # # 批量批改执行方法 # def action_batch_grade(self): # # 自行补充批量更新分数、评语、状态的业务逻辑 # return {'type': 'ir.actions.act_window_close'}