fix: Patch and tests
diff --git a/erpnext/hr/doctype/additional_salary/test_additional_salary.py b/erpnext/hr/doctype/additional_salary/test_additional_salary.py
index ebe6b20..6f93fb5 100644
--- a/erpnext/hr/doctype/additional_salary/test_additional_salary.py
+++ b/erpnext/hr/doctype/additional_salary/test_additional_salary.py
@@ -7,14 +7,13 @@
from frappe.utils import nowdate, add_days
from erpnext.hr.doctype.employee.test_employee import make_employee
from erpnext.hr.doctype.salary_component.test_salary_component import create_salary_component
-from erpnext.hr.doctype.salary_slip.test_salary_slip import make_employee_salary_slip
+from erpnext.hr.doctype.salary_slip.test_salary_slip import make_employee_salary_slip, setup_test
class TestAdditionalSalary(unittest.TestCase):
def setUp(self):
- from erpnext.hr.doctype.salary_slip.test_salary_slip import TestSalarySlip
- TestSalarySlip().setUp()
+ setup_test()
def test_recurring_additional_salary(self):
emp_id = make_employee("test_additional@salary.com")
diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
index fc687a3..a7dcb94 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -18,19 +18,7 @@
class TestSalarySlip(unittest.TestCase):
def setUp(self):
- make_earning_salary_component(setup=True, company_list=["_Test Company"])
- make_deduction_salary_component(setup=True, company_list=["_Test Company"])
-
- for dt in ["Leave Application", "Leave Allocation", "Salary Slip", "Attendance"]:
- frappe.db.sql("delete from `tab%s`" % dt)
-
- self.make_holiday_list()
-
- frappe.db.set_value("Company", erpnext.get_default_company(), "default_holiday_list", "Salary Slip Test Holiday List")
- frappe.db.set_value("HR Settings", None, "email_salary_slip_to_employee", 0)
- frappe.db.set_value('HR Settings', None, 'leave_status_notification_template', None)
- frappe.db.set_value('HR Settings', None, 'leave_approval_notification_template', None)
-
+ setup_test()
def tearDown(self):
frappe.db.set_value("HR Settings", None, "include_holidays_in_total_working_days", 0)
frappe.set_user("Administrator")
@@ -374,19 +362,6 @@
# undelete fixture data
frappe.db.rollback()
- def make_holiday_list(self):
- fiscal_year = get_fiscal_year(nowdate(), company=erpnext.get_default_company())
- if not frappe.db.get_value("Holiday List", "Salary Slip Test Holiday List"):
- holiday_list = frappe.get_doc({
- "doctype": "Holiday List",
- "holiday_list_name": "Salary Slip Test Holiday List",
- "from_date": fiscal_year[1],
- "to_date": fiscal_year[2],
- "weekly_off": "Sunday"
- }).insert()
- holiday_list.get_weekly_off_dates()
- holiday_list.save()
-
def make_activity_for_employee(self):
activity_type = frappe.get_doc("Activity Type", "_Test Activity Type")
activity_type.billing_rate = 50
@@ -702,4 +677,31 @@
status = "Approved",
leave_approver = 'test@example.com'
))
- leave_application.submit()
\ No newline at end of file
+ leave_application.submit()
+
+def setup_test():
+ make_earning_salary_component(setup=True, company_list=["_Test Company"])
+ make_deduction_salary_component(setup=True, company_list=["_Test Company"])
+
+ for dt in ["Leave Application", "Leave Allocation", "Salary Slip", "Attendance"]:
+ frappe.db.sql("delete from `tab%s`" % dt)
+
+ make_holiday_list()
+
+ frappe.db.set_value("Company", erpnext.get_default_company(), "default_holiday_list", "Salary Slip Test Holiday List")
+ frappe.db.set_value("HR Settings", None, "email_salary_slip_to_employee", 0)
+ frappe.db.set_value('HR Settings', None, 'leave_status_notification_template', None)
+ frappe.db.set_value('HR Settings', None, 'leave_approval_notification_template', None)
+
+def make_holiday_list():
+ fiscal_year = get_fiscal_year(nowdate(), company=erpnext.get_default_company())
+ if not frappe.db.get_value("Holiday List", "Salary Slip Test Holiday List"):
+ holiday_list = frappe.get_doc({
+ "doctype": "Holiday List",
+ "holiday_list_name": "Salary Slip Test Holiday List",
+ "from_date": fiscal_year[1],
+ "to_date": fiscal_year[2],
+ "weekly_off": "Sunday"
+ }).insert()
+ holiday_list.get_weekly_off_dates()
+ holiday_list.save()
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 8a6a83e..c964292 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -678,4 +678,4 @@
erpnext.patches.v12_0.fix_quotation_expired_status
erpnext.patches.v12_0.update_appointment_reminder_scheduler_entry
erpnext.patches.v12_0.retain_permission_rules_for_video_doctype
-erpnext.patches.v13_0.patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive #gyhdghksdhsjsd
+erpnext.patches.v13_0.patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive
diff --git a/erpnext/patches/v13_0/patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive.py b/erpnext/patches/v13_0/patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive.py
index 8b8e60d..ddcadcb 100644
--- a/erpnext/patches/v13_0/patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive.py
+++ b/erpnext/patches/v13_0/patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive.py
@@ -3,33 +3,50 @@
import frappe
def execute():
+ if not frappe.db.table_exists("Additional Salary"):
+ return
- additional_salaries = frappe.get_all("Additional Salary", fields = ['name', "salary_slip", "type", "salary_component"], group_by = 'salary_slip')
- leave_encashments = frappe.get_all("Leave Encashment", fields = ["name","additional_salary"])
- employee_incentives = frappe.get_all("Employee Incentive", fields= ["name", "additional_salary"])
+ for doctype in ("Additional Salary", "Leave Encashment", "Employee Incentive", "Salary Detail"):
+ frappe.reload_doc("hr", "doctype", doctype)
+
+ additional_salaries = frappe.get_all("Additional Salary",
+ fields = ['name', "salary_slip", "type", "salary_component"],
+ filters = {'salary_slip': ['!=', '']},
+ group_by = 'salary_slip'
+ )
+ leave_encashments = frappe.get_all("Leave Encashment",
+ fields = ["name","additional_salary"],
+ filters = {'additional_salary': ['!=', '']}
+ )
+ employee_incentives = frappe.get_all("Employee Incentive",
+ fields= ["name", "additional_salary"],
+ filters = {'additional_salary': ['!=', '']}
+ )
for incentive in employee_incentives:
frappe.db.sql(""" UPDATE `tabAdditional Salary`
- SET ref_doctype = 'Employee Incentive', ref_docname = %s
- WHERE name = %s
- """, (incentive['name'], incentive['additional_salary']))
+ SET ref_doctype = 'Employee Incentive', ref_docname = %s
+ WHERE name = %s
+ """, (incentive['name'], incentive['additional_salary']))
for leave_encashment in leave_encashments:
frappe.db.sql(""" UPDATE `tabAdditional Salary`
- SET ref_doctype = 'Leave Encashment', ref_docname = %s
- WHERE name = %s
- """, (leave_encashment['name'], leave_encashment['additional_salary']))
+ SET ref_doctype = 'Leave Encashment', ref_docname = %s
+ WHERE name = %s
+ """, (leave_encashment['name'], leave_encashment['additional_salary']))
salary_slips = [sal["salary_slip"] for sal in additional_salaries]
for salary in additional_salaries:
comp_type = "earnings" if salary['type'] == 'Earning' else 'deductions'
if salary["salary_slip"] and salary_slips.count(salary["salary_slip"]) == 1:
- frappe.db.sql(""" UPDATE `tabsalary Detail`
- SET additional_salary = %s
- WHERE parenttype = 'Salary Slip'
+ frappe.db.sql("""
+ UPDATE `tabSalary Detail`
+ SET additional_salary = %s
+ WHERE parenttype = 'Salary Slip'
and parentfield = %s
and parent = %s
- and salary_component = %s""", (salary["name"], comp_type, salary["salary_slip"], salary["salary_component"]))
+ and salary_component = %s
+ """, (salary["name"], comp_type, salary["salary_slip"], salary["salary_component"]))