diff --git a/konova/autocompletes.py b/konova/autocompletes.py index 3a79ab6..b07e208 100644 --- a/konova/autocompletes.py +++ b/konova/autocompletes.py @@ -5,7 +5,12 @@ Contact: michel.peltriaux@sgdnord.rlp.de Created on: 07.12.20 """ +import collections + from dal_select2.views import Select2QuerySetView, Select2GroupQuerySetView +from django.core.exceptions import ImproperlyConfigured + +from konova.utils.message_templates import UNGROUPED from user.models import User from django.db.models import Q @@ -139,6 +144,8 @@ class KonovaCodeAutocomplete(Select2GroupQuerySetView): q_or |= Q(short_name__icontains=keyword) q_or |= Q(parent__long_name__icontains=keyword) q_or |= Q(parent__short_name__icontains=keyword) + q_or |= Q(parent__parent__long_name__icontains=keyword) + q_or |= Q(parent__parent__short_name__icontains=keyword) _filter.add(q_or, Q.AND) qs = qs.filter(_filter).distinct() return qs @@ -214,6 +221,41 @@ class BiotopeCodeAutocomplete(KonovaCodeAutocomplete): def get_result_label(self, result): return f"{result.long_name} ({result.short_name})" + def get_results(self, context): + """Return the options grouped by a common related model. + + Raises ImproperlyConfigured if self.group_by_name is not configured + """ + if not self.group_by_related: + raise ImproperlyConfigured("Missing group_by_related.") + + super_groups = collections.OrderedDict() + + object_list = context['object_list'] + + for result in object_list: + group = result.parent if result.parent else None + group_name = f"{group.long_name} ({group.short_name})" if group else UNGROUPED + super_group = result.parent.parent if result.parent else None + super_group_name = f"{super_group.long_name} ({super_group.short_name})" if super_group else UNGROUPED + super_groups.setdefault(super_group_name, {}) + super_groups[super_group_name].setdefault(group_name, []) + super_groups[super_group_name][group_name].append(result) + + return [{ + 'id': None, + 'text': super_group, + 'children': [{ + "id": None, + "text": group, + "children": [{ + 'id': self.get_result_value(result), + 'text': self.get_result_label(result), + 'selected_text': self.get_selected_result_label(result), + } for result in results] + } for group, results in groups.items()] + } for super_group, groups in super_groups.items()] + class BiotopeExtraCodeAutocomplete(KonovaCodeAutocomplete): """ @@ -284,6 +326,11 @@ class RegistrationOfficeCodeAutocomplete(KonovaCodeAutocomplete): self.c = CODELIST_REGISTRATION_OFFICE_ID super().__init__(*args, **kwargs) + def order_by(self, qs): + return qs.order_by( + "parent__long_name" + ) + class ConservationOfficeCodeAutocomplete(KonovaCodeAutocomplete): """ @@ -297,4 +344,4 @@ class ConservationOfficeCodeAutocomplete(KonovaCodeAutocomplete): super().__init__(*args, **kwargs) def get_result_label(self, result): - return f"{result.long_name} ({result.short_name})" \ No newline at end of file + return f"{result.long_name} ({result.short_name})" diff --git a/konova/static/css/konova.css b/konova/static/css/konova.css index 709d3eb..7e7f3fd 100644 --- a/konova/static/css/konova.css +++ b/konova/static/css/konova.css @@ -242,15 +242,24 @@ Similar to bootstraps 'shadow-lg' .select2-results__option--highlighted{ background-color: var(--rlp-red) !important; } +/* .select2-container--default .select2-results__group{ background-color: var(--rlp-gray-light); } .select2-container--default .select2-results__option .select2-results__option{ - padding-left: 2em !important; + padding-left: 1em !important; +} + + */ +.select2-results__options--nested{ + padding-left: 1em !important; } .select2-container--default .select2-results > .select2-results__options{ max-height: 500px !important; } +/* .select2-container--default .select2-results__option .select2-results__option{ padding-left: 2em; -} \ No newline at end of file +} + + */ \ No newline at end of file diff --git a/konova/utils/message_templates.py b/konova/utils/message_templates.py index c7a2be0..5809b3b 100644 --- a/konova/utils/message_templates.py +++ b/konova/utils/message_templates.py @@ -7,7 +7,7 @@ Created on: 02.08.21 """ from django.utils.translation import gettext_lazy as _ - +UNGROUPED = _("Ungrouped") FORM_INVALID = _("There was an error on this form.") PARAMS_INVALID = _("Invalid parameters") INTERVENTION_INVALID = _("There are errors in this intervention.") diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 87e1e03..022e9e1 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index b5eae12..16b2cd4 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-15 11:27+0100\n" +"POT-Creation-Date: 2022-02-15 15:29+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -565,8 +565,9 @@ msgid "" "action types are expected to be performed according to the amount and unit " "below on this form." msgstr "" -"Eine Maßnahme kann aus mehreren verschiedenen Maßnahmentypen bestehen. Alle hier gewählten " -"Einträge sollen mit der weiter unten angegebenen Einheit und Menge umgesetzt werden. " +"Eine Maßnahme kann aus mehreren verschiedenen Maßnahmentypen bestehen. Alle " +"hier gewählten Einträge sollen mit der weiter unten angegebenen Einheit und " +"Menge umgesetzt werden. " #: compensation/forms/modalForms.py:418 compensation/forms/modalForms.py:430 msgid "Action Type detail" @@ -1765,6 +1766,11 @@ msgstr "Neu" msgid "Show" msgstr "Anzeigen" +#: konova/templates/konova/widgets/checkbox-tree-select.html:4 +#: templates/generic_index.html:56 +msgid "Search" +msgstr "Suchen" + #: konova/templates/konova/widgets/generate-content-input.html:6 msgid "Generate new" msgstr "Neu generieren" @@ -1805,6 +1811,10 @@ msgstr "{} - Freigegebene Daten geprüft" msgid "Request for new API token" msgstr "Anfrage für neuen API Token" +#: konova/utils/message_templates.py:10 +msgid "Ungrouped" +msgstr "Ohne Zuordnung" + #: konova/utils/message_templates.py:11 msgid "There was an error on this form." msgstr "Es gab einen Fehler im Formular." @@ -2270,10 +2280,6 @@ msgstr "Neu" msgid "Search for keywords" msgstr "Nach Schlagwörtern suchen" -#: templates/generic_index.html:56 -msgid "Search" -msgstr "Suchen" - #: templates/generic_index.html:57 msgid "Start search" msgstr "Starte Suche"