feat: link lead communication to prospect
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index f76595e..693fc6a 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -362,3 +362,13 @@
leads = frappe.get_all("Lead", filters = [["contact_date", "Between", [nowdate(), nowdate()]]])
for lead in leads:
frappe.db.set_value("Lead", lead.name, "status", "Open")
+
+def add_prospect_link_in_communication(communication, method):
+ if communication.get('reference_doctype') == "Lead":
+ links = frappe.get_all('Prospect Lead', filters={'lead': communication.get('reference_name')}, fields=['parent', 'parenttype'])
+
+ for link in links:
+ communication.append('timeline_links', {
+ 'link_doctype': link['parenttype'],
+ 'link_name': link['parent']
+ })
diff --git a/erpnext/crm/doctype/prospect/prospect.py b/erpnext/crm/doctype/prospect/prospect.py
index 80e2459..bd278dc 100644
--- a/erpnext/crm/doctype/prospect/prospect.py
+++ b/erpnext/crm/doctype/prospect/prospect.py
@@ -6,9 +6,12 @@
from frappe.model.mapper import get_mapped_doc
class Prospect(Document):
- def validate(self):
+ def after_save(self):
self.link_with_lead_contact_and_address()
+ def on_trash(self):
+ self.unlink_dynamic_links()
+
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'])
@@ -27,6 +30,23 @@
})
linked_doc.save(ignore_permissions=True)
+ def unlink_dynamic_links(self):
+ links = frappe.get_all('Dynamic Link', filters={'link_doctype': self.doctype, 'link_name': self.name}, fields=['parent', 'parenttype'])
+
+ for link in links:
+ linked_doc = frappe.get_doc(link['parenttype'], link['parent'])
+
+ if len(linked_doc.get('links')) == 1:
+ linked_doc.delete(ignore_permissions=True)
+ else:
+ to_remove = None
+ for d in linked_doc.get('links'):
+ if d.link_doctype == self.doctype and d.link_name == self.name:
+ to_remove = d
+ if to_remove:
+ linked_doc.remove(to_remove)
+ linked_doc.save(ignore_permissions=True)
+
@frappe.whitelist()
def make_customer(source_name, target_doc=None):
def set_missing_values(source, target):
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 8f7c7db..8069a15 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -249,6 +249,9 @@
"on_update": [
"erpnext.support.doctype.service_level_agreement.service_level_agreement.update_hold_time",
"erpnext.support.doctype.issue.issue.set_first_response_time"
+ ],
+ "after_insert": [
+ "erpnext.crm.doctype.lead.lead.add_prospect_link_in_communication"
]
},
("Sales Taxes and Charges Template", 'Price List'): {