diff --git a/compensation/forms.py b/compensation/forms.py
index 9b443de..ea446d1 100644
--- a/compensation/forms.py
+++ b/compensation/forms.py
@@ -6,14 +6,18 @@ Created on: 04.12.20
"""
from django import forms
+from django.contrib import messages
from django.db import transaction
+from django.http import HttpRequest
+from django.shortcuts import redirect, render
from django.utils.translation import gettext_lazy as _
from compensation.models import Payment, CompensationState
-from konova.enums import UserActionLogEntryEnum
+from konova.contexts import BaseContext
from konova.forms import BaseForm, BaseModalForm
from konova.models import Deadline, DeadlineType
-from user.models import UserActionLogEntry
+from konova.utils.message_templates import FORM_INVALID
+from user.models import UserActionLogEntry, UserAction
class NewCompensationForm(BaseForm):
@@ -61,7 +65,7 @@ class NewPaymentForm(BaseModalForm):
with transaction.atomic():
action = UserActionLogEntry.objects.create(
user=self.user,
- action=UserActionLogEntryEnum.CREATED.value,
+ action=UserAction.CREATED,
)
pay = Payment.objects.create(
created=action,
@@ -106,6 +110,45 @@ class NewStateModalForm(BaseModalForm):
self.instance.after_states.add(state)
return state
+ def process_request(self, request: HttpRequest, msg_success: str = _("Object removed"), msg_error: str = FORM_INVALID, redirect_url: str = None):
+ """ Generic processing of request
+
+ Wraps the request processing logic, so we don't need the same code everywhere a RemoveModalForm is being used
+
+ Args:
+ request (HttpRequest): The incoming request
+ msg_success (str): The message in case of successful removing
+ msg_error (str): The message in case of an error
+
+ Returns:
+
+ """
+ redirect_url = redirect_url if redirect_url is not None else request.META.get("HTTP_REFERER", "home")
+ template = self.template
+ if request.method == "POST":
+ if self.is_valid():
+ is_before_state = bool(request.GET.get("before", False))
+ self.save(is_before_state=is_before_state)
+ messages.success(
+ request,
+ msg_success
+ )
+ return redirect(redirect_url)
+ else:
+ messages.info(
+ request,
+ msg_error
+ )
+ return redirect(redirect_url)
+ elif request.method == "GET":
+ context = {
+ "form": self,
+ }
+ context = BaseContext(request, context).context
+ return render(request, template, context)
+ else:
+ raise NotImplementedError
+
class NewDeadlineModalForm(BaseModalForm):
type = forms.ChoiceField(
@@ -150,7 +193,7 @@ class NewDeadlineModalForm(BaseModalForm):
with transaction.atomic():
action = UserActionLogEntry.objects.create(
user=self.user,
- action=UserActionLogEntryEnum.CREATED.value
+ action=UserAction.CREATED.value
)
deadline = Deadline.objects.create(
type=self.cleaned_data["type"],
diff --git a/compensation/models.py b/compensation/models.py
index 0031bd9..4d54af4 100644
--- a/compensation/models.py
+++ b/compensation/models.py
@@ -14,11 +14,10 @@ from django.utils.timezone import now
from compensation.settings import COMPENSATION_IDENTIFIER_LENGTH, COMPENSATION_IDENTIFIER_TEMPLATE
from intervention.models import Intervention, ResponsibilityData
-from konova.enums import UserActionLogEntryEnum
from konova.models import BaseObject, BaseResource, Geometry, UuidModel
from konova.utils.generators import generate_random_string
from organisation.models import Organisation
-from user.models import UserActionLogEntry
+from user.models import UserActionLogEntry, UserAction
class Payment(BaseResource):
@@ -156,11 +155,9 @@ class Compensation(AbstractCompensation):
action = UserActionLogEntry.objects.create(
user=_user,
timestamp=_now,
- action=UserActionLogEntryEnum.DELETED.value
+ action=UserAction.DELETED
)
self.deleted = action
- #self.deleted_on = _now
- #self.deleted_by = _user
self.save()
def save(self, *args, **kwargs):
diff --git a/compensation/templates/compensation/detail/includes/deadlines.html b/compensation/templates/compensation/detail/includes/deadlines.html
index 7cdcd38..5764edd 100644
--- a/compensation/templates/compensation/detail/includes/deadlines.html
+++ b/compensation/templates/compensation/detail/includes/deadlines.html
@@ -57,10 +57,5 @@
{% endfor %}
- {% if sum_before_states > sum_after_states %}
-
- {% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
-
- {% endif %}
\ No newline at end of file
diff --git a/compensation/templates/compensation/detail/includes/states-after.html b/compensation/templates/compensation/detail/includes/states-after.html
index 5c93f54..d937409 100644
--- a/compensation/templates/compensation/detail/includes/states-after.html
+++ b/compensation/templates/compensation/detail/includes/states-after.html
@@ -21,6 +21,11 @@
+ {% if sum_before_states > sum_after_states %}
+
+ {% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
+
+ {% endif %}
@@ -36,7 +41,7 @@
- {% for state in comp.after_states.all %}
+ {% for state in after_states %}
{{ state.biotope_type }}
@@ -53,10 +58,5 @@
{% endfor %}
|
- {% if sum_before_states > sum_after_states %}
-
- {% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
-
- {% endif %}
\ No newline at end of file
diff --git a/compensation/templates/compensation/detail/includes/states-before.html b/compensation/templates/compensation/detail/includes/states-before.html
index b291004..266b067 100644
--- a/compensation/templates/compensation/detail/includes/states-before.html
+++ b/compensation/templates/compensation/detail/includes/states-before.html
@@ -21,6 +21,11 @@
+ {% if sum_before_states < sum_after_states %}
+
+ {% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
+
+ {% endif %}
@@ -36,7 +41,7 @@
- {% for state in comp.before_states.all %}
+ {% for state in before_states %}
{{ state.biotope_type }}
@@ -53,10 +58,5 @@
{% endfor %}
|
- {% if sum_before_states < sum_after_states %}
-
- {% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
-
- {% endif %}
\ No newline at end of file
diff --git a/compensation/views.py b/compensation/views.py
index 6064c62..98fe64c 100644
--- a/compensation/views.py
+++ b/compensation/views.py
@@ -76,22 +76,28 @@ def open_view(request: HttpRequest, id: str):
_user = request.user
is_data_shared = comp.intervention.is_shared_with(_user)
+ # Order states according to surface
+ before_states = comp.before_states.all().order_by("-surface")
+ after_states = comp.after_states.all().order_by("-surface")
+
# Precalculate logical errors between before- and after-states
# Sum() returns None in case of no states, so we catch that and replace it with 0 for easier handling
- sum_before_states = comp.before_states.all().aggregate(Sum("surface"))["surface__sum"] or 0
- sum_after_states = comp.after_states.all().aggregate(Sum("surface"))["surface__sum"] or 0
+ sum_before_states = before_states.aggregate(Sum("surface"))["surface__sum"] or 0
+ sum_after_states = after_states.aggregate(Sum("surface"))["surface__sum"] or 0
diff_states = abs(sum_before_states - sum_after_states)
context = {
"comp": comp,
"geom_form": geom_form,
"has_access": is_data_shared,
- "is_default_member": in_group(_user, _(DEFAULT_GROUP)),
- "is_zb_member": in_group(_user, _(ZB_GROUP)),
- "is_ets_member": in_group(_user, _(ETS_GROUP)),
+ "before_states": before_states,
+ "after_states": after_states,
"sum_before_states": sum_before_states,
"sum_after_states": sum_after_states,
"diff_states": diff_states,
+ "is_default_member": in_group(_user, _(DEFAULT_GROUP)),
+ "is_zb_member": in_group(_user, _(ZB_GROUP)),
+ "is_ets_member": in_group(_user, _(ETS_GROUP)),
}
context = BaseContext(request, context).context
return render(request, template, context)
diff --git a/intervention/forms.py b/intervention/forms.py
index 107ea90..aa7e0d3 100644
--- a/intervention/forms.py
+++ b/intervention/forms.py
@@ -15,13 +15,12 @@ from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from intervention.models import Intervention
-from konova.enums import UserActionLogEntryEnum
from konova.forms import BaseForm, BaseModalForm
from konova.models import Document
from konova.settings import DEFAULT_LAT, DEFAULT_LON, DEFAULT_ZOOM, ZB_GROUP, ETS_GROUP
from konova.utils.user_checks import in_group
from organisation.models import Organisation
-from user.models import UserActionLogEntry
+from user.models import UserActionLogEntry, UserAction
class NewInterventionForm(BaseForm):
@@ -120,7 +119,7 @@ class NewInterventionForm(BaseForm):
action = UserActionLogEntry.objects.create(
user=user,
- action=UserActionLogEntryEnum.CREATED.value,
+ action=UserAction.CREATED,
)
intervention = Intervention(
identifier=identifier,
diff --git a/intervention/models.py b/intervention/models.py
index a940639..53b8b0b 100644
--- a/intervention/models.py
+++ b/intervention/models.py
@@ -12,12 +12,11 @@ from django.utils import timezone
from django.utils.timezone import now
from intervention.settings import INTERVENTION_IDENTIFIER_LENGTH, INTERVENTION_IDENTIFIER_TEMPLATE
-from konova.enums import UserActionLogEntryEnum
from konova.models import BaseObject, Geometry, UuidModel
from konova.utils import generators
from konova.utils.generators import generate_random_string
from organisation.models import Organisation
-from user.models import UserActionLogEntry
+from user.models import UserActionLogEntry, UserAction
class ResponsibilityData(UuidModel):
@@ -139,7 +138,7 @@ class Intervention(BaseObject):
action = UserActionLogEntry.objects.create(
user=_user,
timestamp=_now,
- action=UserActionLogEntryEnum.DELETED.value
+ action=UserAction.DELETED
)
for com in coms:
com.deleted = action
diff --git a/konova/enums.py b/konova/enums.py
index 90faaa0..70938b1 100644
--- a/konova/enums.py
+++ b/konova/enums.py
@@ -38,22 +38,3 @@ class UnitEnum(BaseEnum):
ha = "ha"
st = "St." # pieces
-
-
-class ServerMessageImportance(BaseEnum):
- """
- Defines importance levels for server messages
- """
- DEFAULT = "DEFAULT"
- INFO = "INFO"
- WARNING = "WARNING"
-
-
-class UserActionLogEntryEnum(BaseEnum):
- """
- Defines different possible user actions for UserActionLogEntry
- """
- CHECKED = "Checked"
- RECORDED = "Recorded"
- CREATED = "Created"
- DELETED = "Deleted"
\ No newline at end of file
diff --git a/konova/forms.py b/konova/forms.py
index c626c79..c774e91 100644
--- a/konova/forms.py
+++ b/konova/forms.py
@@ -21,10 +21,9 @@ from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from konova.contexts import BaseContext
-from konova.enums import UserActionLogEntryEnum
from konova.models import Document
from konova.utils.message_templates import FORM_INVALID
-from user.models import UserActionLogEntry
+from user.models import UserActionLogEntry, UserAction
class BaseForm(forms.Form):
@@ -117,11 +116,9 @@ class RemoveForm(BaseForm):
action = UserActionLogEntry.objects.create(
user=user,
timestamp=timezone.now(),
- action=UserActionLogEntryEnum.DELETED.value
+ action=UserAction.DELETED
)
self.object_to_remove.deleted = action
- #self.object_to_remove.deleted_on = timezone.now()
- #self.object_to_remove.deleted_by = user
self.object_to_remove.save()
return self.object_to_remove
@@ -229,11 +226,9 @@ class RemoveModalForm(BaseModalForm):
action = UserActionLogEntry.objects.create(
user=self.user,
timestamp=timezone.now(),
- action=UserActionLogEntryEnum.DELETED.value,
+ action=UserAction.DELETED,
)
self.instance.deleted = action
- #self.instance.deleted_on = timezone.now()
- #self.instance.deleted_by = self.user
self.instance.save()
else:
# If the class does not provide restorable delete functionality, we must delete the entry finally
@@ -297,7 +292,7 @@ class NewDocumentForm(BaseModalForm):
with transaction.atomic():
action = UserActionLogEntry.objects.create(
user=self.user,
- action=UserActionLogEntryEnum.CREATED.value,
+ action=UserAction.CREATED,
)
doc = Document.objects.create(
created=action,
diff --git a/konova/models.py b/konova/models.py
index f0ad64d..7c75273 100644
--- a/konova/models.py
+++ b/konova/models.py
@@ -12,7 +12,6 @@ from django.utils.translation import gettext_lazy as _
from django.contrib.gis.db.models import MultiPolygonField
from django.db import models
-from konova.settings import DEFAULT_SRID
from user.models import UserActionLogEntry
@@ -120,4 +119,5 @@ class Geometry(BaseResource):
"""
Outsourced geometry model so multiple versions of the same object can refer to the same geometry if it is not changed
"""
+ from konova.settings import DEFAULT_SRID
geom = MultiPolygonField(null=True, blank=True, srid=DEFAULT_SRID)
diff --git a/konova/settings.py b/konova/settings.py
index c925d55..6f448f0 100644
--- a/konova/settings.py
+++ b/konova/settings.py
@@ -12,7 +12,6 @@ https://docs.djangoproject.com/en/3.1/ref/settings/
from django.utils.translation import gettext_lazy as _
# Load other settings
-from konova.enums import ServerMessageImportance
from konova.sub_settings.django_settings import *
# Num of days if user enables Remember-me on login
@@ -55,12 +54,6 @@ DEFAULT_GROUP = "Default"
ZB_GROUP = "Registration office"
ETS_GROUP = "Conservation office"
-# ServerMessageImportance bootstrap resolver
-SVI_BOOTSTRAP_CLS_MAP = {
- ServerMessageImportance.DEFAULT.value: "",
- ServerMessageImportance.WARNING.value: "alert-danger",
- ServerMessageImportance.INFO.value: "alert-info",
-}
# HELP PAGE LINK
HELP_LINK = "https://dienste.naturschutz.rlp.de/doku/doku.php?id=ksp:start"
\ No newline at end of file
diff --git a/konova/templatetags/ksp_filters.py b/konova/templatetags/ksp_filters.py
index 6ee3dd3..490799f 100644
--- a/konova/templatetags/ksp_filters.py
+++ b/konova/templatetags/ksp_filters.py
@@ -6,11 +6,19 @@ Created on: 05.07.21
"""
from django import template
-from konova.settings import SVI_BOOTSTRAP_CLS_MAP
# Create custom library
+from news.models import ServerMessageImportance
+
register = template.Library()
+# ServerMessageImportance bootstrap resolver
+SVI_BOOTSTRAP_CLS_MAP = {
+ ServerMessageImportance.DEFAULT.name: "",
+ ServerMessageImportance.WARNING.name: "alert-danger",
+ ServerMessageImportance.INFO.name: "alert-info",
+}
+
@register.filter("bootstrap_cls")
def bootstrap_cls(value):
diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo
index b900614..5a3a96b 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 fe2792c..23e45eb 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -4,17 +4,17 @@
# FIRST AUTHOR , YEAR.
#
#: compensation/forms.py:34 compensation/forms.py:39 compensation/forms.py:52
-#: compensation/forms.py:138 intervention/filters.py:26
+#: compensation/forms.py:177 intervention/filters.py:26
#: intervention/filters.py:40 intervention/filters.py:47
-#: intervention/filters.py:48 konova/forms.py:85 konova/forms.py:216
-#: konova/forms.py:249 konova/forms.py:254 konova/forms.py:266
-#: konova/forms.py:277 konova/forms.py:290 user/forms.py:38
+#: intervention/filters.py:48 konova/forms.py:84 konova/forms.py:213
+#: konova/forms.py:244 konova/forms.py:249 konova/forms.py:261
+#: konova/forms.py:272 konova/forms.py:285 user/forms.py:38
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-03 12:54+0200\n"
+"POT-Creation-Date: 2021-08-03 17:21+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -67,8 +67,8 @@ msgid "Select the biotope type"
msgstr "Biotoptyp wählen"
#: compensation/forms.py:90
-#: compensation/templates/compensation/detail/includes/states-after.html:31
-#: compensation/templates/compensation/detail/includes/states-before.html:31
+#: compensation/templates/compensation/detail/includes/states-after.html:36
+#: compensation/templates/compensation/detail/includes/states-before.html:36
msgid "Surface"
msgstr "Fläche"
@@ -84,45 +84,49 @@ msgstr "Neuer Zustand"
msgid "Insert data for the new state"
msgstr "Geben Sie die Daten des neuen Zustandes ein"
-#: compensation/forms.py:116
+#: compensation/forms.py:113 konova/forms.py:134
+msgid "Object removed"
+msgstr "Objekt entfernt"
+
+#: compensation/forms.py:155
msgid "Deadline Type"
msgstr "Fristart"
-#: compensation/forms.py:119
+#: compensation/forms.py:158
msgid "Select the deadline type"
msgstr "Fristart wählen"
-#: compensation/forms.py:123
+#: compensation/forms.py:162
#: compensation/templates/compensation/detail/includes/deadlines.html:31
msgid "Date"
msgstr "Datum"
-#: compensation/forms.py:126
+#: compensation/forms.py:165
msgid "Select date"
msgstr "Datum wählen"
-#: compensation/forms.py:137
+#: compensation/forms.py:176
#: compensation/templates/compensation/detail/includes/deadlines.html:34
#: compensation/templates/compensation/detail/includes/documents.html:31
#: intervention/templates/intervention/detail/includes/documents.html:31
-#: konova/forms.py:276
+#: konova/forms.py:271
msgid "Comment"
msgstr "Kommentar"
-#: compensation/forms.py:139
+#: compensation/forms.py:178
msgid "Additional comment"
msgstr "Zusätzlicher Kommentar"
-#: compensation/forms.py:150
+#: compensation/forms.py:189
msgid "New deadline"
msgstr "Neue Frist"
-#: compensation/forms.py:151
+#: compensation/forms.py:190
msgid "Insert data for the new deadline"
msgstr "Geben Sie die Daten der neuen Frist ein"
#: compensation/tables.py:24 compensation/tables.py:164
-#: intervention/forms.py:29 intervention/tables.py:23
+#: intervention/forms.py:28 intervention/tables.py:23
#: intervention/templates/intervention/detail/includes/compensations.html:30
msgid "Identifier"
msgstr "Kennung"
@@ -130,24 +134,24 @@ msgstr "Kennung"
#: compensation/tables.py:29 compensation/tables.py:169
#: compensation/templates/compensation/detail/includes/documents.html:28
#: compensation/templates/compensation/detail/view.html:47
-#: intervention/forms.py:36 intervention/tables.py:28
+#: intervention/forms.py:35 intervention/tables.py:28
#: intervention/templates/intervention/detail/includes/compensations.html:33
#: intervention/templates/intervention/detail/includes/documents.html:28
-#: intervention/templates/intervention/detail/view.html:64 konova/forms.py:248
+#: intervention/templates/intervention/detail/view.html:64 konova/forms.py:243
msgid "Title"
msgstr "Bezeichnung"
#: compensation/tables.py:34
#: compensation/templates/compensation/detail/view.html:59
#: intervention/tables.py:33
-#: intervention/templates/intervention/detail/view.html:96
+#: intervention/templates/intervention/detail/view.html:96 user/models.py:48
msgid "Checked"
msgstr "Geprüft"
#: compensation/tables.py:40
#: compensation/templates/compensation/detail/view.html:73
#: intervention/tables.py:39
-#: intervention/templates/intervention/detail/view.html:110
+#: intervention/templates/intervention/detail/view.html:110 user/models.py:49
msgid "Recorded"
msgstr "Verzeichnet"
@@ -202,7 +206,7 @@ msgstr "Für Sie freigegeben - Datensatz kann bearbeitet werden"
msgid "Access not granted"
msgstr "Nicht freigegeben - Datensatz nur lesbar"
-#: compensation/tables.py:174 konova/forms.py:253
+#: compensation/tables.py:174 konova/forms.py:248
msgid "Created on"
msgstr "Erstellt"
@@ -231,14 +235,14 @@ msgid "Add new deadline"
msgstr "Neue Frist hinzufügen"
#: compensation/templates/compensation/detail/includes/deadlines.html:28
-#: intervention/forms.py:41
+#: intervention/forms.py:40
msgid "Type"
msgstr "Typ"
#: compensation/templates/compensation/detail/includes/deadlines.html:37
#: compensation/templates/compensation/detail/includes/documents.html:34
-#: compensation/templates/compensation/detail/includes/states-after.html:34
-#: compensation/templates/compensation/detail/includes/states-before.html:34
+#: compensation/templates/compensation/detail/includes/states-after.html:39
+#: compensation/templates/compensation/detail/includes/states-before.html:39
#: intervention/templates/intervention/detail/includes/compensations.html:36
#: intervention/templates/intervention/detail/includes/documents.html:34
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:36
@@ -250,12 +254,6 @@ msgstr "Aktionen"
msgid "Remove deadline"
msgstr "Frist löschen"
-#: compensation/templates/compensation/detail/includes/deadlines.html:62
-#: compensation/templates/compensation/detail/includes/states-after.html:58
-#: compensation/templates/compensation/detail/includes/states-before.html:58
-msgid "Missing surfaces: "
-msgstr "Fehlende Flächen: "
-
#: compensation/templates/compensation/detail/includes/documents.html:8
#: intervention/templates/intervention/detail/includes/documents.html:8
msgid "Documents"
@@ -263,7 +261,7 @@ msgstr "Dokumente"
#: compensation/templates/compensation/detail/includes/documents.html:14
#: intervention/templates/intervention/detail/includes/documents.html:14
-#: konova/forms.py:289
+#: konova/forms.py:284
msgid "Add new document"
msgstr "Neues Dokument hinzufügen"
@@ -280,13 +278,18 @@ msgstr "Zielzustand"
msgid "Add new state after"
msgstr "Neuen Zielzustand hinzufügen"
-#: compensation/templates/compensation/detail/includes/states-after.html:28
-#: compensation/templates/compensation/detail/includes/states-before.html:28
+#: compensation/templates/compensation/detail/includes/states-after.html:26
+#: compensation/templates/compensation/detail/includes/states-before.html:26
+msgid "Missing surfaces: "
+msgstr "Fehlende Flächen: "
+
+#: compensation/templates/compensation/detail/includes/states-after.html:33
+#: compensation/templates/compensation/detail/includes/states-before.html:33
msgid "Biotope type"
msgstr "Biotoptyp"
-#: compensation/templates/compensation/detail/includes/states-after.html:47
-#: compensation/templates/compensation/detail/includes/states-before.html:47
+#: compensation/templates/compensation/detail/includes/states-after.html:52
+#: compensation/templates/compensation/detail/includes/states-before.html:52
msgid "Remove state"
msgstr "Zustand entfernen"
@@ -346,7 +349,7 @@ msgid "Last modified"
msgstr "Zuletzt bearbeitet"
#: compensation/templates/compensation/detail/view.html:97
-#: intervention/forms.py:257
+#: intervention/forms.py:256
#: intervention/templates/intervention/detail/view.html:142
msgid "Shared with"
msgstr "Freigegeben für"
@@ -356,35 +359,35 @@ msgstr "Freigegeben für"
msgid "No geometry added, yet."
msgstr "Keine Geometrie vorhanden"
-#: compensation/views.py:115
+#: compensation/views.py:121
msgid "Compensation removed"
msgstr "Kompensation entfernt"
-#: compensation/views.py:195
+#: compensation/views.py:201
msgid "Payment added"
msgstr "Zahlung hinzugefügt"
-#: compensation/views.py:230
+#: compensation/views.py:236
msgid "Payment removed"
msgstr "Zahlung gelöscht"
-#: compensation/views.py:256
+#: compensation/views.py:262
msgid "Withdraw removed"
msgstr "Abbuchung entfernt"
-#: compensation/views.py:274
+#: compensation/views.py:280
msgid "Document added"
msgstr "Dokument hinzugefügt"
-#: compensation/views.py:293
+#: compensation/views.py:299
msgid "State added"
msgstr "Zustand hinzugefügt"
-#: compensation/views.py:312
+#: compensation/views.py:318
msgid "Deadline added"
msgstr "Frist hinzugefügt"
-#: compensation/views.py:322
+#: compensation/views.py:328
msgid "State removed"
msgstr "Zustand gelöscht"
@@ -404,90 +407,90 @@ msgstr "Gemarkung"
msgid "Search for district"
msgstr "Nach Gemarkung suchen"
-#: intervention/forms.py:32
+#: intervention/forms.py:31
msgid "Generated automatically if none was given"
msgstr "Wird automatisch erzeugt, falls nicht angegeben"
-#: intervention/forms.py:44
+#: intervention/forms.py:43
msgid "Which intervention type is this"
msgstr "Welcher Eingriffstyp"
-#: intervention/forms.py:47
+#: intervention/forms.py:46
#: intervention/templates/intervention/detail/view.html:72
msgid "Law"
msgstr "Gesetz"
-#: intervention/forms.py:50
+#: intervention/forms.py:49
msgid "Based on which law"
msgstr "Basiert auf welchem Recht"
-#: intervention/forms.py:53
+#: intervention/forms.py:52
#: intervention/templates/intervention/detail/view.html:92
msgid "Intervention handler"
msgstr "Eingriffsverursacher"
-#: intervention/forms.py:56
+#: intervention/forms.py:55
msgid "Who performs the intervention"
msgstr "Wer führt den Eingriff durch"
-#: intervention/forms.py:59
+#: intervention/forms.py:58
msgid "Data provider"
msgstr "Datenbereitsteller"
-#: intervention/forms.py:61
+#: intervention/forms.py:60
msgid "Who provides the data for the intervention"
msgstr "Wer stellt die Daten für den Eingriff zur Verfügung"
-#: intervention/forms.py:66
+#: intervention/forms.py:65
msgid "Organization"
msgstr "Organisation"
-#: intervention/forms.py:72
+#: intervention/forms.py:71
msgid "Data provider details"
msgstr "Datenbereitsteller Details"
-#: intervention/forms.py:75
+#: intervention/forms.py:74
msgid "Further details"
msgstr "Weitere Details"
-#: intervention/forms.py:88
+#: intervention/forms.py:87
msgid "Map"
msgstr "Karte"
-#: intervention/forms.py:90
+#: intervention/forms.py:89
msgid "Where does the intervention take place"
msgstr "Wo findet der Eingriff statt"
-#: intervention/forms.py:98
+#: intervention/forms.py:97
msgid "Files"
msgstr "Dateien"
-#: intervention/forms.py:105
+#: intervention/forms.py:104
msgid "New intervention"
msgstr "Neuer Eingriff"
-#: intervention/forms.py:152
+#: intervention/forms.py:151
msgid "Edit intervention"
msgstr "Eingriff bearbeiten"
-#: intervention/forms.py:246
+#: intervention/forms.py:245
msgid "Share link"
msgstr "Freigabelink"
-#: intervention/forms.py:248
+#: intervention/forms.py:247
msgid "Send this link to users who you want to have writing access on the data"
msgstr "Andere Nutzer erhalten über diesen Link Zugriff auf die Daten"
-#: intervention/forms.py:260
+#: intervention/forms.py:259
msgid "Remove check to remove access for this user"
msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen"
-#: intervention/forms.py:271
+#: intervention/forms.py:270
#: intervention/templates/intervention/detail/view.html:27
msgid "Share"
msgstr "Freigabe"
-#: intervention/forms.py:272
+#: intervention/forms.py:271
msgid "Share settings for {}"
msgstr "Freigabe Einstellungen für {}"
@@ -645,44 +648,40 @@ msgstr ""
msgid "You need to be part of another user group."
msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
-#: konova/forms.py:58
+#: konova/forms.py:57
msgid "Not editable"
msgstr "Nicht editierbar"
-#: konova/forms.py:84 konova/forms.py:215
+#: konova/forms.py:83 konova/forms.py:212
msgid "Confirm"
msgstr "Bestätige"
-#: konova/forms.py:96 konova/forms.py:224
+#: konova/forms.py:95 konova/forms.py:221
msgid "Remove"
msgstr "Löschen"
-#: konova/forms.py:98
+#: konova/forms.py:97
msgid "You are about to remove {} {}"
msgstr "Sie sind dabei {} {} zu löschen"
-#: konova/forms.py:137
-msgid "Object removed"
-msgstr "Objekt entfernt"
-
-#: konova/forms.py:225
+#: konova/forms.py:222
msgid "Are you sure?"
msgstr "Sind Sie sicher?"
-#: konova/forms.py:255
+#: konova/forms.py:250
msgid "When has this file been created? Important for photos."
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
-#: konova/forms.py:265
+#: konova/forms.py:260
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
msgid "File"
msgstr "Datei"
-#: konova/forms.py:267
+#: konova/forms.py:262
msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein"
-#: konova/forms.py:278
+#: konova/forms.py:273
msgid "Additional comment on this file"
msgstr "Zusätzlicher Kommentar"
@@ -710,19 +709,19 @@ msgstr "Wenn meine freigegebenen Daten gelöscht wurden"
msgid "On registered data edited"
msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
-#: konova/models.py:62
+#: konova/models.py:61
msgid "Finished"
msgstr "Umgesetzt bis"
-#: konova/models.py:63
+#: konova/models.py:62
msgid "Maintain"
msgstr "Unterhaltung bis"
-#: konova/models.py:64
+#: konova/models.py:63
msgid "Control"
msgstr "Kontrolle am"
-#: konova/models.py:65
+#: konova/models.py:64
msgid "Other"
msgstr "Sonstige"
@@ -774,6 +773,18 @@ msgstr "Dokument '{}' gelöscht"
msgid "Deadline removed"
msgstr "Frist gelöscht"
+#: news/models.py:11
+msgid "Default"
+msgstr "Standard"
+
+#: news/models.py:12
+msgid "Info"
+msgstr ""
+
+#: news/models.py:13
+msgid "Warning"
+msgstr "Warnung"
+
#: news/templates/news/dashboard-news.html:12 news/templates/news/index.html:19
msgid "Published on"
msgstr "Veröffentlicht am"
@@ -918,6 +929,14 @@ msgstr ""
msgid "User contact data"
msgstr "Kontaktdaten"
+#: user/models.py:50
+msgid "Created"
+msgstr "Erstellt"
+
+#: user/models.py:51
+msgid "Deleted"
+msgstr "Gelöscht"
+
#: user/templates/user/includes/contact_modal_button.html:3
msgid "Show contact data"
msgstr "Zeige Kontaktdaten"
@@ -2159,9 +2178,6 @@ msgstr ""
#~ msgid "Your own"
#~ msgstr "Eigene"
-#~ msgid "Default"
-#~ msgstr "Standard"
-
#~ msgid "Quickstart"
#~ msgstr "Schnellstart"
diff --git a/news/models.py b/news/models.py
index 2030c07..0a9d6dd 100644
--- a/news/models.py
+++ b/news/models.py
@@ -1,9 +1,18 @@
from django.db import models
+from django.utils.translation import gettext_lazy as _
-from konova.enums import ServerMessageImportance
from konova.models import BaseResource
+class ServerMessageImportance(models.TextChoices):
+ """
+ Defines importance levels for server messages
+ """
+ DEFAULT = "default", _("Default")
+ INFO = "info", _("Info")
+ WARNING = "warning", _("Warning")
+
+
class ServerMessage(BaseResource):
"""
Holds messages, which can be displayed on the user's dashboard
@@ -13,4 +22,4 @@ class ServerMessage(BaseResource):
is_active = models.BooleanField(default=True)
publish_on = models.DateTimeField()
unpublish_on = models.DateTimeField()
- importance = models.CharField(max_length=100, choices=ServerMessageImportance.as_choices(drop_empty_choice=True))
\ No newline at end of file
+ importance = models.CharField(max_length=100, choices=ServerMessageImportance.choices)
diff --git a/user/models.py b/user/models.py
index 588bf2f..53a5ca7 100644
--- a/user/models.py
+++ b/user/models.py
@@ -1,9 +1,9 @@
import uuid
+from django.utils.translation import gettext_lazy as _
from django.contrib.auth.models import User
from django.db import models
-from konova.enums import UserActionLogEntryEnum
from user.enums import UserNotificationEnum
@@ -41,6 +41,16 @@ class KonovaUserExtension(models.Model):
notifications = models.ManyToManyField(UserNotification, related_name="+")
+class UserAction(models.TextChoices):
+ """
+ Defines different possible user actions for UserActionLogEntry
+ """
+ CHECKED = "checked", _("Checked")
+ RECORDED = "recorded", _("Recorded")
+ CREATED = "created", _("Created")
+ DELETED = "deleted", _("Deleted")
+
+
class UserActionLogEntry(models.Model):
""" Wraps a user action log entry
@@ -58,7 +68,7 @@ class UserActionLogEntry(models.Model):
null=True,
blank=True,
help_text="Short name for performed action - optional",
- choices=UserActionLogEntryEnum.as_choices(drop_empty_choice=True),
+ choices=UserAction.choices,
)
def __str__(self):