Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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"))
Beispiel #8
0
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
Beispiel #10
0
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
Beispiel #11
0
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	
Beispiel #12
0
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"))