# pyrefly: ignore [missing-import] from odoo import api, fields, models # pyrefly: ignore [missing-import] from odoo.exceptions import ValidationError class EducationTransportAttendance(models.Model): _name = 'education.transport.attendance' _description = 'Transport Attendance' _inherit = ['mail.thread', 'mail.activity.mixin'] trip_id = fields.Many2one('education.transport.trip', string='Trip', required=True, ondelete='cascade', tracking=True) student_id = fields.Many2one('education.student', string='Student', required=True, tracking=True) stop_id = fields.Many2one('education.transport.stop', string='Stop', tracking=True) boarding_time = fields.Datetime(string='Boarding Time', tracking=True) drop_time = fields.Datetime(string='Drop Time', tracking=True) status = fields.Selection([ ('boarded', 'Boarded'), ('absent', 'Absent'), ('dropped', 'Dropped'), ('missed', 'Missed') ], string='Status', required=True, tracking=True) notes = fields.Text(string='Notes') company_id = fields.Many2one('res.company', string='Company', required=True, default=lambda self: self.env.company) @api.constrains('student_id', 'trip_id') def _check_student_assignment(self): for rec in self: if rec.student_id and rec.trip_id: if self.search_count([('student_id', '=', rec.student_id.id), ('trip_id', '=', rec.trip_id.id), ('id', '!=', rec.id)]): raise ValidationError('A student can only have one attendance record per trip!') assignment = self.env['education.transport.assignment'].search([ ('student_id', '=', rec.student_id.id), ('route_id', '=', rec.trip_id.route_id.id), ('status', '=', 'active') ]) if not assignment: raise ValidationError('Student does not have an active assignment for this route!')