113 lines
4.2 KiB
Python

# 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',
})