57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
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/<int:student_id>/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)
|