diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py index e2ca74f9c4..b3f67175e5 100644 --- a/erpnext/utilities/doctype/address/address.py +++ b/erpnext/utilities/doctype/address/address.py @@ -21,6 +21,8 @@ class Address(Document): throw(_("Address Title is mandatory.")) def validate(self): + self.link_fields = ("customer", "supplier", "sales_partner", "lead") + self.link_address() self.validate_primary_address() self.validate_shipping_address() @@ -30,7 +32,7 @@ class Address(Document): self._unset_other("is_primary_address") elif self.is_shipping_address != 1: - for fieldname in ["customer", "supplier", "sales_partner", "lead"]: + for fieldname in self.link_fields: if self.get(fieldname): if not frappe.db.sql("""select name from `tabAddress` where is_primary_address=1 and `%s`=%s and name!=%s""" % (fieldname, "%s", "%s"), @@ -38,6 +40,24 @@ class Address(Document): self.is_primary_address = 1 break + def link_address(self): + """Link address based on owner""" + linked = False + for fieldname in self.link_fields: + if self.get(fieldname): + linked = True + break + + if not linked: + contact = frappe.db.get_value("Contact", {"email_id": self.owner}, + ("name", "customer", "supplier"), as_dict = True) + if contact: + self.customer = contact.customer + self.supplier = contact.supplier + + self.lead = frappe.db.get_value("Lead", {"email_id": self.owner}) + + def validate_shipping_address(self): """Validate that there can only be one shipping address for particular customer, supplier""" if self.is_shipping_address == 1: @@ -103,5 +123,3 @@ def has_website_permission(doc, ptype, user, verbose=False): return doc.lead == lead return False - -