Merge pull request #23640 from abhishekbalam/address_customisation
diff --git a/erpnext/accounts/custom/address.json b/erpnext/accounts/custom/address.json
index 08f972d..5c921da 100644
--- a/erpnext/accounts/custom/address.json
+++ b/erpnext/accounts/custom/address.json
@@ -1,58 +1,126 @@
{
"custom_fields": [
{
- "_assign": null,
- "_comments": null,
- "_liked_by": null,
- "_user_tags": null,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "collapsible_depends_on": null,
- "columns": 0,
- "creation": "2018-12-28 22:29:21.828090",
- "default": null,
- "depends_on": null,
- "description": null,
- "docstatus": 0,
- "dt": "Address",
- "fetch_from": null,
- "fieldname": "tax_category",
- "fieldtype": "Link",
- "hidden": 0,
- "idx": 14,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "insert_after": "fax",
- "label": "Tax Category",
- "modified": "2018-12-28 22:29:21.828090",
- "modified_by": "Administrator",
- "name": "Address-tax_category",
- "no_copy": 0,
- "options": "Tax Category",
- "owner": "Administrator",
- "parent": null,
- "parentfield": null,
- "parenttype": null,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "print_width": null,
- "read_only": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "translatable": 0,
- "unique": 0,
+ "_assign": null,
+ "_comments": null,
+ "_liked_by": null,
+ "_user_tags": null,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "collapsible_depends_on": null,
+ "columns": 0,
+ "creation": "2018-12-28 22:29:21.828090",
+ "default": null,
+ "depends_on": null,
+ "description": null,
+ "docstatus": 0,
+ "dt": "Address",
+ "fetch_from": null,
+ "fetch_if_empty": 0,
+ "fieldname": "tax_category",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "hide_border": 0,
+ "hide_days": 0,
+ "hide_seconds": 0,
+ "idx": 15,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_preview": 0,
+ "in_standard_filter": 0,
+ "insert_after": "fax",
+ "label": "Tax Category",
+ "length": 0,
+ "mandatory_depends_on": null,
+ "modified": "2018-12-28 22:29:21.828090",
+ "modified_by": "Administrator",
+ "name": "Address-tax_category",
+ "no_copy": 0,
+ "options": "Tax Category",
+ "owner": "Administrator",
+ "parent": null,
+ "parentfield": null,
+ "parenttype": null,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "print_width": null,
+ "read_only": 0,
+ "read_only_depends_on": null,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "translatable": 0,
+ "unique": 0,
+ "width": null
+ },
+ {
+ "_assign": null,
+ "_comments": null,
+ "_liked_by": null,
+ "_user_tags": null,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "collapsible_depends_on": null,
+ "columns": 0,
+ "creation": "2020-10-14 17:41:40.878179",
+ "default": "0",
+ "depends_on": null,
+ "description": null,
+ "docstatus": 0,
+ "dt": "Address",
+ "fetch_from": null,
+ "fetch_if_empty": 0,
+ "fieldname": "is_your_company_address",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "hide_border": 0,
+ "hide_days": 0,
+ "hide_seconds": 0,
+ "idx": 20,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_preview": 0,
+ "in_standard_filter": 0,
+ "insert_after": "linked_with",
+ "label": "Is Your Company Address",
+ "length": 0,
+ "mandatory_depends_on": null,
+ "modified": "2020-10-14 17:41:40.878179",
+ "modified_by": "Administrator",
+ "name": "Address-is_your_company_address",
+ "no_copy": 0,
+ "options": null,
+ "owner": "Administrator",
+ "parent": null,
+ "parentfield": null,
+ "parenttype": null,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "print_width": null,
+ "read_only": 0,
+ "read_only_depends_on": null,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "translatable": 0,
+ "unique": 0,
"width": null
}
- ],
- "custom_perms": [],
- "doctype": "Address",
- "property_setters": [],
+ ],
+ "custom_perms": [],
+ "doctype": "Address",
+ "property_setters": [],
"sync_on_migrate": 1
}
\ No newline at end of file
diff --git a/erpnext/accounts/custom/address.py b/erpnext/accounts/custom/address.py
new file mode 100644
index 0000000..5e76403
--- /dev/null
+++ b/erpnext/accounts/custom/address.py
@@ -0,0 +1,42 @@
+import frappe
+from frappe import _
+from frappe.contacts.doctype.address.address import Address
+from frappe.contacts.doctype.address.address import get_address_templates
+
+class ERPNextAddress(Address):
+ def validate(self):
+ self.validate_reference()
+ 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 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"))
+
+@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])
+
+ 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)
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index cf1d69f..9bd3105 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -21,11 +21,16 @@
web_include_css = "assets/css/erpnext-web.css"
doctype_js = {
+ "Address": "public/js/address.js",
"Communication": "public/js/communication.js",
"Event": "public/js/event.js",
"Newsletter": "public/js/newsletter.js"
}
+override_doctype_class = {
+ 'Address': 'erpnext.accounts.custom.address.ERPNextAddress'
+}
+
welcome_email = "erpnext.setup.utils.welcome_email"
# setup wizard
@@ -561,4 +566,4 @@
{'doctype': 'Hotel Room Package', 'index': 3},
{'doctype': 'Hotel Room Type', 'index': 4}
]
-}
\ No newline at end of file
+}
diff --git a/erpnext/public/js/address.js b/erpnext/public/js/address.js
new file mode 100644
index 0000000..57f7163
--- /dev/null
+++ b/erpnext/public/js/address.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2016, Frappe Technologies and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on("Address", {
+ is_your_company_address: function(frm) {
+ frm.clear_table('links');
+ if(frm.doc.is_your_company_address) {
+ frm.add_child('links', {
+ link_doctype: 'Company',
+ link_name: frappe.defaults.get_user_default('Company')
+ });
+ frm.set_query('link_doctype', 'links', () => {
+ return {
+ filters: {
+ name: 'Company'
+ }
+ };
+ });
+ frm.refresh_field('links');
+ }
+ else {
+ frm.trigger('refresh');
+ }
+ }
+});
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 44e75ae..770704e 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -277,7 +277,7 @@
erpnext.utils.get_shipping_address = function(frm, callback){
if (frm.doc.company) {
frappe.call({
- method: "frappe.contacts.doctype.address.address.get_shipping_address",
+ method: "erpnext.accounts.custom.address.get_shipping_address",
args: {
company: frm.doc.company,
address: frm.doc.shipping_address