diff --git a/erpnext/accounts/doctype/account/account.json b/erpnext/accounts/doctype/account/account.json index ab8830543d..4649c3829a 100644 --- a/erpnext/accounts/doctype/account/account.json +++ b/erpnext/accounts/doctype/account/account.json @@ -1,331 +1,332 @@ { - "allow_copy": 1, - "allow_import": 1, - "allow_rename": 1, - "creation": "2013-01-30 12:49:46", - "description": "Heads (or groups) against which Accounting Entries are made and balances are maintained.", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Master", + "allow_copy": 1, + "allow_import": 1, + "allow_rename": 1, + "creation": "2013-01-30 12:49:46", + "description": "Heads (or groups) against which Accounting Entries are made and balances are maintained.", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Master", "fields": [ { - "fieldname": "properties", - "fieldtype": "Section Break", - "in_list_view": 0, - "label": "Account Details", - "oldfieldtype": "Section Break", + "fieldname": "properties", + "fieldtype": "Section Break", + "in_list_view": 0, + "label": "Account Details", + "oldfieldtype": "Section Break", "permlevel": 0 - }, + }, { - "fieldname": "column_break0", - "fieldtype": "Column Break", - "in_list_view": 0, - "permlevel": 0, + "fieldname": "column_break0", + "fieldtype": "Column Break", + "in_list_view": 0, + "permlevel": 0, "width": "50%" - }, + }, { - "fieldname": "account_name", - "fieldtype": "Data", - "in_filter": 1, - "in_list_view": 1, - "label": "Account Name", - "no_copy": 1, - "oldfieldname": "account_name", - "oldfieldtype": "Data", - "permlevel": 0, - "read_only": 1, - "reqd": 1, + "fieldname": "account_name", + "fieldtype": "Data", + "in_filter": 1, + "in_list_view": 1, + "label": "Account Name", + "no_copy": 1, + "oldfieldname": "account_name", + "oldfieldtype": "Data", + "permlevel": 0, + "read_only": 1, + "reqd": 1, "search_index": 1 - }, + }, { - "default": "Ledger", - "fieldname": "group_or_ledger", - "fieldtype": "Select", - "in_filter": 1, - "in_list_view": 1, - "label": "Group or Ledger", - "oldfieldname": "group_or_ledger", - "oldfieldtype": "Select", - "options": "\nLedger\nGroup", - "permlevel": 0, - "read_only": 1, - "reqd": 1, + "default": "Ledger", + "fieldname": "group_or_ledger", + "fieldtype": "Select", + "in_filter": 1, + "in_list_view": 1, + "label": "Group or Ledger", + "oldfieldname": "group_or_ledger", + "oldfieldtype": "Select", + "options": "\nLedger\nGroup", + "permlevel": 0, + "read_only": 1, + "reqd": 1, "search_index": 1 - }, + }, { - "fieldname": "company", - "fieldtype": "Link", - "in_filter": 1, - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "read_only": 1, - "reqd": 1, + "fieldname": "company", + "fieldtype": "Link", + "in_filter": 1, + "label": "Company", + "oldfieldname": "company", + "oldfieldtype": "Link", + "options": "Company", + "permlevel": 0, + "read_only": 1, + "reqd": 1, "search_index": 1 - }, + }, { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "permlevel": 0, + "fieldname": "column_break1", + "fieldtype": "Column Break", + "permlevel": 0, "width": "50%" - }, + }, { - "fieldname": "parent_account", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Parent Account", - "oldfieldname": "parent_account", - "oldfieldtype": "Link", - "options": "Account", - "permlevel": 0, - "reqd": 1, + "fieldname": "parent_account", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Parent Account", + "oldfieldname": "parent_account", + "oldfieldtype": "Link", + "options": "Account", + "permlevel": 0, + "reqd": 1, "search_index": 1 - }, + }, { - "description": "Setting Account Type helps in selecting this Account in transactions.", - "fieldname": "account_type", - "fieldtype": "Select", - "in_filter": 1, - "label": "Account Type", - "oldfieldname": "account_type", - "oldfieldtype": "Select", - "options": "\nBank\nCash\nTax\nChargeable\nWarehouse\nReceivable\nPayable\nEquity\nFixed Asset\nCost of Goods Sold\nExpense Account\nIncome Account\nStock Received But Not Billed\nExpenses Included In Valuation\nStock Adjustment", - "permlevel": 0, + "description": "Setting Account Type helps in selecting this Account in transactions.", + "fieldname": "account_type", + "fieldtype": "Select", + "in_filter": 1, + "label": "Account Type", + "oldfieldname": "account_type", + "oldfieldtype": "Select", + "options": "\nBank\nCash\nTax\nChargeable\nWarehouse\nReceivable\nPayable\nEquity\nFixed Asset\nCost of Goods Sold\nExpense Account\nIncome Account\nStock Received But Not Billed\nExpenses Included In Valuation\nStock Adjustment", + "permlevel": 0, "search_index": 0 - }, + }, { - "description": "Rate at which this tax is applied", - "fieldname": "tax_rate", - "fieldtype": "Float", - "hidden": 0, - "label": "Rate", - "oldfieldname": "tax_rate", - "oldfieldtype": "Currency", - "permlevel": 0, + "description": "Rate at which this tax is applied", + "fieldname": "tax_rate", + "fieldtype": "Float", + "hidden": 0, + "label": "Rate", + "oldfieldname": "tax_rate", + "oldfieldtype": "Currency", + "permlevel": 0, "reqd": 0 - }, + }, { - "description": "If the account is frozen, entries are allowed to restricted users.", - "fieldname": "freeze_account", - "fieldtype": "Select", - "label": "Frozen", - "oldfieldname": "freeze_account", - "oldfieldtype": "Select", - "options": "No\nYes", + "description": "If the account is frozen, entries are allowed to restricted users.", + "fieldname": "freeze_account", + "fieldtype": "Select", + "label": "Frozen", + "oldfieldname": "freeze_account", + "oldfieldtype": "Select", + "options": "No\nYes", "permlevel": 0 - }, + }, { - "fieldname": "credit_days", - "fieldtype": "Int", - "hidden": 1, - "label": "Credit Days", - "oldfieldname": "credit_days", - "oldfieldtype": "Int", - "permlevel": 0, + "fieldname": "credit_days", + "fieldtype": "Int", + "hidden": 1, + "label": "Credit Days", + "oldfieldname": "credit_days", + "oldfieldtype": "Int", + "permlevel": 0, "print_hide": 1 - }, + }, { - "fieldname": "credit_limit", - "fieldtype": "Currency", - "hidden": 1, - "label": "Credit Limit", - "oldfieldname": "credit_limit", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, + "fieldname": "credit_limit", + "fieldtype": "Currency", + "hidden": 1, + "label": "Credit Limit", + "oldfieldname": "credit_limit", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, "print_hide": 1 - }, + }, { - "description": "If this Account represents a Customer, Supplier or Employee, set it here.", - "fieldname": "master_type", - "fieldtype": "Select", - "label": "Master Type", - "oldfieldname": "master_type", - "oldfieldtype": "Select", - "options": "\nSupplier\nCustomer\nEmployee", + "description": "If this Account represents a Customer, Supplier or Employee, set it here.", + "fieldname": "master_type", + "fieldtype": "Select", + "label": "Master Type", + "oldfieldname": "master_type", + "oldfieldtype": "Select", + "options": "\nSupplier\nCustomer\nEmployee", "permlevel": 0 - }, + }, { - "fieldname": "master_name", - "fieldtype": "Link", - "label": "Master Name", - "oldfieldname": "master_name", - "oldfieldtype": "Link", - "options": "[Select]", + "fieldname": "master_name", + "fieldtype": "Link", + "label": "Master Name", + "oldfieldname": "master_name", + "oldfieldtype": "Link", + "options": "[Select]", "permlevel": 0 - }, + }, { - "fieldname": "balance_must_be", - "fieldtype": "Select", - "label": "Balance must be", - "options": "\nDebit\nCredit", + "fieldname": "balance_must_be", + "fieldtype": "Select", + "label": "Balance must be", + "options": "\nDebit\nCredit", "permlevel": 0 - }, + }, { - "fieldname": "root_type", - "fieldtype": "Select", - "label": "Root Type", - "options": "\nAsset\nLiability\nIncome\nExpense\nEquity", - "permlevel": 0, + "fieldname": "root_type", + "fieldtype": "Select", + "label": "Root Type", + "options": "\nAsset\nLiability\nIncome\nExpense\nEquity", + "permlevel": 0, "read_only": 1 - }, + }, { - "fieldname": "report_type", - "fieldtype": "Select", - "label": "Report Type", - "options": "\nBalance Sheet\nProfit and Loss", - "permlevel": 0, + "fieldname": "report_type", + "fieldtype": "Select", + "label": "Report Type", + "options": "\nBalance Sheet\nProfit and Loss", + "permlevel": 0, "read_only": 1 - }, + }, { - "fieldname": "lft", - "fieldtype": "Int", - "hidden": 1, - "label": "Lft", - "permlevel": 0, - "print_hide": 1, + "fieldname": "lft", + "fieldtype": "Int", + "hidden": 1, + "label": "Lft", + "permlevel": 0, + "print_hide": 1, "read_only": 1 - }, + }, { - "fieldname": "rgt", - "fieldtype": "Int", - "hidden": 1, - "label": "Rgt", - "permlevel": 0, - "print_hide": 1, + "fieldname": "rgt", + "fieldtype": "Int", + "hidden": 1, + "label": "Rgt", + "permlevel": 0, + "print_hide": 1, "read_only": 1 - }, + }, { - "fieldname": "old_parent", - "fieldtype": "Data", - "hidden": 1, - "label": "Old Parent", - "permlevel": 0, - "print_hide": 1, + "fieldname": "old_parent", + "fieldtype": "Data", + "hidden": 1, + "label": "Old Parent", + "permlevel": 0, + "print_hide": 1, "read_only": 1 } - ], - "icon": "icon-money", - "idx": 1, - "in_create": 1, - "modified": "2014-06-03 18:27:58.109303", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Account", - "owner": "Administrator", + ], + "icon": "icon-money", + "idx": 1, + "in_create": 1, + "modified": "2014-06-17 04:30:56.689314", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Account", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "apply_user_permissions": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts User", - "submit": 0, + "amend": 0, + "apply_user_permissions": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "import": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "apply_user_permissions": 1, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Auditor", - "submit": 0, + "amend": 0, + "apply_user_permissions": 1, + "create": 0, + "delete": 0, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Auditor", + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 1, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Sales User", - "submit": 0, + "amend": 0, + "apply_user_permissions": 1, + "create": 0, + "delete": 0, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 1, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase User", - "submit": 0, + "amend": 0, + "apply_user_permissions": 1, + "create": 0, + "delete": 0, + "email": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "permlevel": 2, - "read": 1, - "report": 1, - "role": "Auditor", - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "permlevel": 2, + "read": 1, + "report": 1, + "role": "Auditor", + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "set_user_permissions": 1, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "import": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "set_user_permissions": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "permlevel": 2, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "permlevel": 2, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "permlevel": 2, - "read": 1, - "report": 1, - "role": "Accounts User", - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "permlevel": 2, + "read": 1, + "report": 1, + "role": "Accounts User", + "submit": 0, "write": 0 } - ], + ], "search_fields": "group_or_ledger" -} +} \ No newline at end of file diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 8b147b0749..bddda2d601 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -24,6 +24,8 @@ mail_footer = "erpnext.startup.mail_footer" on_session_creation = "erpnext.startup.event_handlers.on_session_creation" before_tests = "erpnext.setup.utils.before_tests" +website_generators = ["Item Group", "Item", "Sales Partner"] + standard_queries = "Customer:erpnext.selling.doctype.customer.customer.get_customer_list" permission_query_conditions = { diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py index 63bf3b481c..b9d5abb425 100644 --- a/erpnext/setup/doctype/item_group/item_group.py +++ b/erpnext/setup/doctype/item_group/item_group.py @@ -7,6 +7,9 @@ import frappe from frappe.utils.nestedset import NestedSet from frappe.website.website_generator import WebsiteGenerator from frappe.website.render import clear_cache +from frappe.website.doctype.website_slideshow.website_slideshow import get_slideshow + +condition_field = "show_in_website" class ItemGroup(NestedSet, WebsiteGenerator): nsm_parent_field = 'parent_item_group' @@ -39,6 +42,53 @@ class ItemGroup(NestedSet, WebsiteGenerator): if frappe.db.exists("Item", self.name): frappe.throw(frappe._("An item exists with same name ({0}), please change the item group name or rename the item").format(self.name)) + def get_context(self, context): + context.update({ + "items": get_product_list_for_group(product_group = self.name, limit=100), + "parent_groups": get_parent_item_groups(self.name), + "title": self.name + }) + + if self.slideshow: + context.update(get_slideshow(self)) + + return context + +def get_product_list_for_group(product_group=None, start=0, limit=10): + child_groups = ", ".join(['"' + i[0] + '"' for i in get_child_groups(product_group)]) + + # base query + query = """select t1.name, t1.item_name, t1.page_name, t1.website_image, t1.item_group, + t1.web_long_description as website_description, t2.name as route + from `tabItem` t1, `tabWebsite Route` t2 + where t1.show_in_website = 1 and (item_group in (%s) + or t1.name in (select parent from `tabWebsite Item Group` where item_group in (%s))) + and t1.name = t2.docname and t2.ref_doctype='Item' """ % (child_groups, child_groups) + + query += """order by t1.weightage desc, t1.modified desc limit %s, %s""" % (start, limit) + + data = frappe.db.sql(query, {"product_group": product_group}, as_dict=1) + + return [get_item_for_list_in_html(r) for r in data] + +def get_child_groups(item_group_name): + item_group = frappe.get_doc("Item Group", item_group_name) + return frappe.db.sql("""select name + from `tabItem Group` where lft>=%(lft)s and rgt<=%(rgt)s + and show_in_website = 1""", {"lft": item_group.lft, "rgt": item_group.rgt}) + +def get_item_for_list_in_html(context): + return frappe.get_template("templates/includes/product_in_grid.html").render(context) + +def get_group_item_count(item_group): + child_groups = ", ".join(['"' + i[0] + '"' for i in get_child_groups(item_group)]) + return frappe.db.sql("""select count(*) from `tabItem` + where docstatus = 0 and show_in_website = 1 + and (item_group in (%s) + or name in (select parent from `tabWebsite Item Group` + where item_group in (%s))) """ % (child_groups, child_groups))[0][0] + + def get_parent_item_groups(item_group_name): item_group = frappe.get_doc("Item Group", item_group_name) return frappe.db.sql("""select name, page_name from `tabItem Group` diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py index b90b65e868..2d5ad34269 100644 --- a/erpnext/setup/doctype/sales_partner/sales_partner.py +++ b/erpnext/setup/doctype/sales_partner/sales_partner.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import cint, cstr, filter_strip_join +from frappe.utils import cstr, filter_strip_join from frappe.website.website_generator import WebsiteGenerator class SalesPartner(WebsiteGenerator): @@ -25,3 +25,21 @@ class SalesPartner(WebsiteGenerator): def get_page_title(self): return self.partner_name + + def get_context(self, context): + address = frappe.db.get_value("Address", + {"sales_partner": self.name, "is_primary_address": 1}, + "*", as_dict=True) + if address: + city_state = ", ".join(filter(None, [address.city, address.state])) + address_rows = [address.address_line1, address.address_line2, + city_state, address.pincode, address.country] + + context.update({ + "email": address.email_id, + "partner_address": filter_strip_join(address_rows, "\n
"), + "phone": filter_strip_join(cstr(address.phone).split(","), "\n
") + }) + + return context + diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index f43b531392..129e2f78bd 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -6,11 +6,14 @@ import frappe from frappe import msgprint, _ from frappe.utils import cstr, flt, getdate, now_datetime, formatdate from frappe.website.website_generator import WebsiteGenerator -from erpnext.setup.doctype.item_group.item_group import invalidate_cache_for +from erpnext.setup.doctype.item_group.item_group import invalidate_cache_for, get_parent_item_groups from frappe.website.render import clear_cache +from frappe.website.doctype.website_slideshow.website_slideshow import get_slideshow class WarehouseNotSet(frappe.ValidationError): pass +condition_field = "show_in_website" + class Item(WebsiteGenerator): def onload(self): super(Item, self).onload() @@ -55,6 +58,14 @@ class Item(WebsiteGenerator): self.validate_name_with_item_group() self.update_item_price() + def get_context(self, context): + context["parent_groups"] = get_parent_item_groups(self.item_group) + \ + [{"name": self.name}] + if self.slideshow: + context.update(get_slideshow(self)) + + return context + def check_warehouse_is_set_for_stock_item(self): if self.is_stock_item=="Yes" and not self.default_warehouse: frappe.msgprint(_("Default Warehouse is mandatory for stock Item."), diff --git a/erpnext/templates/generators/item.py b/erpnext/templates/generators/item.py deleted file mode 100644 index 1ad070ef87..0000000000 --- a/erpnext/templates/generators/item.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals - -import frappe -from erpnext.setup.doctype.item_group.item_group import get_parent_item_groups -from frappe.website.doctype.website_slideshow.website_slideshow import get_slideshow - -doctype = "Item" -condition_field = "show_in_website" - -def get_context(context): - item_context = context.doc.as_dict() - item_context["parent_groups"] = get_parent_item_groups(context.doc.item_group) + \ - [{"name":context.doc.name}] - if context.doc.slideshow: - item_context.update(get_slideshow(context.doc)) - - return item_context diff --git a/erpnext/templates/generators/item_group.py b/erpnext/templates/generators/item_group.py deleted file mode 100644 index 8e09dbc35e..0000000000 --- a/erpnext/templates/generators/item_group.py +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals - -import frappe -from frappe.website.doctype.website_slideshow.website_slideshow import get_slideshow -from erpnext.setup.doctype.item_group.item_group import get_parent_item_groups - -doctype = "Item Group" -condition_field = "show_in_website" - -def get_context(context): - item_group_context = context.doc.as_dict() - item_group_context.update({ - "items": get_product_list_for_group(product_group = context.docname, limit=100), - "parent_groups": get_parent_item_groups(context.docname), - "title": context.docname - }) - - if context.doc.slideshow: - item_group_context.update(get_slideshow(context.doc)) - - return item_group_context - -def get_product_list_for_group(product_group=None, start=0, limit=10): - child_groups = ", ".join(['"' + i[0] + '"' for i in get_child_groups(product_group)]) - - # base query - query = """select t1.name, t1.item_name, t1.page_name, t1.website_image, t1.item_group, - t1.web_long_description as website_description, t2.name as route - from `tabItem` t1, `tabWebsite Route` t2 - where t1.show_in_website = 1 and (item_group in (%s) - or t1.name in (select parent from `tabWebsite Item Group` where item_group in (%s))) - and t1.name = t2.docname and t2.ref_doctype='Item' """ % (child_groups, child_groups) - - query += """order by t1.weightage desc, t1.modified desc limit %s, %s""" % (start, limit) - - data = frappe.db.sql(query, {"product_group": product_group}, as_dict=1) - - return [get_item_for_list_in_html(r) for r in data] - -def get_child_groups(item_group_name): - item_group = frappe.get_doc("Item Group", item_group_name) - return frappe.db.sql("""select name - from `tabItem Group` where lft>=%(lft)s and rgt<=%(rgt)s - and show_in_website = 1""", {"lft": item_group.lft, "rgt": item_group.rgt}) - -def get_item_for_list_in_html(context): - return frappe.get_template("templates/includes/product_in_grid.html").render(context) - -def get_group_item_count(item_group): - child_groups = ", ".join(['"' + i[0] + '"' for i in get_child_groups(item_group)]) - return frappe.db.sql("""select count(*) from `tabItem` - where docstatus = 0 and show_in_website = 1 - and (item_group in (%s) - or name in (select parent from `tabWebsite Item Group` - where item_group in (%s))) """ % (child_groups, child_groups))[0][0] - diff --git a/erpnext/templates/generators/partner.py b/erpnext/templates/generators/partner.py deleted file mode 100644 index 2079309747..0000000000 --- a/erpnext/templates/generators/partner.py +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe.utils import filter_strip_join - -doctype = "Sales Partner" -condition_field = "show_in_website" - -def get_context(context): - partner_context = context.doc.as_dict() - - address = frappe.db.get_value("Address", - {"sales_partner": context.doc.name, "is_primary_address": 1}, - "*", as_dict=True) - if address: - city_state = ", ".join(filter(None, [address.city, address.state])) - address_rows = [address.address_line1, address.address_line2, - city_state, address.pincode, address.country] - - partner_context.update({ - "email": address.email_id, - "partner_address": filter_strip_join(address_rows, "\n
"), - "phone": filter_strip_join(cstr(address.phone).split(","), "\n
") - }) - - return partner_context