From aade8ffb324652ba619242203f91259207b81f4a Mon Sep 17 00:00:00 2001
From: mpeltriaux <michel.peltriaux@sgdnord.rlp.de>
Date: Mon, 31 Jan 2022 10:52:35 +0100
Subject: [PATCH 1/5] # 88 Additional biotope codes

* adds codelist 975 to project
* adds new form field for adding extra biotope information
---
 .../management/commands/update_codelist.py    |  3 +-
 codelist/settings.py                          |  1 +
 compensation/forms/modalForms.py              | 19 ++++++++++-
 konova/autocompletes.py                       | 33 ++++++++++++++++++-
 konova/static/css/konova.css                  |  3 ++
 konova/urls.py                                |  3 +-
 6 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/codelist/management/commands/update_codelist.py b/codelist/management/commands/update_codelist.py
index 5bb55b6a..aa6e45a9 100644
--- a/codelist/management/commands/update_codelist.py
+++ b/codelist/management/commands/update_codelist.py
@@ -13,7 +13,7 @@ from codelist.models import KonovaCode, KonovaCodeList
 from codelist.settings import CODELIST_INTERVENTION_HANDLER_ID, CODELIST_CONSERVATION_OFFICE_ID, \
     CODELIST_REGISTRATION_OFFICE_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, CODELIST_COMPENSATION_HANDLER_ID, \
     CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_CLASS_ID, CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID, \
-    CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID
+    CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID
 from konova.management.commands.setup import BaseKonovaCommand
 from konova.settings import PROXIES
 
@@ -33,6 +33,7 @@ class Command(BaseKonovaCommand):
                 CODELIST_CONSERVATION_OFFICE_ID,
                 CODELIST_REGISTRATION_OFFICE_ID,
                 CODELIST_BIOTOPES_ID,
+                CODELIST_BIOTOPES_EXTRA_CODES_ID,
                 CODELIST_LAW_ID,
                 CODELIST_COMPENSATION_HANDLER_ID,
                 CODELIST_COMPENSATION_ACTION_ID,
diff --git a/codelist/settings.py b/codelist/settings.py
index 15c523ac..012dc9b4 100644
--- a/codelist/settings.py
+++ b/codelist/settings.py
@@ -14,6 +14,7 @@ CODELIST_INTERVENTION_HANDLER_ID = 903  # CLMassnahmeträger
 CODELIST_CONSERVATION_OFFICE_ID = 907  # CLNaturschutzbehörden
 CODELIST_REGISTRATION_OFFICE_ID = 1053  # CLZulassungsbehörden
 CODELIST_BIOTOPES_ID = 974  # CL_EIV_Biotoptypen
+CODELIST_BIOTOPES_EXTRA_CODES_ID = 975  # CLZusatzbezeichnung
 CODELIST_LAW_ID = 1048  # CLVerfahrensrecht
 CODELIST_PROCESS_TYPE_ID = 44382  # CLVerfahrenstyp
 
diff --git a/compensation/forms/modalForms.py b/compensation/forms/modalForms.py
index 885db951..53fdf3c2 100644
--- a/compensation/forms/modalForms.py
+++ b/compensation/forms/modalForms.py
@@ -14,7 +14,7 @@ from django.shortcuts import render
 from django.utils.translation import pgettext_lazy as _con, gettext_lazy as _
 
 from codelist.models import KonovaCode
-from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION_ID
+from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID
 from compensation.models import CompensationDocument, EcoAccountDocument
 from konova.contexts import BaseContext
 from konova.forms import BaseModalForm, NewDocumentForm
@@ -127,6 +127,23 @@ class NewStateModalForm(BaseModalForm):
             }
         ),
     )
