from odoo import fields, http from odoo.exceptions import ValidationError from odoo.http import request from odoo.addons.dance_portal.controllers.portal import DanceCustomerPortal class DanceLeavePortal(DanceCustomerPortal): def _get_student_portal_values(self, student): values = super()._get_student_portal_values(student) values["leave_requests"] = request.env["dance.leave.request"].sudo().search( [("student_id", "=", student.id)], order="from_date desc, id desc", limit=20, ) return values @http.route( ["/my/students//leave"], type="http", auth="user", website=True, methods=["GET", "POST"], csrf=True, ) def portal_student_leave_request(self, student_id, **post): student = self._get_portal_student(student_id) if not student: return request.redirect("/my/students") values = self._prepare_portal_layout_values() values.update( { "page_name": "dance_student_leave", "student": student, "error": False, "post": post, } ) if request.httprequest.method == "POST": try: leave = request.env["dance.leave.request"].sudo().create( { "student_id": student.id, "guardian_id": request.env.user.partner_id.id, "from_date": fields.Date.to_date(post.get("from_date")), "to_date": fields.Date.to_date(post.get("to_date")), "reason": (post.get("reason") or "").strip(), } ) return request.redirect("/my/students/%s?leave_submitted=1" % leave.student_id.id) except (ValidationError, ValueError) as exc: values["error"] = exc.args[0] if exc.args else str(exc) return request.render("dance_leave.portal_student_leave_form", values)