51 lines
2.1 KiB
Python

# 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