shcool/learning_center/models/course_homework_submit.py
2026-06-15 23:57:01 +08:00

102 lines
4.7 KiB
Python

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'}