113 lines
4.2 KiB
Python
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',
|
|
})
|