from odoo import api, fields, models class McAttendance(models.Model): _name = "mc.attendance" _inherit = ["mail.thread"] _description = "Attendance" _order = "date desc, student_id" _rec_name = "display_name" student_id = fields.Many2one("mc.student", string="Student", required=True, ondelete="restrict") batch_id = fields.Many2one("mc.batch", string="Batch", required=True, ondelete="restrict") date = fields.Date(string="Date", required=True, default=fields.Date.context_today) session = fields.Char( string="Session", required=True, default="Daily", help='e.g. "Daily" for a single roll call, or "Period 2" for period-wise attendance.', ) subject_id = fields.Many2one("mc.subject", string="Subject", ondelete="restrict") state = fields.Selection( [ ("present", "Present"), ("absent", "Absent"), ("late", "Late"), ("on_leave", "On Leave"), ], string="Status", required=True, default="present", tracking=True, ) marked_by = fields.Many2one( "res.users", string="Marked By", default=lambda self: self.env.user, readonly=True, ) _student_date_session_uniq = models.Constraint( "unique(student_id, date, session)", "Attendance for this student on this date and session has already been recorded.", ) @api.depends("student_id.name", "date", "session") def _compute_display_name(self): for attendance in self: attendance.display_name = "%s - %s (%s)" % ( attendance.student_id.name or "?", attendance.date, attendance.session, )