diff --git a/academic_hr/__init__.py b/academic_hr/__init__.py index 0650744f..f7209b17 100644 --- a/academic_hr/__init__.py +++ b/academic_hr/__init__.py @@ -1 +1,2 @@ from . import models +from . import controllers diff --git a/academic_hr/__manifest__.py b/academic_hr/__manifest__.py index 0a266c42..c2b583ad 100644 --- a/academic_hr/__manifest__.py +++ b/academic_hr/__manifest__.py @@ -1,6 +1,6 @@ { "name": "Academic HR", - "version": "18.0.1.0.0", + "version": "18.0.1.1.0", "category": "Human Resources", "summary": "HR extensions for academic institutions with multiple employee support", "author": "ADHOC SA", @@ -11,12 +11,16 @@ "hr_holidays", "hr_timesheet", "timesheet_grid", + "portal", ], "data": [ + "security/academic_hr_security.xml", + "security/ir.model.access.csv", "views/hr_leave_views.xml", "views/hr_timesheet_views.xml", "views/hr_employee_views.xml", "views/hr_leave_allocation_views.xml", + "views/portal_templates.xml", ], "installable": True, "auto_install": False, diff --git a/academic_hr/controllers/__init__.py b/academic_hr/controllers/__init__.py new file mode 100644 index 00000000..8c3feb6f --- /dev/null +++ b/academic_hr/controllers/__init__.py @@ -0,0 +1 @@ +from . import portal diff --git a/academic_hr/controllers/portal.py b/academic_hr/controllers/portal.py new file mode 100644 index 00000000..e529c4aa --- /dev/null +++ b/academic_hr/controllers/portal.py @@ -0,0 +1,67 @@ +from odoo import http +from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.http import request + + +class CustomerPortal(CustomerPortal): + @http.route(["/my/personal_data"], type="http", auth="user", website=True) + def portal_my_personal_data(self, **kw): + user = request.env.user + employee = request.env["hr.employee"].search( + [("user_id", "=", user.id), ("main_employee_id", "=", False)], limit=1 + ) + + if not employee: + return request.redirect("/my") + + values = { + "employee": employee, + "page_name": "personal_data", + "countries": request.env["res.country"].search([]), + "states": request.env["res.country.state"].search([]), + } + + if kw.get("error"): + values["error_message"] = "There was an error updating your information. Please try again." + + if kw.get("success"): + values["success_message"] = "Your personal data has been updated successfully." + + return request.render("academic_hr.portal_my_personal_data", values) + + @http.route(["/my/personal_data/update"], type="http", auth="user", website=True, methods=["POST"]) + def portal_update_personal_data(self, **kw): + user = request.env.user + employee = request.env["hr.employee"].search( + [("user_id", "=", user.id), ("main_employee_id", "=", False)], limit=1 + ) + + if not employee: + return request.redirect("/my") + + try: + state_id = int(kw.get("state_id")) if kw.get("state_id") else False + except (ValueError, TypeError): + state_id = False + + try: + country_id = int(kw.get("country_id")) if kw.get("country_id") else False + except (ValueError, TypeError): + country_id = False + + employee_vals = { + "private_phone": kw.get("phone") or False, + "private_email": kw.get("email") or False, + "private_street": kw.get("street") or False, + "private_city": kw.get("city") or False, + "private_zip": kw.get("zip") or False, + "private_state_id": state_id, + "private_country_id": country_id, + } + + try: + employee.write(employee_vals) + except Exception: + return request.redirect("/my/personal_data?error=1") + + return request.redirect("/my/personal_data?success=1") diff --git a/academic_hr/security/academic_hr_security.xml b/academic_hr/security/academic_hr_security.xml new file mode 100644 index 00000000..3b888107 --- /dev/null +++ b/academic_hr/security/academic_hr_security.xml @@ -0,0 +1,15 @@ + + + Portal: See own employee record + + [('user_id', '=', user.id)] + + + + + Portal: See own public employee record + + [('user_id', '=', user.id)] + + + diff --git a/academic_hr/security/ir.model.access.csv b/academic_hr/security/ir.model.access.csv new file mode 100644 index 00000000..7eed358c --- /dev/null +++ b/academic_hr/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_hr_employee_portal,hr.employee.portal,hr.model_hr_employee,base.group_portal,1,0,0,0 +access_hr_employee_public_portal,hr.employee.public.portal,hr.model_hr_employee_public,base.group_portal,1,0,0,0 diff --git a/academic_hr/views/portal_templates.xml b/academic_hr/views/portal_templates.xml new file mode 100644 index 00000000..321e9e94 --- /dev/null +++ b/academic_hr/views/portal_templates.xml @@ -0,0 +1,134 @@ + + + + + + +