diff --git a/addons_extensions/employee_jod/__init__.py b/addons_extensions/employee_jod/__init__.py index 9a7e03ede..45fab17f9 100644 --- a/addons_extensions/employee_jod/__init__.py +++ b/addons_extensions/employee_jod/__init__.py @@ -1 +1 @@ -from . import models \ No newline at end of file +from . import models, controllers \ No newline at end of file diff --git a/addons_extensions/employee_jod/controllers/emp_jod_controller.py b/addons_extensions/employee_jod/controllers/emp_jod_controller.py index e69de29bb..f1ba2d19a 100644 --- a/addons_extensions/employee_jod/controllers/emp_jod_controller.py +++ b/addons_extensions/employee_jod/controllers/emp_jod_controller.py @@ -0,0 +1,65 @@ +from odoo import http, _ +from odoo.http import request +from odoo.addons.hr_recruitment_extended.controllers.controllers import website_hr_recruitment_applications +from odoo.http import content_disposition + +import logging + +from odoo18.odoo.tools import misc + +_logger = logging.getLogger(__name__) + +class website_hr_recruitment_applications_extended(website_hr_recruitment_applications): + + @http.route(['/FTPROTECH/JoiningForm/'], type='http', auth="public", + website=True) + def post_onboarding_form(self, applicant_id, **kwargs): + """Renders the website form for applicants to submit additional details.""" + applicant = request.env['hr.applicant'].sudo().browse(applicant_id) + if not applicant.exists(): + return request.not_found() + if applicant and applicant.send_post_onboarding_form: + if applicant.post_onboarding_form_status == 'done': + return request.render("hr_recruitment_extended.thank_you_template", { + 'applicant': applicant + }) + else: + return request.render("hr_recruitment_extended.post_onboarding_form_template", { + 'applicant': applicant + }) + else: + return request.not_found() + + @http.route(['/download/jod/'], type='http', auth="public", cors='*', website=True) + def download_jod_form(self, applicant_id, **kwargs): + # Get the applicant record + applicant = request.env['hr.applicant'].sudo().browse(applicant_id) + if not applicant.exists(): + return f"Error: Applicant with ID {applicant_id} not found" + + # Business logic check + if not applicant.send_post_onboarding_form or applicant.post_onboarding_form_status != 'done': + return f"Error: Applicant {applicant_id} does not meet the criteria for download" + + # Get the template + template = request.env.ref('hr_recruitment_extended.employee_joining_form_template') + if not template: + return "Error: Template not found" + + try: + # Render the template to HTML for debugging + html = request.env['ir.qweb']._render( + template.id, + { + 'docs': applicant, + 'doc': applicant, + 'time': misc.datetime, + 'user': request.env.user, + } + ) + + # Return HTML for debugging + return html + + except Exception as e: + return f"Error rendering template: {str(e)}" \ No newline at end of file diff --git a/addons_extensions/employee_jod/data/template.xml b/addons_extensions/employee_jod/data/template.xml index 56e37cc38..90c45d419 100644 --- a/addons_extensions/employee_jod/data/template.xml +++ b/addons_extensions/employee_jod/data/template.xml @@ -1,7 +1,7 @@ + + + + + + + + + \ No newline at end of file diff --git a/addons_extensions/hr_recruitment_extended/controllers/controllers.py b/addons_extensions/hr_recruitment_extended/controllers/controllers.py index b81a52dd4..77e73866f 100644 --- a/addons_extensions/hr_recruitment_extended/controllers/controllers.py +++ b/addons_extensions/hr_recruitment_extended/controllers/controllers.py @@ -170,7 +170,9 @@ class website_hr_recruitment_applications(http.Controller): return request.not_found() # Return 404 if applicant doesn't exist if applicant.post_onboarding_form_status == 'done': - return request.render("hr_recruitment_extended.thank_you_template") + return request.render("hr_recruitment_extended.thank_you_template",{ + 'applicant': applicant + }) private_state_id = request.env['res.country.state'].sudo().browse(int(post.get('present_state', 0))) permanent_state_id = request.env['res.country.state'].sudo().browse(int(post.get('permanent_state', 0))) @@ -281,6 +283,19 @@ class website_hr_recruitment_applications(http.Controller): applicant.write(applicant_data) + template = request.env.ref('hr_recruitment_extended.email_template_post_onboarding_form_user_submit', + raise_if_not_found=False) + group = request.env.ref('hr.group_hr_manager') + users = request.env['res.users'].sudo().search([('groups_id', 'in', group.ids)], order='id') + email_values = { + 'email_from': applicant.email_from, + 'email_to': 'hr@ftprotech.com', + 'email_cc': [user.email for user in users if user.email != 'hr@ftprotech.com'] + } + # Use 'with_context' to override the email template fields dynamically + template.sudo().send_mail(applicant.id, email_values=email_values, + force_send=True) + return request.render("hr_recruitment_extended.thank_you_template") def safe_date_parse(self,date_str): diff --git a/addons_extensions/hr_recruitment_extended/data/mail_template.xml b/addons_extensions/hr_recruitment_extended/data/mail_template.xml index cb2d4ad46..eaa6645fc 100644 --- a/addons_extensions/hr_recruitment_extended/data/mail_template.xml +++ b/addons_extensions/hr_recruitment_extended/data/mail_template.xml @@ -290,6 +290,58 @@ + + + Joining Formalities Submission Notification + + {{ object.email_from }} + hr@ftprotech.com + {{ object.candidate_id.partner_name or 'Applicant' }} JOD Submission + + Notification sent by the applicants with joining formalities details. + + +
+

Dear + + HR + + , +

+ + + + + + +

+ has submitted the Joining Formalities (JOD) Form. Please click the link below to review the details. +

+ + + + + +

+ + Open Application + +

+ +

Best Regards, +
+ + HR Team + +

+
+ +
+
Joining Formalities Notification diff --git a/addons_extensions/hr_recruitment_extended/data/templates.xml b/addons_extensions/hr_recruitment_extended/data/templates.xml index e0a476383..7b7344432 100644 --- a/addons_extensions/hr_recruitment_extended/data/templates.xml +++ b/addons_extensions/hr_recruitment_extended/data/templates.xml @@ -1,7 +1,7 @@ diff --git a/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py b/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py index aeab3e515..2ca8e9772 100644 --- a/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py +++ b/third_party_addons/hr_biometric_attendance/models/biometric_device_details.py @@ -481,7 +481,7 @@ class BiometricDeviceDetails(models.Model): conn = self.device_connect(zk) if conn: try: - admin_user_id = 9 # You can implement a method for this + admin_user_id = 2580 # You can implement a method for this conn.unlock(admin_user_id) # Unlock using the admin user ID except Exception as e: raise UserError(_("Failed to unlock door: %s") % str(e))