Skip to content

Commit 0735165

Browse files
fix: Make Customer and lead field dynamic in quotations and opportunity (frappe#17097)
fix: Make Customer and lead field dynamic in quotations and opportunity
2 parents db12f75 + 891d9ae commit 0735165

24 files changed

Lines changed: 337 additions & 259 deletions

File tree

erpnext/crm/doctype/lead/lead.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ def has_customer(self):
9090
return frappe.db.get_value("Customer", {"lead_name": self.name})
9191

9292
def has_opportunity(self):
93-
return frappe.db.get_value("Opportunity", {"lead": self.name, "status": ["!=", "Lost"]})
93+
return frappe.db.get_value("Opportunity", {"party_name": self.name, "status": ["!=", "Lost"]})
9494

9595
def has_quotation(self):
9696
return frappe.db.get_value("Quotation", {
97-
"lead": self.name,
97+
"party_name": self.name,
9898
"docstatus": 1,
9999
"status": ["!=", "Lost"]
100100

erpnext/crm/doctype/opportunity/opportunity.js

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,22 @@ frappe.ui.form.on("Opportunity", {
99
frm.custom_make_buttons = {
1010
'Quotation': 'Quotation',
1111
'Supplier Quotation': 'Supplier Quotation'
12-
}
13-
},
14-
customer: function(frm) {
15-
frm.trigger('set_contact_link');
16-
erpnext.utils.get_party_details(frm);
12+
},
13+
14+
frm.set_query("opportunity_from", function() {
15+
return{
16+
"filters": {
17+
"name": ["in", ["Customer", "Lead"]],
18+
}
19+
}
20+
});
1721
},
1822

19-
lead: function(frm) {
20-
frm.trigger('set_contact_link');
23+
party_name: function(frm) {
24+
if (frm.doc.opportunity_from == "Customer") {
25+
frm.trigger('set_contact_link');
26+
erpnext.utils.get_party_details(frm);
27+
}
2128
},
2229

2330
with_items: function(frm) {
@@ -30,15 +37,14 @@ frappe.ui.form.on("Opportunity", {
3037

3138
contact_person: erpnext.utils.get_contact_details,
3239

33-
enquiry_from: function(frm) {
34-
frm.toggle_reqd("lead", frm.doc.enquiry_from==="Lead");
35-
frm.toggle_reqd("customer", frm.doc.enquiry_from==="Customer");
40+
opportunity_from: function(frm) {
41+
frm.toggle_reqd("party_name", frm.doc.opportunity_from);
42+
frm.trigger("set_dynamic_field_label");
3643
},
3744

3845
refresh: function(frm) {
3946
var doc = frm.doc;
40-
frm.events.enquiry_from(frm);
41-
frm.trigger('set_contact_link');
47+
frm.events.opportunity_from(frm);
4248
frm.trigger('toggle_mandatory');
4349
erpnext.toggle_naming_series();
4450

@@ -75,13 +81,20 @@ frappe.ui.form.on("Opportunity", {
7581
},
7682

7783
set_contact_link: function(frm) {
78-
if(frm.doc.customer) {
84+
if(frm.doc.opportunity_from == "Customer" && frm.doc.party_name) {
7985
frappe.dynamic_link = {doc: frm.doc, fieldname: 'customer', doctype: 'Customer'}
80-
} else if(frm.doc.lead) {
86+
} else if(frm.doc.opportunity_from == "Lead" && frm.doc.party_name) {
8187
frappe.dynamic_link = {doc: frm.doc, fieldname: 'lead', doctype: 'Lead'}
8288
}
8389
},
8490

91+
set_dynamic_field_label: function(frm){
92+
93+
if (frm.doc.opportunity_from) {
94+
frm.set_df_property("party_name", "label", frm.doc.opportunity_from);
95+
}
96+
},
97+
8598
make_supplier_quotation: function(frm) {
8699
frappe.model.open_mapped_doc({
87100
method: "erpnext.crm.doctype.opportunity.opportunity.make_supplier_quotation",
@@ -97,10 +110,6 @@ frappe.ui.form.on("Opportunity", {
97110
// TODO commonify this code
98111
erpnext.crm.Opportunity = frappe.ui.form.Controller.extend({
99112
onload: function() {
100-
if(!this.frm.doc.enquiry_from && this.frm.doc.customer)
101-
this.frm.doc.enquiry_from = "Customer";
102-
if(!this.frm.doc.enquiry_from && this.frm.doc.lead)
103-
this.frm.doc.enquiry_from = "Lead";
104113

105114
if(!this.frm.doc.status)
106115
set_multiple(this.frm.doc.doctype, this.frm.doc.name, { status:'Open' });
@@ -148,7 +157,7 @@ erpnext.crm.Opportunity = frappe.ui.form.Controller.extend({
148157
$.extend(cur_frm.cscript, new erpnext.crm.Opportunity({frm: cur_frm}));
149158

150159
cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
151-
if(doc.enquiry_from == 'Lead' && doc.lead)
160+
if(doc.opportunity_from == 'Lead' && doc.party_name)
152161
cur_frm.cscript.lead(doc, cdt, cdn);
153162
}
154163

@@ -171,10 +180,10 @@ cur_frm.cscript.item_code = function(doc, cdt, cdn) {
171180
}
172181

173182
cur_frm.cscript.lead = function(doc, cdt, cdn) {
174-
cur_frm.toggle_display("contact_info", doc.customer || doc.lead);
183+
cur_frm.toggle_display("contact_info", doc.party_name);
175184
erpnext.utils.map_current_doc({
176185
method: "erpnext.crm.doctype.lead.lead.make_opportunity",
177-
source_name: cur_frm.doc.lead,
186+
source_name: cur_frm.doc.party_name,
178187
frm: cur_frm
179188
});
180189
}

0 commit comments

Comments
 (0)