# pyrefly: ignore [missing-import] from odoo import http, fields # pyrefly: ignore [missing-import] from odoo.http import request # pyrefly: ignore [missing-import] from odoo.addons.portal.controllers.portal import CustomerPortal class TransportPortalController(CustomerPortal): def _get_student(self): return request.env.user.student_id def _get_transport_assignment(self): student = self._get_student() if not student: return request.env['education.transport.assignment'].browse() return request.env['education.transport.assignment'].search([ ('student_id', '=', student.id), ('status', '=', 'active'), ], limit=1) def _prepare_home_portal_values(self, counters): values = super()._prepare_home_portal_values(counters) student = self._get_student() if student: assignment = self._get_transport_assignment() values['transport_assignment_count'] = 1 if assignment else 0 return values @http.route(['/my/transport'], type='http', auth='user', website=True) def transport_dashboard(self, **kw): student = self._get_student() if not student: return request.render('education_portal.portal_no_student') assignment = self._get_transport_assignment() # Today's trip (if any) today = fields.Date.today() todays_trip = False if assignment: todays_trip = request.env['education.transport.trip'].search([ ('route_id', '=', assignment.route_id.id), ('trip_date', '=', today), ('state', 'in', ['scheduled', 'started']) ], limit=1) return request.render('education_transportation.portal_transport_dashboard', { 'student': student, 'assignment': assignment, 'todays_trip': todays_trip, 'page_name': 'transport_dashboard', }) @http.route(['/my/transport/route'], type='http', auth='user', website=True) def transport_route(self, **kw): student = self._get_student() if not student: return request.render('education_portal.portal_no_student') assignment = self._get_transport_assignment() if not assignment: return request.redirect('/my/transport') route_stops = request.env['education.transport.route.stop'].search([ ('route_id', '=', assignment.route_id.id) ]) return request.render('education_transportation.portal_transport_route', { 'student': student, 'assignment': assignment, 'route': assignment.route_id, 'route_stops': route_stops, 'page_name': 'transport_route', }) @http.route(['/my/transport/trips'], type='http', auth='user', website=True) def transport_trips(self, **kw): student = self._get_student() if not student: return request.render('education_portal.portal_no_student') assignment = self._get_transport_assignment() if not assignment: return request.redirect('/my/transport') trips = request.env['education.transport.trip'].search([ ('route_id', '=', assignment.route_id.id) ], order='trip_date desc', limit=10) return request.render('education_transportation.portal_transport_trips', { 'student': student, 'assignment': assignment, 'trips': trips, 'page_name': 'transport_trips', }) @http.route(['/my/transport/attendance'], type='http', auth='user', website=True) def transport_attendance(self, **kw): student = self._get_student() if not student: return request.render('education_portal.portal_no_student') attendances = request.env['education.transport.attendance'].search([ ('student_id', '=', student.id) ], order='create_date desc', limit=10) return request.render('education_transportation.portal_transport_attendance', { 'student': student, 'attendances': attendances, 'page_name': 'transport_attendance', })