change convert_to_recurring() to take recurring_id dynamicaly
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 77c7ea9..6a41bba 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -265,11 +265,11 @@
 		self.update_against_document_in_jv()
 		self.update_prevdoc_status()
 		self.update_billing_status_for_zero_amount_refdoc("Purchase Order")
-		convert_to_recurring(self, "RECPI.#####", self.posting_date)
+		convert_to_recurring(self, self.posting_date)
 
 	def on_update_after_submit(self):
 		validate_recurring_document(self)
-		convert_to_recurring(self, "RECPI.#####", self.posting_date)
+		convert_to_recurring(self, self.posting_date)
 
 	def make_gl_entries(self):
 		auto_accounting_for_stock = \
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index a20d906..dc38c9a 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -103,7 +103,7 @@
 
 		self.update_c_form()
 		self.update_time_log_batch(self.name)
-		convert_to_recurring(self, "RECINV.#####", self.posting_date)
+		convert_to_recurring(self, self.posting_date)
 
 	def before_cancel(self):
 		self.update_time_log_batch(None)
@@ -145,7 +145,7 @@
 
 	def on_update_after_submit(self):
 		validate_recurring_document(self)
-		convert_to_recurring(self, "RECINV.#####", self.posting_date)
+		convert_to_recurring(self, self.posting_date)
 
 	def get_portal_page(self):
 		return "invoice" if self.docstatus==1 else None
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 66083be..a8a9d0d 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -179,7 +179,7 @@
 
 		frappe.db.set(self,'status','Submitted')
 		
-		convert_to_recurring(self, "SO/REP/.#####", self.transaction_date)
+		convert_to_recurring(self, self.transaction_date)
 
 	def on_cancel(self):
 		pc_obj = frappe.get_doc('Purchase Common')
@@ -206,7 +206,7 @@
 
 	def on_update_after_submit(self):
 		validate_recurring_document(self)
-		convert_to_recurring(self, "SO/REP/.#####", self.transaction_date)
+		convert_to_recurring(self, self.transaction_date)
 
 def set_missing_values(source, target):
 	target.ignore_pricing_rule = 1
diff --git a/erpnext/controllers/recurring_document.py b/erpnext/controllers/recurring_document.py
index c7163ae..7b4310b 100644
--- a/erpnext/controllers/recurring_document.py
+++ b/erpnext/controllers/recurring_document.py
@@ -2,9 +2,14 @@
 import frappe
 import frappe.utils
 import frappe.defaults
-from frappe.utils import cint, cstr, getdate, nowdate, get_first_day, get_last_day
+
+from frappe.utils import add_days, cint, cstr, date_diff, flt, getdate, nowdate, \
+	get_first_day, get_last_day, comma_and
 from frappe.model.naming import make_autoname
+
 from frappe import _, msgprint, throw
+from erpnext.accounts.party import get_party_account, get_due_date, get_party_details
+from frappe.model.mapper import get_mapped_doc
 
 month_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, 'Yearly': 12}
 
@@ -46,7 +51,7 @@
 
 					frappe.db.begin()
 					frappe.db.sql("update `tab%s` \
-						set is_recurring = 0 where name = %s" % (doctype, '%s'),
+						set is_recurring = 0 where name = %s" % (doctype, '%s'), 
 						(ref_document))
 					notify_errors(ref_document, doctype, ref_wrapper.customer, ref_wrapper.owner)
 					frappe.db.commit()
@@ -152,18 +157,18 @@
 		elif not (doc.from_date and doc.to_date):
 			throw(_("Period From and Period To dates mandatory for recurring %s") % doc.doctype)
 
-def convert_to_recurring(doc, autoname, posting_date):
-	if doc.is_recurring:
-		if not doc.recurring_id:
-			frappe.db.set(doc, "recurring_id",
-				make_autoname(autoname))
+#
+def convert_to_recurring(doc, posting_date):
+    if doc.is_recurring:
+        if not doc.recurring_id:
+            frappe.db.set(doc, "recurring_id", doc.name)
 
-		set_next_date(doc, posting_date)
+        set_next_date(doc, posting_date)
 
-	elif doc.recurring_id:
-		frappe.db.sql("""update `tab%s`
-			set is_recurring = 0
-			where recurring_id = %s""" % (doc.doctype, '%s'), (doc.recurring_id))
+    elif doc.recurring_id:
+        frappe.db.sql("""update `tab%s` set is_recurring = 0
+            where recurring_id = %s""" % (doc.doctype, '%s'), (doc.recurring_id))
+#
 
 def validate_notification_email_id(doc):
 	if doc.notification_email_address:
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index ff14f9d..b1852f1 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -166,7 +166,7 @@
 		self.update_prevdoc_status('submit')
 		frappe.db.set(self, 'status', 'Submitted')
 		
-		convert_to_recurring(self, "SO/REC/.#####", self.transaction_date)
+		convert_to_recurring(self, self.transaction_date)
 
 	def on_cancel(self):
 		# Cannot cancel stopped SO
@@ -257,7 +257,7 @@
 
 	def on_update_after_submit(self):
 		validate_recurring_document(self)
-		convert_to_recurring(self, "SO/REC/.#####", self.transaction_date)
+		convert_to_recurring(self, self.transaction_date)
 
 
 @frappe.whitelist()