67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
import frappe
|
|
from frappe import _
|
|
from frappe.contacts.doctype.address.address import (
|
|
Address,
|
|
get_address_display,
|
|
get_address_templates,
|
|
)
|
|
|
|
|
|
class ERPNextAddress(Address):
|
|
def validate(self):
|
|
self.validate_reference()
|
|
self.update_compnay_address()
|
|
super(ERPNextAddress, self).validate()
|
|
|
|
def link_address(self):
|
|
"""Link address based on owner"""
|
|
if self.is_your_company_address:
|
|
return
|
|
|
|
return super(ERPNextAddress, self).link_address()
|
|
|
|
def update_compnay_address(self):
|
|
for link in self.get("links"):
|
|
if link.link_doctype == "Company":
|
|
self.is_your_company_address = 1
|
|
|
|
def validate_reference(self):
|
|
if self.is_your_company_address and not [
|
|
row for row in self.links if row.link_doctype == "Company"
|
|
]:
|
|
frappe.throw(
|
|
_("Address needs to be linked to a Company. Please add a row for Company in the Links table."),
|
|
title=_("Company Not Linked"),
|
|
)
|
|
|
|
def on_update(self):
|
|
"""
|
|
After Address is updated, update the related 'Primary Address' on Customer.
|
|
"""
|
|
address_display = get_address_display(self.as_dict())
|
|
filters = {"customer_primary_address": self.name}
|
|
customers = frappe.db.get_all("Customer", filters=filters, as_list=True)
|
|
for customer_name in customers:
|
|
frappe.db.set_value("Customer", customer_name[0], "primary_address", address_display)
|
|
|
|
|
|
@frappe.whitelist()
|
|
def get_shipping_address(company, address=None):
|
|
filters = [
|
|
["Dynamic Link", "link_doctype", "=", "Company"],
|
|
["Dynamic Link", "link_name", "=", company],
|
|
["Address", "is_your_company_address", "=", 1],
|
|
]
|
|
fields = ["*"]
|
|
if address and frappe.db.get_value("Dynamic Link", {"parent": address, "link_name": company}):
|
|
filters.append(["Address", "name", "=", address])
|
|
if not address:
|
|
filters.append(["Address", "is_shipping_address", "=", 1])
|
|
|
|
address = frappe.get_all("Address", filters=filters, fields=fields) or {}
|
|
|
|
if address:
|
|
address_as_dict = address[0]
|
|
name, address_template = get_address_templates(address_as_dict)
|
|
return address_as_dict.get("name"), frappe.render_template(address_template, address_as_dict)
|