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