+    biotope_extra = forms.ModelChoiceField(
+        label=_("Biotope additional type"),
+        label_suffix="",
+        required=False,
+        help_text=_("Select an additional biotope type"),
+        queryset=KonovaCode.objects.filter(
+            is_archived=False,
+            is_leaf=True,
+            code_lists__in=[CODELIST_BIOTOPES_EXTRA_CODES_ID],
+        ),
+        widget=autocomplete.ModelSelect2Multiple(
+            url="codes-biotope-extra-type-autocomplete",
+            attrs={
+                "data-placeholder": _("Biotope additional type"),
+            }
+        ),
+    )
     surface = forms.DecimalField(
         min_value=0.00,
         decimal_places=2,
diff --git a/konova/autocompletes.py b/konova/autocompletes.py
index bee8dad8..cbe42b0c 100644
--- a/konova/autocompletes.py
+++ b/konova/autocompletes.py
@@ -11,7 +11,8 @@ from django.db.models import Q
 
 from codelist.models import KonovaCode
 from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, \
-    CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_PROCESS_TYPE_ID
+    CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_PROCESS_TYPE_ID, \
+    CODELIST_BIOTOPES_EXTRA_CODES_ID
 from compensation.models import EcoAccount
 from intervention.models import Intervention
 
@@ -192,6 +193,36 @@ class BiotopeCodeAutocomplete(KonovaCodeAutocomplete):
         return f"{result.long_name} ({result.short_name})"
 
 
+class BiotopeExtraCodeAutocomplete(KonovaCodeAutocomplete):
+    """
+    Due to limitations of the django dal package, we need to subclass for each code list
+    """
+    group_by_related = "parent"
+    related_field_name = "long_name"
+
+    def __init__(self, *args, **kwargs):
+        self.c = CODELIST_BIOTOPES_EXTRA_CODES_ID
+        super().__init__(*args, **kwargs)
+
+    def order_by(self, qs):
+        """ Orders by a predefined value
+
+        Wrapped in a function to provide inheritance-based different orders
+
+        Args:
+            qs (QuerySet): The queryset to be ordered
+
+        Returns:
+            qs (QuerySet): The ordered queryset
+        """
+        return qs.order_by(
+            "parent__long_name",
+        )
+
+    def get_result_label(self, result):
+        return f"{result.long_name} ({result.short_name})"
+
+
 class LawCodeAutocomplete(KonovaCodeAutocomplete):
     """
     Due to limitations of the django dal package, we need to subclass for each code list
diff --git a/konova/static/css/konova.css b/konova/static/css/konova.css
index 294287ea..a088cc30 100644
--- a/konova/static/css/konova.css
+++ b/konova/static/css/konova.css
@@ -229,4 +229,7 @@ No other approach worked to get the autocomplete fields to full width of parent
 }
 .select2-results__option--highlighted{
     background-color: var(--rlp-red) !important;
+}
+.select2-container--default .select2-results > .select2-results__options{
+    max-height: 500px !important;
 }
\ No newline at end of file
diff --git a/konova/urls.py b/konova/urls.py
index 642b1445..96c716a8 100644
--- a/konova/urls.py
+++ b/konova/urls.py
@@ -20,7 +20,7 @@ from django.urls import path, include
 from konova.autocompletes import EcoAccountAutocomplete, \
     InterventionAutocomplete, CompensationActionCodeAutocomplete, BiotopeCodeAutocomplete, LawCodeAutocomplete, \
     RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete, \
-    ShareUserAutocomplete
+    ShareUserAutocomplete, BiotopeExtraCodeAutocomplete
 from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG
 from konova.sso.sso import KonovaSSOClient
 from konova.views import logout_view, home_view, remove_deadline_view
@@ -48,6 +48,7 @@ urlpatterns = [
     path("atcmplt/interventions", InterventionAutocomplete.as_view(), name="interventions-autocomplete"),
     path("atcmplt/codes/comp/action", CompensationActionCodeAutocomplete.as_view(), name="codes-compensation-action-autocomplete"),
     path("atcmplt/codes/biotope", BiotopeCodeAutocomplete.as_view(), name="codes-biotope-autocomplete"),
+    path("atcmplt/codes/biotope/extra", BiotopeExtraCodeAutocomplete.as_view(), name="codes-biotope-extra-type-autocomplete"),
     path("atcmplt/codes/law", LawCodeAutocomplete.as_view(), name="codes-law-autocomplete"),
     path("atcmplt/codes/prc-type", ProcessTypeCodeAutocomplete.as_view(), name="codes-process-type-autocomplete"),
     path("atcmplt/codes/reg-off", RegistrationOfficeCodeAutocomplete.as_view(), name="codes-registration-office-autocomplete"),

From 95a17ed04fed2ae0a09feb462d67e48bf1c59492 Mon Sep 17 00:00:00 2001
From: mpeltriaux <michel.peltriaux@sgdnord.rlp.de>
Date: Mon, 31 Jan 2022 11:26:24 +0100
Subject: [PATCH 2/5] # 88 Extra biotope codes

* adds additional biotope konovaCodes to CompensationState model
* increases rpp for Autocompletion
* adds/updates translations
---
 compensation/forms/modalForms.py    |   2 +-
 compensation/models/compensation.py |   2 +
 compensation/models/state.py        |  15 +++-
 konova/autocompletes.py             |   2 +
 locale/de/LC_MESSAGES/django.mo     | Bin 36202 -> 36407 bytes
 locale/de/LC_MESSAGES/django.po     | 109 ++++++++++++++++------------
 6 files changed, 80 insertions(+), 50 deletions(-)

diff --git a/compensation/forms/modalForms.py b/compensation/forms/modalForms.py
index 53fdf3c2..c70d52a3 100644
--- a/compensation/forms/modalForms.py
+++ b/compensation/forms/modalForms.py
@@ -127,7 +127,7 @@ class NewStateModalForm(BaseModalForm):
             }
         ),
     )
-    biotope_extra = forms.ModelChoiceField(
+    biotope_extra = forms.ModelMultipleChoiceField(
         label=_("Biotope additional type"),
         label_suffix="",
         required=False,
diff --git a/compensation/models/compensation.py b/compensation/models/compensation.py
index 66035579..46ea4520 100644
--- a/compensation/models/compensation.py
+++ b/compensation/models/compensation.py
@@ -114,6 +114,8 @@ class AbstractCompensation(BaseObject, GeoReferencedMixin):
                 biotope_type=form_data["biotope_type"],
                 surface=form_data["surface"],
             )
+            state_additional_types = form_data["biotope_extra"]
+            state.biotope_extra_types.set(state_additional_types)
             if is_before_state:
                 self.before_states.add(state)
             else:
diff --git a/compensation/models/state.py b/compensation/models/state.py
index 01aad147..a4b8fafb 100644
--- a/compensation/models/state.py
+++ b/compensation/models/state.py
@@ -8,7 +8,7 @@ Created on: 16.11.21
 from django.db import models
 
 from codelist.models import KonovaCode
-from codelist.settings import CODELIST_BIOTOPES_ID
+from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID
 from compensation.managers import CompensationStateManager
 from konova.models import UuidModel
 
@@ -26,7 +26,18 @@ class CompensationState(UuidModel):
             "code_lists__in": [CODELIST_BIOTOPES_ID],
             "is_selectable": True,
             "is_archived": False,
-        }
+        },
+        related_name='+',
+    )
+    biotope_extra_types = models.ManyToManyField(
+        KonovaCode,
+        blank=True,
+        limit_choices_to={
+            "code_lists__in": [CODELIST_BIOTOPES_EXTRA_CODES_ID],
+            "is_selectable": True,
+            "is_archived": False,
+        },
+        related_name='+',
     )
     surface = models.FloatField()
 
diff --git a/konova/autocompletes.py b/konova/autocompletes.py
index cbe42b0c..a5d6ea66 100644
--- a/konova/autocompletes.py
+++ b/konova/autocompletes.py
@@ -95,6 +95,7 @@ class KonovaCodeAutocomplete(Select2GroupQuerySetView):
     * c: Search inside a special codelist
 
     """
+    paginate_by = 50
 
     def order_by(self, qs):
         """ Orders by a predefined value
@@ -199,6 +200,7 @@ class BiotopeExtraCodeAutocomplete(KonovaCodeAutocomplete):
     """
     group_by_related = "parent"
     related_field_name = "long_name"
+    paginate_by = 200
 
     def __init__(self, *args, **kwargs):
         self.c = CODELIST_BIOTOPES_EXTRA_CODES_ID
diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo
index cb58ae7f8b439c804a3b076f7d39b7817f299f24..f93f41b81480d48317ed29762378762fe4593c75 100644
GIT binary patch
delta 10665
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
LUQlyR+oJygJ2&X@

delta 10467
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
YIu#1cm^Y}pf5sD64&RIyAJ)qLe~i|_4*&oF

diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index 40c27fe3..2c57d8dd 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -5,7 +5,7 @@
 #
 #: compensation/filters.py:122 compensation/forms/modalForms.py:34
 #: compensation/forms/modalForms.py:45 compensation/forms/modalForms.py:61
-#: compensation/forms/modalForms.py:238 compensation/forms/modalForms.py:316
+#: compensation/forms/modalForms.py:255 compensation/forms/modalForms.py:333
 #: intervention/forms/forms.py:52 intervention/forms/forms.py:154
 #: intervention/forms/forms.py:166 intervention/forms/modalForms.py:125
 #: intervention/forms/modalForms.py:138 intervention/forms/modalForms.py:151
@@ -26,7 +26,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-28 16:27+0100\n"
+"POT-Creation-Date: 2022-01-31 10:52+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -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:299
+#: compensation/forms/modalForms.py:316
 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:34
 #: intervention/templates/intervention/detail/includes/deductions.html:31
 msgid "Amount"
@@ -177,8 +177,9 @@ msgstr "Einzelflächen"
 #: analysis/templates/analysis/reports/includes/intervention/laws.html:23
 #: analysis/templates/analysis/reports/includes/intervention/laws.html:43
 #: analysis/templates/analysis/reports/includes/old_data/amount.html:19
-#: konova/templates/konova/home.html:23 konova/templates/konova/home.html:61
-#: konova/templates/konova/home.html:100
+#: konova/templates/konova/includes/quickstart/compensations.html:16
+#: konova/templates/konova/includes/quickstart/ecoaccounts.html:16
+#: konova/templates/konova/includes/quickstart/interventions.html:16
 msgid "Total"
 msgstr "Insgesamt"
 
@@ -212,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:133
+#: compensation/forms/modalForms.py:150
 #: 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
@@ -240,7 +241,8 @@ msgstr "Kompensationsart"
 #: analysis/templates/analysis/reports/includes/old_data/amount.html:29
 #: compensation/tables.py:85
 #: compensation/templates/compensation/detail/compensation/view.html:19
-#: konova/templates/konova/home.html:49 templates/navbars/navbar.html:28
+#: konova/templates/konova/includes/quickstart/compensations.html:4
+#: templates/navbars/navbar.html:28
 msgid "Compensation"
 msgstr "Kompensation"
 
@@ -285,7 +287,8 @@ msgstr "Typ"
 #: intervention/forms/modalForms.py:306 intervention/forms/modalForms.py:313
 #: intervention/tables.py:89
 #: intervention/templates/intervention/detail/view.html:19
-#: konova/templates/konova/home.html:11 templates/navbars/navbar.html:22
+#: konova/templates/konova/includes/quickstart/interventions.html:4
+#: templates/navbars/navbar.html:22
 msgid "Intervention"
 msgstr "Eingriff"
 
@@ -293,7 +296,8 @@ msgstr "Eingriff"
 #: compensation/tables.py:226
 #: compensation/templates/compensation/detail/eco_account/view.html:19
 #: intervention/forms/modalForms.py:279 intervention/forms/modalForms.py:286
-#: konova/templates/konova/home.html:88 templates/navbars/navbar.html:34
+#: konova/templates/konova/includes/quickstart/ecoaccounts.html:4
+#: templates/navbars/navbar.html:34
 msgid "Eco-account"
 msgstr "Ökokonto"
 
@@ -350,7 +354,7 @@ msgid "Compensation XY; Location ABC"
 msgstr "Kompensation XY; Flur ABC"
 
 #: compensation/forms/forms.py:57 compensation/forms/modalForms.py:60
-#: compensation/forms/modalForms.py:237 compensation/forms/modalForms.py:315
+#: compensation/forms/modalForms.py:254 compensation/forms/modalForms.py:332
 #: compensation/templates/compensation/detail/compensation/includes/actions.html:34
 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34
 #: compensation/templates/compensation/detail/compensation/includes/documents.html:31
@@ -478,8 +482,8 @@ msgstr "Fällig am"
 msgid "Due on which date"
 msgstr "Zahlung wird an diesem Datum erwartet"
 
-#: compensation/forms/modalForms.py:62 compensation/forms/modalForms.py:239
-#: compensation/forms/modalForms.py:317 intervention/forms/modalForms.py:152
+#: compensation/forms/modalForms.py:62 compensation/forms/modalForms.py:256
+#: compensation/forms/modalForms.py:334 intervention/forms/modalForms.py:152
 #: konova/forms.py:375
 msgid "Additional comment, maximum {} letters"
 msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
@@ -500,31 +504,39 @@ msgstr "Biotoptyp"
 msgid "Select the biotope type"
 msgstr "Biotoptyp wählen"
 
-#: compensation/forms/modalForms.py:136 intervention/forms/modalForms.py:297
+#: compensation/forms/modalForms.py:131 compensation/forms/modalForms.py:143
+msgid "Biotope additional type"
+msgstr "Zusatzbezeichnung"
+
+#: compensation/forms/modalForms.py:134
+msgid "Select an additional biotope type"
+msgstr "Zusatzbezeichnung wählen"
+
+#: compensation/forms/modalForms.py:153 intervention/forms/modalForms.py:297
 msgid "in m²"
 msgstr ""
 
-#: compensation/forms/modalForms.py:147
+#: compensation/forms/modalForms.py:164
 msgid "New state"
 msgstr "Neuer Zustand"
 
-#: compensation/forms/modalForms.py:148
+#: compensation/forms/modalForms.py:165
 msgid "Insert data for the new state"
 msgstr "Geben Sie die Daten des neuen Zustandes ein"
 
-#: compensation/forms/modalForms.py:155 konova/forms.py:190
+#: compensation/forms/modalForms.py:172 konova/forms.py:190
 msgid "Object removed"
 msgstr "Objekt entfernt"
 
-#: compensation/forms/modalForms.py:209
+#: compensation/forms/modalForms.py:226
 msgid "Deadline Type"
 msgstr "Fristart"
 
-#: compensation/forms/modalForms.py:212
+#: compensation/forms/modalForms.py:229
 msgid "Select the deadline type"
 msgstr "Fristart wählen"
 
-#: compensation/forms/modalForms.py:221
+#: compensation/forms/modalForms.py:238
 #: 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
@@ -532,27 +544,27 @@ msgstr "Fristart wählen"
 msgid "Date"
 msgstr "Datum"
 
-#: compensation/forms/modalForms.py:224
+#: compensation/forms/modalForms.py:241
 msgid "Select date"
 msgstr "Datum wählen"
 
-#: compensation/forms/modalForms.py:251
+#: compensation/forms/modalForms.py:268
 msgid "New deadline"
 msgstr "Neue Frist"
 
-#: compensation/forms/modalForms.py:252
+#: compensation/forms/modalForms.py:269
 msgid "Insert data for the new deadline"
 msgstr "Geben Sie die Daten der neuen Frist ein"
 
-#: compensation/forms/modalForms.py:270
+#: compensation/forms/modalForms.py:287
 msgid "Action Type"
 msgstr "Maßnahmentyp"
 
-#: compensation/forms/modalForms.py:273
+#: compensation/forms/modalForms.py:290
 msgid "Select the action type"
 msgstr "Maßnahmentyp wählen"
 
-#: compensation/forms/modalForms.py:282
+#: compensation/forms/modalForms.py:299
 #: compensation/templates/compensation/detail/compensation/includes/actions.html:38
 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:38
 #: compensation/templates/compensation/detail/compensation/includes/documents.html:35
@@ -578,23 +590,23 @@ msgstr "Maßnahmentyp wählen"
 msgid "Action"
 msgstr "Aktionen"
 
-#: compensation/forms/modalForms.py:287
+#: compensation/forms/modalForms.py:304
 msgid "Unit"
 msgstr "Einheit"
 
-#: compensation/forms/modalForms.py:290
+#: compensation/forms/modalForms.py:307
 msgid "Select the unit"
 msgstr "Einheit wählen"
 
-#: compensation/forms/modalForms.py:302
+#: compensation/forms/modalForms.py:319
 msgid "Insert the amount"
 msgstr "Menge eingeben"
 
-#: compensation/forms/modalForms.py:328
+#: compensation/forms/modalForms.py:345
 msgid "New action"
 msgstr "Neue Maßnahme"
 
-#: compensation/forms/modalForms.py:329
+#: compensation/forms/modalForms.py:346
 msgid "Insert data for the new action"
 msgstr "Geben Sie die Daten der neuen Maßnahme ein"
 
@@ -876,13 +888,13 @@ msgstr "Ist CEF Maßnahme"
 #: compensation/templates/compensation/detail/compensation/view.html:56
 #: venv/lib/python3.7/site-packages/django/forms/widgets.py:710
 msgid "Yes"
-msgstr ""
+msgstr "Ja"
 
 #: compensation/templates/compensation/detail/compensation/view.html:48
 #: compensation/templates/compensation/detail/compensation/view.html:58
 #: venv/lib/python3.7/site-packages/django/forms/widgets.py:711
 msgid "No"
-msgstr ""
+msgstr "Nein"
 
 #: compensation/templates/compensation/detail/compensation/view.html:53
 msgid "Is Coherence keeping compensation"
@@ -1725,21 +1737,6 @@ msgstr ""
 msgid "English"
 msgstr ""
 
-#: konova/templates/konova/home.html:27 konova/templates/konova/home.html:65
-#: konova/templates/konova/home.html:104
-msgid "Shared with you"
-msgstr "Für Sie freigegeben"
-
-#: konova/templates/konova/home.html:35 konova/templates/konova/home.html:73
-#: konova/templates/konova/home.html:114
-msgid "Create"
-msgstr "Neu"
-
-#: konova/templates/konova/home.html:40 konova/templates/konova/home.html:78
-#: konova/templates/konova/home.html:119
-msgid "Show"
-msgstr "Anzeigen"
-
 #: konova/templates/konova/includes/parcels.html:3
 msgid "Spatial reference"
 msgstr "Raumreferenz"
@@ -1764,6 +1761,24 @@ msgstr "Kreis"
 msgid "Gemarkung"
 msgstr "Gemarkung"
 
+#: konova/templates/konova/includes/quickstart/compensations.html:20
+#: konova/templates/konova/includes/quickstart/ecoaccounts.html:20
+#: konova/templates/konova/includes/quickstart/interventions.html:20
+msgid "Shared with you"
+msgstr "Für Sie freigegeben"
+
+#: konova/templates/konova/includes/quickstart/compensations.html:28
+#: konova/templates/konova/includes/quickstart/ecoaccounts.html:30
+#: konova/templates/konova/includes/quickstart/interventions.html:28
+msgid "Create"
+msgstr "Neu"
+
+#: konova/templates/konova/includes/quickstart/compensations.html:33
+#: konova/templates/konova/includes/quickstart/ecoaccounts.html:35
+#: konova/templates/konova/includes/quickstart/interventions.html:33
+msgid "Show"
+msgstr "Anzeigen"
+
 #: konova/templates/konova/widgets/generate-content-input.html:6
 msgid "Generate new"
 msgstr "Neu generieren"

From e1865c726744558e38a7a8d4cb0447fee2700148 Mon Sep 17 00:00:00 2001
From: mpeltriaux <michel.peltriaux@sgdnord.rlp.de>
Date: Mon, 31 Jan 2022 12:21:42 +0100
Subject: [PATCH 3/5] #88 Extra biotope codes templates

* extends the detail view templates for all compensation related models to render extra CompensationState details as well
* reduces number of landing page news from 4 to 3
* improves .card-text in favor of .scroll-150
* improves .card font size
---
 .../detail/compensation/includes/states-after.html | 14 ++++++++++++--
 .../compensation/includes/states-before.html       | 14 ++++++++++++--
 .../detail/eco_account/includes/states-after.html  | 14 ++++++++++++--
 .../detail/eco_account/includes/states-before.html | 14 ++++++++++++--
 .../ema/detail/includes/states-after.html          | 14 ++++++++++++--
 .../ema/detail/includes/states-before.html         | 14 ++++++++++++--
 konova/static/css/konova.css                       | 13 ++++++-------
 konova/templates/konova/includes/comment_card.html |  2 +-
 konova/views.py                                    |  2 +-
 news/templates/news/dashboard-news.html            |  2 +-
 news/templates/news/index.html                     |  2 +-
 11 files changed, 82 insertions(+), 23 deletions(-)

diff --git a/compensation/templates/compensation/detail/compensation/includes/states-after.html b/compensation/templates/compensation/detail/compensation/includes/states-after.html
index f8dd00a4..3f0b4eef 100644
--- a/compensation/templates/compensation/detail/compensation/includes/states-after.html
+++ b/compensation/templates/compensation/detail/compensation/includes/states-after.html
@@ -29,9 +29,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Biotope type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Biotope additional type' %}
+                </th>
                 <th scope="col">
                     {% trans 'Surface' %}
                 </th>
@@ -48,8 +51,15 @@
                 <td class="align-middle">
                     {{ state.biotope_type }}
                 </td>
+                <td class="align-middle">
+                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    <div class="mb-2" title="{{ biotope_extra }}">
+                        {{ biotope_extra.long_name }}
+                    </div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'compensation:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
                         {% fa5_icon 'trash' %}
diff --git a/compensation/templates/compensation/detail/compensation/includes/states-before.html b/compensation/templates/compensation/detail/compensation/includes/states-before.html
index 39b5e038..168524cd 100644
--- a/compensation/templates/compensation/detail/compensation/includes/states-before.html
+++ b/compensation/templates/compensation/detail/compensation/includes/states-before.html
@@ -29,9 +29,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Biotope type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Biotope additional type' %}
+                </th>
                 <th scope="col">
                     {% trans 'Surface' %}
                 </th>
@@ -48,8 +51,15 @@
                 <td class="align-middle">
                     {{ state.biotope_type }}
                 </td>
+                <td class="align-middle">
+                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    <div class="mb-2" title="{{ biotope_extra }}">
+                        {{ biotope_extra.long_name }}
+                    </div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'compensation:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
                         {% fa5_icon 'trash' %}
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 eab29ad6..2d9b32e4 100644
--- a/compensation/templates/compensation/detail/eco_account/includes/states-after.html
+++ b/compensation/templates/compensation/detail/eco_account/includes/states-after.html
@@ -29,9 +29,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Biotope type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Biotope additional type' %}
+                </th>
                 <th scope="col">
                     {% trans 'Surface' %}
                 </th>
@@ -48,8 +51,15 @@
                 <td class="align-middle">
                     {{ state.biotope_type }}
                 </td>
+                <td class="align-middle">
+                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    <div class="mb-2" title="{{ biotope_extra }}">
+                        {{ biotope_extra.long_name }}
+                    </div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'compensation:acc-state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
                         {% fa5_icon 'trash' %}
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 ea3df844..45ee4167 100644
--- a/compensation/templates/compensation/detail/eco_account/includes/states-before.html
+++ b/compensation/templates/compensation/detail/eco_account/includes/states-before.html
@@ -29,9 +29,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Biotope type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Biotope additional type' %}
+                </th>
                 <th scope="col">
                     {% trans 'Surface' %}
                 </th>
@@ -48,8 +51,15 @@
                 <td class="align-middle">
                     {{ state.biotope_type }}
                 </td>
+                <td class="align-middle">
+                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    <div class="mb-2" title="{{ biotope_extra }}">
+                        {{ biotope_extra.long_name }}
+                    </div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'compensation:acc-state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
                         {% fa5_icon 'trash' %}
diff --git a/ema/templates/ema/detail/includes/states-after.html b/ema/templates/ema/detail/includes/states-after.html
index 0e6aa16a..0cbb5fd6 100644
--- a/ema/templates/ema/detail/includes/states-after.html
+++ b/ema/templates/ema/detail/includes/states-after.html
@@ -29,9 +29,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Biotope type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Biotope additional type' %}
+                </th>
                 <th scope="col">
                     {% trans 'Surface' %}
                 </th>
@@ -46,8 +49,15 @@
                 <td class="align-middle">
                     {{ state.biotope_type }}
                 </td>
+                <td class="align-middle">
+                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    <div class="mb-2" title="{{ biotope_extra }}">
+                        {{ biotope_extra.long_name }}
+                    </div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'ema:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
                         {% fa5_icon 'trash' %}
diff --git a/ema/templates/ema/detail/includes/states-before.html b/ema/templates/ema/detail/includes/states-before.html
index 42c0eb1b..61dbc0cd 100644
--- a/ema/templates/ema/detail/includes/states-before.html
+++ b/ema/templates/ema/detail/includes/states-before.html
@@ -29,9 +29,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Biotope type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Biotope additional type' %}
+                </th>
                 <th scope="col">
                     {% trans 'Surface' %}
                 </th>
@@ -46,8 +49,15 @@
                 <td class="align-middle">
                     {{ state.biotope_type }}
                 </td>
+                <td class="align-middle">
+                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    <div class="mb-2" title="{{ biotope_extra }}">
+                        {{ biotope_extra.long_name }}
+                    </div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'ema:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
                         {% fa5_icon 'trash' %}
diff --git a/konova/static/css/konova.css b/konova/static/css/konova.css
index a088cc30..6d882ec4 100644
--- a/konova/static/css/konova.css
+++ b/konova/static/css/konova.css
@@ -121,18 +121,12 @@ a {
 
 .card{
     margin: 0 0.5rem 0.5rem 0;
-    font-size: 12px;
+    font-size: 0.9rem;
 }
 .card:hover{
     box-shadow: 1px 1px 3px var(--rlp-gray-light);
 }
 
-.card .card-text{
-    font-size: 12px;
-    max-height: 150px;
-    overflow: auto;
-}
-
 .qs-box{
     background-color: var(--rlp-red);
     color: white;
@@ -215,6 +209,11 @@ Overwrites bootstrap .btn:focus box shadow color
     color: var(--rlp-red);
 }
 
+.scroll-150{
+    max-height: 150px;
+    overflow: auto;
+}
+
 .scroll-300{
     max-height: 300px;
     overflow: auto;
diff --git a/konova/templates/konova/includes/comment_card.html b/konova/templates/konova/includes/comment_card.html
index 0cc91bf0..a84f378e 100644
--- a/konova/templates/konova/includes/comment_card.html
+++ b/konova/templates/konova/includes/comment_card.html
@@ -19,7 +19,7 @@
             </div>
         </div>
         <div class="card-body">
-            <div class="card-text font-italic">
+            <div class="scroll-150 font-italic">
                 {{obj.comment}}
             </div>
         </div>
diff --git a/konova/views.py b/konova/views.py
index abfea284..d46a0228 100644
--- a/konova/views.py
+++ b/konova/views.py
@@ -60,7 +60,7 @@ def home_view(request: HttpRequest):
         unpublish_on__gte=now,
     ).order_by(
         "-publish_on"
-    )[:4]
+    )[:3]
 
     # First fetch all valid objects (undeleted, only newest versions)
     interventions = Intervention.objects.filter(
diff --git a/news/templates/news/dashboard-news.html b/news/templates/news/dashboard-news.html
index f6aa9c6d..f462e101 100644
--- a/news/templates/news/dashboard-news.html
+++ b/news/templates/news/dashboard-news.html
@@ -10,7 +10,7 @@
                         {{msg.subject}}
                     </h6>
                     <small>{% trans 'Published on' %} {{msg.publish_on}}</small>
-                    <article class="card-text">{{msg.body|safe}}</article>
+                    <article class="scroll-150">{{msg.body|safe}}</article>
                 </div>
             </div>
         </div>
diff --git a/news/templates/news/index.html b/news/templates/news/index.html
index d4b16478..6521a1c9 100644
--- a/news/templates/news/index.html
+++ b/news/templates/news/index.html
@@ -19,7 +19,7 @@
                             <small> {% trans 'Published on' %} {{msg.publish_on}}</small>
                         </h5>
                         <small></small>
-                        <article class="card-text">{{msg.body|safe}}</article>
+                        <article class="scroll-150">{{msg.body|safe}}</article>
                     </div>
                 </div>
             {% endfor %}

From 73cf3fc5035080a937e7a3337f0917a459511021 Mon Sep 17 00:00:00 2001
From: mpeltriaux <michel.peltriaux@sgdnord.rlp.de>
Date: Mon, 31 Jan 2022 12:58:55 +0100
Subject: [PATCH 4/5] #88 Action detail codes

* adds codelist 1035 for compensation action detail codes
* extends CompensationAction model
* extends NewActionForm
* extends detail view of compensation action related models
* add/updates translations
* adds autocomplete tests
---
 .../management/commands/update_codelist.py    |   4 +-
 codelist/settings.py                          |   1 +
 compensation/forms/modalForms.py              |  20 ++-
 compensation/models/action.py                 |  15 +-
 compensation/models/compensation.py           |   2 +
 .../detail/compensation/includes/actions.html |  12 +-
 .../detail/eco_account/includes/actions.html  |  12 +-
 .../ema/detail/includes/actions.html          |  12 +-
 konova/autocompletes.py                       |  20 ++-
 konova/tests/test_autocompletes.py            |  30 ++++
 konova/urls.py                                |   3 +-
 locale/de/LC_MESSAGES/django.mo               | Bin 36407 -> 36575 bytes
 locale/de/LC_MESSAGES/django.po               | 136 ++++++++++--------
 13 files changed, 196 insertions(+), 71 deletions(-)

diff --git a/codelist/management/commands/update_codelist.py b/codelist/management/commands/update_codelist.py
index aa6e45a9..85c90324 100644
--- a/codelist/management/commands/update_codelist.py
+++ b/codelist/management/commands/update_codelist.py
@@ -13,7 +13,8 @@ from codelist.models import KonovaCode, KonovaCodeList
 from codelist.settings import CODELIST_INTERVENTION_HANDLER_ID, CODELIST_CONSERVATION_OFFICE_ID, \
     CODELIST_REGISTRATION_OFFICE_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, CODELIST_COMPENSATION_HANDLER_ID, \
     CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_CLASS_ID, CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID, \
-    CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID
+    CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID, \
+    CODELIST_COMPENSATION_ACTION_DETAIL_ID
 from konova.management.commands.setup import BaseKonovaCommand
 from konova.settings import PROXIES
 
@@ -38,6 +39,7 @@ class Command(BaseKonovaCommand):
                 CODELIST_COMPENSATION_HANDLER_ID,
                 CODELIST_COMPENSATION_ACTION_ID,
                 CODELIST_COMPENSATION_ACTION_CLASS_ID,
+                CODELIST_COMPENSATION_ACTION_DETAIL_ID,
                 CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID,
                 CODELIST_PROCESS_TYPE_ID,
             ]
diff --git a/codelist/settings.py b/codelist/settings.py
index 012dc9b4..598a3a66 100644
--- a/codelist/settings.py
+++ b/codelist/settings.py
@@ -20,6 +20,7 @@ CODELIST_PROCESS_TYPE_ID = 44382  # CLVerfahrenstyp
 
 CODELIST_COMPENSATION_HANDLER_ID = 1052  # CLEingreifer
 CODELIST_COMPENSATION_ACTION_ID = 1026  # CLMassnahmedetail
+CODELIST_COMPENSATION_ACTION_DETAIL_ID = 1035  # CLZusatzmerkmal
 CODELIST_COMPENSATION_ACTION_CLASS_ID = 1034  # CLMassnahmeklasse
 CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID = 1028  # CLMassnahmetyp, CEF and stuff
 CODELIST_COMPENSATION_FUNDING_ID = 1049  # CLKombimassnahme
diff --git a/compensation/forms/modalForms.py b/compensation/forms/modalForms.py
index c70d52a3..dd9f4c70 100644
--- a/compensation/forms/modalForms.py
+++ b/compensation/forms/modalForms.py
@@ -14,7 +14,8 @@ from django.shortcuts import render
 from django.utils.translation import pgettext_lazy as _con, gettext_lazy as _
 
 from codelist.models import KonovaCode
-from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID
+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 konova.contexts import BaseContext
 from konova.forms import BaseModalForm, NewDocumentForm
@@ -300,6 +301,23 @@ class NewActionModalForm(BaseModalForm):
             }
         ),
     )
