diff --git a/src/pretix/api/views/item.py b/src/pretix/api/views/item.py index 50fb4f8bf3..784251e142 100644 --- a/src/pretix/api/views/item.py +++ b/src/pretix/api/views/item.py @@ -467,7 +467,6 @@ with scopes_disabled(): class CompatQuestionFilter(FilterSet): identifier = django_filters.CharFilter(field_name='question__identifier') ask_during_checkin = django_filters.BooleanFilter(method='ask_during_checkin_qs') - sales_channel = django_filters.CharFilter(method='sales_channel_qs') class Meta: model = QuestionnaireChild @@ -478,11 +477,6 @@ with scopes_disabled(): questionnaire__type=Questionnaire.QuestionnaireType.ORDER_POSITION_CHECKIN if value else Questionnaire.QuestionnaireType.ORDER_POSITION_SALE ) - def sales_channel_qs(self, qs, name, value): - return qs.filter( - Q(questionnaire__all_sales_channels=True) | Q(questionnaire__limit_sales_channels__identifier=value) - ) - class CompatQuestionViewSet(ConditionalListView, viewsets.ModelViewSet): serializer_class = CompatQuestionSerializer @@ -495,7 +489,9 @@ class CompatQuestionViewSet(ConditionalListView, viewsets.ModelViewSet): write_permission = 'event.items:write' def get_queryset(self): + self.sales_channel_ident = self.request.query_params.get('sales_channel', getattr(self.request.auth, 'guessed_sales_channel_identifier', None) or 'web') return QuestionnaireChild.objects.filter( + Q(questionnaire__all_sales_channels=True) | Q(questionnaire__limit_sales_channels__identifier=self.sales_channel_ident), questionnaire__event=self.request.event, # legacy compat only for position-level questions questionnaire__type__startswith='P', diff --git a/src/pretix/base/models/devices.py b/src/pretix/base/models/devices.py index 5ba90593db..bd3353b78a 100644 --- a/src/pretix/base/models/devices.py +++ b/src/pretix/base/models/devices.py @@ -292,6 +292,11 @@ class Device(LoggedModel): else: return self.organizer.events.none() + @property + def guessed_sales_channel_identifier(self): + if self.software_brand.startswith("pretixPOS"): + return 'pretixpos' + class DeviceLastSeen(models.Model): # This is a separate model since we expect it to get A LOT of writes and PostgreSQL always