# pyrefly: ignore [missing-import] from odoo import api, fields, models from odoo.exceptions import ValidationError class EducationAttendance(models.Model): _name = 'education.attendance' _description = 'Student Attendance History' _order = 'date desc, id desc' student_id = fields.Many2one('education.student', string='Student', required=True, index=True, ondelete='cascade') date = fields.Date(string='Date', required=True, index=True, default=fields.Date.context_today) session_id = fields.Many2one('education.attendance.session', string='Session', ondelete='set null', index=True) status = fields.Selection([ ('present', 'Present'), ('absent', 'Absent'), ('late', 'Late'), ('medical_leave', 'Medical Leave'), ('on_duty', 'On Duty') ], string='Status', required=True, index=True) faculty_id = fields.Many2one('res.users', string='Faculty', required=True, index=True) remarks = fields.Text(string='Remarks') active = fields.Boolean(default=True) company_id = fields.Many2one( 'res.company', string='Company', required=True, default=lambda self: self.env.company, index=True, ) _uniq_student_session = models.Constraint( 'unique(student_id, session_id)', 'An attendance record already exists for this student in this session!' ) def write(self, vals): for rec in self: if not self.env.user.has_group('education_attendance.group_attendance_manager'): raise ValidationError("Unauthorized: Only an Attendance Manager can directly modify attendance history records.") res = super().write(vals) self.mapped('student_id').invalidate_recordset() return res def unlink(self): for rec in self: if rec.session_id and rec.session_id.state == 'completed' and not self.env.user.has_group('education_attendance.group_attendance_manager'): raise ValidationError("Unauthorized: Only an Attendance Manager can directly delete attendance history records of completed sessions.") res = super().unlink() return res