Merge branch 'master' into production
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index 49b044f..ebc6dd3 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -719,7 +719,7 @@
 	if not day:
 		day = getdate(dt).day
 	if month > 12:
-		month, year = m-12, y+1
+		month, year = month-12, year+1
 	try:
 		next_month_date = datetime.date(year, month, day)
 	except:
@@ -728,24 +728,25 @@
 		next_month_date = datetime.date(year, month, last_day)
 	return next_month_date.strftime("%Y-%m-%d")
 
-def manage_recurring_invoices():
+def manage_recurring_invoices(next_date=None):
 	""" 
 		Create recurring invoices on specific date by copying the original one
 		and notify the concerned people
 	"""
+	next_date = next_date or nowdate()
 	recurring_invoices = webnotes.conn.sql("""select name, recurring_id
 		from `tabSales Invoice` where ifnull(convert_into_recurring_invoice, 0)=1
 		and docstatus=1 and next_date=%s
-		and next_date <= ifnull(end_date, '2199-12-31')""", nowdate())
+		and next_date <= ifnull(end_date, '2199-12-31')""", next_date)
 	
 	exception_list = []
 	for ref_invoice, recurring_id in recurring_invoices:
 		if not webnotes.conn.sql("""select name from `tabSales Invoice`
 				where posting_date=%s and recurring_id=%s and docstatus=1""",
-				(nowdate(), recurring_id)):
+				(next_date, recurring_id)):
 			try:
 				ref_wrapper = webnotes.model_wrapper('Sales Invoice', ref_invoice)
-				new_invoice_wrapper = make_new_invoice(ref_wrapper)
+				new_invoice_wrapper = make_new_invoice(ref_wrapper, next_date)
 				send_notification(new_invoice_wrapper)
 				webnotes.conn.commit()
 			except Exception, e:
@@ -765,19 +766,17 @@
 		exception_message = "\n\n".join([cstr(d) for d in exception_list])
 		raise Exception, exception_message
 
-def make_new_invoice(ref_wrapper):
+def make_new_invoice(ref_wrapper, posting_date):
 	from webnotes.model.wrapper import clone
 	new_invoice = clone(ref_wrapper)
 	
 	mcount = month_map[ref_wrapper.doc.recurring_type]
-	
-	today = nowdate()
-	
-	new_invoice.doc.fields.update({
-		"posting_date": today,
-		"aging_date": today,
 		
-		"due_date": add_days(today, cint(date_diff(ref_wrapper.doc.due_date,
+	new_invoice.doc.fields.update({
+		"posting_date": posting_date,
+		"aging_date": posting_date,
+		
+		"due_date": add_days(posting_date, cint(date_diff(ref_wrapper.doc.due_date,
 			ref_wrapper.doc.posting_date))),
 			
 		"invoice_period_from_date": \
@@ -911,4 +910,4 @@
 		webnotes.msgprint("Default Bank / Cash Account not set in Mode of Payment: %s. Please add a Default Account in Mode of Payment master." % mode_of_payment)
 	return {
 		"cash_bank_account": val
-	}
\ No newline at end of file
+	}
diff --git a/public/js/startup.js b/public/js/startup.js
index 9d8c5c5..e8e2c72 100644
--- a/public/js/startup.js
+++ b/public/js/startup.js
@@ -57,17 +57,18 @@
 			var today = dateutil.str_to_obj(wn.boot.server_date);
 			var expires_on = dateutil.str_to_obj(wn.boot.expires_on);
 			var diff = dateutil.get_diff(expires_on, today);
+			var payment_link = "<a href=\"https://erpnext.com/modes-of-payment.html\" target=\"_blank\">See Payment Options.</a>";		
 			if (0 <= diff && diff <= 15) {
 				var expiry_string = diff==0 ? "today" : repl("in %(diff)s day(s)", { diff: diff });
 				$('header').append(repl('<div class="expiry-info"> \
 					Your ERPNext subscription will <b>expire %(expiry_string)s</b>. \
 					Please renew your subscription to continue using ERPNext \
-					(and remove this annoying banner). \
-				</div>', { expiry_string: expiry_string }));
+					(and remove this annoying banner). %(payment_link)s\
+				</div>', { expiry_string: expiry_string, payment_link: payment_link }));
 			} else if (diff < 0) {
 				$('header').append(repl('<div class="expiry-info"> \
-					This ERPNext subscription <b>has expired</b>. \
-				</div>', { expiry_string: expiry_string }));
+					This ERPNext subscription <b>has expired</b>. %(payment_link)s\
+				</div>', { expiry_string: expiry_string, payment_link: payment_link }));
 			}
 		}
 		erpnext.set_about();
@@ -179,4 +180,4 @@
 // start
 $(document).bind('startup', function() {
 	erpnext.startup.start();
-});
\ No newline at end of file
+});
diff --git a/setup/doctype/permission_control/permission_control.py b/setup/doctype/permission_control/permission_control.py
index 8162c39..cb0575d 100644
--- a/setup/doctype/permission_control/permission_control.py
+++ b/setup/doctype/permission_control/permission_control.py
@@ -51,7 +51,7 @@
 	# -------------------------------------------------------------------
 	def get_permissions(self,doctype):
 		import webnotes.model.doctype
-		doclist = webnotes.model.doctype.get(doctype)
+		doclist = webnotes.model.doctype.get(doctype).get_parent_doclist()
 		
 		ptype = [{
 				'role': perm.role,