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):