+    action_type_details = forms.ModelMultipleChoiceField(
+        label=_("Action Type detail"),
+        label_suffix="",
+        required=False,
+        help_text=_("Select the action type detail"),
+        queryset=KonovaCode.objects.filter(
+            is_archived=False,
+            is_leaf=True,
+            code_lists__in=[CODELIST_COMPENSATION_ACTION_DETAIL_ID],
+        ),
+        widget=autocomplete.ModelSelect2Multiple(
+            url="codes-compensation-action-detail-autocomplete",
+            attrs={
+                "data-placeholder": _("Action Type detail"),
+            }
+        ),
+    )
     unit = forms.ChoiceField(
         label=_("Unit"),
         label_suffix="",
diff --git a/compensation/models/action.py b/compensation/models/action.py
index 35d4c3f7..95fe2807 100644
--- a/compensation/models/action.py
+++ b/compensation/models/action.py
@@ -9,7 +9,7 @@ from django.db import models
 from django.utils.translation import gettext_lazy as _
 
 from codelist.models import KonovaCode
-from codelist.settings import CODELIST_COMPENSATION_ACTION_ID
+from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_DETAIL_ID
 from compensation.managers import CompensationActionManager
 from konova.models import BaseResource
 
@@ -39,7 +39,18 @@ class CompensationAction(BaseResource):
             "code_lists__in": [CODELIST_COMPENSATION_ACTION_ID],
             "is_selectable": True,
             "is_archived": False,
-        }
+        },
+        related_name='+',
+    )
+    action_type_details = models.ManyToManyField(
+        KonovaCode,
+        blank=True,
+        limit_choices_to={
+            "code_lists__in": [CODELIST_COMPENSATION_ACTION_DETAIL_ID],
+            "is_selectable": True,
+            "is_archived": False,
+        },
+        related_name='+',
     )
     amount = models.FloatField()
     unit = models.CharField(max_length=100, null=True, blank=True, choices=UnitChoices.choices)
