Payment Entry: Payment period based on invoice date
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 20bdae8..85c7daa 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 @@
 import frappe
 from frappe import _
 from erpnext.accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
-from frappe.utils import flt, getdate
+from frappe.utils import getdate, flt
 
 def execute(filters=None):
 	if not filters: filters = {}
@@ -14,21 +14,21 @@
 	columns = get_columns(filters)
 	entries = get_entries(filters)
 	invoice_details = get_invoice_posting_date_map(filters)
-	against_date = ""
 
 	data = []
 	for d in entries:
-		invoice = invoice_details.get(d.reference_name) or frappe._dict()
+		invoice = invoice_details.get(d.against_voucher) 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, invoice.posting_date, 
-			invoice.due_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
+		row = [d.voucher_type, d.voucher_no, d.party_type, d.party, d.posting_date, d.against_voucher, 
+			invoice.posting_date, invoice.due_date, d.debit, d.credit, d.remarks]
 
-		if d.reference_name:
-			row += get_ageing_data(30, 60, 90, d.posting_date, against_date, payment_amount)
+		if d.against_voucher:
+			row += get_ageing_data(30, 60, 90, d.posting_date, invoice.posting_date, payment_amount)
 		else:
 			row += ["", "", "", "", ""]
 		if invoice.due_date:
@@ -46,7 +46,8 @@
 
 def get_columns(filters):
 	return [
-		_("Journal Entry") + ":Link/Journal Entry:140",
+		_("Payment Document") + ":Link/DocType: 100",
+		_("Payment Entry") + ":Dynamic Link/"+_("Payment Document")+":140",
 		_("Party Type") + "::100", 
 		_("Party") + ":Dynamic Link/Party Type:140",
 		_("Posting Date") + ":Date:100",
@@ -55,8 +56,6 @@
 		_("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", 
@@ -69,45 +68,36 @@
 def get_conditions(filters):
 	conditions = []
 
-	if not filters.get("party_type"):
-		if filters.get("payment_type") == "Outgoing":
-			filters["party_type"] = "Supplier"
+	if not filters.party_type:
+		if filters.payment_type == "Outgoing":
+			filters.party_type = "Supplier"
 		else:
-			filters["party_type"] = "Customer"
+			filters.party_type = "Customer"
 
-	if filters.get("party_type"):
-		conditions.append("jvd.party_type=%(party_type)s")
+	if filters.party_type:
+		conditions.append("party_type=%(party_type)s")
 
-	if filters.get("party"):
-		conditions.append("jvd.party=%(party)s")
+	if filters.party:
+		conditions.append("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")
+	if filters.party_type:
+		conditions.append("against_voucher_type=%(reference_type)s")
+		filters["reference_type"] = "Sales Invoice" if filters.party_type=="Customer" else "Purchase Invoice"
 
 	if filters.get("from_date"):
-		conditions.append("jv.posting_date >= %(from_date)s")
+		conditions.append("posting_date >= %(from_date)s")
+		
 	if filters.get("to_date"):
-		conditions.append("jv.posting_date <= %(to_date)s")
+		conditions.append("posting_date <= %(to_date)s")
 
-	return "and {}".format(" and ".join(conditions)) if conditions else ""
+	return "and " + " and ".join(conditions) if conditions else ""
 
 def get_entries(filters):
-	conditions = get_conditions(filters)
-	entries =  frappe.db.sql("""select jv.name, jvd.party_type, jvd.party, jv.posting_date,
-		jvd.reference_type, jvd.reference_name, jvd.debit, jvd.credit,
-		jv.cheque_no, jv.cheque_date, jv.remark
-		from `tabJournal Entry Account` jvd, `tabJournal Entry` jv
-		where jvd.parent = jv.name and jv.docstatus=1 %s order by jv.name DESC""" %
-		conditions, filters, as_dict=1)
-
-	return entries
+	return frappe.db.sql("""select 
+		voucher_type, voucher_no, party_type, party, posting_date, debit, credit, remarks, against_voucher
+		from `tabGL Entry`
+		where company=%(company)s and voucher_type in ('Journal Entry', 'Payment Entry') {0}
+	""".format(get_conditions(filters)), filters, as_dict=1)
 
 def get_invoice_posting_date_map(filters):
 	invoice_details = {}
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index b6b1480..9dd50f8 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -46,6 +46,11 @@
 				},
 				{
 					"type": "doctype",
+					"name": "Payment Entry",
+					"description": _("Payment entries against party or for internal transfer")
+				},
+				{
+					"type": "doctype",
 					"name": "Journal Entry",
 					"description": _("Accounting journal entries.")
 				},