website cleanups
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index e29297c..63bf3b4 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -16,8 +16,9 @@
def validate(self):
if not self.parent_website_route:
- self.parent_website_route = frappe.get_website_route("Item Group",
- self.parent_item_group)
+ if frappe.db.get_value("Item Group", self.parent_item_group, "show_in_website"):
+ self.parent_website_route = frappe.get_website_route("Item Group",
+ self.parent_item_group)
def on_update(self):
NestedSet.on_update(self)
diff --git a/erpnext/setup/page/setup_wizard/default_website.py b/erpnext/setup/page/setup_wizard/default_website.py
index 1667d87..3f1d8e1 100644
--- a/erpnext/setup/page/setup_wizard/default_website.py
+++ b/erpnext/setup/page/setup_wizard/default_website.py
@@ -55,6 +55,11 @@
"label":"Blog",
"url": "blog"
})
+ website_settings.append("top_bar_items", {
+ "doctype": "Top Bar Item",
+ "label": _("Products"),
+ "url": frappe.db.get_value("Website Route", {"ref_doctype":"Item Group"})
+ })
website_settings.save()
def make_blog(self):
diff --git a/erpnext/setup/page/setup_wizard/install_fixtures.py b/erpnext/setup/page/setup_wizard/install_fixtures.py
index 8eaa1c0..67e8350 100644
--- a/erpnext/setup/page/setup_wizard/install_fixtures.py
+++ b/erpnext/setup/page/setup_wizard/install_fixtures.py
@@ -11,13 +11,18 @@
records = [
# item group
- {'doctype': 'Item Group', 'item_group_name': _('All Item Groups'), 'is_group': 'Yes', 'parent_item_group': ''},
- {'doctype': 'Item Group', 'item_group_name': _('Products'), 'is_group': 'No',
- 'parent_item_group': _('All Item Groups'), "show_in_website": 1 },
- {'doctype': 'Item Group', 'item_group_name': _('Raw Material'), 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
- {'doctype': 'Item Group', 'item_group_name': _('Services'), 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
- {'doctype': 'Item Group', 'item_group_name': _('Sub Assemblies'), 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
- {'doctype': 'Item Group', 'item_group_name': _('Consumable'), 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
+ {'doctype': 'Item Group', 'item_group_name': _('All Item Groups'),
+ 'is_group': 'Yes', 'parent_item_group': ''},
+ {'doctype': 'Item Group', 'item_group_name': _('Products'),
+ 'is_group': 'No', 'parent_item_group': _('All Item Groups'), "show_in_website": 1 },
+ {'doctype': 'Item Group', 'item_group_name': _('Raw Material'),
+ 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
+ {'doctype': 'Item Group', 'item_group_name': _('Services'),
+ 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
+ {'doctype': 'Item Group', 'item_group_name': _('Sub Assemblies'),
+ 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
+ {'doctype': 'Item Group', 'item_group_name': _('Consumable'),
+ 'is_group': 'No', 'parent_item_group': _('All Item Groups') },
# deduction type
{'doctype': 'Deduction Type', 'name': _('Income Tax'), 'description': _('Income Tax'), 'deduction_name': _('Income Tax')},
diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html
index d560b80..8db39a3 100644
--- a/erpnext/templates/generators/item.html
+++ b/erpnext/templates/generators/item.html
@@ -22,19 +22,20 @@
{% endif %}
</div>
<div class="col-md-6">
- <h3 itemprop="name" style="margin-top: 0px;">{{ item_name }}</h3>
- <p class="help">Item Code: <span itemprop="productID">{{ name }}</span></p>
- <h4>Product Description</h4>
+ <!-- <h3 itemprop="name" style="margin-top: 0px;">{{ item_name }}</h3> -->
<div itemprop="description">
- {{ web_long_description or description or "[No description given]" }}
+ {{ web_long_description or description or _("No description given") }}
</div>
+ <p class="text-muted">
+ {{ _("Item Code") }}: <span itemprop="productID">{{ name }}</span></p>
+ <br>
<div style="min-height: 100px; margin: 10px 0;">
<div class="item-price-info" style="display: none;">
<h4 class="item-price" itemprop="price"></h4>
<div class="item-stock" itemprop="availablity"></div>
<div id="item-add-to-cart">
<button class="btn btn-primary">
- <i class="icon-shopping-cart"></i> Add to Cart</button>
+ <i class="icon-shopping-cart"></i> + {{ _("Add to Cart") }}</button>
</div>
<div id="item-update-cart" class="input-group col-md-4" style="display: none;
padding-left: 0px; padding-right: 0px;">
@@ -51,7 +52,7 @@
{% if doc.get({"doctype":"Item Website Specification"}) -%}
<div class="row" style="margin-top: 20px">
<div class="col-md-12">
- <h4>Specifications</h4>
+ <h4>{{ _("Specifications") }}</h4>
<table class="table table-bordered" style="width: 100%">
{% for d in doc.get(
{"doctype":"Item Website Specification"}) -%}
diff --git a/erpnext/templates/generators/item_group.html b/erpnext/templates/generators/item_group.html
index 1415adf..c52629f 100644
--- a/erpnext/templates/generators/item_group.html
+++ b/erpnext/templates/generators/item_group.html
@@ -1,7 +1,3 @@
-{% block title %} {{ title }} {% endblock %}
-
-{% block header %}<h2>{{ title }}</h2>{% endblock %}
-
{% block content %}
<div class="item-group-content">
{% include 'templates/includes/product_search_box.html' %}
@@ -11,22 +7,9 @@
{% endif %}
{% if description %}<!-- description -->
<div itemprop="description">{{ description or ""}}</div>
- {% else %}
- <h3>{{ name }}</h3>
{% endif %}
</div>
<div>
- {% if sub_groups %}
- <hr />
- <div class="row">
- {% for d in sub_groups %}
- <div class="col-sm-4">
- <a href="{{ d.page_name }}">{{ d.name }} ({{ d.count }})</a>
- </div>
- {% endfor %}
- </div>
- <hr />
- {% endif %}
{% if items %}
<div id="search-list" class="row">
{% for item in items %}
@@ -37,7 +20,7 @@
<div class="alert alert-info info">Showing top 100 items.</div>
{% endif %}
{% else %}
- <div class="alert alert-warning">No items listed.</div>
+ <div class="text-muted">No items listed.</div>
{% endif %}
</div>
</div>
@@ -53,5 +36,3 @@
</script>
{% endblock %}
-
-{% block sidebar %}{% include "templates/includes/sidebar.html" %}{% endblock %}
diff --git a/erpnext/templates/generators/item_group.py b/erpnext/templates/generators/item_group.py
index 772f4f1..fab581c 100644
--- a/erpnext/templates/generators/item_group.py
+++ b/erpnext/templates/generators/item_group.py
@@ -13,9 +13,6 @@
def get_context(context):
item_group_context = context.doc.as_dict()
item_group_context.update({
- "sub_groups": frappe.db.sql("""select name, page_name
- from `tabItem Group` where parent_item_group=%s
- and ifnull(show_in_website,0)=1""", context.docname, as_dict=1),
"items": get_product_list_for_group(product_group = context.docname, limit=100),
"parent_groups": get_parent_item_groups(context.docname),
"title": context.docname
@@ -24,22 +21,20 @@
if context.doc.slideshow:
item_group_context.update(get_slideshow(context.doc))
- for d in item_group_context.get("sub_groups"):
- d.count = get_group_item_count(d.name)
-
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 name, item_name, page_name, website_image, item_group,
- web_long_description as website_description
- 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)
+ 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 weightage desc, modified desc limit %s, %s""" % (start, limit)
+ 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)
diff --git a/erpnext/templates/includes/product_in_grid.html b/erpnext/templates/includes/product_in_grid.html
index 9ef4bbd..7edd0de 100644
--- a/erpnext/templates/includes/product_in_grid.html
+++ b/erpnext/templates/includes/product_in_grid.html
@@ -9,6 +9,6 @@
</a>
</div>
<div style="height: 100px; overflow: hidden; font-size: 80%;">
- <h4 style="margin-bottom: 2px;"><a href="{{ page_name }}">{{ item_name }}</a></h4>
+ <div style="margin-bottom: 2px;"><a href="{{ route or page_name }}">{{ item_name }}</a></div>
</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/erpnext/templates/includes/product_in_list.html b/erpnext/templates/includes/product_in_list.html
index 116124a..836781e 100644
--- a/erpnext/templates/includes/product_in_list.html
+++ b/erpnext/templates/includes/product_in_list.html
@@ -10,6 +10,6 @@
</a>
</div>
<div style="height: 100px; overflow: hidden; font-size: 80%;">
- <h4 style="margin-bottom: 2px;"><a href="{{ page_name }}">{{ item_name }}</a></h4>
+ <div><a href="{{ page_name }}">{{ item_name }}</a></div>
</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/erpnext/templates/includes/product_search_box.html b/erpnext/templates/includes/product_search_box.html
index d9dd53b..d4f6e7b 100644
--- a/erpnext/templates/includes/product_search_box.html
+++ b/erpnext/templates/includes/product_search_box.html
@@ -1,28 +1,31 @@
-<div style="margin-bottom: 20px;">
- <form class="form-inline form-search row">
- <div class="input-group col-md-4 col-md-offset-8">
- <input class="form-control" type="text" id="product-search" placeholder="Product Search...">
- <span class="input-group-btn">
- <button class="btn btn-default" type="button" id="btn-product-search">
- <i class="icon-search"></i></button>
- </span>
- </div>
- </form>
- <script>
- // redirect to product search page
- frappe.ready(function() {
- $('.dropdown-toggle').dropdown();
- $("#btn-product-search").click(function() {
- var txt = $("#product-search").val();
- if(txt) {
- window.location.href="product_search?q=" + txt;
- }
- return false;
- });
- $("#product-search").keypress(function(e) {
- if(e.which==13) $("#btn-product-search").click();
- });
- $(".form-search").on("submit", function() { return false; });
- });
- </script>
-</div>
+<script>
+frappe.ready(function() {
+ $(".product-search").remove();
+
+ $('<div class="product-search">\
+ <form class="form-inline form-search">\
+ <div class="input-group">\
+ <input class="form-control" type="text" id="product-search" placeholder="Product Search...">\
+ <span class="input-group-btn">\
+ <button class="btn btn-default" type="button" id="btn-product-search">\
+ <i class="icon-search"></i></button>\
+ </span>\
+ </div>\
+ </form>\
+ </div>').appendTo(".page-header-right");
+
+ $('.dropdown-toggle').dropdown();
+ $("#btn-product-search").click(function() {
+ var txt = $("#product-search").val();
+ if(txt) {
+ window.location.href="product_search?q=" + txt;
+ }
+ return false;
+ });
+ $("#product-search").keypress(function(e) {
+ if(e.which==13) $("#btn-product-search").click();
+ });
+ $(".form-search").on("submit", function() { return false; });
+
+});
+</script>
diff --git a/erpnext/templates/pages/product_search.py b/erpnext/templates/pages/product_search.py
index 8d4a8f6..8b454ce 100644
--- a/erpnext/templates/pages/product_search.py
+++ b/erpnext/templates/pages/product_search.py
@@ -12,18 +12,19 @@
@frappe.whitelist(allow_guest=True)
def get_product_list(search=None, start=0, limit=10):
# base query
- query = """select name, item_name, page_name, website_image, item_group,
- web_long_description as website_description
- from `tabItem` where docstatus = 0 and show_in_website = 1 """
+ 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 t1.name = t2.docname and t2.ref_doctype = 'Item'"""
# search term condition
if search:
- query += """and (web_long_description like %(search)s or
- item_name like %(search)s or name like %(search)s)"""
+ query += """and (t1.web_long_description like %(search)s or t1.description like %(search)s or
+ t1.item_name like %(search)s or t1.name like %(search)s)"""
search = "%" + cstr(search) + "%"
# order by
- query += """order by weightage desc, modified desc limit %s, %s""" % (start, limit)
+ query += """order by t1.weightage desc, t1.modified desc limit %s, %s""" % (start, limit)
data = frappe.db.sql(query, {
"search": search,