diff --git a/compensation/models/compensation.py b/compensation/models/compensation.py
index 46ea4520..8147203f 100644
--- a/compensation/models/compensation.py
+++ b/compensation/models/compensation.py
@@ -95,6 +95,8 @@ class AbstractCompensation(BaseObject, GeoReferencedMixin):
                 comment=form_data["comment"],
                 created=user_action,
             )
+            comp_action_details = form_data["action_type_details"]
+            comp_action.action_type_details.set(comp_action_details)
             self.actions.add(comp_action)
             return comp_action
 
diff --git a/compensation/templates/compensation/detail/compensation/includes/actions.html b/compensation/templates/compensation/detail/compensation/includes/actions.html
index 92cf45ff..648e777a 100644
--- a/compensation/templates/compensation/detail/compensation/includes/actions.html
+++ b/compensation/templates/compensation/detail/compensation/includes/actions.html
@@ -24,9 +24,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Action type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Action type details' %}
+                </th>
                 <th scope="col">
                     {% trans 'Amount' context 'Compensation' %}
                 </th>
@@ -46,9 +49,14 @@
                 <td class="align-middle">
                     {{ action.action_type }}
                 </td>
+                <td class="align-middle">
+                    {% for detail in action.action_type_details.all %}
+                        <div class="mb-2" title="{{detail}}">{{detail.long_name}}</div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
                 <td class="align-middle">{{ action.comment|default_if_none:"" }}</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'compensation:action-remove' obj.id action.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove action' %}">
                         {% fa5_icon 'trash' %}
