diff --git a/crm/fcrm/doctype/crm_lead/crm_lead.py b/crm/fcrm/doctype/crm_lead/crm_lead.py index bdf0885f..a7a41d34 100644 --- a/crm/fcrm/doctype/crm_lead/crm_lead.py +++ b/crm/fcrm/doctype/crm_lead/crm_lead.py @@ -197,8 +197,8 @@ class CRMLead(Document): return False - def create_deal(self, contact, organization): - deal = frappe.new_doc("CRM Deal") + def create_deal(self, contact, organization, deal=None): + new_deal = frappe.new_doc("CRM Deal") lead_deal_map = { "lead_owner": "deal_owner", @@ -245,13 +245,13 @@ class CRMLead(Document): if field.fieldname in lead_deal_map: fieldname = lead_deal_map[field.fieldname] - if hasattr(deal, fieldname): + if hasattr(new_deal, fieldname): if fieldname == "organization": - deal.update({fieldname: organization}) + new_deal.update({fieldname: organization}) else: - deal.update({fieldname: self.get(field.fieldname)}) + new_deal.update({fieldname: self.get(field.fieldname)}) - deal.update( + new_deal.update( { "lead": self.name, "contacts": [{"contact": contact}], @@ -259,7 +259,7 @@ class CRMLead(Document): ) if self.first_responded_on: - deal.update( + new_deal.update( { "sla_creation": self.sla_creation, "response_by": self.response_by, @@ -270,8 +270,11 @@ class CRMLead(Document): } ) - deal.insert(ignore_permissions=True) - return deal.name + if deal: + new_deal.update(deal) + + new_deal.insert(ignore_permissions=True) + return new_deal.name def set_sla(self): """ @@ -297,8 +300,8 @@ class CRMLead(Document): if sla: sla.apply(self) - def convert_to_deal(self): - return convert_to_deal(lead=self.name, doc=self) + def convert_to_deal(self, deal=None): + return convert_to_deal(lead=self.name, doc=self, deal=deal) @staticmethod def get_non_filterable_fields(): @@ -380,7 +383,7 @@ class CRMLead(Document): @frappe.whitelist() -def convert_to_deal(lead, doc=None): +def convert_to_deal(lead, doc=None, deal=None): if not (doc and doc.flags.get("ignore_permissions")) and not frappe.has_permission( "CRM Lead", "write", lead ): @@ -394,5 +397,5 @@ def convert_to_deal(lead, doc=None): lead.db_set("communication_status", "Replied") contact = lead.create_contact(False) organization = lead.create_organization() - deal = lead.create_deal(contact, organization) - return deal + _deal = lead.create_deal(contact, organization, deal) + return _deal diff --git a/frontend/src/pages/Lead.vue b/frontend/src/pages/Lead.vue index 040b8834..1e8d728b 100644 --- a/frontend/src/pages/Lead.vue +++ b/frontend/src/pages/Lead.vue @@ -646,9 +646,9 @@ async function convertToDeal(updated) { ) showConvertToDealModal.value = false } else { - let deal = await call( + let _deal = await call( 'crm.fcrm.doctype.crm_lead.crm_lead.convert_to_deal', - { lead: lead.data.name }, + { lead: lead.data.name, deal }, ).catch((err) => { createToast({ title: __('Error converting to deal'), @@ -657,12 +657,12 @@ async function convertToDeal(updated) { iconClasses: 'text-ink-red-4', }) }) - if (deal) { + if (_deal) { capture('convert_lead_to_deal') if (updated) { await contacts.reload() } - router.push({ name: 'Deal', params: { dealId: deal } }) + router.push({ name: 'Deal', params: { dealId: _deal } }) } } }