fix: Update bank reconciliation statement
This commit is contained in:
parent
295cbb0ff2
commit
0b5e618e3a
@ -4,7 +4,12 @@
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import flt, getdate, nowdate
|
from frappe.query_builder.custom import ConstantColumn
|
||||||
|
from frappe.query_builder.functions import Sum
|
||||||
|
from frappe.utils import flt, getdate
|
||||||
|
from pypika import CustomFunction
|
||||||
|
|
||||||
|
from erpnext.accounts.utils import get_balance_on
|
||||||
|
|
||||||
|
|
||||||
def execute(filters=None):
|
def execute(filters=None):
|
||||||
@ -18,7 +23,6 @@ def execute(filters=None):
|
|||||||
|
|
||||||
data = get_entries(filters)
|
data = get_entries(filters)
|
||||||
|
|
||||||
from erpnext.accounts.utils import get_balance_on
|
|
||||||
balance_as_per_system = get_balance_on(filters["account"], filters["report_date"])
|
balance_as_per_system = get_balance_on(filters["account"], filters["report_date"])
|
||||||
|
|
||||||
total_debit, total_credit = 0,0
|
total_debit, total_credit = 0,0
|
||||||
@ -118,7 +122,21 @@ def get_columns():
|
|||||||
]
|
]
|
||||||
|
|
||||||
def get_entries(filters):
|
def get_entries(filters):
|
||||||
journal_entries = frappe.db.sql("""
|
journal_entries = get_journal_entries(filters)
|
||||||
|
|
||||||
|
payment_entries = get_payment_entries(filters)
|
||||||
|
|
||||||
|
loan_entries = get_loan_entries(filters)
|
||||||
|
|
||||||
|
pos_entries = []
|
||||||
|
if filters.include_pos_transactions:
|
||||||
|
pos_entries = get_pos_entries(filters)
|
||||||
|
|
||||||
|
return sorted(list(payment_entries)+list(journal_entries+list(pos_entries) + list(loan_entries)),
|
||||||
|
key=lambda k: getdate(k['posting_date']))
|
||||||
|
|
||||||
|
def get_journal_entries(filters):
|
||||||
|
return frappe.db.sql("""
|
||||||
select "Journal Entry" as payment_document, jv.posting_date,
|
select "Journal Entry" as payment_document, jv.posting_date,
|
||||||
jv.name as payment_entry, jvd.debit_in_account_currency as debit,
|
jv.name as payment_entry, jvd.debit_in_account_currency as debit,
|
||||||
jvd.credit_in_account_currency as credit, jvd.against_account,
|
jvd.credit_in_account_currency as credit, jvd.against_account,
|
||||||
@ -130,7 +148,8 @@ def get_entries(filters):
|
|||||||
and ifnull(jv.clearance_date, '4000-01-01') > %(report_date)s
|
and ifnull(jv.clearance_date, '4000-01-01') > %(report_date)s
|
||||||
and ifnull(jv.is_opening, 'No') = 'No'""", filters, as_dict=1)
|
and ifnull(jv.is_opening, 'No') = 'No'""", filters, as_dict=1)
|
||||||
|
|
||||||
payment_entries = frappe.db.sql("""
|
def get_payment_entries(filters):
|
||||||
|
return frappe.db.sql("""
|
||||||
select
|
select
|
||||||
"Payment Entry" as payment_document, name as payment_entry,
|
"Payment Entry" as payment_document, name as payment_entry,
|
||||||
reference_no, reference_date as ref_date,
|
reference_no, reference_date as ref_date,
|
||||||
@ -145,9 +164,8 @@ def get_entries(filters):
|
|||||||
and ifnull(clearance_date, '4000-01-01') > %(report_date)s
|
and ifnull(clearance_date, '4000-01-01') > %(report_date)s
|
||||||
""", filters, as_dict=1)
|
""", filters, as_dict=1)
|
||||||
|
|
||||||
pos_entries = []
|
def get_pos_entries(filters):
|
||||||
if filters.include_pos_transactions:
|
return frappe.db.sql("""
|
||||||
pos_entries = frappe.db.sql("""
|
|
||||||
select
|
select
|
||||||
"Sales Invoice Payment" as payment_document, sip.name as payment_entry, sip.amount as debit,
|
"Sales Invoice Payment" as payment_document, sip.name as payment_entry, sip.amount as debit,
|
||||||
si.posting_date, si.debit_to as against_account, sip.clearance_date,
|
si.posting_date, si.debit_to as against_account, sip.clearance_date,
|
||||||
@ -161,8 +179,42 @@ def get_entries(filters):
|
|||||||
si.posting_date ASC, si.name DESC
|
si.posting_date ASC, si.name DESC
|
||||||
""", filters, as_dict=1)
|
""", filters, as_dict=1)
|
||||||
|
|
||||||
return sorted(list(payment_entries)+list(journal_entries+list(pos_entries)),
|
def get_loan_entries(filters):
|
||||||
key=lambda k: k['posting_date'] or getdate(nowdate()))
|
loan_docs = []
|
||||||
|
for doctype in ["Loan Disbursement", "Loan Repayment"]:
|
||||||
|
loan_doc = frappe.qb.DocType(doctype)
|
||||||
|
ifnull = CustomFunction('IFNULL', ['value', 'default'])
|
||||||
|
|
||||||
|
if doctype == "Loan Disbursement":
|
||||||
|
amount_field = (loan_doc.disbursed_amount).as_("credit")
|
||||||
|
posting_date = (loan_doc.disbursement_date).as_("posting_date")
|
||||||
|
account = loan_doc.disbursement_account
|
||||||
|
else:
|
||||||
|
amount_field = (loan_doc.amount_paid).as_("debit")
|
||||||
|
posting_date = (loan_doc.posting_date).as_("posting_date")
|
||||||
|
account = loan_doc.payment_account
|
||||||
|
|
||||||
|
entries = frappe.qb.from_(loan_doc).select(
|
||||||
|
ConstantColumn(doctype).as_("payment_document"),
|
||||||
|
(loan_doc.name).as_("payment_entry"),
|
||||||
|
(loan_doc.reference_number).as_("reference_no"),
|
||||||
|
(loan_doc.reference_date).as_("ref_date"),
|
||||||
|
amount_field,
|
||||||
|
posting_date,
|
||||||
|
).where(
|
||||||
|
loan_doc.docstatus == 1
|
||||||
|
).where(
|
||||||
|
account == filters.get('account')
|
||||||
|
).where(
|
||||||
|
posting_date <= getdate(filters.get('report_date'))
|
||||||
|
).where(
|
||||||
|
ifnull(loan_doc.clearance_date, '4000-01-01') > getdate(filters.get('report_date'))
|
||||||
|
).run(as_dict=1)
|
||||||
|
|
||||||
|
loan_docs.extend(entries)
|
||||||
|
|
||||||
|
return loan_docs
|
||||||
|
|
||||||
|
|
||||||
def get_amounts_not_reflected_in_system(filters):
|
def get_amounts_not_reflected_in_system(filters):
|
||||||
je_amount = frappe.db.sql("""
|
je_amount = frappe.db.sql("""
|
||||||
@ -182,7 +234,40 @@ def get_amounts_not_reflected_in_system(filters):
|
|||||||
|
|
||||||
pe_amount = flt(pe_amount[0][0]) if pe_amount else 0.0
|
pe_amount = flt(pe_amount[0][0]) if pe_amount else 0.0
|
||||||
|
|
||||||
return je_amount + pe_amount
|
loan_amount = get_loan_amount(filters)
|
||||||
|
|
||||||
|
return je_amount + pe_amount + loan_amount
|
||||||
|
|
||||||
|
def get_loan_amount(filters):
|
||||||
|
total_amount = 0
|
||||||
|
for doctype in ["Loan Disbursement", "Loan Repayment"]:
|
||||||
|
loan_doc = frappe.qb.DocType(doctype)
|
||||||
|
ifnull = CustomFunction('IFNULL', ['value', 'default'])
|
||||||
|
|
||||||
|
if doctype == "Loan Disbursement":
|
||||||
|
amount_field = Sum(loan_doc.disbursed_amount)
|
||||||
|
posting_date = (loan_doc.disbursement_date).as_("posting_date")
|
||||||
|
account = loan_doc.disbursement_account
|
||||||
|
else:
|
||||||
|
amount_field = Sum(loan_doc.amount_paid)
|
||||||
|
posting_date = (loan_doc.posting_date).as_("posting_date")
|
||||||
|
account = loan_doc.payment_account
|
||||||
|
|
||||||
|
amount = frappe.qb.from_(loan_doc).select(
|
||||||
|
amount_field
|
||||||
|
).where(
|
||||||
|
loan_doc.docstatus == 1
|
||||||
|
).where(
|
||||||
|
account == filters.get('account')
|
||||||
|
).where(
|
||||||
|
posting_date > getdate(filters.get('report_date'))
|
||||||
|
).where(
|
||||||
|
ifnull(loan_doc.clearance_date, '4000-01-01') <= getdate(filters.get('report_date'))
|
||||||
|
).run()[0][0]
|
||||||
|
|
||||||
|
total_amount += flt(amount)
|
||||||
|
|
||||||
|
return amount
|
||||||
|
|
||||||
def get_balance_row(label, amount, account_currency):
|
def get_balance_row(label, amount, account_currency):
|
||||||
if amount > 0:
|
if amount > 0:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user