From 2ac10699ea0d46ff8ff6279a3e53fb640175ec0b Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Wed, 8 Jul 2026 10:00:16 +0200 Subject: [PATCH] Merge categories and items list views --- src/pretix/control/navigation.py | 8 -- .../pretixcontrol/items/category.html | 3 + .../pretixcontrol/items/category_delete.html | 2 +- .../templates/pretixcontrol/items/index.html | 84 ++++++++++++++++--- src/pretix/control/urls.py | 1 - src/pretix/control/views/item.py | 10 +-- .../static/pretixcontrol/js/ui/items.js | 11 +++ .../static/pretixcontrol/scss/main.scss | 3 + 8 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 src/pretix/static/pretixcontrol/js/ui/items.js diff --git a/src/pretix/control/navigation.py b/src/pretix/control/navigation.py index 61e3411344..2a8675c435 100644 --- a/src/pretix/control/navigation.py +++ b/src/pretix/control/navigation.py @@ -173,14 +173,6 @@ def get_event_navigation(request: HttpRequest): }), 'active': 'event.items.quota' in url.url_name, }, - { - 'label': _('Categories'), - 'url': reverse('control:event.items.categories', kwargs={ - 'event': request.event.slug, - 'organizer': request.event.organizer.slug, - }), - 'active': 'event.items.categories' in url.url_name, - }, { 'label': _('Questions'), 'url': reverse('control:event.items.questions', kwargs={ diff --git a/src/pretix/control/templates/pretixcontrol/items/category.html b/src/pretix/control/templates/pretixcontrol/items/category.html index 1e87f687b9..169e77e7f4 100644 --- a/src/pretix/control/templates/pretixcontrol/items/category.html +++ b/src/pretix/control/templates/pretixcontrol/items/category.html @@ -45,6 +45,9 @@ {% endif %}
+ {% if category %} + {% trans "Delete" %} + {% endif %} diff --git a/src/pretix/control/templates/pretixcontrol/items/category_delete.html b/src/pretix/control/templates/pretixcontrol/items/category_delete.html index eed8e3b7e7..7dbdeee608 100644 --- a/src/pretix/control/templates/pretixcontrol/items/category_delete.html +++ b/src/pretix/control/templates/pretixcontrol/items/category_delete.html @@ -10,7 +10,7 @@ Are you sure you want to delete the category {{ name }}? {% endblocktrans %}

- + {% trans "Cancel" %}
{% else %} - {% if 'event.items:write' in request.eventpermset %} -

- {% trans "Create a new product" %} -

- {% endif %} -
+ + {% if 'event.items:write' in request.eventpermset %} +

+ {% trans "Create a new product" %} + {% trans "Create a new category" %} + +

+ {% endif %} {% csrf_token %} -
+
@@ -182,8 +188,66 @@ {% endfor %}
-
+
+
+ + {% include "pretixcontrol/pagination.html" %} {% endif %} + {% compress js %} + + {% endcompress %} {% endblock %} diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py index edc7edf82f..36d43e7310 100644 --- a/src/pretix/control/urls.py +++ b/src/pretix/control/urls.py @@ -329,7 +329,6 @@ urlpatterns = [ re_path(r'^items/select2/itemvar$', typeahead.itemvar_select2, name='event.items.itemvar.select2'), re_path(r'^items/select2/itemvars$', typeahead.itemvars_select2, name='event.items.itemvars.select2'), re_path(r'^items/select2/variation$', typeahead.variations_select2, name='event.items.variations.select2'), - re_path(r'^categories/$', item.CategoryList.as_view(), name='event.items.categories'), re_path(r'^categories/select2$', typeahead.category_select2, name='event.items.categories.select2'), re_path(r'^categories/(?P\d+)/delete$', item.CategoryDelete.as_view(), name='event.items.categories.delete'), diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py index a899800f1e..03fc5d3891 100644 --- a/src/pretix/control/views/item.py +++ b/src/pretix/control/views/item.py @@ -244,7 +244,7 @@ class CategoryDelete(EventPermissionRequiredMixin, CompatDeleteView): return HttpResponseRedirect(success_url) def get_success_url(self) -> str: - return reverse('control:event.items.categories', kwargs={ + return reverse('control:event.items', kwargs={ 'organizer': self.request.event.organizer.slug, 'event': self.request.event.slug, }) @@ -278,7 +278,7 @@ class CategoryUpdate(EventPermissionRequiredMixin, UpdateView): return super().form_valid(form) def get_success_url(self) -> str: - return reverse('control:event.items.categories', kwargs={ + return reverse('control:event.items', kwargs={ 'organizer': self.request.event.organizer.slug, 'event': self.request.event.slug, }) @@ -296,7 +296,7 @@ class CategoryCreate(EventPermissionRequiredMixin, CreateView): context_object_name = 'category' def get_success_url(self) -> str: - return reverse('control:event.items.categories', kwargs={ + return reverse('control:event.items', kwargs={ 'organizer': self.request.event.organizer.slug, 'event': self.request.event.slug, }) @@ -380,7 +380,7 @@ def category_move(request, category, up=True): @require_http_methods(["POST"]) def category_move_up(request, organizer, event, category): category_move(request, category, up=True) - return redirect('control:event.items.categories', + return redirect('control:event.items', organizer=request.event.organizer.slug, event=request.event.slug) @@ -389,7 +389,7 @@ def category_move_up(request, organizer, event, category): @require_http_methods(["POST"]) def category_move_down(request, organizer, event, category): category_move(request, category, up=False) - return redirect('control:event.items.categories', + return redirect('control:event.items', organizer=request.event.organizer.slug, event=request.event.slug) diff --git a/src/pretix/static/pretixcontrol/js/ui/items.js b/src/pretix/static/pretixcontrol/js/ui/items.js new file mode 100644 index 0000000000..23fc17a0ce --- /dev/null +++ b/src/pretix/static/pretixcontrol/js/ui/items.js @@ -0,0 +1,11 @@ +$("#btn_reorder_categories").click(function() { + $("#products_table").attr('hidden', ''); + $("#categories_table").removeAttr('hidden'); + return false; +}); +$("#btn_reorder_categories_done").click(function() { + //$("#products_table").removeAttr('hidden'); + //$("#categories_table").attr('hidden', ''); + location=location; + return false; +}); diff --git a/src/pretix/static/pretixcontrol/scss/main.scss b/src/pretix/static/pretixcontrol/scss/main.scss index 3941b3304e..85c965ba08 100644 --- a/src/pretix/static/pretixcontrol/scss/main.scss +++ b/src/pretix/static/pretixcontrol/scss/main.scss @@ -810,6 +810,9 @@ tbody[data-dnd-url] { display: table-row; height: 0.5em; } +.table-items thead + tbody[data-dnd-url]:not(:has(tr))::after { + height: 0; /* no spacing before first header, if no items without category */ +} .sortable-sorting tbody:not(.sortable-dragarea) { opacity: .4; }