From aac7fbf23a5b5a0615da9b069cf0369619927f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 21 Dec 2019 15:35:14 +0100 Subject: [PATCH] group and order location groups in editor --- .../editor/static/editor/css/editor.scss | 5 +++ src/c3nav/editor/templates/editor/list.html | 28 +++++++++++----- src/c3nav/editor/views/edit.py | 32 ++++++++++++++++++- src/c3nav/editor/wrappers.py | 8 ++++- 4 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/c3nav/editor/static/editor/css/editor.scss b/src/c3nav/editor/static/editor/css/editor.scss index c01f1f02..5d2b3cd8 100644 --- a/src/c3nav/editor/static/editor/css/editor.scss +++ b/src/c3nav/editor/static/editor/css/editor.scss @@ -205,6 +205,11 @@ a.list-group-item .badge { .itemtable tr.highlight td { background-color:#FFFFDD; } +.itemtable .item-group-header td { + padding-top: 20px; + font-size: 140%; + line-height: 85%; +} .cancel-btn { margin-right:8px; } diff --git a/src/c3nav/editor/templates/editor/list.html b/src/c3nav/editor/templates/editor/list.html index f37174ed..fc923038 100644 --- a/src/c3nav/editor/templates/editor/list.html +++ b/src/c3nav/editor/templates/editor/list.html @@ -30,20 +30,32 @@ - {% for item in objects %} - {% if forloop.counter0|divisibleby:10 %} - - + {% for objects in grouped_objects %} + {% if objects.title %} + + + {% for col in add_cols %}{% endfor %} {% endif %} - - - - + {% for item in objects.objects %} + {% if forloop.counter0|divisibleby:10 %} + + + {% for col in add_cols %}{% endfor %} + + + {% endif %} + + + {% for col in item.add_cols %}{% endfor %} + + + {% endfor %} {% endfor %} + {% for col in add_cols %}{% endfor %} diff --git a/src/c3nav/editor/views/edit.py b/src/c3nav/editor/views/edit.py index 9f32e318..6c7f6554 100644 --- a/src/c3nav/editor/views/edit.py +++ b/src/c3nav/editor/views/edit.py @@ -436,6 +436,8 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals queryset = queryset.filter(model.q_for_request(request)) reverse_kwargs = {} + add_cols = [] + if level is not None: reverse_kwargs['level'] = level level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=level) @@ -477,6 +479,16 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals }) else: edit_utils = DefaultEditUtils(request) + + with suppress(FieldDoesNotExist): + model._meta.get_field('category') + queryset = queryset.select_related('category') + + with suppress(FieldDoesNotExist): + model._meta.get_field('priority') + add_cols.append('priority') + queryset = queryset.order_by('-priority') + ctx.update({ 'back_url': reverse('editor.index'), 'back_title': _('back to overview'), @@ -486,13 +498,31 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals for obj in queryset: reverse_kwargs['pk'] = obj.pk obj.edit_url = reverse(edit_url_name, kwargs=reverse_kwargs) + obj.add_cols = tuple(getattr(obj, col) for col in add_cols) reverse_kwargs.pop('pk', None) + if model.__name__ == 'LocationGroup': + LocationGroupCategory = request.changeset.wrap_model('LocationGroupCategory') + grouped_objects = tuple( + { + 'title': category.title, + 'objects': tuple(obj for obj in queryset if obj.category_id == category.pk) + } + for category in LocationGroupCategory.objects.order_by('-priority') + ) + else: + grouped_objects = ( + { + 'objects': queryset, + }, + ) + ctx.update({ 'can_create': edit_utils.can_create and can_edit, 'geometry_url': edit_utils.geometry_url, + 'add_cols': add_cols, 'create_url': reverse(resolver_match.url_name[:-4] + 'create', kwargs=reverse_kwargs), - 'objects': queryset, + 'grouped_objects': grouped_objects, }) return APIHybridTemplateContextResponse('editor/list.html', ctx, diff --git a/src/c3nav/editor/wrappers.py b/src/c3nav/editor/wrappers.py index a096d85d..5ed7a02d 100644 --- a/src/c3nav/editor/wrappers.py +++ b/src/c3nav/editor/wrappers.py @@ -418,7 +418,7 @@ class BaseQueryWrapper(BaseWrapper): @get_queryset def order_by(self, *args): """ - Order by is not yet supported on created instances because this is not needed so far. + Order only supported for numeric fields for now """ return self._wrap_queryset(self._obj.order_by(*args)) @@ -910,6 +910,12 @@ class QuerySetWrapper(BaseQueryWrapper): result += list(self._get_created_objects()) + ordering = self._obj.query.order_by + if ordering: + result = sorted(result, key=lambda obj: tuple( + getattr(obj, field.lstrip('-'))*(-1 if field[0] == '-' else 1) for field in ordering + )) + for extra in self._extra: # implementing the extra() call for prefetch_related ex = extra[22:]
« {{ back_title }}
{{ objects.title }}
{{ item.title }}{{ edit_caption }}
« {{ back_title }}
{{ item.title }}{{ col }}{{ edit_caption }}
« {{ back_title }}