42 lines
1.9 KiB
Python

# 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!')