feat: creation of prospect from lead
diff --git a/erpnext/crm/doctype/lead/lead.js b/erpnext/crm/doctype/lead/lead.js
index 9c21099..f6eb3f4 100644
--- a/erpnext/crm/doctype/lead/lead.js
+++ b/erpnext/crm/doctype/lead/lead.js
@@ -39,6 +39,7 @@
 			this.frm.add_custom_button(__("Customer"), this.make_customer, __("Create"));
 			this.frm.add_custom_button(__("Opportunity"), this.make_opportunity, __("Create"));
 			this.frm.add_custom_button(__("Quotation"), this.make_quotation, __("Create"));
+			this.frm.add_custom_button(__("Prospect"), this.make_prospect, __("Create"));
 		}
 
 		if (!this.frm.is_new()) {
@@ -70,6 +71,13 @@
 		})
 	}
 
+	make_prospect () {
+		frappe.model.open_mapped_doc({
+			method: "erpnext.crm.doctype.lead.lead.make_prospect",
+			frm: cur_frm
+		})
+	}
+
 	company_name () {
 		if (!this.frm.doc.lead_name) {
 			this.frm.set_value("lead_name", this.frm.doc.company_name);
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index ecf6a41..f76595e 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -191,16 +191,6 @@
 		return contact
 
 @frappe.whitelist()
-def make_prospect(source_name, target_doc=None, leads=None):
-	print("``````````````````````````")
-	print(source_name)
-	print("``````````````````````````")
-	print(target_doc)
-	print("``````````````````````````")
-	print(leads)
-	print("``````````````````````````")
-
-@frappe.whitelist()
 def make_customer(source_name, target_doc=None):
 	return _make_customer(source_name, target_doc)
 
@@ -272,6 +262,15 @@
 
 	return target_doc
 
+@frappe.whitelist()
+def make_prospect(source_name, target_doc=None):
+	target_doc = get_mapped_doc("Lead", source_name,
+		{"Lead": {
+			"doctype": "Prospect",
+		}}, target_doc)
+
+	return target_doc
+
 def _set_missing_values(source, target):
 	address = frappe.get_all('Dynamic Link', {
 			'link_doctype': source.doctype,
diff --git a/erpnext/crm/doctype/lead/lead_dashboard.py b/erpnext/crm/doctype/lead/lead_dashboard.py
index 69d8ca7..6038811 100644
--- a/erpnext/crm/doctype/lead/lead_dashboard.py
+++ b/erpnext/crm/doctype/lead/lead_dashboard.py
@@ -13,7 +13,7 @@
 		},
 		'transactions': [
 			{
-				'items': ['Opportunity', 'Quotation']
+				'items': ['Opportunity', 'Quotation', 'Prospect']
 			},
 		]
 	}
\ No newline at end of file
diff --git a/erpnext/crm/doctype/lead/lead_list.js b/erpnext/crm/doctype/lead/lead_list.js
index 5cbbf76..75208fa 100644
--- a/erpnext/crm/doctype/lead/lead_list.js
+++ b/erpnext/crm/doctype/lead/lead_list.js
@@ -2,34 +2,26 @@
 	onload: function(listview) {
 		if (frappe.boot.user.can_create.includes("Prospect")) {
 			listview.page.add_action_item(__("Create Prospect"), function() {
-				let leads = listview.get_checked_items();
-				console.log(listview.get_checked_items());
-				frappe.model.open_mapped_doc({
-					method: "erpnext.crm.doctype.lead.lead.make_prospect",
-					frm: cur_frm,
-					leads: leads
-				})
+				frappe.model.with_doctype("Prospect", function() {
+					let prospect = frappe.model.get_new_doc("Prospect");
+					let leads = listview.get_checked_items();
+					frappe.db.get_value("Lead", leads[0].name, ["company_name", "no_of_employees", "industry", "market_segment", "territory", "fax", "website", "lead_owner"], (r) => {
+						prospect.company_name = r.company_name;
+						prospect.no_of_employees = r.no_of_employees;
+						prospect.industry = r.industry;
+						prospect.market_segment = r.market_segment;
+						prospect.territory = r.territory;
+						prospect.fax = r.fax;
+						prospect.website = r.website;
+						prospect.prospect_owner = r.lead_owner;
 
-				// listview.call_for_selected_items(method, {"status": "Open"});
-			// 	let prospect_lead = []
-			// 	leads.forEach(lead => {
-			// 		prospect_lead.push({
-			// 			"lead": lead.name
-			// 		});
-			// 	});
-			// 	console.log("check");
-			// 	console.log(prospect_lead);
-			// 	frappe.new_doc("Prospect", {
-			// 		"company_name": leads[0].company_name,
-			// 		"industry": leads[0].industry,
-			// 		"market_segment": leads[0].market_segment,
-			// 		"territory": leads[0].territory,
-			// 		"no_of_employees": leads[0].no_of_employees,
-			// 		"fax": leads[0].fax,
-			// 		"website": leads[0].website,
-			// 		"prospect_owner": leads[0].lead_owner,
-			// 		"prospect_lead": prospect_lead
-			// 	});
+						leads.forEach(function(lead) {
+							let lead_prospect_row = frappe.model.add_child(prospect, 'prospect_lead');
+							lead_prospect_row.lead = lead.name;
+						});
+						frappe.set_route("Form", "Prospect", prospect.name);
+					});
+				});
 			});
 		}
 	}
diff --git a/erpnext/crm/doctype/prospect/prospect.py b/erpnext/crm/doctype/prospect/prospect.py
index a0175cd..80e2459 100644
--- a/erpnext/crm/doctype/prospect/prospect.py
+++ b/erpnext/crm/doctype/prospect/prospect.py
@@ -6,7 +6,26 @@
 from frappe.model.mapper import get_mapped_doc
 
 class Prospect(Document):
-	pass
+	def validate(self):
+		self.link_with_lead_contact_and_address()
+	
+	def link_with_lead_contact_and_address(self):
+		for row in self.prospect_lead:
+			links = frappe.get_all('Dynamic Link', filters={'link_doctype': 'Lead', 'link_name': row.lead}, fields=['parent', 'parenttype'])
+			for link in links:
+				linked_doc = frappe.get_doc(link['parenttype'], link['parent'])
+				exists = False
+
+				for d in linked_doc.get('links'):
+					if d.link_doctype == self.doctype and d.link_name == self.name:
+						exists = True
+
+				if not exists:
+					linked_doc.append('links', {
+						'link_doctype': self.doctype,
+						'link_name': self.name
+					})
+					linked_doc.save(ignore_permissions=True)
 
 @frappe.whitelist()
 def make_customer(source_name, target_doc=None):