diff --git a/hrms/payroll/doctype/salary_slip/salary_slip.py b/hrms/payroll/doctype/salary_slip/salary_slip.py index 6d86e1eb67..1b82a2032a 100644 --- a/hrms/payroll/doctype/salary_slip/salary_slip.py +++ b/hrms/payroll/doctype/salary_slip/salary_slip.py @@ -2250,3 +2250,25 @@ def _check_attributes(code: str) -> None: and node.attr in UNSAFE_ATTRIBUTES ): raise SyntaxError(f'Illegal rule {frappe.bold(code)}. Cannot use "{node.attr}"') + + +@frappe.whitelist() +def enqueue_email_salary_slips(names) -> None: + """enqueue bulk emailing salary slips""" + import json + + if isinstance(names, str): + names = json.loads(names) + + frappe.enqueue("hrms.payroll.doctype.salary_slip.salary_slip.email_salary_slips", names=names) + frappe.msgprint( + _("Salary slip emails have been enqueued for sending. Check {0} for status.").format( + f"""Email Queue""" + ) + ) + + +def email_salary_slips(names) -> None: + for name in names: + salary_slip = frappe.get_doc("Salary Slip", name) + salary_slip.email_salary_slip() diff --git a/hrms/payroll/doctype/salary_slip/salary_slip_list.js b/hrms/payroll/doctype/salary_slip/salary_slip_list.js index 33d5bd786f..9f378c17dd 100644 --- a/hrms/payroll/doctype/salary_slip/salary_slip_list.js +++ b/hrms/payroll/doctype/salary_slip/salary_slip_list.js @@ -1,3 +1,16 @@ -frappe.listview_settings['Salary Slip'] = { - add_fields: ["employee", "employee_name"], -}; +frappe.listview_settings["Salary Slip"] = { + onload: function(listview) { + if (!has_common(frappe.user_roles, ["Administrator", "System Manager", "HR Manager", "HR User"])) return; + + listview.page.add_menu_item(__("Email Salary Slips"), () => { + if (!listview.get_checked_items().length) { + frappe.msgprint(__("Please select the salary slips to email")); + return; + } + + frappe.confirm(__("Are you sure you want to email the selected salary slips?"), () => { + listview.call_for_selected_items("hrms.payroll.doctype.salary_slip.salary_slip.enqueue_email_salary_slips"); + }); + }); + } +} \ No newline at end of file