def _make_customer(source_name, ignore_permissions=False): quotation = frappe.db.get_value("Quotation", source_name, ["lead", "order_type", "customer"]) if quotation and quotation[0] and not quotation[2]: lead_name = quotation[0] customer_name = frappe.db.get_value("Customer", {"lead_name": lead_name}, ["name", "customer_name"], as_dict=True) if not customer_name: from erpnext.crm.doctype.lead.lead import _make_customer customer_doclist = _make_customer(lead_name, ignore_permissions=ignore_permissions) customer = frappe.get_doc(customer_doclist) customer.flags.ignore_permissions = ignore_permissions if quotation[1] == "Shopping Cart": customer.customer_group = frappe.db.get_value("Shopping Cart Settings", None, "default_customer_group") try: customer.insert() return customer except frappe.NameError: if frappe.defaults.get_global_default('cust_master_name') == "Customer Name": customer.run_method("autoname") customer.name += "-" + lead_name customer.insert() return customer else: raise except frappe.MandatoryError: frappe.throw(_("Please create Customer from Lead {0}").format(lead_name)) else: return customer_name
def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) def set_missing_values(source, target): if customer: target.customer = customer.name target.customer_name = customer.customer_name if source.referral_sales_partner: target.sales_partner = source.referral_sales_partner target.commission_rate = frappe.get_value( 'Sales Partner', source.referral_sales_partner, 'commission_rate') target.ignore_pricing_rule = 1 target.flags.ignore_permissions = ignore_permissions target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") def update_item(obj, target, source_parent): target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) if obj.against_blanket_order: target.against_blanket_order = obj.against_blanket_order target.blanket_order = obj.blanket_order target.blanket_order_rate = obj.blanket_order_rate doclist = get_mapped_doc("Quotation", source_name, { "Quotation": { "doctype": "Sales Order", "validation": { "docstatus": ["=", 1] } }, "Quotation Item": { "doctype": "Sales Order Item", "field_map": { "parent": "prevdoc_docname" }, "postprocess": update_item }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", "add_if_empty": True }, "Sales Team": { "doctype": "Sales Team", "add_if_empty": True }, "Payment Schedule": { "doctype": "Payment Schedule", "add_if_empty": True } }, target_doc, set_missing_values, ignore_permissions=ignore_permissions) # postprocess: fetch shipping address, set missing values return doclist
def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) def set_missing_values(source, target): if customer: target.customer = customer.name target.customer_name = customer.customer_name target.ignore_pricing_rule = 1 target.flags.ignore_permissions = ignore_permissions target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") doclist = get_mapped_doc( "Quotation", source_name, { "Quotation": {"doctype": "Sales Order", "validation": {"docstatus": ["=", 1]}}, "Quotation Item": {"doctype": "Sales Order Item", "field_map": {"parent": "prevdoc_docname"}}, "Sales Taxes and Charges": {"doctype": "Sales Taxes and Charges", "add_if_empty": True}, "Sales Team": {"doctype": "Sales Team", "add_if_empty": True}, }, target_doc, set_missing_values, ignore_permissions=ignore_permissions, ) # postprocess: fetch shipping address, set missing values return doclist
def _make_customer(source_name, ignore_permissions=False): quotation = frappe.db.get_value("Quotation", source_name, ["lead", "order_type", "customer"]) if quotation and quotation[0] and not quotation[2]: lead_name = quotation[0] customer_name = frappe.db.get_value("Customer", {"lead_name": lead_name}, ["name", "customer_name"], as_dict=True) if not customer_name: from erpnext.crm.doctype.lead.lead import _make_customer customer_doclist = _make_customer(lead_name, ignore_permissions=ignore_permissions) customer = frappe.get_doc(customer_doclist) customer.flags.ignore_permissions = ignore_permissions if quotation[1] == "Shopping Cart": customer.customer_group = frappe.db.get_value("Shopping Cart Settings", None, "default_customer_group") try: customer.insert() return customer except frappe.NameError: if frappe.defaults.get_global_default('cust_master_name') == "Customer Name": customer.run_method("autoname") customer.name += "-" + lead_name customer.insert() return customer else: raise except frappe.MandatoryError: frappe.local.message_log = [] frappe.throw(_("Please create Customer from Lead {0}").format(lead_name)) else: return customer_name
def _make_customer(source_name, ignore_permissions=False): itemlist = frappe.db.get_value("Item Listing", source_name, ["customer"]) if itemlist: lead_name = itemlist[0] customer_name = frappe.db.get_value("Customer", itemlist) if not customer_name: from erpnext.crm.doctype.lead.lead import _make_customer customer_doclist = _make_customer(lead_name, ignore_permissions=ignore_permissions) customer = frappe.get_doc(customer_doclist) customer.flags.ignore_permissions = ignore_permissions try: customer.insert() return customer except frappe.NameError: if frappe.defaults.get_global_default('cust_master_name') == "Customer Name": customer.run_method("autoname") customer.name += "-" + lead_name customer.insert() return customer else: raise except frappe.MandatoryError: frappe.local.message_log = [] frappe.throw(_("Please create Customer from Lead {0}").format(lead_name)) else: return customer_name
def _make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) def set_missing_values(source, target): if customer: target.customer = customer.name target.customer_name = customer.customer_name target.flags.ignore_permissions = ignore_permissions target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") def update_item(obj, target, source_parent): target.cost_center = None target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) doclist = get_mapped_doc( "Quotation", source_name, { "Quotation": {"doctype": "Sales Invoice", "validation": {"docstatus": ["=", 1]}}, "Quotation Item": {"doctype": "Sales Invoice Item", "postprocess": update_item}, "Sales Taxes and Charges": {"doctype": "Sales Taxes and Charges", "add_if_empty": True}, "Sales Team": {"doctype": "Sales Team", "add_if_empty": True}, }, target_doc, set_missing_values, ignore_permissions=ignore_permissions, ) doclist.set_onload("ignore_price_list", True) return doclist
def _make_customer(source_name, ignore_permissions=False): quotation = frappe.db.get_value( "Quotation", source_name, ["order_type", "party_name", "customer_name"], as_dict=1) if quotation and quotation.get('party_name'): if not frappe.db.exists("Customer", quotation.get("party_name")): lead_name = quotation.get("party_name") customer_name = frappe.db.get_value("Customer", {"lead_name": lead_name}, ["name", "customer_name"], as_dict=True) if not customer_name: from erpnext.crm.doctype.lead.lead import _make_customer customer_doclist = _make_customer( lead_name, ignore_permissions=ignore_permissions) customer = frappe.get_doc(customer_doclist) customer.flags.ignore_permissions = ignore_permissions if quotation.get("party_name") == "Shopping Cart": customer.customer_group = frappe.db.get_value( "Shopping Cart Settings", None, "default_customer_group") try: customer.insert() return customer except frappe.NameError: if frappe.defaults.get_global_default( 'cust_master_name') == "Customer Name": customer.run_method("autoname") customer.name += "-" + lead_name customer.insert() return customer else: raise except frappe.MandatoryError as e: mandatory_fields = e.args[0].split(':')[1].split(',') mandatory_fields = [ customer.meta.get_label(field.strip()) for field in mandatory_fields ] frappe.local.message_log = [] lead_link = frappe.utils.get_link_to_form( "Lead", lead_name) message = _( "Could not auto create Customer due to the following missing mandatory field(s):" ) + "<br>" message += "<br><ul><li>" + "</li><li>".join( mandatory_fields) + "</li></ul>" message += _("Please create Customer from Lead {0}." ).format(lead_link) frappe.throw(message, title=_("Mandatory Missing")) else: return customer_name else: return frappe.get_doc("Customer", quotation.get("party_name"))
def _make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) def set_missing_values(source, target): if customer: target.customer = customer.name target.customer_name = customer.customer_name target.ignore_pricing_rule = 1 target.flags.ignore_permissions = ignore_permissions target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") # Terms and Conditions target.tc_name = target.meta.get_field("tc_name").default if target.tc_name: target.terms = frappe.db.get_value("Terms and Conditions", target.tc_name, "terms") def update_item(obj, target, source_parent): target.cost_center = None target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) target.reference_dt = "Quotation" target.reference_dn = obj.parent doclist = get_mapped_doc( "Quotation", source_name, { "Quotation": { "doctype": "Sales Invoice", "validation": { "docstatus": ["=", 1] }, }, "Quotation Item": { "doctype": "Sales Invoice Item", "postprocess": update_item, }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", "add_if_empty": True, }, "Sales Team": { "doctype": "Sales Team", "add_if_empty": True }, }, target_doc, set_missing_values, ignore_permissions=ignore_permissions, ) return doclist
def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) def set_missing_values(source, target): if customer: target.customer = customer.name target.customer_name = customer.customer_name target.ignore_pricing_rule = 1 target.flags.ignore_permissions = ignore_permissions target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") #Start of code by Basawaraj on 4th for auto population quotation naming series when created from Lead local_branch = frappe.db.get_value("Quotation", source_name, "branch") target.naming_series = frappe.db.get_value( "Branch", local_branch, "sales_order_naming_series") #End of code by Basawaraj on 4th for auto population quotation naming series when created from Lead doclist = get_mapped_doc("Quotation", source_name, { "Quotation": { "doctype": "Sales Order", "validation": { "docstatus": ["=", 1] } }, "Quotation Item": { "doctype": "Sales Order Item", "field_map": { "parent": "prevdoc_docname" } }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", "add_if_empty": True }, "Sales Team": { "doctype": "Sales Team", "add_if_empty": True } }, target_doc, set_missing_values, ignore_permissions=ignore_permissions) # postprocess: fetch shipping address, set missing values return doclist
def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) def set_missing_values(source, target): if customer: target.customer = customer.name target.customer_name = customer.customer_name target.ignore_pricing_rule = 1 target.flags.ignore_permissions = ignore_permissions target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") doclist = get_mapped_doc("Quotation", source_name, { "Quotation": { "doctype": "Sales Order", "validation": { "docstatus": ["=", 1] } }, "Quotation Item": { "doctype": "Sales Order Item", "field_map": { "parent": "prevdoc_docname" } }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", "add_if_empty": True }, "Sales Team": { "doctype": "Sales Team", "add_if_empty": True } }, target_doc, set_missing_values, ignore_permissions=ignore_permissions) # postprocess: fetch shipping address, set missing values return doclist
def _make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) def set_missing_values(source, target): if customer: target.customer = customer.name target.customer_name = customer.customer_name target.ignore_pricing_rule = 1 target.flags.ignore_permissions = ignore_permissions target.run_method("set_missing_values") target.run_method("calculate_taxes_and_totals") def update_item(obj, target, source_parent): target.cost_center = None target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) doclist = get_mapped_doc("Quotation", source_name, { "Quotation": { "doctype": "Sales Invoice", "validation": { "docstatus": ["=", 1] } }, "Quotation Item": { "doctype": "Sales Invoice Item", "postprocess": update_item }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", "add_if_empty": True }, "Sales Team": { "doctype": "Sales Team", "add_if_empty": True } }, target_doc, set_missing_values, ignore_permissions=ignore_permissions) return doclist
def _make_customer(source_name, ignore_permissions=False): quotation = frappe.db.get_value( "Quotation", source_name, ["order_type", "party_name", "customer_name"], as_dict=1) if quotation and quotation.get('party_name'): if not frappe.db.exists("Customer", quotation.get("party_name")): #check if a customer doc has been created from the lead lead_name = quotation.get("party_name") customer_name = frappe.db.get_value("Customer", {"lead_name": lead_name}, ["name", "customer_name"], as_dict=True) #convert lead to a customer if not done already if not customer_name: from erpnext.crm.doctype.lead.lead import _make_customer customer_doclist = _make_customer( lead_name, ignore_permissions=ignore_permissions) customer = frappe.get_doc(customer_doclist) customer.flags.ignore_permissions = ignore_permissions if quotation.get("party_name") == "Shopping Cart": customer.customer_group = frappe.db.get_value( "Shopping Cart Settings", None, "default_customer_group") #raise error message if mandatory defaults for creating a customer is missing in selling settings if not frappe.db.get_value("Selling Settings", None, "customer_group"): frappe.throw( _("Please set a default customer group in Selling Settings." )) if not frappe.db.get_value("Selling Settings", None, "territory"): frappe.throw( _("Please set a default territory in Selling Settings." )) try: customer.insert() return customer except frappe.NameError: if frappe.defaults.get_global_default( 'cust_master_name') == "Customer Name": customer.run_method("autoname") customer.name += "-" + lead_name customer.insert() return customer else: raise except frappe.MandatoryError: frappe.local.message_log = [] frappe.throw( _("Please create Customer from Lead {0}").format( lead_name)) else: return customer_name else: return frappe.get_doc("Customer", quotation.get("party_name"))