We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
when i submit payroll entry, I get the following error.
Loan Management
ERPNext: v15.54.1 (version-15)
Frappe Framework: v15.57.2 (version-15)
Frappe HR: v15.41.0 (version-15)
Lending: v0.0.1 (develop)
Payments: v0.0.1 (develop)
None
Traceback with variables (most recent call last): File "apps/hrms/hrms/payroll/doctype/payroll_entry/payroll_entry.py", line 1440, in create_salary_slips_for_employees frappe.get_doc(args).insert() employees = ['HR-EMP-00034', 'HR-EMP-00293', 'HR-EMP-00282', 'HR-EMP-00002'] args = {'salary_slip_based_on_timesheet': 0, 'payroll_frequency': 'Monthly', 'start_date': '2025-02-01', 'end_date': '2025-02-28', 'company': 'Shamo Jee Internal', 'posting_date': '2025-02-28', 'deduct_tax_for_unclaimed_employee_benefits': 0, 'deduct_tax_for_unsubmitted_tax_exemption_proof': 0, 'payroll_entry': 'HR-PRUN-2025-00028-2', 'exchange_rate': 1, 'currency': 'PKR', 'doctype': 'Salary Slip', 'employee': 'HR-EMP-00034'} publish_progress = False payroll_entry = <PayrollEntry: HR-PRUN-2025-00028-2 docstatus=1> salary_slips_exist_for = [] count = 0 emp = 'HR-EMP-00034' e = ImportError("cannot import name 'process_loan_interest_accrual_for_term_loans' from 'lending.loan_management.doctype.loan_interest_accrual.loan_interest_accrual' (apps/lending/lending/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py)") File "apps/frappe/frappe/model/document.py", line 309, in insert self.run_before_save_methods() self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> ignore_permissions = None ignore_links = None ignore_if_duplicate = False ignore_mandatory = None set_name = None set_child_names = True File "apps/frappe/frappe/model/document.py", line 1136, in run_before_save_methods self.run_method("validate") self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> File "apps/frappe/frappe/model/document.py", line 1007, in run_method out = Document.hook(fn)(self, *args, **kwargs) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> args = () kwargs = {} fn = <function Document.run_method.<locals>.fn at 0x7fe9a1497eb0> method = 'validate' File "apps/frappe/frappe/model/document.py", line 1367, in composer return composed(self, method, *args, **kwargs) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> args = () kwargs = {} hooks = [<function apply at 0x7fe9a16c8a60>, <function check_for_running_deletion_job at 0x7fe9a16ca680>] method = 'validate' doc_events = {'*': {'on_update': ['frappe.desk.notifications.clear_doctype_notifications', 'frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions', 'frappe.core.doctype.file.utils.attach_files_to_document', 'frappe.automation.doctype.assignment_rule.assignment_rule.apply', 'frappe.automation.doctype.assignment_rule.assignment_rule.update_due_date', 'frappe.core.doctype.user_type.user_type.apply_permissions_for_non_standard_user_type'], 'after_rename': ['frappe.desk.notifications.clear_doctype_notifications'], 'on_cancel': ['frappe.desk.notifications.clear_doctype_notifications', 'frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions', 'frappe.automation.doctype.assignment_rule.assignment_rule.apply'], 'on_trash': ['frappe.desk.notifications.clear_doctype_notifications', 'frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions'], 'on_update_after_submit': ['frappe.workflow.doctype.workflow_action.workflow_action.process_w... handler = 'erpnext.setup.doctype.transaction_deletion_record.transaction_deletion_record.check_for_running_deletion_job' composed = <function Document.hook.<locals>.compose.<locals>.runner at 0x7fe9a14ec0d0> compose = <function Document.hook.<locals>.compose at 0x7fe9a1497d90> f = <function Document.run_method.<locals>.fn at 0x7fe9a1497eb0> File "apps/frappe/frappe/model/document.py", line 1349, in runner add_to_return_value(self, fn(self, *args, **kwargs)) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> method = 'validate' args = () kwargs = {} add_to_return_value = <function Document.hook.<locals>.add_to_return_value at 0x7fe9a1497910> fn = <function Document.run_method.<locals>.fn at 0x7fe9a1497eb0> hooks = (<function apply at 0x7fe9a16c8a60>, <function check_for_running_deletion_job at 0x7fe9a16ca680>) File "apps/frappe/frappe/model/document.py", line 1004, in fn return method_object(*args, **kwargs) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> args = () kwargs = {} method_object = <bound method SalarySlip.validate of <SalarySlip: Sal Slip/HR-EMP-00034/00040>> method = 'validate' File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip.py", line 149, in validate self.get_emp_and_working_day_details() self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> File "apps/frappe/frappe/utils/typing_validations.py", line 31, in wrapper return func(*args, **kwargs) args = (<SalarySlip: Sal Slip/HR-EMP-00034/00040>,) kwargs = {} apply_condition = <function whitelist.<locals>.innerfn.<locals>.<lambda> at 0x7fe9a1494160> func = <function SalarySlip.get_emp_and_working_day_details at 0x7fe9a14940d0> File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip.py", line 347, in get_emp_and_working_day_details self.pull_sal_struct() self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> struct = '2024-2025' File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip.py", line 421, in pull_sal_struct make_salary_slip(self._salary_structure_doc.name, self) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> make_salary_slip = <function make_salary_slip at 0x7fe9a1389cf0> File "apps/frappe/frappe/utils/typing_validations.py", line 31, in wrapper return func(*args, **kwargs) args = ('2024-2025', <SalarySlip: Sal Slip/HR-EMP-00034/00040>) kwargs = {} apply_condition = <function whitelist.<locals>.innerfn.<locals>.<lambda> at 0x7fe9a1389c60> func = <function make_salary_slip at 0x7fe9a1389bd0> File "apps/hrms/hrms/payroll/doctype/salary_structure/salary_structure.py", line 377, in make_salary_slip doc = get_mapped_doc( source_name = '2024-2025' target_doc = <SalarySlip: Sal Slip/HR-EMP-00034/00040> as_print = False print_format = None ignore_permissions = False postprocess = <function make_salary_slip.<locals>.postprocess at 0x7fe9a14ec280> employee = None for_preview = 0 posting_date = None File "apps/frappe/frappe/model/mapper.py", line 155, in get_mapped_doc postprocess(source_doc, target_doc) from_doctype = 'Salary Structure' from_docname = '2024-2025' table_maps = {'Salary Structure': {'doctype': 'Salary Slip', 'field_map': {'total_earning': 'gross_pay', 'name': 'salary_structure', 'currency': 'currency'}}} target_doc = <SalarySlip: Sal Slip/HR-EMP-00034/00040> postprocess = <function make_salary_slip.<locals>.postprocess at 0x7fe9a14ec280> ignore_permissions = False ignore_child_tables = True cached = True apply_strict_user_permissions = 1 source_doc = <SalaryStructure: 2024-2025 docstatus=1> row_exists_for_parentfield = {} File "apps/hrms/hrms/payroll/doctype/salary_structure/salary_structure.py", line 375, in postprocess target.run_method("process_salary_structure", for_preview=for_preview) source = <SalaryStructure: 2024-2025 docstatus=1> target = <SalarySlip: Sal Slip/HR-EMP-00034/00040> employee = None for_preview = 0 posting_date = None File "apps/frappe/frappe/model/document.py", line 1007, in run_method out = Document.hook(fn)(self, *args, **kwargs) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> args = () kwargs = {'for_preview': 0} fn = <function Document.run_method.<locals>.fn at 0x7fe9a138a200> method = 'process_salary_structure' File "apps/frappe/frappe/model/document.py", line 1367, in composer return composed(self, method, *args, **kwargs) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> args = () kwargs = {'for_preview': 0} hooks = [] method = 'process_salary_structure' doc_events = {'*': {'on_update': ['frappe.desk.notifications.clear_doctype_notifications', 'frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions', 'frappe.core.doctype.file.utils.attach_files_to_document', 'frappe.automation.doctype.assignment_rule.assignment_rule.apply', 'frappe.automation.doctype.assignment_rule.assignment_rule.update_due_date', 'frappe.core.doctype.user_type.user_type.apply_permissions_for_non_standard_user_type'], 'after_rename': ['frappe.desk.notifications.clear_doctype_notifications'], 'on_cancel': ['frappe.desk.notifications.clear_doctype_notifications', 'frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions', 'frappe.automation.doctype.assignment_rule.assignment_rule.apply'], 'on_trash': ['frappe.desk.notifications.clear_doctype_notifications', 'frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions'], 'on_update_after_submit': ['frappe.workflow.doctype.workflow_action.workflow_action.process_w... composed = <function Document.hook.<locals>.compose.<locals>.runner at 0x7fe9a138a0e0> compose = <function Document.hook.<locals>.compose at 0x7fe9a138a290> f = <function Document.run_method.<locals>.fn at 0x7fe9a138a200> File "apps/frappe/frappe/model/document.py", line 1349, in runner add_to_return_value(self, fn(self, *args, **kwargs)) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> method = 'process_salary_structure' args = () kwargs = {'for_preview': 0} add_to_return_value = <function Document.hook.<locals>.add_to_return_value at 0x7fe9a138a320> fn = <function Document.run_method.<locals>.fn at 0x7fe9a138a200> hooks = () File "apps/frappe/frappe/model/document.py", line 1004, in fn return method_object(*args, **kwargs) self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> args = () kwargs = {'for_preview': 0} method_object = <bound method SalarySlip.process_salary_structure of <SalarySlip: Sal Slip/HR-EMP-00034/00040>> method = 'process_salary_structure' File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip.py", line 1931, in process_salary_structure self.calculate_net_pay() self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> for_preview = 0 File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip.py", line 805, in calculate_net_pay set_loan_repayment(self) skip_tax_breakup_computation = False set_gross_pay_and_base_gross_pay = <function SalarySlip.calculate_net_pay.<locals>.set_gross_pay_and_base_gross_pay at 0x7fe9a138a560> self = <SalarySlip: Sal Slip/HR-EMP-00034/00040> File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip_loan_utils.py", line 18, in wrapper return function(*args, **kwargs) args = (<SalarySlip: Sal Slip/HR-EMP-00034/00040>,) kwargs = {} function = <function set_loan_repayment at 0x7fe9a177e320> File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip_loan_utils.py", line 35, in set_loan_repayment process_loan_interest_accruals(loan_details, doc.end_date) doc = <SalarySlip: Sal Slip/HR-EMP-00034/00040> calculate_amounts = <function calculate_amounts at 0x7fe9a11d3eb0> loan_details = [{'name': 'ACC-LOAN-2025-00036', 'interest_income_account': 'Employee Loans Income - SJ', 'loan_account': 'Employee Loans - SJ', 'loan_product': 'Employee Loans', 'is_term_loan': 1}] File "apps/hrms/hrms/payroll/doctype/salary_slip/salary_slip_loan_utils.py", line 91, in process_loan_interest_accruals from lending.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import ( loan_details = [{'name': 'ACC-LOAN-2025-00036', 'interest_income_account': 'Employee Loans Income - SJ', 'loan_account': 'Employee Loans - SJ', 'loan_product': 'Employee Loans', 'is_term_loan': 1}] posting_date = '2025-02-28' File "apps/lending/lending/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.py", line 9, in <module> from lending.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import ( __name__ = 'lending.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual' __doc__ = None __package__ = 'lending.loan_management.doctype.process_loan_interest_accrual' __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0x7fe9a11bd870> __spec__ = ModuleSpec(name='lending.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fe9a11bd870>, origin='apps/lending/lending/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.py') __file__ = 'apps/lending/lending/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.py' __cached__ = 'apps/lending/lending/loan_management/doctype/process_loan_interest_accrual/__pycache__/process_loan_interest_accrual.cpython-310.pyc' __builtins__ = {'__name__': 'builtins', '__doc__': "Built-in functions, exceptions, and other objects.\n\nNoteworthy: None is the `nil' object; Ellipsis represents `...' in slices.", '__package__': '', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>, origin='built-in'), '__build_class__': <built-in function __build_class__>, '__import__': <built-in function __import__>, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'ascii': <built-in function ascii>, 'bin': <built-in function bin>, 'breakpoint': <built-in function breakpoint>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'compile': <built-in function compile>, 'delattr': <built-in function delattr>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'eval': <built-in function eval>, 'exec': <built-in function exec>, 'format': <built-in function format>, ... frappe = <module 'frappe' from 'apps/frappe/frappe/__init__.py'> Document = <class 'frappe.model.document.Document'> add_days = <function add_days at 0x7fe9a56a5240> nowdate = <function nowdate at 0x7fe9a56a5bd0> get_loan_accrual_frequency = <function get_loan_accrual_frequency at 0x7fe9a11da4d0> is_posting_date_accrual_day = <function is_posting_date_accrual_day at 0x7fe9a11d9bd0> make_accrual_interest_entry_for_loans = <function make_accrual_interest_entry_for_loans at 0x7fe9a11d9fc0> builtins.ImportError: cannot import name 'process_loan_interest_accrual_for_term_loans' from 'lending.loan_management.doctype.loan_interest_accrual.loan_interest_accrual' (apps/lending/lending/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Information about bug
when i submit payroll entry, I get the following error.
Module
Loan Management
Version
ERPNext: v15.54.1 (version-15)
Frappe Framework: v15.57.2 (version-15)
Frappe HR: v15.41.0 (version-15)
Lending: v0.0.1 (develop)
Payments: v0.0.1 (develop)
Installation method
None
Relevant log output / Stack trace / Full Error Message.
Code of Conduct
The text was updated successfully, but these errors were encountered: