from django.utils.translation import gettext_lazy as _
from shuup.admin.shop_provider import get_shop
from shuup.admin.utils.picotable import Column, DateRangeFilter, TextFilter
from shuup.admin.utils.views import PicotableListView
from shuup.discounts.models import Discount
from shuup.utils.i18n import format_money, format_number, format_percent, get_locally_formatted_datetime
[docs]
class DiscountListView(PicotableListView):
model = Discount
url_identifier = "discounts"
default_columns = [
Column(
"name",
_("Discount Name"),
sort_field="name",
display="name",
filter_config=TextFilter(filter_field="name", placeholder=_("Filter by name...")),
),
Column(
"product__translations__name",
_("Product"),
display="product",
filter_config=TextFilter(
filter_field="product__translations__name",
placeholder=_("Filter by product..."),
),
),
Column(
"category",
_("Category"),
display="category",
filter_config=TextFilter(
filter_field="category__translations__name",
placeholder=_("Filter by category..."),
),
),
Column(
"contact_group",
_("Contact Group"),
display="contact_group",
filter_config=TextFilter(
filter_field="contact_group__translations__name",
placeholder=_("Filter by contact group..."),
),
),
Column(
"contact",
_("Contact"),
display="contact",
filter_config=TextFilter(
filter_field="contact__translations__name",
placeholder=_("Filter by contact..."),
),
),
Column("discount_effect", _("Effect"), display="get_discount_effect"),
Column(
"end_datetime",
_("End Date and Time"),
display="format_end_datetime",
filter_config=DateRangeFilter(),
),
]
mass_actions = ["shuup.discounts.admin.mass_actions:ArchiveMassAction"]
toolbar_buttons_provider_key = "discount_list_toolbar_provider"
mass_actions_provider_key = "discount_list_actions_provider"
[docs]
def get_discount_effect(self, instance):
if not (instance.discount_amount_value or instance.discounted_price_value or instance.discount_percentage):
return "-"
effects = []
shop = get_shop(self.request)
if instance.discount_amount_value:
effects.append(
f"- {format_money(shop.create_price(instance.discount_amount_value))}"
if shop
else format_number(instance.discount_amount_value)
)
if instance.discounted_price_value:
effects.append(
format_money(shop.create_price(instance.discounted_price_value))
if shop
else format_number(instance.discounted_price_value)
)
if instance.discount_percentage:
effects.append(format_percent(instance.discount_percentage))
return ",".join(effects)
[docs]
def get_queryset(self):
return Discount.objects.active(get_shop(self.request))