diff --git a/jey_erp/custom/bulk_salary_structure_assignment.py b/jey_erp/custom/bulk_salary_structure_assignment.py new file mode 100644 index 0000000..97e1c7b --- /dev/null +++ b/jey_erp/custom/bulk_salary_structure_assignment.py @@ -0,0 +1,54 @@ +import frappe +from frappe.query_builder.custom import ConstantColumn +from frappe.query_builder.functions import Coalesce +from frappe.query_builder.terms import SubQuery + +from hrms.payroll.doctype.bulk_salary_structure_assignment.bulk_salary_structure_assignment import ( + BulkSalaryStructureAssignment, +) + + +class CustomBulkSalaryStructureAssignment(BulkSalaryStructureAssignment): + @frappe.whitelist() + def get_employees(self, advanced_filters: list) -> list: + quick_filter_fields = [ + "company", + "employment_type", + "branch", + "department", + "designation", + "grade", + ] + filters = [[d, "=", self.get(d)] for d in quick_filter_fields if self.get(d)] + filters += advanced_filters + + Assignment = frappe.qb.DocType("Salary Structure Assignment") + employees_with_assignments = SubQuery( + frappe.qb.from_(Assignment) + .select(Assignment.employee) + .distinct() + .where((Assignment.from_date == self.from_date) & (Assignment.docstatus == 1)) + ) + + Employee = frappe.qb.DocType("Employee") + Grade = frappe.qb.DocType("Employee Grade") + query = ( + frappe.qb.get_query( + Employee, + fields=[Employee.employee, Employee.employee_name, Employee.grade], + filters=filters, + ) + .where( + (Employee.status == "Active") + & (Employee.date_of_joining <= self.from_date) + & ((Employee.relieving_date > self.from_date) | (Employee.relieving_date.isnull())) + & (Employee.employee.notin(employees_with_assignments)) + ) + .left_join(Grade) + .on(Employee.grade == Grade.name) + .select( + Coalesce(Employee.ctc, Grade.default_base_pay, 0).as_("base"), + ConstantColumn(0).as_("variable"), + ) + ) + return query.run(as_dict=True) diff --git a/jey_erp/hooks.py b/jey_erp/hooks.py index f6b3ce0..286c09a 100644 --- a/jey_erp/hooks.py +++ b/jey_erp/hooks.py @@ -24,9 +24,9 @@ doctype_js = { "Employee": "public/js/employee.js" } -# override_doctype_class = { -# "Report": "jey_erp.custom_report.CustomReport" -# } +override_doctype_class = { + "Bulk Salary Structure Assignment": "jey_erp.custom.bulk_salary_structure_assignment.CustomBulkSalaryStructureAssignment" +} doc_events = { "Employee Onboarding": {