From d7818af6b0d36b1ebf0b76fffafbc3b1b15f9d1a Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Fri, 6 Mar 2026 17:15:44 +0400 Subject: [PATCH] added deductions in generated je from payroll entry --- jey_erp/custom/payroll_entry.py | 76 +++++++++++++++++++++++++++++++++ jey_erp/hooks.py | 3 +- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 jey_erp/custom/payroll_entry.py diff --git a/jey_erp/custom/payroll_entry.py b/jey_erp/custom/payroll_entry.py new file mode 100644 index 0000000..761b46e --- /dev/null +++ b/jey_erp/custom/payroll_entry.py @@ -0,0 +1,76 @@ +import frappe +from frappe.utils import flt + +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions + +from hrms.payroll.doctype.payroll_entry.payroll_entry import PayrollEntry + + +class CustomPayrollEntry(PayrollEntry): + def make_bank_entry(self, for_withheld_salaries=False): + self._bank_entry_deductions = {} + + salary_details = self.get_salary_slip_details(for_withheld_salaries) + for salary_detail in salary_details: + if salary_detail.parentfield != "deductions": + continue + statistical_component = frappe.db.get_value( + "Salary Component", salary_detail.salary_component, "statistical_component", cache=True + ) + if not statistical_component: + component = salary_detail.salary_component + self._bank_entry_deductions[component] = ( + self._bank_entry_deductions.get(component, 0) + salary_detail.amount + ) + + return super().make_bank_entry(for_withheld_salaries) + + def set_accounting_entries_for_bank_entry( + self, je_payment_amount, user_remark, employee_wise_accounting_enabled + ): + bank_entry = super().set_accounting_entries_for_bank_entry( + je_payment_amount, user_remark, employee_wise_accounting_enabled + ) + + deductions = getattr(self, "_bank_entry_deductions", {}) + if not deductions: + return bank_entry + + precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency") + company_currency = frappe.db.get_value("Company", self.company, "default_currency") + accounting_dimensions = get_accounting_dimensions() or [] + currencies = [row.account_currency for row in bank_entry.accounts if row.get("account_currency")] + + for salary_component, total_amount in deductions.items(): + if not total_amount: + continue + + deduction_account = self.get_salary_component_account(salary_component) + + exchange_rate, amount = self.get_amount_and_exchange_rate_for_journal_entry( + deduction_account, total_amount, company_currency, currencies + ) + debit_row = { + "account": deduction_account, + "debit_in_account_currency": flt(amount, precision), + "exchange_rate": flt(exchange_rate), + "cost_center": self.cost_center, + } + self.update_accounting_dimensions(debit_row, accounting_dimensions) + bank_entry.append("accounts", debit_row) + + exchange_rate, amount = self.get_amount_and_exchange_rate_for_journal_entry( + self.payment_account, total_amount, company_currency, currencies + ) + credit_row = { + "account": self.payment_account, + "bank_account": self.bank_account, + "credit_in_account_currency": flt(amount, precision), + "exchange_rate": flt(exchange_rate), + "cost_center": self.cost_center, + } + self.update_accounting_dimensions(credit_row, accounting_dimensions) + bank_entry.append("accounts", credit_row) + + bank_entry.save(ignore_permissions=True) + return bank_entry diff --git a/jey_erp/hooks.py b/jey_erp/hooks.py index 286c09a..25edca2 100644 --- a/jey_erp/hooks.py +++ b/jey_erp/hooks.py @@ -25,7 +25,8 @@ doctype_js = { } override_doctype_class = { - "Bulk Salary Structure Assignment": "jey_erp.custom.bulk_salary_structure_assignment.CustomBulkSalaryStructureAssignment" + "Bulk Salary Structure Assignment": "jey_erp.custom.bulk_salary_structure_assignment.CustomBulkSalaryStructureAssignment", + "Payroll Entry": "jey_erp.custom.payroll_entry.CustomPayrollEntry", } doc_events = {