[script report] payments made with ageing
diff --git a/accounts/page/accounts_home/accounts_home.js b/accounts/page/accounts_home/accounts_home.js
index 7038fe9..d2b0a0e 100644
--- a/accounts/page/accounts_home/accounts_home.js
+++ b/accounts/page/accounts_home/accounts_home.js
@@ -212,6 +212,11 @@
route: "query-report/Payment Collection With Ageing",
doctype: "Journal Voucher"
},
+ {
+ "label":wn._("Payment Made With Ageing"),
+ route: "query-report/Payment Made With Ageing",
+ doctype: "Journal Voucher"
+ },
]
}
]
diff --git a/accounts/report/accounts_payable/accounts_payable.py b/accounts/report/accounts_payable/accounts_payable.py
index 4e9b2c8..71aeb35 100644
--- a/accounts/report/accounts_payable/accounts_payable.py
+++ b/accounts/report/accounts_payable/accounts_payable.py
@@ -1,6 +1,7 @@
from __future__ import unicode_literals
import webnotes
from webnotes.utils import getdate, nowdate, flt, cstr
+from webnotes import msgprint, _
from accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
def execute(filters=None):
@@ -79,13 +80,16 @@
supplier_accounts = []
if filters.get("account"):
supplier_accounts = [filters["account"]]
- elif filters.get("company"):
+ else:
supplier_accounts = webnotes.conn.sql_list("""select name from `tabAccount`
where ifnull(master_type, '') = 'Supplier' and docstatus < 2 %s""" %
conditions, filters)
if supplier_accounts:
conditions += " and account in (%s)" % (", ".join(['%s']*len(supplier_accounts)))
+ else:
+ msgprint(_("No Supplier Accounts found. Supplier Accounts are identified based on \
+ 'Master Type' value in account record."), raise_exception=1)
if filters.get("report_date"):
if before_report_date:
diff --git a/accounts/report/accounts_receivable/accounts_receivable.py b/accounts/report/accounts_receivable/accounts_receivable.py
index 47908c3..d791fad 100644
--- a/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/accounts/report/accounts_receivable/accounts_receivable.py
@@ -1,5 +1,6 @@
from __future__ import unicode_literals
import webnotes
+from webnotes import msgprint, _
from webnotes.utils import getdate, nowdate, flt, cstr
def execute(filters=None):
@@ -68,13 +69,16 @@
customer_accounts = []
if filters.get("account"):
customer_accounts = [filters["account"]]
- elif filters.get("company"):
+ else:
customer_accounts = webnotes.conn.sql_list("""select name from `tabAccount`
where ifnull(master_type, '') = 'Customer' and docstatus < 2 %s""" %
conditions, filters)
if customer_accounts:
conditions += " and account in (%s)" % (", ".join(['%s']*len(customer_accounts)))
+ else:
+ msgprint(_("No Customer Accounts found. Customer Accounts are identified based on \
+ 'Master Type' value in account record."), raise_exception=1)
if filters.get("report_date"):
if upto_report_date:
diff --git a/accounts/report/payment_collection_with_ageing/payment_collection_with_ageing.py b/accounts/report/payment_collection_with_ageing/payment_collection_with_ageing.py
index 50f74e0..1268852 100644
--- a/accounts/report/payment_collection_with_ageing/payment_collection_with_ageing.py
+++ b/accounts/report/payment_collection_with_ageing/payment_collection_with_ageing.py
@@ -16,6 +16,7 @@
from __future__ import unicode_literals
import webnotes
+from webnotes import msgprint, _
from accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
def execute(filters=None):
@@ -55,13 +56,16 @@
customer_accounts = []
if filters.get("account"):
customer_accounts = [filters["account"]]
- elif filters.get("company"):
+ else:
+ cond = filters.get("company") and (" and company = '%s'" % filters["company"]) or ""
customer_accounts = webnotes.conn.sql_list("""select name from `tabAccount`
- where ifnull(master_type, '') = 'Customer' and docstatus < 2
- and company = %s""", filters["company"])
+ where ifnull(master_type, '') = 'Customer' and docstatus < 2 %s""" % cond)
if customer_accounts:
conditions += " and jvd.account in (%s)" % (", ".join(['%s']*len(customer_accounts)))
+ else:
+ msgprint(_("No Customer Accounts found. Customer Accounts are identified based on \
+ 'Master Type' value in account record."), raise_exception=1)
if filters.get("from_date"): conditions += " and jv.posting_date >= '%s'" % filters["from_date"]
if filters.get("to_date"): conditions += " and jv.posting_date <= '%s'" % filters["to_date"]
diff --git a/accounts/report/payment_made_with_ageing/__init__.py b/accounts/report/payment_made_with_ageing/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/accounts/report/payment_made_with_ageing/__init__.py
diff --git a/accounts/report/payment_made_with_ageing/payment_made_with_ageing.js b/accounts/report/payment_made_with_ageing/payment_made_with_ageing.js
new file mode 100644
index 0000000..533fe61
--- /dev/null
+++ b/accounts/report/payment_made_with_ageing/payment_made_with_ageing.js
@@ -0,0 +1,40 @@
+wn.query_reports["Payment Made With Ageing"] = {
+ "filters": [
+ {
+ fieldname: "from_date",
+ label: "From Date",
+ fieldtype: "Date",
+ default: wn.defaults.get_user_default("year_start_date"),
+ },
+ {
+ fieldname:"to_date",
+ label: "To Date",
+ fieldtype: "Date",
+ default: get_today()
+ },
+ {
+ fieldname:"account",
+ label: "Supplier Account",
+ fieldtype: "Link",
+ options: "Account",
+ get_query: function() {
+ return {
+ query: "accounts.utils.get_account_list",
+ filters: {
+ is_pl_account: "No",
+ debit_or_credit: "Credit",
+ company: wn.query_report.filters_by_name.company.get_value(),
+ master_type: "Supplier"
+ }
+ }
+ }
+ },
+ {
+ fieldname:"company",
+ label: "Company",
+ fieldtype: "Link",
+ options: "Company",
+ default: sys_defaults.company
+ },
+ ]
+}
\ No newline at end of file
diff --git a/accounts/report/payment_made_with_ageing/payment_made_with_ageing.py b/accounts/report/payment_made_with_ageing/payment_made_with_ageing.py
new file mode 100644
index 0000000..e7f13ef
--- /dev/null
+++ b/accounts/report/payment_made_with_ageing/payment_made_with_ageing.py
@@ -0,0 +1,89 @@
+# ERPNext - web based ERP (http://erpnext.com)
+# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import unicode_literals
+import webnotes
+from webnotes import msgprint, _
+from accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
+
+def execute(filters=None):
+ if not filters: filters = {}
+
+ columns = get_columns()
+ entries = get_entries(filters)
+ pi_posting_date_map = get_pi_posting_date_map()
+
+ data = []
+ for d in entries:
+ against_voucher_date = d.against_voucher and pi_posting_date_map[d.against_voucher] or ""
+
+ row = [d.name, d.account, d.posting_date, d.against_voucher, against_voucher_date,
+ d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
+
+ if d.against_voucher:
+ row += get_ageing_data(against_voucher_date, d.posting_date, d.debit or -1*d.credit)
+ else:
+ row += ["", "", "", "", ""]
+
+ data.append(row)
+
+ return columns, data
+
+def get_columns():
+ return ["Journal Voucher:Link/Journal Voucher:140", "Account:Link/Account:140",
+ "Posting Date:Date:100", "Against Invoice:Link/Purchase 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"
+ ]
+
+def get_conditions(filters):
+ conditions = ""
+ supplier_accounts = []
+ if filters.get("account"):
+ supplier_accounts = [filters["account"]]
+ else:
+ cond = filters.get("company") and (" and company = '%s'" % filters["company"]) or ""
+ supplier_accounts = webnotes.conn.sql_list("""select name from `tabAccount`
+ where ifnull(master_type, '') = 'Supplier' and docstatus < 2 %s""" % cond)
+
+ if supplier_accounts:
+ conditions += " and jvd.account in (%s)" % (", ".join(['%s']*len(supplier_accounts)))
+ else:
+ msgprint(_("No Supplier Accounts found. Supplier Accounts are identified based on \
+ 'Master Type' value in account record."), raise_exception=1)
+
+ if filters.get("from_date"): conditions += " and jv.posting_date >= '%s'" % filters["from_date"]
+ if filters.get("to_date"): conditions += " and jv.posting_date <= '%s'" % filters["to_date"]
+
+ return conditions, supplier_accounts
+
+def get_entries(filters):
+ conditions, supplier_accounts = get_conditions(filters)
+ entries = webnotes.conn.sql("""select jv.name, jvd.account, jv.posting_date,
+ jvd.against_voucher, jvd.debit, jvd.credit, jv.cheque_no, jv.cheque_date, jv.remark
+ from `tabJournal Voucher Detail` jvd, `tabJournal Voucher` jv
+ where jvd.parent = jv.name and jv.docstatus=1 %s order by jv.name DESC""" %
+ (conditions), tuple(supplier_accounts), as_dict=1)
+
+ return entries
+
+def get_pi_posting_date_map():
+ pi_posting_date_map = {}
+ for t in webnotes.conn.sql("""select name, posting_date from `tabPurchase Invoice`"""):
+ pi_posting_date_map[t[0]] = t[1]
+
+ return pi_posting_date_map
\ No newline at end of file
diff --git a/accounts/report/payment_made_with_ageing/payment_made_with_ageing.txt b/accounts/report/payment_made_with_ageing/payment_made_with_ageing.txt
new file mode 100644
index 0000000..c5c85da
--- /dev/null
+++ b/accounts/report/payment_made_with_ageing/payment_made_with_ageing.txt
@@ -0,0 +1,22 @@
+[
+ {
+ "creation": "2013-05-02 12:10:21",
+ "docstatus": 0,
+ "modified": "2013-05-02 12:10:21",
+ "modified_by": "Administrator",
+ "owner": "Administrator"
+ },
+ {
+ "add_total_row": 1,
+ "doctype": "Report",
+ "is_standard": "Yes",
+ "name": "__common__",
+ "ref_doctype": "Journal Voucher",
+ "report_name": "Payment Made With Ageing",
+ "report_type": "Script Report"
+ },
+ {
+ "doctype": "Report",
+ "name": "Payment Made With Ageing"
+ }
+]
\ No newline at end of file