mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-19 17:45:04 +00:00
fix: Create Sales Order from Quotation for Prospect
This commit is contained in:
@@ -27,6 +27,26 @@ class TestProspect(unittest.TestCase):
|
||||
address_doc.reload()
|
||||
self.assertEqual(address_doc.has_link("Prospect", prospect_doc.name), True)
|
||||
|
||||
def test_make_customer_from_prospect(self):
|
||||
from erpnext.crm.doctype.prospect.prospect import make_customer as make_customer_from_prospect
|
||||
|
||||
frappe.delete_doc_if_exists("Customer", "_Test Prospect")
|
||||
|
||||
prospect = frappe.get_doc({
|
||||
"doctype": "Prospect",
|
||||
"company_name": "_Test Prospect",
|
||||
"customer_group": "_Test Customer Group",
|
||||
})
|
||||
prospect.insert()
|
||||
|
||||
customer = make_customer_from_prospect("_Test Prospect")
|
||||
|
||||
self.assertEqual(customer.doctype, "Customer")
|
||||
self.assertEqual(customer.company_name, "_Test Prospect")
|
||||
self.assertEqual(customer.customer_group, "_Test Customer Group")
|
||||
|
||||
customer.company = "_Test Company"
|
||||
customer.insert()
|
||||
|
||||
def make_prospect(**args):
|
||||
args = frappe._dict(args)
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"gender",
|
||||
"lead_name",
|
||||
"opportunity_name",
|
||||
"prospect_name",
|
||||
"account_manager",
|
||||
"image",
|
||||
"defaults_tab",
|
||||
@@ -570,6 +571,14 @@
|
||||
{
|
||||
"fieldname": "column_break_nwor",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "prospect_name",
|
||||
"fieldtype": "Link",
|
||||
"label": "From Prospect",
|
||||
"no_copy": 1,
|
||||
"options": "Prospect",
|
||||
"print_hide": 1
|
||||
}
|
||||
],
|
||||
"icon": "fa fa-user",
|
||||
|
||||
@@ -76,6 +76,7 @@ class Customer(TransactionBase):
|
||||
payment_terms: DF.Link | None
|
||||
portal_users: DF.Table[PortalUser]
|
||||
primary_address: DF.Text | None
|
||||
prospect_name: DF.Link | None
|
||||
represents_company: DF.Link | None
|
||||
sales_team: DF.Table[SalesTeam]
|
||||
salutation: DF.Link | None
|
||||
|
||||
@@ -513,14 +513,23 @@ def _make_customer(source_name, ignore_permissions=False):
|
||||
if quotation.quotation_to == "Customer":
|
||||
return frappe.get_doc("Customer", quotation.party_name)
|
||||
|
||||
# If the Quotation is not to a Customer, it must be to a Lead.
|
||||
# Check if a Customer already exists for the Lead.
|
||||
existing_customer_for_lead = frappe.db.get_value("Customer", {"lead_name": quotation.party_name})
|
||||
if existing_customer_for_lead:
|
||||
return frappe.get_doc("Customer", existing_customer_for_lead)
|
||||
# Check if a Customer already exists for the Lead or Prospect.
|
||||
existing_customer = None
|
||||
if quotation.quotation_to == "Lead":
|
||||
existing_customer = frappe.db.get_value("Customer", {"lead_name": quotation.party_name})
|
||||
elif quotation.quotation_to == "Prospect":
|
||||
existing_customer = frappe.db.get_value("Customer", {"prospect_name": quotation.party_name})
|
||||
|
||||
# If no Customer exists for the Lead, create a new Customer.
|
||||
return create_customer_from_lead(quotation.party_name, ignore_permissions=ignore_permissions)
|
||||
if existing_customer:
|
||||
return frappe.get_doc("Customer", existing_customer)
|
||||
|
||||
# If no Customer exists, create a new Customer or Prospect.
|
||||
if quotation.quotation_to == "Lead":
|
||||
return create_customer_from_lead(quotation.party_name, ignore_permissions=ignore_permissions)
|
||||
elif quotation.quotation_to == "Prospect":
|
||||
return create_customer_from_prospect(quotation.party_name, ignore_permissions=ignore_permissions)
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def create_customer_from_lead(lead_name, ignore_permissions=False):
|
||||
@@ -536,6 +545,19 @@ def create_customer_from_lead(lead_name, ignore_permissions=False):
|
||||
handle_mandatory_error(e, customer, lead_name)
|
||||
|
||||
|
||||
def create_customer_from_prospect(prospect_name, ignore_permissions=False):
|
||||
from erpnext.crm.doctype.prospect.prospect import make_customer as make_customer_from_prospect
|
||||
|
||||
customer = make_customer_from_prospect(prospect_name)
|
||||
customer.flags.ignore_permissions = ignore_permissions
|
||||
|
||||
try:
|
||||
customer.insert()
|
||||
return customer
|
||||
except frappe.MandatoryError as e:
|
||||
handle_mandatory_error(e, customer, prospect_name)
|
||||
|
||||
|
||||
def handle_mandatory_error(e, customer, lead_name):
|
||||
from frappe.utils import get_link_to_form
|
||||
|
||||
|
||||
Reference in New Issue
Block a user