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 code.is_leaf%}
+
+ {% else %}
+ {% fa5_icon 'angle-right' %}
+ {% endif %}
+ {{code.long_name}}
+
+ {% 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"