Source code for shoop.front.utils.product_sorting
# -*- coding: utf-8 -*-
# This file is part of Shoop.
#
# Copyright (c) 2012-2016, Shoop Ltd. All rights reserved.
#
# This source code is licensed under the AGPLv3 license found in the
# LICENSE file in the root directory of this source tree.
from django.utils.translation import ugettext_lazy as _
PRODUCT_SORT_CHOICES = [
("name_a", _(u"Name - A-Z")),
("name_d", _(u"Name - Z-A")),
("price_a", _(u"Price - Low to High")),
("price_d", _(u"Price - High to Low")),
]
[docs]def sort_products(request, products, sort):
if not sort:
sort = ""
# Force sorting despite what collation says
sorter = _get_product_name_lowered_stripped
key = (sort[:-2] if sort.endswith(('_a', '_d')) else sort)
reverse = bool(sort.endswith('_d'))
if key == "name":
sorter = _get_product_name_lowered
elif key == "price":
sorter = _get_product_price_getter_for_request(request)
if sorter:
products = sorted(products, key=sorter, reverse=reverse)
return products
def _get_product_name_lowered_stripped(product):
return product.name.lower().strip()
def _get_product_name_lowered(product):
return product.name.lower()
def _get_product_price_getter_for_request(request):
def _get_product_price(product):
return product.get_price(request)
return _get_product_price