您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

67 行
2.0 KiB

  1. import frappe
  2. from frappe import _
  3. from frappe.contacts.doctype.address.address import (
  4. Address,
  5. get_address_display,
  6. get_address_templates,
  7. )
  8. class ERPNextAddress(Address):
  9. def validate(self):
  10. self.validate_reference()
  11. self.update_compnay_address()
  12. super(ERPNextAddress, self).validate()
  13. def link_address(self):
  14. """Link address based on owner"""
  15. if self.is_your_company_address:
  16. return
  17. return super(ERPNextAddress, self).link_address()
  18. def update_compnay_address(self):
  19. for link in self.get("links"):
  20. if link.link_doctype == "Company":
  21. self.is_your_company_address = 1
  22. def validate_reference(self):
  23. if self.is_your_company_address and not [
  24. row for row in self.links if row.link_doctype == "Company"
  25. ]:
  26. frappe.throw(
  27. _("Address needs to be linked to a Company. Please add a row for Company in the Links table."),
  28. title=_("Company Not Linked"),
  29. )
  30. def on_update(self):
  31. """
  32. After Address is updated, update the related 'Primary Address' on Customer.
  33. """
  34. address_display = get_address_display(self.as_dict())
  35. filters = {"customer_primary_address": self.name}
  36. customers = frappe.db.get_all("Customer", filters=filters, as_list=True)
  37. for customer_name in customers:
  38. frappe.db.set_value("Customer", customer_name[0], "primary_address", address_display)
  39. @frappe.whitelist()
  40. def get_shipping_address(company, address=None):
  41. filters = [
  42. ["Dynamic Link", "link_doctype", "=", "Company"],
  43. ["Dynamic Link", "link_name", "=", company],
  44. ["Address", "is_your_company_address", "=", 1],
  45. ]
  46. fields = ["*"]
  47. if address and frappe.db.get_value("Dynamic Link", {"parent": address, "link_name": company}):
  48. filters.append(["Address", "name", "=", address])
  49. if not address:
  50. filters.append(["Address", "is_shipping_address", "=", 1])
  51. address = frappe.get_all("Address", filters=filters, fields=fields) or {}
  52. if address:
  53. address_as_dict = address[0]
  54. name, address_template = get_address_templates(address_as_dict)
  55. return address_as_dict.get("name"), frappe.render_template(address_template, address_as_dict)