mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Widget: Allow to filter by product
This commit is contained in:
@@ -51,8 +51,9 @@ def item_group_by_category(items):
|
||||
)
|
||||
|
||||
|
||||
def get_grouped_items(event, subevent=None, voucher=None, channel='web', require_seat=0):
|
||||
items = event.items.using(settings.DATABASE_REPLICA).filter_available(channel=channel, voucher=voucher).select_related(
|
||||
def get_grouped_items(event, subevent=None, voucher=None, channel='web', require_seat=0, base_qs=None):
|
||||
base_qs = base_qs if base_qs is not None else event.items
|
||||
items = base_qs.using(settings.DATABASE_REPLICA).filter_available(channel=channel, voucher=voucher).select_related(
|
||||
'category', 'tax_rule', # for re-grouping
|
||||
'hidden_if_available',
|
||||
).prefetch_related(
|
||||
|
||||
@@ -184,9 +184,17 @@ def get_picture(event, picture):
|
||||
class WidgetAPIProductList(EventListMixin, View):
|
||||
|
||||
def _get_items(self):
|
||||
qs = self.request.event.items
|
||||
if 'items' in self.request.GET:
|
||||
qs = qs.filter(pk__in=self.request.GET.get('items').split(","))
|
||||
if 'categories' in self.request.GET:
|
||||
qs = qs.filter(category__pk__in=self.request.GET.get('categories').split(","))
|
||||
|
||||
items, display_add_to_cart = get_grouped_items(
|
||||
self.request.event, subevent=self.subevent, voucher=self.voucher, channel='web'
|
||||
self.request.event, subevent=self.subevent, voucher=self.voucher, channel='web',
|
||||
base_qs=qs
|
||||
)
|
||||
|
||||
grps = []
|
||||
for cat, g in item_group_by_category(items):
|
||||
grps.append({
|
||||
|
||||
@@ -1094,6 +1094,12 @@ var shared_root_methods = {
|
||||
if (this.$root.filter) {
|
||||
url += '&' + this.$root.filter;
|
||||
}
|
||||
if (this.$root.item_filter) {
|
||||
url += '&items=' + escape(this.$root.item_filter);
|
||||
}
|
||||
if (this.$root.category_filter) {
|
||||
url += '&categories=' + escape(this.$root.category_filter);
|
||||
}
|
||||
var cart_id = getCookie(this.cookieName);
|
||||
if (this.$root.voucher_code) {
|
||||
url += '&voucher=' + escape(this.$root.voucher_code);
|
||||
@@ -1308,6 +1314,8 @@ var create_widget = function (element) {
|
||||
var disable_vouchers = element.attributes["disable-vouchers"] ? true : false;
|
||||
var widget_data = JSON.parse(JSON.stringify(window.PretixWidget.widget_data));
|
||||
var filter = element.attributes.filter ? element.attributes.filter.value : null;
|
||||
var items = element.attributes.items ? element.attributes.items.value : null;
|
||||
var categories = element.attributes.categories ? element.attributes.categories.value : null;
|
||||
for (var i = 0; i < element.attributes.length; i++) {
|
||||
var attrib = element.attributes[i];
|
||||
if (attrib.name.match(/^data-.*$/)) {
|
||||
@@ -1331,6 +1339,8 @@ var create_widget = function (element) {
|
||||
currency: null,
|
||||
name: null,
|
||||
filter: filter,
|
||||
item_filter: items,
|
||||
category_filter: categories,
|
||||
voucher_code: voucher,
|
||||
display_net_prices: false,
|
||||
voucher_explanation_text: null,
|
||||
|
||||
Reference in New Issue
Block a user