From b4a51ec80b96a7f30390f61ec8175f77b7fecb14 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 4 Nov 2015 13:09:37 +0530 Subject: [PATCH] [report] Added delay in payment column --- .../payment_period_based_on_invoice_date.py | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py index 786a494eba..20bdae8121 100644 --- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals import frappe from frappe import _ from erpnext.accounts.report.accounts_receivable.accounts_receivable import get_ageing_data -from frappe.utils import flt +from frappe.utils import flt, getdate def execute(filters=None): if not filters: filters = {} @@ -13,25 +13,27 @@ def execute(filters=None): columns = get_columns(filters) entries = get_entries(filters) - invoice_posting_date_map = get_invoice_posting_date_map(filters) + invoice_details = get_invoice_posting_date_map(filters) against_date = "" data = [] for d in entries: - against_date = invoice_posting_date_map.get(d.reference_name) or "" + invoice = invoice_details.get(d.reference_name) or frappe._dict() if d.reference_type=="Purchase Invoice": payment_amount = flt(d.debit) or -1 * flt(d.credit) else: payment_amount = flt(d.credit) or -1 * flt(d.debit) - row = [d.name, d.party_type, d.party, d.posting_date, d.reference_name, - against_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark] + row = [d.name, d.party_type, d.party, d.posting_date, d.reference_name, invoice.posting_date, + invoice.due_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark] if d.reference_name: row += get_ageing_data(30, 60, 90, d.posting_date, against_date, payment_amount) else: row += ["", "", "", "", ""] - + if invoice.due_date: + row.append((getdate(d.posting_date) - getdate(invoice.due_date)).days or 0) + data.append(row) return columns, data @@ -43,13 +45,25 @@ def validate_filters(filters): .format(filters.payment_type, filters.party_type)) def get_columns(filters): - return [_("Journal Entry") + ":Link/Journal Entry:140", - _("Party Type") + "::100", _("Party") + ":Dynamic Link/Party Type:140", + return [ + _("Journal Entry") + ":Link/Journal Entry:140", + _("Party Type") + "::100", + _("Party") + ":Dynamic Link/Party Type:140", _("Posting Date") + ":Date:100", - _("Against Invoice") + (":Link/Purchase Invoice:130" if filters.get("payment_type") == "Outgoing" else ":Link/Sales Invoice:130"), - _("Against Invoice Posting Date") + ":Date:130", _("Debit") + ":Currency:120", _("Credit") + ":Currency:120", - _("Reference No") + "::100", _("Reference Date") + ":Date:100", _("Remarks") + "::150", _("Age") +":Int:40", - "0-30:Currency:100", "30-60:Currency:100", "60-90:Currency:100", _("90-Above") + ":Currency:100" + _("Invoice") + (":Link/Purchase Invoice:130" if filters.get("payment_type") == "Outgoing" else ":Link/Sales Invoice:130"), + _("Invoice Posting Date") + ":Date:130", + _("Payment Due Date") + ":Date:130", + _("Debit") + ":Currency:120", + _("Credit") + ":Currency:120", + _("Reference No") + "::100", + _("Reference Date") + ":Date:100", + _("Remarks") + "::150", + _("Age") +":Int:40", + "0-30:Currency:100", + "30-60:Currency:100", + "60-90:Currency:100", + _("90-Above") + ":Currency:100", + _("Delay in payment (Days)") + "::150" ] def get_conditions(filters): @@ -66,7 +80,14 @@ def get_conditions(filters): if filters.get("party"): conditions.append("jvd.party=%(party)s") - + + if filters.get("party_type"): + conditions.append("jvd.reference_type=%(reference_type)s") + if filters.get("party_type") == "Customer": + filters["reference_type"] = "Sales Invoice" + else: + filters["reference_type"] = "Purchase Invoice" + if filters.get("company"): conditions.append("jv.company=%(company)s") @@ -89,12 +110,9 @@ def get_entries(filters): return entries def get_invoice_posting_date_map(filters): - invoice_posting_date_map = {} - if filters.get("payment_type") == "Incoming": - for t in frappe.db.sql("""select name, posting_date from `tabSales Invoice`"""): - invoice_posting_date_map[t[0]] = t[1] - else: - for t in frappe.db.sql("""select name, posting_date from `tabPurchase Invoice`"""): - invoice_posting_date_map[t[0]] = t[1] + invoice_details = {} + dt = "Sales Invoice" if filters.get("payment_type") == "Incoming" else "Purchase Invoice" + for t in frappe.db.sql("select name, posting_date, due_date from `tab{0}`".format(dt), as_dict=1): + invoice_details[t.name] = t - return invoice_posting_date_map + return invoice_details