blob: 775a81fd25f3e4cf7f87c9462fb5e268187a8dcb [file] [log] [blame]
Abhishek Balam6e9e7b42020-10-14 19:31:37 +05301import frappe
Abhishek Balam2f528c12020-10-14 19:48:57 +05302from frappe import _
Chillar Anand915b3432021-09-02 16:44:59 +05303from frappe.contacts.doctype.address.address import (
4 Address,
5 get_address_display,
6 get_address_templates,
7)
8
Abhishek Balam6e9e7b42020-10-14 19:31:37 +05309
Faris Ansari22bcad92020-10-16 15:28:12 +053010class ERPNextAddress(Address):
Abhishek Balam6e9e7b42020-10-14 19:31:37 +053011 def validate(self):
Abhishek Balam6e9e7b42020-10-14 19:31:37 +053012 self.validate_reference()
Deepesh Gargc6d06812021-10-21 15:37:59 +053013 self.update_compnay_address()
Faris Ansari22bcad92020-10-16 15:28:12 +053014 super(ERPNextAddress, self).validate()
Abhishek Balam6e9e7b42020-10-14 19:31:37 +053015
Abhishek Balam6e9e7b42020-10-14 19:31:37 +053016 def link_address(self):
17 """Link address based on owner"""
Faris Ansaribe0fcbe2020-10-16 15:55:25 +053018 if self.is_your_company_address:
Faris Ansari22bcad92020-10-16 15:28:12 +053019 return
20
21 return super(ERPNextAddress, self).link_address()
Abhishek Balam6e9e7b42020-10-14 19:31:37 +053022
Deepesh Gargc6d06812021-10-21 15:37:59 +053023 def update_compnay_address(self):
Ankush Menat494bd9e2022-03-28 18:52:46 +053024 for link in self.get("links"):
25 if link.link_doctype == "Company":
Deepesh Gargc6d06812021-10-21 15:37:59 +053026 self.is_your_company_address = 1
27
Abhishek Balam2f528c12020-10-14 19:48:57 +053028 def validate_reference(self):
Faris Ansari22bcad92020-10-16 15:28:12 +053029 if self.is_your_company_address and not [
30 row for row in self.links if row.link_doctype == "Company"
31 ]:
Ankush Menat494bd9e2022-03-28 18:52:46 +053032 frappe.throw(
33 _("Address needs to be linked to a Company. Please add a row for Company in the Links table."),
34 title=_("Company Not Linked"),
35 )
Faris Ansari22bcad92020-10-16 15:28:12 +053036
Brian Pond1a919772021-08-25 23:27:28 -070037 def on_update(self):
38 """
39 After Address is updated, update the related 'Primary Address' on Customer.
40 """
41 address_display = get_address_display(self.as_dict())
Ankush Menat494bd9e2022-03-28 18:52:46 +053042 filters = {"customer_primary_address": self.name}
Brian Pond1a919772021-08-25 23:27:28 -070043 customers = frappe.db.get_all("Customer", filters=filters, as_list=True)
44 for customer_name in customers:
45 frappe.db.set_value("Customer", customer_name[0], "primary_address", address_display)
Ankush Menatb147b852021-09-01 16:45:57 +053046
Ankush Menat494bd9e2022-03-28 18:52:46 +053047
Abhishek Balam89419c92020-10-14 20:09:05 +053048@frappe.whitelist()
Ankush Menat494bd9e2022-03-28 18:52:46 +053049def get_shipping_address(company, address=None):
Abhishek Balam89419c92020-10-14 20:09:05 +053050 filters = [
51 ["Dynamic Link", "link_doctype", "=", "Company"],
52 ["Dynamic Link", "link_name", "=", company],
Ankush Menat494bd9e2022-03-28 18:52:46 +053053 ["Address", "is_your_company_address", "=", 1],
Abhishek Balam89419c92020-10-14 20:09:05 +053054 ]
55 fields = ["*"]
Ankush Menat494bd9e2022-03-28 18:52:46 +053056 if address and frappe.db.get_value("Dynamic Link", {"parent": address, "link_name": company}):
Abhishek Balam89419c92020-10-14 20:09:05 +053057 filters.append(["Address", "name", "=", address])
Noah Jacobb4b62882021-06-23 09:54:12 +053058 if not address:
59 filters.append(["Address", "is_shipping_address", "=", 1])
Abhishek Balam89419c92020-10-14 20:09:05 +053060
61 address = frappe.get_all("Address", filters=filters, fields=fields) or {}
62
63 if address:
64 address_as_dict = address[0]
65 name, address_template = get_address_templates(address_as_dict)
66 return address_as_dict.get("name"), frappe.render_template(address_template, address_as_dict)