Skip to content
New issue

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

Cannot creat payroll entry and salary slips due to following error #2855

Open
1 task done
zahidmansoor opened this issue Mar 6, 2025 · 0 comments
Open
1 task done
Labels
bug Something isn't working

Comments

@zahidmansoor
Copy link

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.

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)

Code of Conduct

  • I agree to follow this project's Code of Conduct
@zahidmansoor zahidmansoor added the bug Something isn't working label Mar 6, 2025
@the-bokya the-bokya transferred this issue from frappe/lending Mar 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant