[#2362] Commonify Acc. Receivable Summary Report and add Acc. Payable Summary Report
diff --git a/erpnext/accounts/report/accounts_payable_summary/__init__.py b/erpnext/accounts/report/accounts_payable_summary/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/report/accounts_payable_summary/__init__.py
diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
new file mode 100644
index 0000000..29e8571
--- /dev/null
+++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
@@ -0,0 +1,57 @@
+// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+// License: GNU General Public License v3. See license.txt
+
+frappe.query_reports["Accounts Payable Summary"] = {
+ "filters": [
+ {
+ "fieldname":"company",
+ "label": __("Company"),
+ "fieldtype": "Link",
+ "options": "Company",
+ "default": frappe.defaults.get_user_default("company")
+ },
+ {
+ "fieldname":"supplier",
+ "label": __("Supplier"),
+ "fieldtype": "Link",
+ "options": "Supplier"
+ },
+ {
+ "fieldname":"report_date",
+ "label": __("Date"),
+ "fieldtype": "Date",
+ "default": get_today()
+ },
+ {
+ "fieldname":"ageing_based_on",
+ "label": __("Ageing Based On"),
+ "fieldtype": "Select",
+ "options": 'Posting Date' + NEWLINE + 'Due Date',
+ "default": "Posting Date"
+ },
+ {
+ "fieldtype": "Break",
+ },
+ {
+ "fieldname":"range1",
+ "label": __("Ageing Range 1"),
+ "fieldtype": "Int",
+ "default": "30",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range2",
+ "label": __("Ageing Range 2"),
+ "fieldtype": "Int",
+ "default": "60",
+ "reqd": 1
+ },
+ {
+ "fieldname":"range3",
+ "label": __("Ageing Range 3"),
+ "fieldtype": "Int",
+ "default": "90",
+ "reqd": 1
+ }
+ ]
+}
diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.json b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.json
new file mode 100644
index 0000000..8bf8365
--- /dev/null
+++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.json
@@ -0,0 +1,17 @@
+{
+ "add_total_row": 1,
+ "apply_user_permissions": 1,
+ "creation": "2014-11-04 12:09:59.672379",
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "is_standard": "Yes",
+ "modified": "2014-11-04 12:09:59.672379",
+ "modified_by": "Administrator",
+ "module": "Accounts",
+ "name": "Accounts Payable Summary",
+ "owner": "Administrator",
+ "ref_doctype": "Purchase Invoice",
+ "report_name": "Accounts Payable Summary",
+ "report_type": "Script Report"
+}
\ No newline at end of file
diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.py b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.py
new file mode 100644
index 0000000..67fc58c
--- /dev/null
+++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.py
@@ -0,0 +1,15 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+from erpnext.accounts.report.accounts_receivable_summary.accounts_receivable_summary \
+ import AccountsReceivableSummary
+
+def execute(filters=None):
+ args = {
+ "party_type": "Supplier",
+ "naming_by": ["Buying Settings", "supp_master_name"],
+ }
+ return AccountsReceivableSummary(filters).run(args)
+
diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
index 5bf83d6..82daa19 100644
--- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
+++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
@@ -9,13 +9,13 @@
class AccountsReceivableSummary(ReceivablePayableReport):
def run(self, args):
party_naming_by = frappe.db.get_value(args.get("naming_by")[0], None, args.get("naming_by")[1])
- return self.get_columns(party_naming_by), self.get_data(party_naming_by, args)
+ return self.get_columns(party_naming_by, args), self.get_data(party_naming_by, args)
- def get_columns(self, party_naming_by):
- columns = [_("Customer") + ":Link/Customer:200"]
+ def get_columns(self, party_naming_by, args):
+ columns = [_(args.get("party_type")) + ":Link/" + args.get("party_type") + ":200"]
if party_naming_by == "Naming Series":
- columns += ["Customer Name::140"]
+ columns += [ args.get("party_type") + " Name::140"]
columns += [
_("Total Invoiced Amt") + ":Currency:140",
@@ -24,36 +24,43 @@
"0-" + self.filters.range1 + ":Currency:100",
self.filters.range1 + "-" + self.filters.range2 + ":Currency:100",
self.filters.range2 + "-" + self.filters.range3 + ":Currency:100",
- self.filters.range3 + _("-Above") + ":Currency:100",
- _("Territory") + ":Link/Territory:80"
- ]
+ self.filters.range3 + _("-Above") + ":Currency:100"]
+
+ if args.get("party_type") == "Customer":
+ columns += [_("Territory") + ":Link/Territory:80"]
+ if args.get("party_type") == "Supplier":
+ columns += [_("Supplier Type") + ":Link/Supplier Type:80"]
return columns
def get_data(self, party_naming_by, args):
data = []
- customerwise_total = self.get_customerwise_total(party_naming_by, args)
+ partywise_total = self.get_partywise_total(party_naming_by, args)
- for customer, customer_dict in customerwise_total.items():
- row = [customer]
+ for party, party_dict in partywise_total.items():
+ row = [party]
if party_naming_by == "Naming Series":
- row += [self.get_party_name("Customer", customer)]
+ row += [self.get_party_name(args.get("party_type"), party)]
row += [
- customer_dict.invoiced_amt, customer_dict.paid_amt, customer_dict.outstanding_amt,
- customer_dict.range1, customer_dict.range2, customer_dict.range3, customer_dict.range4,
- self.get_territory(customer)
+ party_dict.invoiced_amt, party_dict.paid_amt, party_dict.outstanding_amt,
+ party_dict.range1, party_dict.range2, party_dict.range3, party_dict.range4,
]
+
+ if args.get("party_type") == "Customer":
+ row += [self.get_territory(party)]
+ if args.get("party_type") == "Supplier":
+ row += [self.get_supplier_type(party)]
data.append(row)
return data
- def get_customerwise_total(self, party_naming_by, args):
- customer_total = frappe._dict()
+ def get_partywise_total(self, party_naming_by, args):
+ party_total = frappe._dict()
for d in self.get_voucherwise_data(party_naming_by, args):
- customer_total.setdefault(d.customer,
+ party_total.setdefault(d.party,
frappe._dict({
"invoiced_amt": 0,
"paid_amt": 0,
@@ -64,21 +71,31 @@
"range4": 0
})
)
- for k in customer_total[d.customer].keys():
- customer_total[d.customer][k] += d.get(k, 0)
+ for k in party_total[d.party].keys():
+ party_total[d.party][k] += d.get(k, 0)
- return customer_total
+ return party_total
def get_voucherwise_data(self, party_naming_by, args):
voucherwise_data = ReceivablePayableReport(self.filters).run(args)[1]
- cols = ["posting_date", "customer"]
+ cols = ["posting_date", "party"]
if party_naming_by == "Naming Series":
- cols += ["customer_name"]
+ cols += ["party_name"]
- cols += ["voucher_type", "voucher_no", "due_date", "invoiced_amt", "paid_amt",
- "outstanding_amt", "age", "range1", "range2", "range3", "range4", "territory", "remarks"]
+ cols += ["voucher_type", "voucher_no", "due_date"]
+
+ if args.get("party_type") == "Supplier":
+ cols += ["bill_no", "bill_date"]
+
+ cols += ["invoiced_amt", "paid_amt",
+ "outstanding_amt", "age", "range1", "range2", "range3", "range4"]
+
+ if args.get("party_type") == "Supplier":
+ cols += ["supplier_type", "remarks"]
+ if args.get("party_type") == "Customer":
+ cols += ["territory", "remarks"]
return self.make_data_dict(cols, voucherwise_data)
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index 3d517e2..c861a9e 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -328,6 +328,12 @@
},
{
"type": "report",
+ "name": "Accounts Payable Summary",
+ "doctype": "Purchase Invoice",
+ "is_query_report": True
+ },
+ {
+ "type": "report",
"is_query_report": True,
"name": "Customer Credit Balance",
"doctype": "Customer"