diff --git a/compensation/templates/compensation/detail/eco_account/includes/actions.html b/compensation/templates/compensation/detail/eco_account/includes/actions.html
index 4e81e22b..c5b9c1c1 100644
--- a/compensation/templates/compensation/detail/eco_account/includes/actions.html
+++ b/compensation/templates/compensation/detail/eco_account/includes/actions.html
@@ -24,9 +24,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Action type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Action type details' %}
+                </th>
                 <th scope="col">
                     {% trans 'Amount' context 'Compensation' %}
                 </th>
@@ -46,9 +49,14 @@
                 <td class="align-middle">
                     {{ action.action_type }}
                 </td>
+                <td class="align-middle">
+                    {% for detail in action.action_type_details.all %}
+                        <div class="mb-2" title="{{detail}}">{{detail.long_name}}</div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
                 <td class="align-middle">{{ action.comment|default_if_none:"" }}</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'compensation:acc-action-remove' obj.id action.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove action' %}">
                         {% fa5_icon 'trash' %}
diff --git a/ema/templates/ema/detail/includes/actions.html b/ema/templates/ema/detail/includes/actions.html
index 56359703..fcd1d274 100644
--- a/ema/templates/ema/detail/includes/actions.html
+++ b/ema/templates/ema/detail/includes/actions.html
@@ -24,9 +24,12 @@
         <table class="table table-hover">
             <thead>
             <tr>
-                <th scope="col">
+                <th class="w-25" scope="col">
                     {% trans 'Action type' %}
                 </th>
+                <th class="w-25" scope="col">
+                    {% trans 'Action type details' %}
+                </th>
                 <th scope="col">
                     {% trans 'Amount' context 'Compensation' %}
                 </th>
@@ -44,9 +47,14 @@
                 <td class="align-middle">
                     {{ action.action_type }}
                 </td>
+                <td class="align-middle">
+                    {% for detail in action.action_type_details.all %}
+                        <div class="mb-2" title="{{detail}}">{{detail.long_name}}</div>
+                    {% endfor %}
+                </td>
                 <td class="align-middle">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
                 <td class="align-middle">{{ action.comment|default_if_none:"" }}</td>
-                <td>
+                <td class="align-middle">
                     {% if is_default_member and has_access  %}
                     <button data-form-url="{% url 'ema:action-remove' obj.id action.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove action' %}">
                         {% fa5_icon 'trash' %}
diff --git a/konova/autocompletes.py b/konova/autocompletes.py
index a5d6ea66..3c12b36d 100644
--- a/konova/autocompletes.py
+++ b/konova/autocompletes.py
@@ -12,7 +12,7 @@ from django.db.models import Q
 from codelist.models import KonovaCode
 from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, \
     CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_PROCESS_TYPE_ID, \
-    CODELIST_BIOTOPES_EXTRA_CODES_ID
+    CODELIST_BIOTOPES_EXTRA_CODES_ID, CODELIST_COMPENSATION_ACTION_DETAIL_ID
 from compensation.models import EcoAccount
 from intervention.models import Intervention
 
@@ -164,6 +164,24 @@ class CompensationActionCodeAutocomplete(KonovaCodeAutocomplete):
         )
 
 
