Source code for shuup.admin.modules.products.views.list

# -*- coding: utf-8 -*-
# This file is part of Shuup.
#
# Copyright (c) 2012-2017, Shoop Commerce Ltd. All rights reserved.
#
# This source code is licensed under the OSL-3.0 license found in the
# LICENSE file in the root directory of this source tree.
from __future__ import unicode_literals

from django.contrib.staticfiles.templatetags.staticfiles import static
from django.db.models import Q
from django.utils.translation import ugettext_lazy as _

from shuup.admin.utils.picotable import (
    ChoicesFilter, Column, Picotable, RangeFilter, TextFilter
)
from shuup.admin.utils.views import PicotableListView
from shuup.core.models import ProductMode, Shop, ShopProduct


[docs]class ProductPicotable(Picotable):
[docs] def process_item(self, object): out = super(ProductPicotable, self).process_item(object) popup = self.request.GET.get("popup") kind = self.request.GET.get("kind", "") if popup and kind == "product": # Enable option to pick products out.update({"_id": object.product.id}) return out
[docs]class ProductListView(PicotableListView): model = ShopProduct picotable_class = ProductPicotable default_columns = [ Column("primary_image", _(u"Primary Image"), display="get_primary_image", class_name="text-center", raw=True, ordering=1, sortable=False), Column("name", _(u"Name"), sort_field="product__translations__name", display="product__name", filter_config=TextFilter( filter_field="product__translations__name", placeholder=_("Filter by name...") ), ordering=2), Column("sku", _(u"SKU"), display="product__sku", filter_config=RangeFilter(filter_field="product__sku"), ordering=3), Column("barcode", _(u"Barcode"), display="product__barcode", filter_config=TextFilter(_("Filter by barcode...")), ordering=4), Column("type", _(u"Type"), display="product__type", ordering=5), Column("mode", _(u"Mode"), display="product__mode", filter_config=ChoicesFilter(ProductMode.choices), ordering=6), ] related_objects = [ ("product", "shuup.core.models:Product"), ] mass_actions = [ "shuup.admin.modules.products.mass_actions:VisibleMassAction", "shuup.admin.modules.products.mass_actions:InvisibleMassAction", "shuup.admin.modules.products.mass_actions:FileResponseAction", "shuup.admin.modules.products.mass_actions:EditProductAttributesAction", ]
[docs] def get_primary_image(self, instance): if instance.product.primary_image: return "<img src='/media/%s'>" % instance.product.primary_image.get_thumbnail() else: return "<img src='%s'>" % static("shuup_admin/img/no_image_thumbnail.png")
[docs] def get_queryset(self): filter = self.get_filter() shop_id = filter.get("shop", Shop.objects.first().pk) qs = ShopProduct.objects.filter(product__deleted=False, shop_id=shop_id) q = Q() for mode in filter.get("modes", []): q |= Q(product__mode=mode) manufacturer_ids = filter.get("manufacturers") if manufacturer_ids: q |= Q(product__manufacturer_id__in=manufacturer_ids) qs = qs.filter(q) return qs
[docs] def get_object_abstract(self, instance, item): return [ {"text": "%s" % instance.product, "class": "header"}, {"title": _(u"Barcode"), "text": item.get("product__barcode")}, {"title": _(u"SKU"), "text": item.get("product__sku")}, {"title": _(u"Type"), "text": item.get("product__type")}, ]