Fixes and improvements
* moves diff_states message back to table top for direct presentation in compensation/detail/view.html * removes diff_states rendering in deadline card in compensation/detail/view.html * fixes before_state adding based on GET parameter * refactors UserActionlogEntryEnum into a UserAction TextChoice (Django 3.x) * adds ordering of compensation states depending on surface value * refactors ServerMessageImportance from enum into TextChoice (Django 3.x) * adds/updates translations
This commit is contained in:
parent
816600535a
commit
cd5b2e264b
@ -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"],
|
||||
|
@ -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):
|
||||
|
@ -57,10 +57,5 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if sum_before_states > sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
@ -21,6 +21,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body scroll-300">
|
||||
{% if sum_before_states > sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -36,7 +41,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for state in comp.after_states.all %}
|
||||
{% for state in after_states %}
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
{{ state.biotope_type }}
|
||||
@ -53,10 +58,5 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if sum_before_states > sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
@ -21,6 +21,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body scroll-300">
|
||||
{% if sum_before_states < sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -36,7 +41,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for state in comp.before_states.all %}
|
||||
{% for state in before_states %}
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
{{ state.biotope_type }}
|
||||
@ -53,10 +58,5 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if sum_before_states < sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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"
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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"
|
@ -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):
|
||||
|
Binary file not shown.
@ -4,17 +4,17 @@
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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"
|
||||
|
||||
|
@ -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))
|
||||
importance = models.CharField(max_length=100, choices=ServerMessageImportance.choices)
|
||||
|
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user