Skip to content

Commit

Permalink
feat: company field per process_loan_interest_accrual
Browse files Browse the repository at this point in the history
  • Loading branch information
the-bokya committed Jan 31, 2025
1 parent 8b216db commit fd72455
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
getdate,
nowdate,
)
from frappe.utils.caching import redis_cache

from erpnext import get_default_company
from erpnext.accounts.general_ledger import make_gl_entries
from erpnext.controllers.accounts_controller import AccountsController

Expand Down Expand Up @@ -220,6 +220,7 @@ def calculate_accrual_amount_for_loans(
is_future_accrual=0,
accrual_date=None,
loan_disbursement=None,
loan_accrual_frequency=None,
):
from lending.loan_management.doctype.loan_repayment.loan_repayment import (
get_pending_principal_amount,
Expand All @@ -237,8 +238,6 @@ def calculate_accrual_amount_for_loans(
overlapping_dates = get_overlapping_dates(
loan.name, last_accrual_date, posting_date, loan_disbursement=loan_disbursement
)
company = get_default_company()
loan_accrual_frequency = get_loan_accrual_frequency(company)
repayment_schedule_wise_dates = dict()

accrual_frequency_breaks = get_accrual_frequency_breaks(
Expand Down Expand Up @@ -768,6 +767,7 @@ def make_accrual_interest_entry_for_loans(
accrual_type="Regular",
accrual_date=None,
limit=0,
company=None,
):

loan_doc = frappe.qb.DocType("Loan")
Expand Down Expand Up @@ -812,11 +812,13 @@ def make_accrual_interest_entry_for_loans(
if loan_product:
query = query.where(loan_doc.loan_product == loan_product)

if company:
query = query.where(loan_doc.company == company)

if limit:
query = query.limit(limit)

open_loans = query.run(as_dict=1)

if loan:
process_interest_accrual_batch(
open_loans, posting_date, process_loan_interest, accrual_type, accrual_date
Expand All @@ -832,6 +834,7 @@ def make_accrual_interest_entry_for_loans(
process_loan_interest=process_loan_interest,
accrual_type=accrual_type,
accrual_date=accrual_date,
company=company,
via_background_job=True,
queue="long",
enqueue_after_commit=True,
Expand All @@ -847,6 +850,9 @@ def process_interest_accrual_batch(
loans, posting_date, process_loan_interest, accrual_type, accrual_date, via_background_job=False
):
for loan in loans:
loan_accrual_frequency = get_loan_accrual_frequency(loan.company)
if not is_posting_date_accrual_day(loan_accrual_frequency, posting_date=posting_date):
continue
try:
calculate_penal_interest_for_loans(
loan,
Expand All @@ -862,6 +868,7 @@ def process_interest_accrual_batch(
process_loan_interest=process_loan_interest,
accrual_type=accrual_type,
accrual_date=accrual_date,
loan_accrual_frequency=loan_accrual_frequency,
)

if len(loans) > 1:
Expand Down Expand Up @@ -1105,6 +1112,7 @@ def reverse_loan_interest_accruals(
return accruals


@redis_cache(ttl=5)
def get_loan_accrual_frequency(company):
company_doc = frappe.qb.DocType("Company")
query = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"posting_date",
"loan_product",
"loan",
"company",
"accrual_type",
"amended_from"
],
Expand Down Expand Up @@ -49,12 +50,18 @@
"label": "Accrual Type",
"options": "Regular\nRepayment\nDisbursement\nCredit Adjustment\nDebit Adjustment\nRefund",
"read_only": 1
},
{
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
"options": "Company"
}
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2024-06-28 12:49:35.247050",
"modified": "2025-01-31 04:41:56.301053",
"modified_by": "Administrator",
"module": "Loan Management",
"name": "Process Loan Interest Accrual",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@
from frappe.model.document import Document
from frappe.utils import add_days, nowdate

import erpnext

from lending.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import (
get_loan_accrual_frequency,
is_posting_date_accrual_day,
make_accrual_interest_entry_for_loans,
)

Expand All @@ -24,28 +20,24 @@ def on_submit(self):
loan_product=self.loan_product,
accrual_type=self.accrual_type,
accrual_date=self.posting_date,
company=self.company,
)


def schedule_accrual():
company = erpnext.get_default_company()
posting_date = add_days(nowdate(), -1)
loan_accrual_frequency = get_loan_accrual_frequency(company)
if is_posting_date_accrual_day(
loan_accrual_frequency=loan_accrual_frequency, post_date=posting_date
):
process_loan_interest_accrual_for_loans(posting_date=posting_date)
process_loan_interest_accrual_for_loans(posting_date=posting_date)


def process_loan_interest_accrual_for_loans(
posting_date=None, loan_product=None, loan=None, accrual_type="Regular"
posting_date=None, loan_product=None, loan=None, accrual_type="Regular", company=None
):
loan_process = frappe.new_doc("Process Loan Interest Accrual")
loan_process.posting_date = posting_date or add_days(nowdate(), -1)
loan_process.loan_product = loan_product
loan_process.loan = loan
loan_process.accrual_type = accrual_type

loan_process.company = company
loan_process.submit()

return loan_process.name

0 comments on commit fd72455

Please sign in to comment.