diff --git a/codelist/models.py b/codelist/models.py index d5be5b10..de7a2100 100644 --- a/codelist/models.py +++ b/codelist/models.py @@ -65,6 +65,26 @@ class KonovaCode(models.Model): ret_val += ", " + self.parent.long_name return ret_val + def add_children(self): + """ Adds all children (resurcively until leaf) as .children to the KonovaCode + + Returns: + code (KonovaCode): The manipulated KonovaCode instance + """ + if self.is_leaf: + return None + + children = KonovaCode.objects.filter( + code_lists__in=self.code_lists.all(), + parent=self + ).order_by( + "long_name" + ) + self.children = children + for child in children: + child.add_children() + return self + class KonovaCodeList(models.Model): """ diff --git a/compensation/forms/modalForms.py b/compensation/forms/modalForms.py index 804ebad4..cdcc26e9 100644 --- a/compensation/forms/modalForms.py +++ b/compensation/forms/modalForms.py @@ -17,10 +17,11 @@ from codelist.models import KonovaCode from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID, \ CODELIST_COMPENSATION_ACTION_DETAIL_ID from compensation.models import CompensationDocument, EcoAccountDocument +from intervention.inputs import CompensationActionTreeCheckboxSelectMultiple from konova.contexts import BaseContext from konova.forms import BaseModalForm, NewDocumentModalForm, RemoveModalForm from konova.models import DeadlineType -from konova.utils.message_templates import FORM_INVALID, ADDED_COMPENSATION_STATE, ADDED_DEADLINE, \ +from konova.utils.message_templates import FORM_INVALID, ADDED_COMPENSATION_STATE, \ ADDED_COMPENSATION_ACTION, PAYMENT_EDITED, COMPENSATION_STATE_EDITED, COMPENSATION_ACTION_EDITED, DEADLINE_EDITED @@ -405,22 +406,13 @@ class NewActionModalForm(BaseModalForm): """ from compensation.models import UnitChoices - action_type = forms.ModelChoiceField( + action_type = forms.MultipleChoiceField( label=_("Action Type"), label_suffix="", required=True, - help_text=_("Select the action type"), - queryset=KonovaCode.objects.filter( - is_archived=False, - is_leaf=True, - code_lists__in=[CODELIST_COMPENSATION_ACTION_ID], - ), - widget=autocomplete.ModelSelect2( - url="codes-compensation-action-autocomplete", - attrs={ - "data-placeholder": _("Action"), - } - ), + help_text=_("An action can consist of multiple different action types. All the selected action types are expected to be performed according to the amount and unit below on this form."), + choices=[], + widget=CompensationActionTreeCheckboxSelectMultiple(), ) action_type_details = forms.ModelMultipleChoiceField( label=_("Action Type detail"), @@ -482,6 +474,16 @@ class NewActionModalForm(BaseModalForm): super().__init__(*args, **kwargs) self.form_title = _("New action") self.form_caption = _("Insert data for the new action") + choices =KonovaCode.objects.filter( + code_lists__in=[CODELIST_COMPENSATION_ACTION_ID], + is_archived=False, + is_leaf=True, + ).values_list("id", flat=True) + choices = [ + (choice, choice) + for choice in choices + ] + self.fields["action_type"].choices = choices def save(self): action = self.instance.add_action(self) @@ -496,7 +498,7 @@ class EditCompensationActionModalForm(NewActionModalForm): self.action = kwargs.pop("action", None) super().__init__(*args, **kwargs) form_data = { - "action_type": self.action.action_type, + "action_type": list(self.action.action_type.values_list("id", flat=True)), "action_type_details": self.action.action_type_details.all(), "amount": self.action.amount, "unit": self.action.unit, @@ -506,7 +508,7 @@ class EditCompensationActionModalForm(NewActionModalForm): def save(self): action = self.action - action.action_type = self.cleaned_data.get("action_type", None) + action.action_type.set(self.cleaned_data.get("action_type", [])) action.action_type_details.set(self.cleaned_data.get("action_type_details", [])) action.amount = self.cleaned_data.get("amount", None) action.unit = self.cleaned_data.get("unit", None) diff --git a/compensation/managers.py b/compensation/managers.py index c97cd518..b496eb1e 100644 --- a/compensation/managers.py +++ b/compensation/managers.py @@ -8,17 +8,6 @@ Created on: 14.10.21 from django.db import models -class CompensationActionManager(models.Manager): - """ Holds default db fetch setting for this model type - - """ - def get_queryset(self): - return super().get_queryset().select_related( - "action_type", - "action_type__parent" - ) - - class CompensationStateManager(models.Manager): """ Holds default db fetch setting for this model type diff --git a/compensation/migrations/0004_auto_20220210_1402.py b/compensation/migrations/0004_auto_20220210_1402.py new file mode 100644 index 00000000..7cc8126c --- /dev/null +++ b/compensation/migrations/0004_auto_20220210_1402.py @@ -0,0 +1,42 @@ +# Generated by Django 3.1.3 on 2022-02-10 13:02 + +from django.db import migrations, models + + +def migrate_actions(apps, schema_editor): + CompensationAction = apps.get_model('compensation', 'CompensationAction') + actions = CompensationAction.objects.all() + + for action in actions: + action_type = action.action_type or [] + action.action_type_tmp.set([action_type]) + action.save() + + if not action.action_type_tmp.count() > 0: + raise ValueError("Migration of actions did not work! Stoped before data loss!") + + +class Migration(migrations.Migration): + + dependencies = [ + ('codelist', '0001_initial'), + ('compensation', '0003_auto_20220202_0846'), + ] + + operations = [ + migrations.AddField( + model_name='compensationaction', + name='action_type_tmp', + field=models.ManyToManyField(blank=True, limit_choices_to={'code_lists__in': [1026], 'is_archived': False, 'is_selectable': True}, related_name='_compensationaction_action_type_+', to='codelist.KonovaCode'), + ), + migrations.RunPython(migrate_actions), + migrations.RemoveField( + model_name='compensationaction', + name='action_type', + ), + migrations.RenameField( + model_name='compensationaction', + old_name='action_type_tmp', + new_name='action_type', + ) + ] diff --git a/compensation/models/action.py b/compensation/models/action.py index a5579159..e54f53d3 100644 --- a/compensation/models/action.py +++ b/compensation/models/action.py @@ -10,9 +10,7 @@ from django.utils.translation import gettext_lazy as _ from codelist.models import KonovaCode from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_DETAIL_ID -from compensation.managers import CompensationActionManager from konova.models import BaseResource -from konova.utils.message_templates import COMPENSATION_ACTION_REMOVED class UnitChoices(models.TextChoices): @@ -31,10 +29,8 @@ class CompensationAction(BaseResource): """ Compensations include actions like planting trees, refreshing rivers and so on. """ - action_type = models.ForeignKey( + action_type = models.ManyToManyField( KonovaCode, - on_delete=models.SET_NULL, - null=True, blank=True, limit_choices_to={ "code_lists__in": [CODELIST_COMPENSATION_ACTION_ID], @@ -57,10 +53,8 @@ class CompensationAction(BaseResource): unit = models.CharField(max_length=100, null=True, blank=True, choices=UnitChoices.choices) comment = models.TextField(blank=True, null=True, help_text="Additional comment") - objects = CompensationActionManager() - def __str__(self): - return f"{self.action_type} | {self.amount} {self.unit}" + return f"{self.action_type.all()} | {self.amount} {self.unit}" @property def unit_humanize(self): diff --git a/compensation/models/compensation.py b/compensation/models/compensation.py index 4dd2b4c2..7a10aa0b 100644 --- a/compensation/models/compensation.py +++ b/compensation/models/compensation.py @@ -104,12 +104,12 @@ class AbstractCompensation(BaseObject, GeoReferencedMixin): with transaction.atomic(): user_action = UserActionLogEntry.get_created_action(user) comp_action = CompensationAction.objects.create( - action_type=form_data["action_type"], amount=form_data["amount"], unit=form_data["unit"], comment=form_data["comment"], created=user_action, ) + comp_action.action_type.set(form_data.get("action_type", [])) comp_action_details = form_data["action_type_details"] comp_action.action_type_details.set(comp_action_details) self.actions.add(comp_action) diff --git a/compensation/templates/compensation/detail/compensation/includes/actions.html b/compensation/templates/compensation/detail/compensation/includes/actions.html index 33037ecf..87f49141 100644 --- a/compensation/templates/compensation/detail/compensation/includes/actions.html +++ b/compensation/templates/compensation/detail/compensation/includes/actions.html @@ -47,13 +47,15 @@ {% for action in actions %} - {{ action.action_type }} - {% if action.action_type_details.count > 0 %} -
- {% for detail in action.action_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {% for type in action.action_type.all %} +
{{type.parent.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.long_name}}
+
+ {% endfor %} + {% for detail in action.action_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No action type details' %} + {% endfor %} {{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }} diff --git a/compensation/templates/compensation/detail/compensation/includes/states-after.html b/compensation/templates/compensation/detail/compensation/includes/states-after.html index 2c95ca1a..7faa0f1e 100644 --- a/compensation/templates/compensation/detail/compensation/includes/states-after.html +++ b/compensation/templates/compensation/detail/compensation/includes/states-after.html @@ -48,13 +48,13 @@ {% for state in after_states %} - {{ state.biotope_type }} - {% if state.biotope_type_details.count > 0 %} -
- {% for detail in state.biotope_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}}) +
+ {% for detail in state.biotope_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No biotope type details' %} + {% endfor %} {{ state.surface|floatformat:2 }} m² diff --git a/compensation/templates/compensation/detail/compensation/includes/states-before.html b/compensation/templates/compensation/detail/compensation/includes/states-before.html index d2ba3697..23faed43 100644 --- a/compensation/templates/compensation/detail/compensation/includes/states-before.html +++ b/compensation/templates/compensation/detail/compensation/includes/states-before.html @@ -48,13 +48,13 @@ {% for state in before_states %} - {{ state.biotope_type }} - {% if state.biotope_type_details.count > 0 %} -
- {% for detail in state.biotope_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}}) +
+ {% for detail in state.biotope_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No biotope type details' %} + {% endfor %} {{ state.surface|floatformat:2 }} m² diff --git a/compensation/templates/compensation/detail/compensation/view.html b/compensation/templates/compensation/detail/compensation/view.html index 3f843c0a..c5ff41d6 100644 --- a/compensation/templates/compensation/detail/compensation/view.html +++ b/compensation/templates/compensation/detail/compensation/view.html @@ -2,6 +2,7 @@ {% load i18n l10n static fontawesome_5 humanize ksp_filters %} {% block head %} + {% comment %} dal documentation (django-autocomplete-light) states using form.media for adding needed scripts. This does not work properly with modal forms, as the scripts are not loaded properly inside the modal. diff --git a/compensation/templates/compensation/detail/eco_account/includes/actions.html b/compensation/templates/compensation/detail/eco_account/includes/actions.html index add698e0..8ae7c8fd 100644 --- a/compensation/templates/compensation/detail/eco_account/includes/actions.html +++ b/compensation/templates/compensation/detail/eco_account/includes/actions.html @@ -46,13 +46,15 @@ {% for action in actions %} - {{ action.action_type }} - {% if action.action_type_details.count > 0 %} -
- {% for detail in action.action_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {% for type in action.action_type.all %} +
{{type.parent.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.long_name}}
+
+ {% endfor %} + {% for detail in action.action_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No action type details' %} + {% endfor %} {{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }} diff --git a/compensation/templates/compensation/detail/eco_account/includes/states-after.html b/compensation/templates/compensation/detail/eco_account/includes/states-after.html index bead6f2b..4fce2f0f 100644 --- a/compensation/templates/compensation/detail/eco_account/includes/states-after.html +++ b/compensation/templates/compensation/detail/eco_account/includes/states-after.html @@ -48,13 +48,13 @@ {% for state in after_states %} - {{ state.biotope_type }} - {% if state.biotope_type_details.count > 0 %} -
- {% for detail in state.biotope_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}}) +
+ {% for detail in state.biotope_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No biotope type details' %} + {% endfor %} {{ state.surface|floatformat:2 }} m² diff --git a/compensation/templates/compensation/detail/eco_account/includes/states-before.html b/compensation/templates/compensation/detail/eco_account/includes/states-before.html index c19b4049..1c6311cb 100644 --- a/compensation/templates/compensation/detail/eco_account/includes/states-before.html +++ b/compensation/templates/compensation/detail/eco_account/includes/states-before.html @@ -48,13 +48,13 @@ {% for state in before_states %} - {{ state.biotope_type }} - {% if state.biotope_type_details.count > 0 %} -
- {% for detail in state.biotope_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}}) +
+ {% for detail in state.biotope_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No biotope type details' %} + {% endfor %} {{ state.surface|floatformat:2 }} m² diff --git a/compensation/templates/compensation/detail/eco_account/view.html b/compensation/templates/compensation/detail/eco_account/view.html index f276f931..288b971d 100644 --- a/compensation/templates/compensation/detail/eco_account/view.html +++ b/compensation/templates/compensation/detail/eco_account/view.html @@ -2,6 +2,7 @@ {% load i18n l10n static fontawesome_5 humanize %} {% block head %} + {% comment %} dal documentation (django-autocomplete-light) states using form.media for adding needed scripts. This does not work properly with modal forms, as the scripts are not loaded properly inside the modal. diff --git a/ema/templates/ema/detail/includes/actions.html b/ema/templates/ema/detail/includes/actions.html index 02772b36..0c352c11 100644 --- a/ema/templates/ema/detail/includes/actions.html +++ b/ema/templates/ema/detail/includes/actions.html @@ -44,13 +44,15 @@ {% for action in obj.actions.all %} - {{ action.action_type }} - {% if action.action_type_details.count > 0 %} -
- {% for detail in action.action_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {% for type in action.action_type.all %} +
{{type.parent.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.long_name}}
+
+ {% endfor %} + {% for detail in action.action_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No action type details' %} + {% endfor %} {{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }} diff --git a/ema/templates/ema/detail/includes/states-after.html b/ema/templates/ema/detail/includes/states-after.html index e09f4ba5..56e87be1 100644 --- a/ema/templates/ema/detail/includes/states-after.html +++ b/ema/templates/ema/detail/includes/states-after.html @@ -46,13 +46,13 @@ {% for state in after_states %} - {{ state.biotope_type }} - {% if state.biotope_type_details.count > 0 %} -
- {% for detail in state.biotope_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}}) +
+ {% for detail in state.biotope_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No biotope type details' %} + {% endfor %} {{ state.surface|floatformat:2 }} m² diff --git a/ema/templates/ema/detail/includes/states-before.html b/ema/templates/ema/detail/includes/states-before.html index 1369829b..2fd7c359 100644 --- a/ema/templates/ema/detail/includes/states-before.html +++ b/ema/templates/ema/detail/includes/states-before.html @@ -46,13 +46,13 @@ {% for state in before_states %} - {{ state.biotope_type }} - {% if state.biotope_type_details.count > 0 %} -
- {% for detail in state.biotope_type_details.all %} - {{detail.long_name}} - {% endfor %} - {% endif %} + {{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}}) +
+ {% for detail in state.biotope_type_details.all %} + {{detail.long_name}} + {% empty %} + {% trans 'No biotope type details' %} + {% endfor %} {{ state.surface|floatformat:2 }} m² diff --git a/intervention/inputs.py b/intervention/inputs.py index 2e84edc5..34fe0434 100644 --- a/intervention/inputs.py +++ b/intervention/inputs.py @@ -1,4 +1,6 @@ from django import forms +from codelist.models import KonovaCode +from codelist.settings import CODELIST_COMPENSATION_ACTION_ID class DummyFilterInput(forms.HiddenInput): @@ -30,3 +32,51 @@ class GenerateInput(forms.TextInput): """ template_name = "konova/widgets/generate-content-input.html" + + +class TreeCheckboxSelectMultiple(forms.CheckboxSelectMultiple): + """ Provides multiple selection of parent-child data + + """ + template_name = "konova/widgets/checkbox-tree-select.html" + + class meta: + abstract = True + + +class KonovaCodeTreeCheckboxSelectMultiple(TreeCheckboxSelectMultiple): + """ Provides multiple selection of KonovaCodes + + """ + filter = None + + def __init__(self, *args, **kwargs): + self.code_list = kwargs.pop("code_list", None) + self.filter = kwargs.pop("filter", {}) + super().__init__(*args, **kwargs) + + def get_context(self, name, value, attrs): + context = super().get_context(name, value, attrs) + codes = KonovaCode.objects.filter( + **self.filter, + ) + codes = [ + parent_code.add_children() + for parent_code in codes + ] + context["codes"] = codes + return context + + +class CompensationActionTreeCheckboxSelectMultiple(KonovaCodeTreeCheckboxSelectMultiple): + """ Provides multiple selection of CompensationActions + + """ + filter = None + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.filter = { + "code_lists__in": [CODELIST_COMPENSATION_ACTION_ID], + "parent": None, + } \ No newline at end of file diff --git a/konova/autocompletes.py b/konova/autocompletes.py index 3a79ab68..432df614 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 @@ -181,7 +188,7 @@ class CompensationActionDetailCodeAutocomplete(KonovaCodeAutocomplete): def order_by(self, qs): return qs.order_by( - "parent__long_name" + "long_name" ) @@ -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): """ @@ -239,7 +281,7 @@ class BiotopeExtraCodeAutocomplete(KonovaCodeAutocomplete): qs (QuerySet): The ordered queryset """ return qs.order_by( - "parent__long_name", + "long_name", ) def get_result_label(self, result): @@ -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 709d3eb3..7e7f3fd1 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/templates/konova/widgets/checkbox-tree-select-content.html b/konova/templates/konova/widgets/checkbox-tree-select-content.html new file mode 100644 index 00000000..9bf57253 --- /dev/null +++ b/konova/templates/konova/widgets/checkbox-tree-select-content.html @@ -0,0 +1,21 @@ +{% load l10n fontawesome_5 %} + +{% for code in codes %} +
+ + {% if not code.is_leaf %} +
+ {% with code.children as codes %} + {% include 'konova/widgets/checkbox-tree-select-content.html' %} + {% endwith %} +
+ {% endif %} +
+{% endfor %} \ No newline at end of file diff --git a/konova/templates/konova/widgets/checkbox-tree-select.html b/konova/templates/konova/widgets/checkbox-tree-select.html new file mode 100644 index 00000000..c2b107cc --- /dev/null +++ b/konova/templates/konova/widgets/checkbox-tree-select.html @@ -0,0 +1,68 @@ +{% load i18n %} + +
+ +
+ +
+ {% include 'konova/widgets/checkbox-tree-select-content.html' %} +
+ + \ No newline at end of file diff --git a/konova/utils/message_templates.py b/konova/utils/message_templates.py index c7a2be00..5809b3b6 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/konova/views.py b/konova/views.py index 2a4c8ad5..f3c53f01 100644 --- a/konova/views.py +++ b/konova/views.py @@ -9,9 +9,12 @@ from django.contrib.auth import logout from django.contrib.auth.decorators import login_required from django.http import HttpRequest, FileResponse from django.shortcuts import redirect, render, get_object_or_404 +from django.template.loader import render_to_string from django.utils import timezone from django.utils.translation import gettext_lazy as _ +from codelist.models import KonovaCode +from codelist.settings import CODELIST_COMPENSATION_ACTION_ID from compensation.models import Compensation, EcoAccount from intervention.models import Intervention from konova.contexts import BaseContext diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 99058358..022e9e1a 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 cd7cd88f..16b2cd4f 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -3,9 +3,9 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#: compensation/filters.py:122 compensation/forms/modalForms.py:35 -#: compensation/forms/modalForms.py:46 compensation/forms/modalForms.py:62 -#: compensation/forms/modalForms.py:355 compensation/forms/modalForms.py:471 +#: compensation/filters.py:122 compensation/forms/modalForms.py:36 +#: compensation/forms/modalForms.py:47 compensation/forms/modalForms.py:63 +#: compensation/forms/modalForms.py:356 compensation/forms/modalForms.py:463 #: intervention/forms/forms.py:54 intervention/forms/forms.py:156 #: intervention/forms/forms.py:168 intervention/forms/modalForms.py:127 #: intervention/forms/modalForms.py:140 intervention/forms/modalForms.py:153 @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-10 13:31+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" @@ -45,7 +45,7 @@ msgid "To" msgstr "Bis" #: analysis/forms.py:47 compensation/forms/forms.py:77 -#: compensation/templates/compensation/detail/eco_account/view.html:58 +#: compensation/templates/compensation/detail/eco_account/view.html:59 #: compensation/templates/compensation/report/eco_account/report.html:16 #: compensation/utils/quality.py:100 ema/templates/ema/detail/view.html:49 #: ema/templates/ema/report/report.html:16 ema/utils/quality.py:26 @@ -95,7 +95,7 @@ msgstr "" #: analysis/templates/analysis/reports/includes/eco_account/amount.html:3 #: analysis/templates/analysis/reports/includes/intervention/amount.html:3 #: analysis/templates/analysis/reports/includes/old_data/amount.html:3 -#: compensation/forms/modalForms.py:455 +#: compensation/forms/modalForms.py:447 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:34 #: intervention/templates/intervention/detail/includes/deductions.html:31 msgid "Amount" @@ -137,7 +137,7 @@ msgstr "Zuständigkeitsbereich" #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:8 #: analysis/templates/analysis/reports/includes/intervention/laws.html:17 #: compensation/tables.py:40 -#: compensation/templates/compensation/detail/compensation/view.html:63 +#: compensation/templates/compensation/detail/compensation/view.html:64 #: intervention/tables.py:39 #: intervention/templates/intervention/detail/view.html:68 #: user/models/user_action.py:20 @@ -153,9 +153,9 @@ msgstr "Geprüft" #: analysis/templates/analysis/reports/includes/intervention/laws.html:20 #: analysis/templates/analysis/reports/includes/old_data/amount.html:18 #: compensation/tables.py:46 compensation/tables.py:222 -#: compensation/templates/compensation/detail/compensation/view.html:77 +#: compensation/templates/compensation/detail/compensation/view.html:78 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:31 -#: compensation/templates/compensation/detail/eco_account/view.html:44 +#: compensation/templates/compensation/detail/eco_account/view.html:45 #: ema/tables.py:44 ema/templates/ema/detail/view.html:35 #: intervention/tables.py:45 #: intervention/templates/intervention/detail/view.html:82 @@ -213,7 +213,7 @@ msgstr "Abbuchungen" #: analysis/templates/analysis/reports/includes/eco_account/deductions.html:9 #: analysis/templates/analysis/reports/includes/eco_account/deductions.html:11 -#: compensation/forms/modalForms.py:193 +#: compensation/forms/modalForms.py:194 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:36 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:36 #: compensation/templates/compensation/detail/eco_account/includes/states-after.html:36 @@ -239,14 +239,14 @@ msgstr "Kompensationsart" #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:15 #: analysis/templates/analysis/reports/includes/old_data/amount.html:29 -#: compensation/templates/compensation/detail/compensation/view.html:19 +#: compensation/templates/compensation/detail/compensation/view.html:20 #: konova/templates/konova/includes/quickstart/compensations.html:4 #: templates/navbars/navbar.html:28 msgid "Compensation" msgstr "Kompensation" #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:21 -#: compensation/forms/modalForms.py:75 +#: compensation/forms/modalForms.py:76 msgid "Payment" msgstr "Zahlung" @@ -293,7 +293,7 @@ msgstr "Eingriff" #: analysis/templates/analysis/reports/includes/old_data/amount.html:34 #: compensation/tables.py:266 -#: compensation/templates/compensation/detail/eco_account/view.html:19 +#: compensation/templates/compensation/detail/eco_account/view.html:20 #: intervention/forms/modalForms.py:322 intervention/forms/modalForms.py:329 #: konova/templates/konova/includes/quickstart/ecoaccounts.html:4 #: templates/navbars/navbar.html:34 @@ -327,9 +327,9 @@ msgstr "Automatisch generiert" #: compensation/forms/forms.py:44 compensation/tables.py:30 #: compensation/tables.py:202 #: compensation/templates/compensation/detail/compensation/includes/documents.html:28 -#: compensation/templates/compensation/detail/compensation/view.html:31 +#: compensation/templates/compensation/detail/compensation/view.html:32 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:28 -#: compensation/templates/compensation/detail/eco_account/view.html:31 +#: compensation/templates/compensation/detail/eco_account/view.html:32 #: compensation/templates/compensation/report/compensation/report.html:12 #: compensation/templates/compensation/report/eco_account/report.html:12 #: ema/tables.py:34 ema/templates/ema/detail/includes/documents.html:28 @@ -352,8 +352,8 @@ msgstr "Aussagekräftiger Titel" msgid "Compensation XY; Location ABC" msgstr "Kompensation XY; Flur ABC" -#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:61 -#: compensation/forms/modalForms.py:354 compensation/forms/modalForms.py:470 +#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:62 +#: compensation/forms/modalForms.py:355 compensation/forms/modalForms.py:462 #: compensation/templates/compensation/detail/compensation/includes/actions.html:35 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34 #: compensation/templates/compensation/detail/compensation/includes/documents.html:34 @@ -371,13 +371,13 @@ msgstr "Kompensation XY; Flur ABC" msgid "Comment" msgstr "Kommentar" -#: compensation/forms/forms.py:59 compensation/forms/modalForms.py:472 +#: compensation/forms/forms.py:59 compensation/forms/modalForms.py:464 #: intervention/forms/forms.py:182 msgid "Additional comment" msgstr "Zusätzlicher Kommentar" #: compensation/forms/forms.py:93 -#: compensation/templates/compensation/detail/eco_account/view.html:62 +#: compensation/templates/compensation/detail/eco_account/view.html:63 #: compensation/templates/compensation/report/eco_account/report.html:20 #: compensation/utils/quality.py:102 ema/templates/ema/detail/view.html:53 #: ema/templates/ema/report/report.html:20 ema/utils/quality.py:28 @@ -422,7 +422,7 @@ msgid "" msgstr "Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?" #: compensation/forms/forms.py:156 -#: compensation/templates/compensation/detail/compensation/view.html:35 +#: compensation/templates/compensation/detail/compensation/view.html:36 #: compensation/templates/compensation/report/compensation/report.html:16 msgid "compensates intervention" msgstr "kompensiert Eingriff" @@ -448,7 +448,7 @@ msgid "The amount that can be used for deductions" msgstr "Die für Abbuchungen zur Verfügung stehende Menge" #: compensation/forms/forms.py:328 -#: compensation/templates/compensation/detail/eco_account/view.html:66 +#: compensation/templates/compensation/detail/eco_account/view.html:67 #: compensation/utils/quality.py:72 msgid "Agreement date" msgstr "Vereinbarungsdatum" @@ -469,73 +469,73 @@ msgstr "Ökokonto XY; Flur ABC" msgid "Edit Eco-Account" msgstr "Ökokonto bearbeiten" -#: compensation/forms/modalForms.py:36 +#: compensation/forms/modalForms.py:37 msgid "in Euro" msgstr "in Euro" -#: compensation/forms/modalForms.py:45 +#: compensation/forms/modalForms.py:46 #: intervention/templates/intervention/detail/includes/payments.html:31 msgid "Due on" msgstr "Fällig am" -#: compensation/forms/modalForms.py:48 +#: compensation/forms/modalForms.py:49 msgid "Due on which date" msgstr "Zahlung wird an diesem Datum erwartet" -#: compensation/forms/modalForms.py:63 compensation/forms/modalForms.py:356 +#: compensation/forms/modalForms.py:64 compensation/forms/modalForms.py:357 #: intervention/forms/modalForms.py:154 konova/forms.py:395 msgid "Additional comment, maximum {} letters" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" -#: compensation/forms/modalForms.py:76 +#: compensation/forms/modalForms.py:77 msgid "Add a payment for intervention '{}'" msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen" -#: compensation/forms/modalForms.py:96 +#: compensation/forms/modalForms.py:97 msgid "If there is no date you can enter, please explain why." msgstr "Falls Sie kein Datum angeben können, erklären Sie bitte weshalb." -#: compensation/forms/modalForms.py:157 compensation/forms/modalForms.py:169 +#: compensation/forms/modalForms.py:158 compensation/forms/modalForms.py:170 msgid "Biotope Type" msgstr "Biotoptyp" -#: compensation/forms/modalForms.py:160 +#: compensation/forms/modalForms.py:161 msgid "Select the biotope type" msgstr "Biotoptyp wählen" -#: compensation/forms/modalForms.py:174 compensation/forms/modalForms.py:186 +#: compensation/forms/modalForms.py:175 compensation/forms/modalForms.py:187 msgid "Biotope additional type" msgstr "Zusatzbezeichnung" -#: compensation/forms/modalForms.py:177 +#: compensation/forms/modalForms.py:178 msgid "Select an additional biotope type" msgstr "Zusatzbezeichnung wählen" -#: compensation/forms/modalForms.py:196 intervention/forms/modalForms.py:340 +#: compensation/forms/modalForms.py:197 intervention/forms/modalForms.py:340 msgid "in m²" msgstr "" -#: compensation/forms/modalForms.py:207 +#: compensation/forms/modalForms.py:208 msgid "New state" msgstr "Neuer Zustand" -#: compensation/forms/modalForms.py:208 +#: compensation/forms/modalForms.py:209 msgid "Insert data for the new state" msgstr "Geben Sie die Daten des neuen Zustandes ein" -#: compensation/forms/modalForms.py:215 konova/forms.py:193 +#: compensation/forms/modalForms.py:216 konova/forms.py:193 msgid "Object removed" msgstr "Objekt entfernt" -#: compensation/forms/modalForms.py:326 +#: compensation/forms/modalForms.py:327 msgid "Deadline Type" msgstr "Fristart" -#: compensation/forms/modalForms.py:329 +#: compensation/forms/modalForms.py:330 msgid "Select the deadline type" msgstr "Fristart wählen" -#: compensation/forms/modalForms.py:338 +#: compensation/forms/modalForms.py:339 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31 #: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31 #: ema/templates/ema/detail/includes/deadlines.html:31 @@ -543,101 +543,81 @@ msgstr "Fristart wählen" msgid "Date" msgstr "Datum" -#: compensation/forms/modalForms.py:341 +#: compensation/forms/modalForms.py:342 msgid "Select date" msgstr "Datum wählen" -#: compensation/forms/modalForms.py:368 +#: compensation/forms/modalForms.py:369 msgid "New deadline" msgstr "Neue Frist" -#: compensation/forms/modalForms.py:369 +#: compensation/forms/modalForms.py:370 msgid "Insert data for the new deadline" msgstr "Geben Sie die Daten der neuen Frist ein" -#: compensation/forms/modalForms.py:409 +#: compensation/forms/modalForms.py:410 msgid "Action Type" msgstr "Maßnahmentyp" -#: compensation/forms/modalForms.py:412 -msgid "Select the action type" -msgstr "Maßnahmentyp wählen" +#: compensation/forms/modalForms.py:413 +msgid "" +"An action can consist of multiple different action types. All the selected " +"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. " -#: compensation/forms/modalForms.py:421 -#: compensation/templates/compensation/detail/compensation/includes/actions.html:40 -#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:39 -#: compensation/templates/compensation/detail/compensation/includes/documents.html:39 -#: compensation/templates/compensation/detail/compensation/includes/states-after.html:41 -#: compensation/templates/compensation/detail/compensation/includes/states-before.html:41 -#: compensation/templates/compensation/detail/eco_account/includes/actions.html:39 -#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:38 -#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:41 -#: compensation/templates/compensation/detail/eco_account/includes/documents.html:38 -#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:41 -#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:41 -#: ema/templates/ema/detail/includes/actions.html:38 -#: ema/templates/ema/detail/includes/deadlines.html:38 -#: ema/templates/ema/detail/includes/documents.html:38 -#: ema/templates/ema/detail/includes/states-after.html:40 -#: ema/templates/ema/detail/includes/states-before.html:40 -#: intervention/templates/intervention/detail/includes/compensations.html:38 -#: intervention/templates/intervention/detail/includes/deductions.html:39 -#: intervention/templates/intervention/detail/includes/documents.html:39 -#: intervention/templates/intervention/detail/includes/payments.html:39 -#: intervention/templates/intervention/detail/includes/revocation.html:43 -#: templates/log.html:10 -msgid "Action" -msgstr "Aktionen" - -#: compensation/forms/modalForms.py:426 compensation/forms/modalForms.py:438 +#: compensation/forms/modalForms.py:418 compensation/forms/modalForms.py:430 msgid "Action Type detail" msgstr "Zusatzmerkmal" -#: compensation/forms/modalForms.py:429 +#: compensation/forms/modalForms.py:421 msgid "Select the action type detail" msgstr "Zusatzmerkmal wählen" -#: compensation/forms/modalForms.py:443 +#: compensation/forms/modalForms.py:435 msgid "Unit" msgstr "Einheit" -#: compensation/forms/modalForms.py:446 +#: compensation/forms/modalForms.py:438 msgid "Select the unit" msgstr "Einheit wählen" -#: compensation/forms/modalForms.py:458 +#: compensation/forms/modalForms.py:450 msgid "Insert the amount" msgstr "Menge eingeben" -#: compensation/forms/modalForms.py:483 +#: compensation/forms/modalForms.py:475 msgid "New action" msgstr "Neue Maßnahme" -#: compensation/forms/modalForms.py:484 +#: compensation/forms/modalForms.py:476 msgid "Insert data for the new action" msgstr "Geben Sie die Daten der neuen Maßnahme ein" -#: compensation/models/action.py:22 +#: compensation/models/action.py:20 msgid "cm" msgstr "" -#: compensation/models/action.py:23 +#: compensation/models/action.py:21 msgid "m" msgstr "" -#: compensation/models/action.py:24 +#: compensation/models/action.py:22 msgid "km" msgstr "" -#: compensation/models/action.py:25 +#: compensation/models/action.py:23 msgid "m²" msgstr "" -#: compensation/models/action.py:26 +#: compensation/models/action.py:24 msgid "ha" msgstr "" -#: compensation/models/action.py:27 +#: compensation/models/action.py:25 msgid "Pieces" msgstr "Stück" @@ -685,9 +665,9 @@ msgid "Checked on {} by {}" msgstr "Am {} von {} geprüft worden" #: compensation/tables.py:160 -#: compensation/templates/compensation/detail/compensation/view.html:80 +#: compensation/templates/compensation/detail/compensation/view.html:81 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:58 -#: compensation/templates/compensation/detail/eco_account/view.html:47 +#: compensation/templates/compensation/detail/eco_account/view.html:48 #: ema/tables.py:131 ema/templates/ema/detail/view.html:38 #: intervention/tables.py:157 #: intervention/templates/intervention/detail/view.html:85 @@ -710,7 +690,7 @@ msgid "Access not granted" msgstr "Nicht freigegeben - Datensatz nur lesbar" #: compensation/tables.py:212 -#: compensation/templates/compensation/detail/eco_account/view.html:35 +#: compensation/templates/compensation/detail/eco_account/view.html:36 #: konova/templates/konova/widgets/progressbar.html:3 msgid "Available" msgstr "Verfügbar" @@ -750,15 +730,46 @@ msgctxt "Compensation" msgid "Amount" msgstr "Menge" -#: compensation/templates/compensation/detail/compensation/includes/actions.html:66 -#: compensation/templates/compensation/detail/eco_account/includes/actions.html:65 -#: ema/templates/ema/detail/includes/actions.html:63 +#: compensation/templates/compensation/detail/compensation/includes/actions.html:40 +#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:39 +#: compensation/templates/compensation/detail/compensation/includes/documents.html:39 +#: compensation/templates/compensation/detail/compensation/includes/states-after.html:41 +#: compensation/templates/compensation/detail/compensation/includes/states-before.html:41 +#: compensation/templates/compensation/detail/eco_account/includes/actions.html:39 +#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:38 +#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:41 +#: compensation/templates/compensation/detail/eco_account/includes/documents.html:38 +#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:41 +#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:41 +#: ema/templates/ema/detail/includes/actions.html:38 +#: ema/templates/ema/detail/includes/deadlines.html:38 +#: ema/templates/ema/detail/includes/documents.html:38 +#: ema/templates/ema/detail/includes/states-after.html:40 +#: ema/templates/ema/detail/includes/states-before.html:40 +#: intervention/templates/intervention/detail/includes/compensations.html:38 +#: intervention/templates/intervention/detail/includes/deductions.html:39 +#: intervention/templates/intervention/detail/includes/documents.html:39 +#: intervention/templates/intervention/detail/includes/payments.html:39 +#: intervention/templates/intervention/detail/includes/revocation.html:43 +#: templates/log.html:10 +msgid "Action" +msgstr "Aktionen" + +#: compensation/templates/compensation/detail/compensation/includes/actions.html:57 +#: compensation/templates/compensation/detail/eco_account/includes/actions.html:56 +#: ema/templates/ema/detail/includes/actions.html:54 +msgid "No action type details" +msgstr "Keine Zusatzmerkmale" + +#: compensation/templates/compensation/detail/compensation/includes/actions.html:68 +#: compensation/templates/compensation/detail/eco_account/includes/actions.html:67 +#: ema/templates/ema/detail/includes/actions.html:65 msgid "Edit action" msgstr "Maßnahme bearbeiten" -#: compensation/templates/compensation/detail/compensation/includes/actions.html:69 -#: compensation/templates/compensation/detail/eco_account/includes/actions.html:68 -#: ema/templates/ema/detail/includes/actions.html:66 +#: compensation/templates/compensation/detail/compensation/includes/actions.html:71 +#: compensation/templates/compensation/detail/eco_account/includes/actions.html:70 +#: ema/templates/ema/detail/includes/actions.html:68 msgid "Remove action" msgstr "Maßnahme entfernen" @@ -887,6 +898,15 @@ msgstr "Fehlende Flächenmengen laut Ausgangszustand: " msgid "Biotope type" msgstr "Biotoptyp" +#: compensation/templates/compensation/detail/compensation/includes/states-after.html:56 +#: compensation/templates/compensation/detail/compensation/includes/states-before.html:56 +#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:56 +#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:56 +#: ema/templates/ema/detail/includes/states-after.html:54 +#: ema/templates/ema/detail/includes/states-before.html:54 +msgid "No biotope type details" +msgstr "Keine Zusatzbezeichnungen" + #: compensation/templates/compensation/detail/compensation/includes/states-after.html:62 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:62 #: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62 @@ -924,50 +944,50 @@ msgstr "Neuen Ausgangszustand hinzufügen" msgid "Missing surfaces according to states after: " msgstr "Fehlende Flächenmengen laut Zielzustand: " -#: compensation/templates/compensation/detail/compensation/view.html:43 +#: compensation/templates/compensation/detail/compensation/view.html:44 msgid "Is CEF compensation" msgstr "Ist CEF Maßnahme" -#: compensation/templates/compensation/detail/compensation/view.html:46 -#: compensation/templates/compensation/detail/compensation/view.html:56 +#: compensation/templates/compensation/detail/compensation/view.html:47 +#: compensation/templates/compensation/detail/compensation/view.html:57 #: venv/lib/python3.7/site-packages/django/forms/widgets.py:710 msgid "Yes" msgstr "Ja" -#: compensation/templates/compensation/detail/compensation/view.html:48 -#: compensation/templates/compensation/detail/compensation/view.html:58 +#: compensation/templates/compensation/detail/compensation/view.html:49 +#: compensation/templates/compensation/detail/compensation/view.html:59 #: venv/lib/python3.7/site-packages/django/forms/widgets.py:711 msgid "No" msgstr "Nein" -#: compensation/templates/compensation/detail/compensation/view.html:53 +#: compensation/templates/compensation/detail/compensation/view.html:54 msgid "Is Coherence keeping compensation" msgstr "Ist Kohärenzsicherungsmaßnahme" -#: compensation/templates/compensation/detail/compensation/view.html:70 +#: compensation/templates/compensation/detail/compensation/view.html:71 #: intervention/templates/intervention/detail/view.html:75 msgid "Checked on " msgstr "Geprüft am " -#: compensation/templates/compensation/detail/compensation/view.html:70 -#: compensation/templates/compensation/detail/compensation/view.html:84 +#: compensation/templates/compensation/detail/compensation/view.html:71 +#: compensation/templates/compensation/detail/compensation/view.html:85 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:56 -#: compensation/templates/compensation/detail/eco_account/view.html:51 +#: compensation/templates/compensation/detail/eco_account/view.html:52 #: ema/templates/ema/detail/view.html:42 #: intervention/templates/intervention/detail/view.html:75 #: intervention/templates/intervention/detail/view.html:89 msgid "by" msgstr "von" -#: compensation/templates/compensation/detail/compensation/view.html:84 -#: compensation/templates/compensation/detail/eco_account/view.html:51 +#: compensation/templates/compensation/detail/compensation/view.html:85 +#: compensation/templates/compensation/detail/eco_account/view.html:52 #: ema/templates/ema/detail/view.html:42 #: intervention/templates/intervention/detail/view.html:89 msgid "Recorded on " msgstr "Verzeichnet am" -#: compensation/templates/compensation/detail/compensation/view.html:91 -#: compensation/templates/compensation/detail/eco_account/view.html:74 +#: compensation/templates/compensation/detail/compensation/view.html:92 +#: compensation/templates/compensation/detail/eco_account/view.html:75 #: compensation/templates/compensation/report/compensation/report.html:24 #: compensation/templates/compensation/report/eco_account/report.html:41 #: ema/templates/ema/detail/view.html:61 @@ -977,8 +997,8 @@ msgstr "Verzeichnet am" msgid "Last modified" msgstr "Zuletzt bearbeitet" -#: compensation/templates/compensation/detail/compensation/view.html:99 -#: compensation/templates/compensation/detail/eco_account/view.html:82 +#: compensation/templates/compensation/detail/compensation/view.html:100 +#: compensation/templates/compensation/detail/eco_account/view.html:83 #: ema/templates/ema/detail/view.html:76 intervention/forms/modalForms.py:56 #: intervention/templates/intervention/detail/view.html:116 msgid "Shared with" @@ -1037,14 +1057,14 @@ msgstr "Abbuchung bearbeiten" msgid "Remove Deduction" msgstr "Abbuchung entfernen" -#: compensation/templates/compensation/detail/eco_account/view.html:34 +#: compensation/templates/compensation/detail/eco_account/view.html:35 msgid "No surface deductable" msgstr "Keine Flächenmenge für Abbuchungen eingegeben. Bitte bearbeiten." -#: compensation/templates/compensation/detail/eco_account/view.html:57 -#: compensation/templates/compensation/detail/eco_account/view.html:61 -#: compensation/templates/compensation/detail/eco_account/view.html:65 -#: compensation/templates/compensation/detail/eco_account/view.html:69 +#: compensation/templates/compensation/detail/eco_account/view.html:58 +#: compensation/templates/compensation/detail/eco_account/view.html:62 +#: compensation/templates/compensation/detail/eco_account/view.html:66 +#: compensation/templates/compensation/detail/eco_account/view.html:70 #: ema/templates/ema/detail/view.html:48 ema/templates/ema/detail/view.html:52 #: ema/templates/ema/detail/view.html:56 #: intervention/templates/intervention/detail/view.html:30 @@ -1060,7 +1080,7 @@ msgstr "Keine Flächenmenge für Abbuchungen eingegeben. Bitte bearbeiten." msgid "Missing" msgstr "fehlt" -#: compensation/templates/compensation/detail/eco_account/view.html:70 +#: compensation/templates/compensation/detail/eco_account/view.html:71 #: compensation/templates/compensation/report/eco_account/report.html:24 #: ema/templates/ema/detail/view.html:57 #: ema/templates/ema/report/report.html:24 @@ -1746,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" @@ -1786,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." @@ -1976,7 +2005,7 @@ msgstr "{} wurde erfolgreich vom Nutzer {} geprüft! {}" msgid "missing" msgstr "fehlt" -#: konova/views.py:96 templates/navbars/navbar.html:16 +#: konova/views.py:99 templates/navbars/navbar.html:16 msgid "Home" msgstr "Home" @@ -2251,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" @@ -3984,6 +4009,9 @@ msgstr "" msgid "Unable to connect to qpid with SASL mechanism %s" msgstr "" +#~ msgid "Select the action type" +#~ msgstr "Maßnahmentyp wählen" + #~ msgid "No revocation" #~ msgstr "Kein Widerspruch" @@ -3993,9 +4021,6 @@ msgstr "" #~ msgid "General data edited" #~ msgstr "Allgemeine Daten bearbeitet" -#~ msgid "Action type details" -#~ msgstr "Zusatzmerkmale" - #~ msgid "On registered data edited" #~ msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"