diff --git a/hrms/controllers/employee_reminders.py b/hrms/controllers/employee_reminders.py index 31231c7418..726e0d3474 100644 --- a/hrms/controllers/employee_reminders.py +++ b/hrms/controllers/employee_reminders.py @@ -61,9 +61,11 @@ def send_holidays_reminder_in_advance(employee, holidays): employee_doc = frappe.get_doc("Employee", employee) employee_email = get_employee_email(employee_doc) frequency = frappe.db.get_single_value("HR Settings", "frequency") - + sender = frappe.db.get_single_value("HR Settings", "sender") + sender_email = frappe.db.get_single_value("HR Settings", "sender_email") if sender else "" email_header = _("Holidays this Month.") if frequency == "Monthly" else _("Holidays this Week.") frappe.sendmail( + sender=sender_email, recipients=[employee_email], subject=_("Upcoming Holidays Reminder"), template="holiday_reminder", @@ -85,10 +87,11 @@ def send_holidays_reminder_in_advance(employee, holidays): # ------------------ def send_birthday_reminders(): """Send Employee birthday reminders if no 'Stop Birthday Reminders' is not set.""" - to_send = int(frappe.db.get_single_value("HR Settings", "send_birthday_reminders")) + hr_settings = frappe.get_single("HR Settings") + to_send = int(hr_settings.send_birthday_reminders) if not to_send: return - + sender = hr_settings.sender_email if hr_settings.sender else "" employees_born_today = get_employees_who_are_born_today() for company, birthday_persons in employees_born_today.items(): @@ -97,7 +100,7 @@ def send_birthday_reminders(): recipients = list(set(employee_emails) - set(birthday_person_emails)) reminder_text, message = get_birthday_reminder_text_and_message(birthday_persons) - send_birthday_reminder(recipients, reminder_text, birthday_persons, message) + send_birthday_reminder(sender, recipients, reminder_text, birthday_persons, message) if len(birthday_persons) > 1: # special email for people sharing birthdays @@ -105,7 +108,7 @@ def send_birthday_reminders(): person_email = person["user_id"] or person["personal_email"] or person["company_email"] others = [d for d in birthday_persons if d != person] reminder_text, message = get_birthday_reminder_text_and_message(others) - send_birthday_reminder(person_email, reminder_text, others, message) + send_birthday_reminder(sender, person_email, reminder_text, others, message) def get_birthday_reminder_text_and_message(birthday_persons): @@ -124,8 +127,9 @@ def get_birthday_reminder_text_and_message(birthday_persons): return reminder_text, message -def send_birthday_reminder(recipients, reminder_text, birthday_persons, message): +def send_birthday_reminder(sender, recipients, reminder_text, birthday_persons, message): frappe.sendmail( + sender=sender, recipients=recipients, subject=_("Birthday Reminder"), template="birthday_reminder", @@ -202,10 +206,11 @@ def get_employees_having_an_event_today(event_type): # -------------------------- def send_work_anniversary_reminders(): """Send Employee Work Anniversary Reminders if 'Send Work Anniversary Reminders' is checked""" - to_send = int(frappe.db.get_single_value("HR Settings", "send_work_anniversary_reminders")) + hr_settings = frappe.get_single("HR Settings") + to_send = int(hr_settings.send_work_anniversary_reminders) if not to_send: return - + sender = hr_settings.sender_email if hr_settings.sender else "" employees_joined_today = get_employees_having_an_event_today("work_anniversary") message = _("A friendly reminder of an important date for our team.") @@ -218,7 +223,7 @@ def send_work_anniversary_reminders(): recipients = list(set(employee_emails) - set(anniversary_person_emails)) reminder_text = get_work_anniversary_reminder_text(anniversary_persons) - send_work_anniversary_reminder(recipients, reminder_text, anniversary_persons, message) + send_work_anniversary_reminder(sender, recipients, reminder_text, anniversary_persons, message) if len(anniversary_persons) > 1: # email for people sharing work anniversaries @@ -226,7 +231,7 @@ def send_work_anniversary_reminders(): person_email = person["user_id"] or person["personal_email"] or person["company_email"] others = [d for d in anniversary_persons if d != person] reminder_text = get_work_anniversary_reminder_text(others) - send_work_anniversary_reminder(person_email, reminder_text, others, message) + send_work_anniversary_reminder(sender, person_email, reminder_text, others, message) def get_work_anniversary_reminder_text(anniversary_persons: list) -> str: @@ -261,8 +266,11 @@ def get_pluralized_years(years): return f"{years} years" -def send_work_anniversary_reminder(recipients, reminder_text, anniversary_persons, message): +def send_work_anniversary_reminder( + sender, recipients, reminder_text, anniversary_persons, message +): frappe.sendmail( + sender=sender, recipients=recipients, subject=_("Work Anniversary Reminder"), template="anniversary_reminder", diff --git a/hrms/hr/doctype/hr_settings/hr_settings.js b/hrms/hr/doctype/hr_settings/hr_settings.js index 6e26a1fa71..ad30359a25 100644 --- a/hrms/hr/doctype/hr_settings/hr_settings.js +++ b/hrms/hr/doctype/hr_settings/hr_settings.js @@ -2,6 +2,16 @@ // For license information, please see license.txt frappe.ui.form.on('HR Settings', { + refresh: function (frm) { + frm.add_fetch("sender", "email_id", "sender_email"); + frm.set_query("sender", () => { + return { + filters: { + enable_outgoing: 1, + }, + }; + }); + } }); frappe.tour['HR Settings'] = [ diff --git a/hrms/hr/doctype/hr_settings/hr_settings.json b/hrms/hr/doctype/hr_settings/hr_settings.json index 1e9cbe32c4..00307dabda 100644 --- a/hrms/hr/doctype/hr_settings/hr_settings.json +++ b/hrms/hr/doctype/hr_settings/hr_settings.json @@ -12,10 +12,11 @@ "column_break_9", "retirement_age", "reminders_section", - "send_birthday_reminders", + "sender", + "sender_email", "column_break_11", "send_work_anniversary_reminders", - "column_break_18", + "send_birthday_reminders", "send_holiday_reminders", "frequency", "leave_and_expense_claim_settings", @@ -71,10 +72,6 @@ "fieldtype": "Check", "label": "Expense Approver Mandatory In Expense Claim" }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, { "default": "1", "fieldname": "leave_approver_mandatory_in_leave_application", @@ -251,13 +248,26 @@ { "fieldname": "column_break_34", "fieldtype": "Column Break" + }, + { + "fieldname": "sender", + "fieldtype": "Link", + "label": "Sender", + "options": "Email Account" + }, + { + "depends_on": "eval:doc.sender;", + "fieldname": "sender_email", + "fieldtype": "Data", + "label": "Sender Email", + "read_only": 1 } ], "icon": "fa fa-cog", "idx": 1, "issingle": 1, "links": [], - "modified": "2022-10-04 17:29:45.926918", + "modified": "2023-10-23 15:40:06.249322", "modified_by": "Administrator", "module": "HR", "name": "HR Settings", diff --git a/hrms/payroll/doctype/payroll_settings/payroll_settings.js b/hrms/payroll/doctype/payroll_settings/payroll_settings.js index 941464dc51..3107a71fe8 100644 --- a/hrms/payroll/doctype/payroll_settings/payroll_settings.js +++ b/hrms/payroll/doctype/payroll_settings/payroll_settings.js @@ -16,4 +16,15 @@ frappe.ui.form.on('Payroll Settings', { frm.set_value('password_policy', policy.split(new RegExp(" |-", 'g')).filter((token) => token).join('-')); } }, + refresh: function (frm) { + frm.add_fetch("sender", "email_id", "sender_email"); + frm.set_query("sender", () => { + return { + filters: { + enable_outgoing: 1, + }, + }; + }); + + } }); diff --git a/hrms/payroll/doctype/payroll_settings/payroll_settings.json b/hrms/payroll/doctype/payroll_settings/payroll_settings.json index c53c92bc72..1469117dde 100644 --- a/hrms/payroll/doctype/payroll_settings/payroll_settings.json +++ b/hrms/payroll/doctype/payroll_settings/payroll_settings.json @@ -20,6 +20,8 @@ "show_leave_balances_in_salary_slip", "email_section", "email_salary_slip_to_employee", + "sender", + "sender_email", "column_break_iewr", "encrypt_salary_slips_in_emails", "password_policy", @@ -155,13 +157,27 @@ "fieldname": "consider_marked_attendance_on_holidays", "fieldtype": "Check", "label": "Consider Marked Attendance on Holidays" + }, + { + "depends_on": "eval:doc.email_salary_slip_to_employee;", + "fieldname": "sender", + "fieldtype": "Link", + "label": "Sender", + "options": "Email Account" + }, + { + "depends_on": "eval:doc.sender;", + "fieldname": "sender_email", + "fieldtype": "Data", + "label": "Sender Email", + "read_only": 1 } ], "icon": "fa fa-cog", "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2023-09-25 14:03:59.215240", + "modified": "2023-10-23 14:50:34.451546", "modified_by": "Administrator", "module": "Payroll", "name": "Payroll Settings", diff --git a/hrms/payroll/doctype/salary_slip/salary_slip.py b/hrms/payroll/doctype/salary_slip/salary_slip.py index 3d75768f01..d3643c59e1 100644 --- a/hrms/payroll/doctype/salary_slip/salary_slip.py +++ b/hrms/payroll/doctype/salary_slip/salary_slip.py @@ -1791,6 +1791,7 @@ def email_salary_slip(self): if receiver: email_args = { + "sender": payroll_settings.sender_email if payroll_settings.sender else "", "recipients": [receiver], "message": _(message), "subject": "Salary Slip - from {0} to {1}".format(self.start_date, self.end_date),