[fix] payment request demo
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index f55adb9..665fc90 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -34,7 +34,7 @@
 		if hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart":
 			send_mail = False
 
-		if send_mail:
+		if send_mail and not self.flags.mute_email:
 			self.send_payment_request()
 			self.send_email()
 
@@ -104,8 +104,9 @@
 				self.reference_name, self.name)
 		})
 
-		company_details = get_company_defaults(ref_doc.company)
 		if payment_entry.difference_amount:
+			company_details = get_company_defaults(ref_doc.company)
+
 			payment_entry.append("deductions", {
 				"account": company_details.exchange_gain_loss_account,
 				"cost_center": company_details.cost_center,
@@ -132,7 +133,8 @@
 			"payment_url": self.payment_url
 		}
 
-		return frappe.render_template(self.message, context)
+		if self.message:
+			return frappe.render_template(self.message, context)
 
 	def set_failed(self):
 		pass
@@ -183,13 +185,17 @@
 			"grand_total": grand_total,
 			"email_to": args.recipient_id or "",
 			"subject": "Payment Request for %s"%args.dn,
-			"message": gateway_account.message,
+			"message": gateway_account.get("message") or get_dummy_message(args.use_dummy_message),
 			"reference_doctype": args.dt,
 			"reference_name": args.dn
 		})
 
 		if args.return_doc:
 			return pr
+
+		if args.mute_email:
+			pr.flags.mute_email = True
+
 		if args.submit_doc:
 			pr.insert(ignore_permissions=True)
 			pr.submit()
@@ -258,9 +264,9 @@
 	return frappe.get_doc("Payment Request", docname).send_email()
 
 @frappe.whitelist()
-def make_payment_entry(docname):
+def make_payment_entry(docname, make_draft_payment_entry=True):
 	doc = frappe.get_doc("Payment Request", docname)
-	doc.flags.make_draft_payment_entry = True
+	doc.flags.make_draft_payment_entry = make_draft_payment_entry
 	return doc.set_as_paid().as_dict()
 
 def make_status_as_paid(doc, method):
@@ -269,6 +275,17 @@
 			{"reference_doctype": ref.reference_doctype, "reference_name": ref.reference_name,
 			"docstatus": 1})
 		
-		doc = frappe.get_doc("Payment Request", payment_request_name)
-		if doc.status != "Paid":
-			doc.db_set('status', 'Paid')
+		if payment_request_name:
+			doc = frappe.get_doc("Payment Request", payment_request_name)
+			if doc.status != "Paid":
+				doc.db_set('status', 'Paid')
+
+def get_dummy_message(use_dummy_message=True):
+	return """
+		<p> Hope you are enjoying a service. Please consider bank details for payment </p>
+		<p> Bank Details <p><br>
+		<p> Bank Name : National Bank </p>
+		<p> Account Number : 123456789000872 </p>
+		<p> IFSC code : NB000001 </p>
+		<p> Account Name : Wind Power LLC </p>
+	"""
diff --git a/erpnext/demo/user/accounts.py b/erpnext/demo/user/accounts.py
index e7dceb3..36a79f6 100644
--- a/erpnext/demo/user/accounts.py
+++ b/erpnext/demo/user/accounts.py
@@ -10,6 +10,8 @@
 from frappe.desk import query_report
 from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry_against_invoice
 from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
+from frappe.utils.make_random import get_random
+from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, make_payment_entry
 
 def work():
 	frappe.set_user(frappe.db.get_global('demo_accounts_user'))
@@ -46,8 +48,19 @@
 	if random.random() < 0.5:
 		make_payment_entries("Purchase Invoice", "Accounts Payable")
 
+	if random.random() < 0.1:
+		#make payment request against sales invoice
+		sales_invoice_name = get_random("Sales Invoice", filters={"docstatus": 1})
+		if sales_invoice_name:
+			si = frappe.get_doc("Sales Invoice", sales_invoice_name)
+			if si.outstanding_amount > 0:
+				payment_request = make_payment_request(dt="Sales Invoice", dn=si.name, recipient_id=si.contact_email,
+					submit_doc=True, mute_email=True, use_dummy_message=True)
+
+				make_payment_entry(payment_request.name, make_draft_payment_entry=False)
+
 def make_payment_entries(ref_doctype, report):
-	outstanding_invoices = list(set([r[3] for r in query_report.run(report, 
+	outstanding_invoices = list(set([r[3] for r in query_report.run(report,
 	{"report_date": frappe.flags.current_date })["result"] if r[2]==ref_doctype]))
 	
 	# make Payment Entry
@@ -69,4 +82,4 @@
 		jv.cheque_date = frappe.flags.current_date
 		jv.insert()
 		jv.submit()
-		frappe.db.commit()		
\ No newline at end of file
+		frappe.db.commit()
diff --git a/erpnext/demo/user/sales.py b/erpnext/demo/user/sales.py
index 6b36b46..cd008a9 100644
--- a/erpnext/demo/user/sales.py
+++ b/erpnext/demo/user/sales.py
@@ -4,9 +4,11 @@
 from __future__ import unicode_literals
 
 import frappe, random
+from frappe.utils import flt
 from frappe.utils.make_random import add_random_children, get_random
 from erpnext.setup.utils import get_exchange_rate
 from erpnext.accounts.party import get_party_account_currency
+from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, make_payment_entry
 
 def work():
 	frappe.set_user(frappe.db.get_global('demo_sales_user_2'))
@@ -34,6 +36,17 @@
 		for i in xrange(random.randint(1,3)):
 			make_sales_order()
 
+	if random.random() < 0.1:
+		#make payment request against Sales Order
+		sales_order_name = get_random("Sales Order", filters={"docstatus": 1})
+		if sales_order_name:
+			so = frappe.get_doc("Sales Order", sales_order_name)
+			if (flt(so.grand_total) - flt(so.advance_paid)) > 0:
+				payment_request = make_payment_request(dt="Sales Order", dn=so.name, recipient_id=so.contact_email,
+					submit_doc=True, mute_email=True, use_dummy_message=True)
+
+				make_payment_entry(payment_request.name, make_draft_payment_entry=False)
+
 def make_opportunity():
 	b = frappe.get_doc({
 		"doctype": "Opportunity",