+class CompensationActionDetailCodeAutocomplete(KonovaCodeAutocomplete):
+    """
+    Due to limitations of the django dal package, we need to subclass for each code list
+    """
+    group_by_related = "parent"
+    related_field_name = "long_name"
+    paginate_by = 200
+
+    def __init__(self, *args, **kwargs):
+        self.c = CODELIST_COMPENSATION_ACTION_DETAIL_ID
+        super().__init__(*args, **kwargs)
+
+    def order_by(self, qs):
+        return qs.order_by(
+            "parent__long_name"
+        )
+
+
 class BiotopeCodeAutocomplete(KonovaCodeAutocomplete):
     """
     Due to limitations of the django dal package, we need to subclass for each code list
diff --git a/konova/tests/test_autocompletes.py b/konova/tests/test_autocompletes.py
index 47df3dc3..7d9e5088 100644
--- a/konova/tests/test_autocompletes.py
+++ b/konova/tests/test_autocompletes.py
@@ -57,3 +57,33 @@ class AutocompleteTestCase(BaseTestCase):
         )
         content = json.loads(response.content)
         self.assertEqual([], content["results"])
+
+    def test_all_autocompletes(self):
+        tests = [
+            "accounts-autocomplete",
+            "interventions-autocomplete",
+            "codes-compensation-action-autocomplete",
+            "codes-compensation-action-detail-autocomplete",
+            "codes-biotope-autocomplete",
+            "codes-biotope-extra-type-autocomplete",
+            "codes-law-autocomplete",
+            "codes-process-type-autocomplete",
+            "codes-registration-office-autocomplete",
+            "codes-conservation-office-autocomplete",
+            "share-user-autocomplete",
+        ]
+        for test in tests:
+            self.client.login(username=self.superuser.username, password=self.superuser_pw)
+            user_autocomplete_url = reverse(test)
+            data = {
+                "q": ""
+            }
+            response = self.client.get(
+                user_autocomplete_url,
+                data,
+            )
+            content = json.loads(response.content)
+            try:
+                content["results"]
+            except KeyError:
+                self.fail(f"No results returned for autocomplete {test}")
diff --git a/konova/urls.py b/konova/urls.py
index 96c716a8..267b35c4 100644
--- a/konova/urls.py
+++ b/konova/urls.py
@@ -20,7 +20,7 @@ from django.urls import path, include
 from konova.autocompletes import EcoAccountAutocomplete, \
     InterventionAutocomplete, CompensationActionCodeAutocomplete, BiotopeCodeAutocomplete, LawCodeAutocomplete, \
     RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete, \
-    ShareUserAutocomplete, BiotopeExtraCodeAutocomplete
+    ShareUserAutocomplete, BiotopeExtraCodeAutocomplete, CompensationActionDetailCodeAutocomplete
 from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG
 from konova.sso.sso import KonovaSSOClient
 from konova.views import logout_view, home_view, remove_deadline_view
@@ -47,6 +47,7 @@ urlpatterns = [
     path("atcmplt/eco-accounts", EcoAccountAutocomplete.as_view(), name="accounts-autocomplete"),
     path("atcmplt/interventions", InterventionAutocomplete.as_view(), name="interventions-autocomplete"),
     path("atcmplt/codes/comp/action", CompensationActionCodeAutocomplete.as_view(), name="codes-compensation-action-autocomplete"),
+    path("atcmplt/codes/comp/action/detail", CompensationActionDetailCodeAutocomplete.as_view(), name="codes-compensation-action-detail-autocomplete"),
     path("atcmplt/codes/biotope", BiotopeCodeAutocomplete.as_view(), name="codes-biotope-autocomplete"),
     path("atcmplt/codes/biotope/extra", BiotopeExtraCodeAutocomplete.as_view(), name="codes-biotope-extra-type-autocomplete"),
     path("atcmplt/codes/law", LawCodeAutocomplete.as_view(), name="codes-law-autocomplete"),
diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo
index f93f41b81480d48317ed29762378762fe4593c75..e6edc28bd0a903453509a74318e3587db30c17c5 100644
GIT binary patch
delta 10677
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

delta 10536
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
aN(CvMzl>X4df+z&VT0Br7VMgy68&F`*TR1Q

diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index 2c57d8dd..6dbcaf9d 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 <EMAIL@ADDRESS>, YEAR.
 #
-#: compensation/filters.py:122 compensation/forms/modalForms.py:34
-#: compensation/forms/modalForms.py:45 compensation/forms/modalForms.py:61
-#: compensation/forms/modalForms.py:255 compensation/forms/modalForms.py:333
+#: compensation/filters.py:122 compensation/forms/modalForms.py:35
+#: compensation/forms/modalForms.py:46 compensation/forms/modalForms.py:62
+#: compensation/forms/modalForms.py:256 compensation/forms/modalForms.py:351
 #: intervention/forms/forms.py:52 intervention/forms/forms.py:154
 #: intervention/forms/forms.py:166 intervention/forms/modalForms.py:125
 #: intervention/forms/modalForms.py:138 intervention/forms/modalForms.py:151
@@ -26,7 +26,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-31 10:52+0100\n"
+"POT-Creation-Date: 2022-01-31 12:41+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -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:316
+#: compensation/forms/modalForms.py:334
 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:34
 #: intervention/templates/intervention/detail/includes/deductions.html:31
 msgid "Amount"
@@ -213,13 +213,13 @@ 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:150
-#: 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
-#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36
-#: ema/templates/ema/detail/includes/states-after.html:36
-#: ema/templates/ema/detail/includes/states-before.html:36
+#: compensation/forms/modalForms.py:151
+#: compensation/templates/compensation/detail/compensation/includes/states-after.html:39
+#: compensation/templates/compensation/detail/compensation/includes/states-before.html:39
+#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:39
+#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:39
+#: ema/templates/ema/detail/includes/states-after.html:39
+#: ema/templates/ema/detail/includes/states-before.html:39
 #: intervention/forms/modalForms.py:295
 msgid "Surface"
 msgstr "Fläche"
@@ -247,7 +247,7 @@ msgid "Compensation"
 msgstr "Kompensation"
 
 #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:21
-#: compensation/forms/modalForms.py:74
+#: compensation/forms/modalForms.py:75
 msgid "Payment"
 msgstr "Zahlung"
 
@@ -353,9 +353,9 @@ msgstr "Aussagekräftiger Titel"
 msgid "Compensation XY; Location ABC"
 msgstr "Kompensation XY; Flur ABC"
 
-#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:60
-#: compensation/forms/modalForms.py:254 compensation/forms/modalForms.py:332
-#: compensation/templates/compensation/detail/compensation/includes/actions.html:34
+#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:61
+#: compensation/forms/modalForms.py:255 compensation/forms/modalForms.py:350
+#: compensation/templates/compensation/detail/compensation/includes/actions.html:37
 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34
 #: compensation/templates/compensation/detail/compensation/includes/documents.html:31
 #: compensation/templates/compensation/detail/eco_account/includes/actions.html:34
@@ -469,74 +469,80 @@ msgstr "Ökokonto XY; Flur ABC"
 msgid "Edit Eco-Account"
 msgstr "Ökokonto bearbeiten"
 
-#: compensation/forms/modalForms.py:35
+#: compensation/forms/modalForms.py:36
 msgid "in Euro"
 msgstr "in Euro"
 
-#: compensation/forms/modalForms.py:44
+#: compensation/forms/modalForms.py:45
 #: intervention/templates/intervention/detail/includes/payments.html:31
 msgid "Due on"
 msgstr "Fällig am"
 
-#: compensation/forms/modalForms.py:47
+#: compensation/forms/modalForms.py:48
 msgid "Due on which date"
 msgstr "Zahlung wird an diesem Datum erwartet"
 
-#: compensation/forms/modalForms.py:62 compensation/forms/modalForms.py:256
-#: compensation/forms/modalForms.py:334 intervention/forms/modalForms.py:152
+#: compensation/forms/modalForms.py:63 compensation/forms/modalForms.py:257
+#: compensation/forms/modalForms.py:352 intervention/forms/modalForms.py:152
 #: konova/forms.py:375
 msgid "Additional comment, maximum {} letters"
 msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
 
-#: compensation/forms/modalForms.py:75
+#: compensation/forms/modalForms.py:76
 msgid "Add a payment for intervention '{}'"
 msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen"
 
-#: compensation/forms/modalForms.py:95
+#: compensation/forms/modalForms.py:96
 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:114 compensation/forms/modalForms.py:126
+#: compensation/forms/modalForms.py:115 compensation/forms/modalForms.py:127
 msgid "Biotope Type"
 msgstr "Biotoptyp"
 
-#: compensation/forms/modalForms.py:117
+#: compensation/forms/modalForms.py:118
 msgid "Select the biotope type"
 msgstr "Biotoptyp wählen"
 
-#: compensation/forms/modalForms.py:131 compensation/forms/modalForms.py:143
+#: compensation/forms/modalForms.py:132 compensation/forms/modalForms.py:144
+#: 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
+#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36
+#: ema/templates/ema/detail/includes/states-after.html:36
+#: ema/templates/ema/detail/includes/states-before.html:36
 msgid "Biotope additional type"
 msgstr "Zusatzbezeichnung"
 
-#: compensation/forms/modalForms.py:134
+#: compensation/forms/modalForms.py:135
 msgid "Select an additional biotope type"
 msgstr "Zusatzbezeichnung wählen"
 
-#: compensation/forms/modalForms.py:153 intervention/forms/modalForms.py:297
+#: compensation/forms/modalForms.py:154 intervention/forms/modalForms.py:297
 msgid "in m²"
 msgstr ""
 
-#: compensation/forms/modalForms.py:164
+#: compensation/forms/modalForms.py:165
 msgid "New state"
 msgstr "Neuer Zustand"
 
-#: compensation/forms/modalForms.py:165
+#: compensation/forms/modalForms.py:166
 msgid "Insert data for the new state"
 msgstr "Geben Sie die Daten des neuen Zustandes ein"
 
-#: compensation/forms/modalForms.py:172 konova/forms.py:190
+#: compensation/forms/modalForms.py:173 konova/forms.py:190
 msgid "Object removed"
 msgstr "Objekt entfernt"
 
-#: compensation/forms/modalForms.py:226
+#: compensation/forms/modalForms.py:227
 msgid "Deadline Type"
 msgstr "Fristart"
 
-#: compensation/forms/modalForms.py:229
+#: compensation/forms/modalForms.py:230
 msgid "Select the deadline type"
 msgstr "Fristart wählen"
 
-#: compensation/forms/modalForms.py:238
+#: compensation/forms/modalForms.py:239
 #: 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
@@ -544,43 +550,43 @@ msgstr "Fristart wählen"
 msgid "Date"
 msgstr "Datum"
 
-#: compensation/forms/modalForms.py:241
+#: compensation/forms/modalForms.py:242
 msgid "Select date"
 msgstr "Datum wählen"
 
-#: compensation/forms/modalForms.py:268
+#: compensation/forms/modalForms.py:269
 msgid "New deadline"
 msgstr "Neue Frist"
 
-#: compensation/forms/modalForms.py:269
+#: compensation/forms/modalForms.py:270
 msgid "Insert data for the new deadline"
 msgstr "Geben Sie die Daten der neuen Frist ein"
 
-#: compensation/forms/modalForms.py:287
+#: compensation/forms/modalForms.py:288
 msgid "Action Type"
 msgstr "Maßnahmentyp"
 
-#: compensation/forms/modalForms.py:290
+#: compensation/forms/modalForms.py:291
 msgid "Select the action type"
 msgstr "Maßnahmentyp wählen"
 
-#: compensation/forms/modalForms.py:299
-#: compensation/templates/compensation/detail/compensation/includes/actions.html:38
+#: compensation/forms/modalForms.py:300
+#: compensation/templates/compensation/detail/compensation/includes/actions.html:41
 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:38
 #: compensation/templates/compensation/detail/compensation/includes/documents.html:35
-#: compensation/templates/compensation/detail/compensation/includes/states-after.html:40
-#: compensation/templates/compensation/detail/compensation/includes/states-before.html:40
+#: compensation/templates/compensation/detail/compensation/includes/states-after.html:43
+#: compensation/templates/compensation/detail/compensation/includes/states-before.html:43
 #: compensation/templates/compensation/detail/eco_account/includes/actions.html:38
 #: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:37
 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:40
 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:34
-#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:40
-#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:40
+#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:43
+#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:43
 #: ema/templates/ema/detail/includes/actions.html:37
 #: ema/templates/ema/detail/includes/deadlines.html:37
 #: ema/templates/ema/detail/includes/documents.html:34
-#: ema/templates/ema/detail/includes/states-after.html:39
-#: ema/templates/ema/detail/includes/states-before.html:39
+#: ema/templates/ema/detail/includes/states-after.html:42
+#: ema/templates/ema/detail/includes/states-before.html:42
 #: intervention/templates/intervention/detail/includes/compensations.html:37
 #: intervention/templates/intervention/detail/includes/deductions.html:38
 #: intervention/templates/intervention/detail/includes/documents.html:35
@@ -590,23 +596,31 @@ msgstr "Maßnahmentyp wählen"
 msgid "Action"
 msgstr "Aktionen"
 
-#: compensation/forms/modalForms.py:304
+#: compensation/forms/modalForms.py:305 compensation/forms/modalForms.py:317
+msgid "Action Type detail"
+msgstr "Zusatzmerkmal"
+
+#: compensation/forms/modalForms.py:308
+msgid "Select the action type detail"
+msgstr "Zusatzmerkmal wählen"
+
+#: compensation/forms/modalForms.py:322
 msgid "Unit"
 msgstr "Einheit"
 
-#: compensation/forms/modalForms.py:307
+#: compensation/forms/modalForms.py:325
 msgid "Select the unit"
 msgstr "Einheit wählen"
 
-#: compensation/forms/modalForms.py:319
+#: compensation/forms/modalForms.py:337
 msgid "Insert the amount"
 msgstr "Menge eingeben"
 
-#: compensation/forms/modalForms.py:345
+#: compensation/forms/modalForms.py:363
 msgid "New action"
 msgstr "Neue Maßnahme"
 
-#: compensation/forms/modalForms.py:346
+#: compensation/forms/modalForms.py:364
 msgid "Insert data for the new action"
 msgstr "Geben Sie die Daten der neuen Maßnahme ein"
 
@@ -736,13 +750,17 @@ msgid "Action type"
 msgstr "Maßnahmentyp"
 
 #: compensation/templates/compensation/detail/compensation/includes/actions.html:31
+msgid "Action type details"
+msgstr "Zusatzmerkmale"
+
+#: compensation/templates/compensation/detail/compensation/includes/actions.html:34
 #: compensation/templates/compensation/detail/eco_account/includes/actions.html:31
 #: ema/templates/ema/detail/includes/actions.html:31
 msgctxt "Compensation"
 msgid "Amount"
 msgstr "Menge"
 
-#: compensation/templates/compensation/detail/compensation/includes/actions.html:53
+#: compensation/templates/compensation/detail/compensation/includes/actions.html:61
 #: compensation/templates/compensation/detail/eco_account/includes/actions.html:53
 #: ema/templates/ema/detail/includes/actions.html:51
 msgid "Remove action"
@@ -852,12 +870,12 @@ msgstr "Fehlende Flächenmengen laut Ausgangszustand: "
 msgid "Biotope type"
 msgstr "Biotoptyp"
 
-#: compensation/templates/compensation/detail/compensation/includes/states-after.html:54
-#: compensation/templates/compensation/detail/compensation/includes/states-before.html:54
-#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:54
-#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:54
-#: ema/templates/ema/detail/includes/states-after.html:52
-#: ema/templates/ema/detail/includes/states-before.html:52
+#: compensation/templates/compensation/detail/compensation/includes/states-after.html:64
+#: compensation/templates/compensation/detail/compensation/includes/states-before.html:64
+#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:64
+#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:64
+#: ema/templates/ema/detail/includes/states-after.html:62
+#: ema/templates/ema/detail/includes/states-before.html:62
 msgid "Remove state"
 msgstr "Zustand entfernen"
 

From f6304d0b33f98a7c81a527dcccf41b99072a4172 Mon Sep 17 00:00:00 2001
From: mpeltriaux <michel.peltriaux@sgdnord.rlp.de>
Date: Mon, 31 Jan 2022 14:01:02 +0100
Subject: [PATCH 5/5] #88 Action/Biotope API extension

* extends the API to support serializing and deserializing of action_details and biotope_details
* renames biotope_extra_types into biotope_type_details on CompensationState model for convenience reasons and to match CompensationAction's action_type_details
---
 api/utils/serializer/v1/serializer.py         | 39 +++++++++++++------
 compensation/models/compensation.py           |  2 +-
 compensation/models/state.py                  |  2 +-
 .../compensation/includes/states-after.html   |  2 +-
 .../compensation/includes/states-before.html  |  2 +-
 .../eco_account/includes/states-after.html    |  2 +-
 .../eco_account/includes/states-before.html   |  2 +-
 .../ema/detail/includes/states-after.html     |  2 +-
 .../ema/detail/includes/states-before.html    |  2 +-
 9 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/api/utils/serializer/v1/serializer.py b/api/utils/serializer/v1/serializer.py
index 66421708..f56db81b 100644
--- a/api/utils/serializer/v1/serializer.py
+++ b/api/utils/serializer/v1/serializer.py
@@ -14,7 +14,8 @@ from django.db.models import QuerySet
 from api.utils.serializer.serializer import AbstractModelAPISerializer
 from codelist.models import KonovaCode
 from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_PROCESS_TYPE_ID, \
-    CODELIST_LAW_ID, CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID
+    CODELIST_LAW_ID, CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, \
+    CODELIST_COMPENSATION_ACTION_DETAIL_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID
 from compensation.models import CompensationAction, UnitChoices, CompensationState
 from intervention.models import Responsibility, Legal
 from konova.models import Deadline, DeadlineType
@@ -323,6 +324,9 @@ class AbstractCompensationAPISerializerV1Mixin:
         states = []
         for entry in states_data:
             biotope_type = entry["biotope"]
+            biotope_details = [
+                self._konova_code_from_json(e, CODELIST_BIOTOPES_EXTRA_CODES_ID) for e in entry["biotope_details"]
+            ]
             surface = float(entry["surface"])
 
             # Check on validity
@@ -331,22 +335,22 @@ class AbstractCompensationAPISerializerV1Mixin:
 
             # If this exact data is already existing, we do not create it new. Instead put it's id in the list of
             # entries, we will use to set the new actions
-            pre_existing_state = states_manager.filter(
+            state = states_manager.filter(
                 biotope_type__atom_id=biotope_type,
                 surface=surface,
             ).exclude(
                 id__in=states
             ).first()
-            if pre_existing_state is not None:
-                states.append(pre_existing_state.id)
+            if state is not None:
+                states.append(state.id)
             else:
                 # Create and add id to list
-                new_state = CompensationState.objects.create(
+                state = CompensationState.objects.create(
                     biotope_type=self._konova_code_from_json(biotope_type, CODELIST_BIOTOPES_ID),
                     surface=surface
                 )
-                states.append(new_state.id)
-
+                states.append(state.id)
+            state.biotope_type_details.set(biotope_details)
         states_manager.set(states)
         return obj
 
@@ -364,6 +368,9 @@ class AbstractCompensationAPISerializerV1Mixin:
         actions = []
         for entry in actions_data:
             action = entry["action"]
+            action_details = [
+                self._konova_code_from_json(e, CODELIST_COMPENSATION_ACTION_DETAIL_ID) for e in entry["action_details"]
+            ]
             amount = float(entry["amount"])
             unit = entry["unit"]
             comment = entry["comment"]
@@ -376,7 +383,7 @@ class AbstractCompensationAPISerializerV1Mixin:
 
             # If this exact data is already existing, we do not create it new. Instead put it's id in the list of
             # entries, we will use to set the new actions
-            pre_existing_action = obj.actions.filter(
+            action_entry = obj.actions.filter(
                 action_type__atom_id=action,
                 amount=amount,
                 unit=unit,
@@ -384,17 +391,19 @@ class AbstractCompensationAPISerializerV1Mixin:
             ).exclude(
                 id__in=actions
             ).first()
-            if pre_existing_action is not None:
-                actions.append(pre_existing_action.id)
+            if action_entry is not None:
+                actions.append(action_entry.id)
             else:
                 # Create and add id to list
-                new_action = CompensationAction.objects.create(
+                action_entry = CompensationAction.objects.create(
                     action_type=self._konova_code_from_json(action, CODELIST_COMPENSATION_ACTION_ID),
                     amount=amount,
                     unit=unit,
                     comment=comment,
                 )
-                actions.append(new_action.id)
+                actions.append(action_entry.id)
+
+            action_entry.action_type_details.set(action_details)
         obj.actions.set(actions)
         return obj
 
@@ -410,6 +419,9 @@ class AbstractCompensationAPISerializerV1Mixin:
         return [
             {
                 "biotope": self._konova_code_to_json(entry.biotope_type),
+                "biotope_details": [
+                    self._konova_code_to_json(detail) for detail in entry.biotope_type_details.all()
+                ],
                 "surface": entry.surface,
             }
             for entry in qs
@@ -427,6 +439,9 @@ class AbstractCompensationAPISerializerV1Mixin:
         return [
             {
                 "action": self._konova_code_to_json(entry.action_type),
+                "action_details": [
+                    self._konova_code_to_json(detail) for detail in entry.action_type_details.all()
+                ],
                 "amount": entry.amount,
                 "unit": entry.unit,
                 "comment": entry.comment,
diff --git a/compensation/models/compensation.py b/compensation/models/compensation.py
index 8147203f..de5a3461 100644
--- a/compensation/models/compensation.py
+++ b/compensation/models/compensation.py
@@ -117,7 +117,7 @@ class AbstractCompensation(BaseObject, GeoReferencedMixin):
                 surface=form_data["surface"],
             )
             state_additional_types = form_data["biotope_extra"]
-            state.biotope_extra_types.set(state_additional_types)
+            state.biotope_type_details.set(state_additional_types)
             if is_before_state:
                 self.before_states.add(state)
             else:
diff --git a/compensation/models/state.py b/compensation/models/state.py
index a4b8fafb..858ac3d1 100644
--- a/compensation/models/state.py
+++ b/compensation/models/state.py
@@ -29,7 +29,7 @@ class CompensationState(UuidModel):
         },
         related_name='+',
     )
-    biotope_extra_types = models.ManyToManyField(
+    biotope_type_details = models.ManyToManyField(
         KonovaCode,
         blank=True,
         limit_choices_to={
diff --git a/compensation/templates/compensation/detail/compensation/includes/states-after.html b/compensation/templates/compensation/detail/compensation/includes/states-after.html
index 3f0b4eef..408689a7 100644
--- a/compensation/templates/compensation/detail/compensation/includes/states-after.html
+++ b/compensation/templates/compensation/detail/compensation/includes/states-after.html
@@ -52,7 +52,7 @@
                     {{ state.biotope_type }}
                 </td>
                 <td class="align-middle">
-                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    {% for biotope_extra in state.biotope_type_details.all %}
                     <div class="mb-2" title="{{ biotope_extra }}">
                         {{ biotope_extra.long_name }}
                     </div>
diff --git a/compensation/templates/compensation/detail/compensation/includes/states-before.html b/compensation/templates/compensation/detail/compensation/includes/states-before.html
index 168524cd..991f6c23 100644
--- a/compensation/templates/compensation/detail/compensation/includes/states-before.html
+++ b/compensation/templates/compensation/detail/compensation/includes/states-before.html
@@ -52,7 +52,7 @@
                     {{ state.biotope_type }}
                 </td>
                 <td class="align-middle">
-                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    {% for biotope_extra in state.biotope_type_details.all %}
                     <div class="mb-2" title="{{ biotope_extra }}">
                         {{ biotope_extra.long_name }}
                     </div>
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 2d9b32e4..70a36018 100644
--- a/compensation/templates/compensation/detail/eco_account/includes/states-after.html
+++ b/compensation/templates/compensation/detail/eco_account/includes/states-after.html
@@ -52,7 +52,7 @@
                     {{ state.biotope_type }}
                 </td>
                 <td class="align-middle">
-                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    {% for biotope_extra in state.biotope_type_details.all %}
                     <div class="mb-2" title="{{ biotope_extra }}">
                         {{ biotope_extra.long_name }}
                     </div>
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 45ee4167..5482674a 100644
--- a/compensation/templates/compensation/detail/eco_account/includes/states-before.html
+++ b/compensation/templates/compensation/detail/eco_account/includes/states-before.html
@@ -52,7 +52,7 @@
                     {{ state.biotope_type }}
                 </td>
                 <td class="align-middle">
-                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    {% for biotope_extra in state.biotope_type_details.all %}
                     <div class="mb-2" title="{{ biotope_extra }}">
                         {{ biotope_extra.long_name }}
                     </div>
diff --git a/ema/templates/ema/detail/includes/states-after.html b/ema/templates/ema/detail/includes/states-after.html
index 0cbb5fd6..db9e75b9 100644
--- a/ema/templates/ema/detail/includes/states-after.html
+++ b/ema/templates/ema/detail/includes/states-after.html
@@ -50,7 +50,7 @@
                     {{ state.biotope_type }}
                 </td>
                 <td class="align-middle">
-                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    {% for biotope_extra in state.biotope_type_details.all %}
                     <div class="mb-2" title="{{ biotope_extra }}">
                         {{ biotope_extra.long_name }}
                     </div>
diff --git a/ema/templates/ema/detail/includes/states-before.html b/ema/templates/ema/detail/includes/states-before.html
index 61dbc0cd..a4da5538 100644
--- a/ema/templates/ema/detail/includes/states-before.html
+++ b/ema/templates/ema/detail/includes/states-before.html
@@ -50,7 +50,7 @@
                     {{ state.biotope_type }}
                 </td>
                 <td class="align-middle">
-                    {% for biotope_extra in state.biotope_extra_types.all %}
+                    {% for biotope_extra in state.biotope_type_details.all %}
                     <div class="mb-2" title="{{ biotope_extra }}">
                         {{ biotope_extra.long_name }}
                     </div>