Skip to content

Commit

Permalink
Merge pull request #42379 from Nihantra-Patel/fix_so_prospect_dev_v15
Browse files Browse the repository at this point in the history
fix: Create Sales Order from Quotation for Prospect
  • Loading branch information
ruthra-kumar authored Aug 20, 2024
2 parents f48b3c4 + ee44022 commit c039cfd
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 7 deletions.
23 changes: 23 additions & 0 deletions erpnext/crm/doctype/prospect/test_prospect.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,29 @@ def test_add_lead_to_prospect_and_address_linking(self):
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)
Expand Down
9 changes: 9 additions & 0 deletions erpnext/selling/doctype/customer/customer.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"gender",
"lead_name",
"opportunity_name",
"prospect_name",
"account_manager",
"image",
"defaults_tab",
Expand Down Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions erpnext/selling/doctype/customer/customer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
36 changes: 29 additions & 7 deletions erpnext/selling/doctype/quotation/quotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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

Expand Down

0 comments on commit c039cfd

Please sign in to comment.