chore: Re-organise files,remove T&C modal in cart
- Moved product query and filters engine to `product_data_engine` folder
- Moved product grid, list, search, view to `product_ui` folder
- Renamed `website_item_indexing.py` to `redisearch.py`
- Render Terms and Conditions server side along with the rest of the Shopping cart. Don’t make another db call
- Style changes to terms and conditions
- Deleted unused `cart_terms.html`
- Removed print statements
diff --git a/erpnext/e_commerce/api.py b/erpnext/e_commerce/api.py
index 4f83f08..4c9f4a7 100644
--- a/erpnext/e_commerce/api.py
+++ b/erpnext/e_commerce/api.py
@@ -5,8 +5,8 @@
import frappe
from frappe.utils import cint
-from erpnext.e_commerce.product_query import ProductQuery
-from erpnext.e_commerce.filters import ProductFiltersBuilder
+from erpnext.e_commerce.product_data_engine.query import ProductQuery
+from erpnext.e_commerce.product_data_engine.filters import ProductFiltersBuilder
from erpnext.setup.doctype.item_group.item_group import get_child_groups
@frappe.whitelist(allow_guest=True)
diff --git a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py
index ec989a6..1b59873 100644
--- a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py
+++ b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py
@@ -7,7 +7,7 @@
from frappe import _, msgprint
from frappe.model.document import Document
from frappe.utils import unique
-from erpnext.e_commerce.website_item_indexing import create_website_items_index, ALLOWED_INDEXABLE_FIELDS_SET, is_search_module_loaded
+from erpnext.e_commerce.redisearch import create_website_items_index, ALLOWED_INDEXABLE_FIELDS_SET, is_search_module_loaded
class ShoppingCartSetupError(frappe.ValidationError): pass
diff --git a/erpnext/e_commerce/doctype/website_item/website_item.py b/erpnext/e_commerce/doctype/website_item/website_item.py
index 99c630b..4216126 100644
--- a/erpnext/e_commerce/doctype/website_item/website_item.py
+++ b/erpnext/e_commerce/doctype/website_item/website_item.py
@@ -17,7 +17,7 @@
from erpnext.utilities.product import get_price
# SEARCH
-from erpnext.e_commerce.website_item_indexing import (
+from erpnext.e_commerce.redisearch import (
insert_item_to_index,
update_index_for_item,
delete_item_from_index
diff --git a/erpnext/e_commerce/shopping_cart/search.py b/erpnext/e_commerce/legacy_search.py
similarity index 98%
rename from erpnext/e_commerce/shopping_cart/search.py
rename to erpnext/e_commerce/legacy_search.py
index 30656be..752c33e 100644
--- a/erpnext/e_commerce/shopping_cart/search.py
+++ b/erpnext/e_commerce/legacy_search.py
@@ -6,6 +6,7 @@
from whoosh.qparser import FieldsPlugin, MultifieldParser, WildcardPlugin
from whoosh.query import Prefix
+# TODO: Make obsolete
INDEX_NAME = "products"
class ProductSearch(FullTextSearch):
diff --git a/erpnext/e_commerce/product_configurator/test_product_configurator.py b/erpnext/e_commerce/product_configurator/test_product_configurator.py
index 960dc97..2f5a24f 100644
--- a/erpnext/e_commerce/product_configurator/test_product_configurator.py
+++ b/erpnext/e_commerce/product_configurator/test_product_configurator.py
@@ -4,7 +4,7 @@
from bs4 import BeautifulSoup
import frappe, unittest
from frappe.utils import get_html_for_route
-from erpnext.e_commerce.product_query import ProductQuery
+from erpnext.e_commerce.product_data_engine.query import ProductQuery
from erpnext.e_commerce.doctype.website_item.website_item import make_website_item
test_dependencies = ["Item"]
diff --git a/erpnext/e_commerce/filters.py b/erpnext/e_commerce/product_data_engine/filters.py
similarity index 99%
rename from erpnext/e_commerce/filters.py
rename to erpnext/e_commerce/product_data_engine/filters.py
index 0d96a11..75137a7 100644
--- a/erpnext/e_commerce/filters.py
+++ b/erpnext/e_commerce/product_data_engine/filters.py
@@ -1,6 +1,5 @@
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
-
import frappe
from frappe import _dict
from frappe.utils import floor
diff --git a/erpnext/e_commerce/product_query.py b/erpnext/e_commerce/product_data_engine/query.py
similarity index 98%
rename from erpnext/e_commerce/product_query.py
rename to erpnext/e_commerce/product_data_engine/query.py
index 3db87ab..5c67272 100644
--- a/erpnext/e_commerce/product_query.py
+++ b/erpnext/e_commerce/product_data_engine/query.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
+# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
import frappe
diff --git a/erpnext/e_commerce/product_grid.js b/erpnext/e_commerce/product_ui/grid.js
similarity index 100%
rename from erpnext/e_commerce/product_grid.js
rename to erpnext/e_commerce/product_ui/grid.js
diff --git a/erpnext/e_commerce/product_list.js b/erpnext/e_commerce/product_ui/list.js
similarity index 100%
rename from erpnext/e_commerce/product_list.js
rename to erpnext/e_commerce/product_ui/list.js
diff --git a/erpnext/e_commerce/product_search.js b/erpnext/e_commerce/product_ui/search.js
similarity index 96%
rename from erpnext/e_commerce/product_search.js
rename to erpnext/e_commerce/product_ui/search.js
index ebe0076..b93c975 100644
--- a/erpnext/e_commerce/product_search.js
+++ b/erpnext/e_commerce/product_ui/search.js
@@ -49,7 +49,7 @@
// Fetch and populate product results
frappe.call({
- method: "erpnext.templates.pages.product_search.search",
+ method: "erpnext.templates.pages.e_commerce.product_search.search",
args: {
query: query
},
@@ -61,7 +61,7 @@
// Populate categories
if (me.category_container) {
frappe.call({
- method: "erpnext.templates.pages.product_search.get_category_suggestions",
+ method: "erpnext.templates.pages.e_commerce.product_search.get_category_suggestions",
args: {
query: query
},
diff --git a/erpnext/e_commerce/product_view.js b/erpnext/e_commerce/product_ui/views.js
similarity index 100%
rename from erpnext/e_commerce/product_view.js
rename to erpnext/e_commerce/product_ui/views.js
diff --git a/erpnext/e_commerce/website_item_indexing.py b/erpnext/e_commerce/redisearch.py
similarity index 100%
rename from erpnext/e_commerce/website_item_indexing.py
rename to erpnext/e_commerce/redisearch.py
diff --git a/erpnext/public/build.json b/erpnext/public/build.json
index 553082f..569910d 100644
--- a/erpnext/public/build.json
+++ b/erpnext/public/build.json
@@ -68,9 +68,9 @@
"public/js/hierarchy_chart/hierarchy_chart_mobile.js"
],
"js/e-commerce.min.js": [
- "e_commerce/product_view.js",
- "e_commerce/product_grid.js",
- "e_commerce/product_list.js",
- "e_commerce/product_search.js"
+ "e_commerce/product_ui/views.js",
+ "e_commerce/product_ui/grid.js",
+ "e_commerce/product_ui/list.js",
+ "e_commerce/product_ui/search.js"
]
}
diff --git a/erpnext/public/scss/shopping_cart.scss b/erpnext/public/scss/shopping_cart.scss
index 57ee7ca..4de16ca 100644
--- a/erpnext/public/scss/shopping_cart.scss
+++ b/erpnext/public/scss/shopping_cart.scss
@@ -844,6 +844,14 @@
}
}
}
+
+ .t-and-c-container {
+ padding: 1.5rem;
+ }
+
+ .t-and-c-terms {
+ font-size: 14px;
+ }
}
.cart-empty.frappe-card {
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index a362c6e..f4b667e 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -10,11 +10,7 @@
from frappe.website.utils import clear_cache
from frappe.website.website_generator import WebsiteGenerator
from six.moves.urllib.parse import quote
-
-from erpnext.e_commerce.filters import ProductFiltersBuilder
-from erpnext.e_commerce.product_query import ProductQuery
-from erpnext.utilities.product import get_qty_in_stock
-
+from erpnext.e_commerce.product_data_engine.filters import ProductFiltersBuilder
class ItemGroup(NestedSet, WebsiteGenerator):
nsm_parent_field = 'parent_item_group'
diff --git a/erpnext/templates/pages/cart.html b/erpnext/templates/pages/cart.html
index 05db77a..bb8ba3b 100644
--- a/erpnext/templates/pages/cart.html
+++ b/erpnext/templates/pages/cart.html
@@ -21,8 +21,9 @@
{% if doc.items %}
<div class="cart-container">
<div class="row m-0">
- <div class="col-md-8 frappe-card p-5 mb-4">
- <div>
+ <!-- Left section -->
+ <div class="col-md-8">
+ <div class="frappe-card p-5 mb-4">
<div id="cart-error" class="alert alert-danger" style="display: none;"></div>
<div class="cart-items-header">
{{ _('Items') }}
@@ -56,61 +57,44 @@
</tfoot>
{% endif %}
</table>
- </div>
- <div class="row mt-2">
- <div class="col-3">
- {% if cart_settings.enable_checkout %}
- <a class="btn btn-primary-light font-md" href="/orders">
- {{ _('Past Orders') }}
- </a>
- {% else %}
- <a class="btn btn-primary-light font-md" href="/quotations">
- {{ _('Past Quotes') }}
- </a>
- {% endif %}
- </div>
- <div class="col-9">
- {% if doc.items %}
- <div class="place-order-container">
- <a class="btn btn-primary-light mr-2 font-md" href="/all-products">
- {{ _('Continue Shopping') }}
- </a>
+ <div class="row mt-2">
+ <div class="col-3">
+ {% if cart_settings.enable_checkout %}
+ <a class="btn btn-primary-light font-md" href="/orders">
+ {{ _('Past Orders') }}
+ </a>
+ {% else %}
+ <a class="btn btn-primary-light font-md" href="/quotations">
+ {{ _('Past Quotes') }}
+ </a>
+ {% endif %}
</div>
- {% endif %}
+ <div class="col-9">
+ {% if doc.items %}
+ <div class="place-order-container">
+ <a class="btn btn-primary-light mr-2 font-md" href="/all-products">
+ {{ _('Continue Shopping') }}
+ </a>
+ </div>
+ {% endif %}
+ </div>
</div>
</div>
-
+ <!-- Terms and Conditions -->
{% if doc.items %}
- {% if doc.tc_name %}
- <div class="terms-and-conditions-link">
- <a href class="link-terms-and-conditions" data-terms-name="{{ doc.tc_name }}">
- {{ _("Terms and Conditions") }}
- </a>
- <script>
- frappe.ready(() => {
- $('.link-terms-and-conditions').click((e) => {
- e.preventDefault();
- const $link = $(e.target);
- const terms_name = $link.attr('data-terms-name');
- show_terms_and_conditions(terms_name);
- })
- });
- function show_terms_and_conditions(terms_name) {
- frappe.call('erpnext.e_commerce.shopping_cart.cart.get_terms_and_conditions', { terms_name })
- .then(r => {
- frappe.msgprint({
- title: terms_name,
- message: r.message
- });
- });
- }
- </script>
- </div>
- {% endif %}
+ {% if doc.terms %}
+ <div class="t-and-c-container mt-4 frappe-card">
+ <h5>{{ _("Terms and Conditions") }}</h5>
+ <div class="t-and-c-terms mt-2">
+ {{ doc.terms }}
+ </div>
+ </div>
+ {% endif %}
</div>
+ <!-- Right section -->
<div class="col-md-4">
<div class="cart-payment-addresses">
<!-- Apply Coupon Code -->
diff --git a/erpnext/templates/pages/cart_terms.html b/erpnext/templates/pages/cart_terms.html
deleted file mode 100644
index 6d84fb8..0000000
--- a/erpnext/templates/pages/cart_terms.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-<div>{{doc.terms}}</div>
diff --git a/erpnext/templates/pages/product_search.py b/erpnext/templates/pages/product_search.py
index b6601a8..00aace4 100644
--- a/erpnext/templates/pages/product_search.py
+++ b/erpnext/templates/pages/product_search.py
@@ -8,7 +8,7 @@
from erpnext.e_commerce.shopping_cart.product_info import set_product_info_for_website
from redisearch import AutoCompleter, Client, Query
-from erpnext.e_commerce.website_item_indexing import (
+from erpnext.e_commerce.redisearch import (
is_search_module_loaded,
WEBSITE_ITEM_INDEX,
WEBSITE_ITEM_NAME_AUTOCOMPLETE,
@@ -18,7 +18,6 @@
no_cache = 1
-
def get_context(context):
context.show_search = True
@@ -35,13 +34,13 @@
# limit = 12 because we show 12 items in the grid view
# base query
query = """
- Select
+ SELECT
web_item_name, item_name, item_code, brand, route,
website_image, thumbnail, item_group,
description, web_long_description as website_description,
website_warehouse, ranking
- from `tabWebsite Item`
- where published = 1
+ FROM `tabWebsite Item`
+ WHERE published = 1
"""
# search term condition
@@ -53,7 +52,7 @@
search = "%" + cstr(search) + "%"
# order by
- query += """ order by ranking asc, modified desc limit %s, %s""" % (cint(start), cint(limit))
+ query += """ ORDER BY ranking asc, modified desc limit %s, %s""" % (cint(start), cint(limit))
return frappe.db.sql(query, {
"search": search
@@ -91,14 +90,9 @@
q = Query(query_string)
- print(f"Executing query: {q.query_string()}")
-
results = client.search(q)
search_results['results'] = list(map(convert_to_dict, results.docs))
- # FOR DEBUGGING
- print("SEARCH RESULTS ------------------\n ", search_results)
-
return search_results
def clean_up_query(query):
diff --git a/erpnext/www/all-products/index.py b/erpnext/www/all-products/index.py
index a5476e4..c66924e 100644
--- a/erpnext/www/all-products/index.py
+++ b/erpnext/www/all-products/index.py
@@ -1,6 +1,6 @@
import frappe
from frappe.utils import cint
-from erpnext.e_commerce.filters import ProductFiltersBuilder
+from erpnext.e_commerce.product_data_engine.filters import ProductFiltersBuilder
sitemap = 1