Recording data

* adds dynamic icon for recording and unrecording of data
* adds record view to intervention and eco accounts
* adds quality_check() method for Intervention and EcoAccount class which holds logic for data quality checking
* adds UserAction "unrecorded"
This commit is contained in:
mipel 2021-08-10 17:19:42 +02:00
parent bd2413d63c
commit 5f85f49636
15 changed files with 291 additions and 122 deletions

View File

@ -248,6 +248,10 @@ class EcoAccount(AbstractCompensation):
y, y,
) )
def quality_check(self) -> (bool, dict):
# ToDo
pass
class EcoAccountWithdraw(BaseResource): class EcoAccountWithdraw(BaseResource):
""" """

View File

@ -13,11 +13,15 @@
</a> </a>
{% if has_access %} {% if has_access %}
{% if is_ets_member %} {% if is_ets_member %}
<a href="{% url 'home' %}" class="mr-2"> {% if obj.recorded %}
<button class="btn btn-default" title="{% trans 'Record' %}"> <button class="btn btn-default btn-modal mr-2" title="{% trans 'Unrecord' %}" data-form-url="{% url 'compensation:acc-record' obj.id %}">
{% fa5_icon 'bookmark' 'far' %}
</button>
{% else %}
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Record' %}" data-form-url="{% url 'compensation:acc-record' obj.id %}">
{% fa5_icon 'bookmark' %} {% fa5_icon 'bookmark' %}
</button> </button>
</a> {% endif %}
{% endif %} {% endif %}
{% if is_default_member %} {% if is_default_member %}
<a href="{% url 'home' %}" class="mr-2"> <a href="{% url 'home' %}" class="mr-2">

View File

@ -24,6 +24,7 @@ urlaptterns_eco_acc = [
path('acc/new/', eco_account_views.new_view, name='acc-new'), path('acc/new/', eco_account_views.new_view, name='acc-new'),
path('acc/<id>', eco_account_views.open_view, name='acc-open'), path('acc/<id>', eco_account_views.open_view, name='acc-open'),
path('acc/<id>/log', eco_account_views.log_view, name='acc-log'), path('acc/<id>/log', eco_account_views.log_view, name='acc-log'),
path('acc/<id>/record', eco_account_views.record_view, name='acc-record'),
path('acc/<id>/edit', eco_account_views.edit_view, name='acc-edit'), path('acc/<id>/edit', eco_account_views.edit_view, name='acc-edit'),
path('acc/<id>/remove', eco_account_views.remove_view, name='acc-remove'), path('acc/<id>/remove', eco_account_views.remove_view, name='acc-remove'),
path('acc/<id>/state/new', eco_account_views.state_new_view, name='acc-new-state'), path('acc/<id>/state/new', eco_account_views.state_new_view, name='acc-new-state'),

View File

@ -18,8 +18,8 @@ from compensation.models import EcoAccount
from compensation.tables import EcoAccountTable from compensation.tables import EcoAccountTable
from intervention.forms import NewWithdrawForm from intervention.forms import NewWithdrawForm
from konova.contexts import BaseContext from konova.contexts import BaseContext
from konova.decorators import any_group_check, default_group_required from konova.decorators import any_group_check, default_group_required, conservation_office_group_required
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm, RecordForm
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
from konova.utils.user_checks import in_group from konova.utils.user_checks import in_group
@ -188,6 +188,28 @@ def log_view(request: HttpRequest, id: str):
return render(request, template, context) return render(request, template, context)
@login_required
@conservation_office_group_required
def record_view(request: HttpRequest, id:str):
""" Renders a modal form for recording an eco account
Args:
request (HttpRequest): The incoming request
id (str): The account's id
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
form = RecordForm(request.POST or None, instance=acc, user=request.user)
msg_succ = _("{} unrecorded") if acc.recorded else _("{} recorded")
msg_succ = msg_succ.format(acc.identifier)
return form.process_request(
request,
msg_succ
)
@login_required @login_required
def state_new_view(request: HttpRequest, id: str): def state_new_view(request: HttpRequest, id: str):
""" Renders a form for adding new states for an eco account """ Renders a form for adding new states for an eco account

View File

@ -408,9 +408,13 @@ class RunCheckForm(BaseModalForm):
def is_valid(self): def is_valid(self):
super_result = super().is_valid() super_result = super().is_valid()
# Perform check # Perform check
result, msgs = self.instance.check_validity() msgs = self.instance.quality_check()
self.errors.update(msgs) for msg in msgs:
return result & super_result self.add_error(
"checked_intervention",
msg
)
return super_result and (len(msgs) == 0)
def save(self): def save(self):
with transaction.atomic(): with transaction.atomic():

View File

@ -194,39 +194,62 @@ class Intervention(BaseObject):
self.identifier = new_id self.identifier = new_id
super().save(*args, **kwargs) super().save(*args, **kwargs)
def check_validity(self) -> (bool, dict): def quality_check(self) -> list:
""" Validity check """ Quality check
Returns:
ret_msgs (list): True if quality acceptable, False otherwise
"""
ret_msgs = []
self._check_quality_responsible_data(ret_msgs)
self._check_quality_legal_data(ret_msgs)
# ToDo: Extend for more!
return ret_msgs
def _check_quality_responsible_data(self, ret_msgs: list):
""" Checks data quality of related ResponsibilityData
Args:
ret_msgs (dict): Holds error messages
Returns: Returns:
""" """
ret_msgs = {} try:
missing_str = _("Missing") # Check for file numbers
not_missing_str = _("Exists") if not self.responsible.registration_file_number or len(self.responsible.registration_file_number) == 0:
ret_msgs.append(_("Registration office file number missing"))
# Check responsible data if not self.responsible.conservation_file_number or len(self.responsible.conservation_file_number) == 0:
if self.responsible: ret_msgs.append(_("Conversation office file number missing"))
if self.responsible.registration_file_number is None or len(self.responsible.registration_file_number) == 0: except AttributeError:
ret_msgs["Registration office file number"] = missing_str # responsible data not found
if self.responsible.conservation_file_number is None or len(self.responsible.conservation_file_number) == 0: ret_msgs.append(_("Responsible data missing"))
ret_msgs["Conversation office file number"] = missing_str
else:
ret_msgs["responsible"] = missing_str
# Check revocation def _check_quality_legal_data(self, ret_msgs: list):
""" Checks data quality of related LegalData
Args:
ret_msgs (dict): Holds error messages
Returns:
"""
try:
# Check for a revocation
if self.legal.revocation: if self.legal.revocation:
ret_msgs["Revocation"] = not_missing_str ret_msgs.append(_("Revocation exists"))
if self.legal:
if self.legal.registration_date is None: if self.legal.registration_date is None:
ret_msgs["Registration date"] = missing_str ret_msgs.append(_("Registration date missing"))
if self.legal.binding_date is None:
ret_msgs["Binding on"] = missing_str
else:
ret_msgs["legal"] = missing_str
ret_result = len(ret_msgs) == 0 if self.legal.binding_date is None:
return ret_result, ret_msgs ret_msgs.append(_("Binding on missing"))
except AttributeError:
ret_msgs.append(_("Legal data missing"))
def get_LANIS_link(self) -> str: def get_LANIS_link(self) -> str:
""" Generates a link for LANIS depending on the geometry """ Generates a link for LANIS depending on the geometry

View File

@ -21,11 +21,15 @@
</button> </button>
{% endif %} {% endif %}
{% if is_ets_member %} {% if is_ets_member %}
<a href="{% url 'home' %}" class="mr-2"> {% if intervention.recorded %}
<button class="btn btn-default" title="{% trans 'Record' %}"> <button class="btn btn-default btn-modal mr-2" title="{% trans 'Unrecord' %}" data-form-url="{% url 'intervention:record' intervention.id %}">
{% fa5_icon 'bookmark' 'far' %}
</button>
{% else %}
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Record' %}" data-form-url="{% url 'intervention:record' intervention.id %}">
{% fa5_icon 'bookmark' %} {% fa5_icon 'bookmark' %}
</button> </button>
</a> {% endif %}
{% endif %} {% endif %}
{% if is_default_member %} {% if is_default_member %}
<a href="{% url 'home' %}" class="mr-2"> <a href="{% url 'home' %}" class="mr-2">

View File

@ -8,7 +8,8 @@ Created on: 30.11.20
from django.urls import path from django.urls import path
from intervention.views import index_view, new_view, open_view, edit_view, remove_view, new_document_view, share_view, \ from intervention.views import index_view, new_view, open_view, edit_view, remove_view, new_document_view, share_view, \
create_share_view, remove_revocation_view, new_revocation_view, run_check_view, log_view, new_withdraw_view create_share_view, remove_revocation_view, new_revocation_view, run_check_view, log_view, new_withdraw_view, \
record_view
app_name = "intervention" app_name = "intervention"
urlpatterns = [ urlpatterns = [
@ -22,6 +23,7 @@ urlpatterns = [
path('<id>/share/<token>', share_view, name='share'), path('<id>/share/<token>', share_view, name='share'),
path('<id>/share', create_share_view, name='share-create'), path('<id>/share', create_share_view, name='share-create'),
path('<id>/check', run_check_view, name='run-check'), path('<id>/check', run_check_view, name='run-check'),
path('<id>/record', record_view, name='record'),
# Withdraws # Withdraws
path('<id>/withdraw/new', new_withdraw_view, name='acc-new-withdraw'), path('<id>/withdraw/new', new_withdraw_view, name='acc-new-withdraw'),

View File

@ -10,9 +10,9 @@ from intervention.models import Intervention, Revocation
from intervention.tables import InterventionTable from intervention.tables import InterventionTable
from konova.contexts import BaseContext from konova.contexts import BaseContext
from konova.decorators import * from konova.decorators import *
from konova.forms import SimpleGeomForm, NewDocumentForm, RemoveModalForm from konova.forms import SimpleGeomForm, NewDocumentForm, RemoveModalForm, RecordForm
from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT
from konova.utils.message_templates import FORM_INVALID from konova.utils.message_templates import FORM_INVALID, INTERVENTION_INVALID
from konova.utils.user_checks import in_group from konova.utils.user_checks import in_group
@ -304,34 +304,11 @@ def run_check_view(request: HttpRequest, id: str):
""" """
intervention = get_object_or_404(Intervention, id=id) intervention = get_object_or_404(Intervention, id=id)
form = RunCheckForm(request.POST or None, instance=intervention, user=request.user) form = RunCheckForm(request.POST or None, instance=intervention, user=request.user)
if request.method == "POST": return form.process_request(
if form.is_valid():
form.save()
messages.info(
request, request,
_("Check performed") msg_success=_("Check performed"),
msg_error=INTERVENTION_INVALID
) )
else:
messages.error(
request,
_("There has been errors on this intervention:"),
extra_tags="danger"
)
for error_name, error_val in form.errors.items():
messages.error(
request,
_("{}: {}").format(_(error_name), _(error_val)),
extra_tags="danger"
)
return redirect(request.META.get("HTTP_REFERER", "home"))
elif request.method == "GET":
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, form.template, context)
else:
raise NotImplementedError
@login_required @login_required
@ -413,3 +390,26 @@ def new_withdraw_view(request: HttpRequest, id: str):
request, request,
msg_success=_("Withdraw added") msg_success=_("Withdraw added")
) )
@login_required
@conservation_office_group_required
def record_view(request: HttpRequest, id: str):
""" Renders a modal form for recording an intervention
Args:
request (HttpRequest): The incoming request
id (str): The intervention's id
Returns:
"""
intervention = get_object_or_404(Intervention, id=id)
form = RecordForm(request.POST or None, instance=intervention, user=request.user)
msg_succ = _("{} unrecorded") if intervention.recorded else _("{} recorded")
msg_succ = msg_succ.format(intervention.identifier)
return form.process_request(
request,
msg_succ,
msg_error=_("There are errors on this intervention:")
)

View File

@ -20,6 +20,8 @@ from django.shortcuts import redirect, render
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from compensation.models import EcoAccount
from intervention.models import Intervention
from konova.contexts import BaseContext from konova.contexts import BaseContext
from konova.models import Document, BaseObject from konova.models import Document, BaseObject
from konova.utils.message_templates import FORM_INVALID from konova.utils.message_templates import FORM_INVALID
@ -328,3 +330,71 @@ class NewDocumentForm(BaseModalForm):
self.instance.log.add(edited_action) self.instance.log.add(edited_action)
return doc return doc
class RecordForm(BaseModalForm):
""" Modal form for recording data
"""
confirm = forms.BooleanField(
label=_("Confirm record"),
label_suffix="",
widget=forms.CheckboxInput(),
required=True,
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("Record data")
self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
if self.instance.recorded:
# unrecord!
self.fields["confirm"].label = _("Confirm unrecord")
self.form_title = _("Unrecord data")
self.form_caption = _("I, {} {}, confirm that this data must be unrecorded.").format(self.user.first_name, self.user.last_name)
implemented_cls_logic = {
Intervention,
EcoAccount
}
instance_name = self.instance.__class__
if instance_name not in implemented_cls_logic:
raise NotImplementedError
def is_valid(self):
""" Checks for instance's validity and data quality
Returns:
"""
super_val = super().is_valid()
msgs = self.instance.quality_check()
for msg in msgs:
self.add_error(
"confirm",
msg
)
return super_val and (len(msgs) == 0)
def save(self):
with transaction.atomic():
if self.cleaned_data["confirm"]:
if self.instance.recorded:
# unrecord!
unrecord_action = UserActionLogEntry.objects.create(
user=self.user,
action=UserAction.UNRECORDED
)
# Do not delete the old .recorded attribute, since it shall stay in the .log list!
self.instance.recorded = None
self.instance.log.add(unrecord_action)
else:
record_action = UserActionLogEntry.objects.create(
user=self.user,
action=UserAction.RECORDED
)
self.instance.recorded = record_action
self.instance.log.add(record_action)
self.instance.save()
return self.instance

View File

@ -8,7 +8,6 @@ Created on: 15.12.20
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
from user.enums import UserNotificationEnum
TEST_ORGANISATION_DATA = [ TEST_ORGANISATION_DATA = [
{ {

View File

@ -9,3 +9,4 @@ from django.utils.translation import gettext_lazy as _
FORM_INVALID = _("There was an error on this form.") FORM_INVALID = _("There was an error on this form.")
INTERVENTION_INVALID = _("There are errors in this intervention.")

Binary file not shown.

View File

@ -16,7 +16,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-08-10 14:11+0200\n" "POT-Creation-Date: 2021-08-10 14:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -384,19 +384,19 @@ msgid "Public report"
msgstr "Öffentlicher Bericht" msgstr "Öffentlicher Bericht"
#: compensation/templates/compensation/detail/compensation/includes/controls.html:17 #: compensation/templates/compensation/detail/compensation/includes/controls.html:17
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:17 #: compensation/templates/compensation/detail/eco_account/includes/controls.html:28
#: intervention/templates/intervention/detail/includes/controls.html:32 #: intervention/templates/intervention/detail/includes/controls.html:32
msgid "Edit" msgid "Edit"
msgstr "Bearbeiten" msgstr "Bearbeiten"
#: compensation/templates/compensation/detail/compensation/includes/controls.html:21 #: compensation/templates/compensation/detail/compensation/includes/controls.html:21
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:21 #: compensation/templates/compensation/detail/eco_account/includes/controls.html:32
#: intervention/templates/intervention/detail/includes/controls.html:36 #: intervention/templates/intervention/detail/includes/controls.html:36
msgid "Show log" msgid "Show log"
msgstr "Log anzeigen" msgstr "Log anzeigen"
#: compensation/templates/compensation/detail/compensation/includes/controls.html:24 #: compensation/templates/compensation/detail/compensation/includes/controls.html:24
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:24 #: compensation/templates/compensation/detail/eco_account/includes/controls.html:35
#: intervention/templates/intervention/detail/includes/controls.html:39 #: intervention/templates/intervention/detail/includes/controls.html:39
#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391 #: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
msgid "Delete" msgid "Delete"
@ -522,6 +522,15 @@ msgstr "Zuletzt bearbeitet"
msgid "Shared with" msgid "Shared with"
msgstr "Freigegeben für" msgstr "Freigegeben für"
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:17
msgid "Unrecord"
msgstr "Entzeichnen"
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:21
#: intervention/templates/intervention/detail/includes/controls.html:25
msgid "Record"
msgstr "Verzeichnen"
#: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:8 #: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:8
#: intervention/templates/intervention/detail/includes/withdraws.html:8 #: intervention/templates/intervention/detail/includes/withdraws.html:8
msgid "Eco Account Withdraws" msgid "Eco Account Withdraws"
@ -538,7 +547,7 @@ msgstr "Eingriffskennung"
#: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:34 #: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:34
#: intervention/templates/intervention/detail/includes/withdraws.html:34 #: intervention/templates/intervention/detail/includes/withdraws.html:34
#: user/models.py:50 #: user/models.py:51
msgid "Created" msgid "Created"
msgstr "Erstellt" msgstr "Erstellt"
@ -567,22 +576,22 @@ msgid "Compensation removed"
msgstr "Kompensation entfernt" msgstr "Kompensation entfernt"
#: compensation/views/compensation_views.py:162 #: compensation/views/compensation_views.py:162
#: compensation/views/eco_account_views.py:262 intervention/views.py:96 #: compensation/views/eco_account_views.py:275 intervention/views.py:96
msgid "Document added" msgid "Document added"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
#: compensation/views/compensation_views.py:181 #: compensation/views/compensation_views.py:181
#: compensation/views/eco_account_views.py:206 #: compensation/views/eco_account_views.py:219
msgid "State added" msgid "State added"
msgstr "Zustand hinzugefügt" msgstr "Zustand hinzugefügt"
#: compensation/views/compensation_views.py:200 #: compensation/views/compensation_views.py:200
#: compensation/views/eco_account_views.py:225 #: compensation/views/eco_account_views.py:238
msgid "Action added" msgid "Action added"
msgstr "Maßnahme hinzugefügt" msgstr "Maßnahme hinzugefügt"
#: compensation/views/compensation_views.py:219 #: compensation/views/compensation_views.py:219
#: compensation/views/eco_account_views.py:244 #: compensation/views/eco_account_views.py:257
msgid "Deadline added" msgid "Deadline added"
msgstr "Frist hinzugefügt" msgstr "Frist hinzugefügt"
@ -602,7 +611,15 @@ msgstr "Ökokonto entfernt"
msgid "Withdraw removed" msgid "Withdraw removed"
msgstr "Abbuchung entfernt" msgstr "Abbuchung entfernt"
#: compensation/views/eco_account_views.py:282 intervention/views.py:414 #: compensation/views/eco_account_views.py:196
msgid "{} unrecorded"
msgstr "{} entzeichnet"
#: compensation/views/eco_account_views.py:196
msgid "{} recorded"
msgstr "{} verzeichnet"
#: compensation/views/eco_account_views.py:295 intervention/views.py:414
msgid "Withdraw added" msgid "Withdraw added"
msgstr "Abbuchung hinzugefügt" msgstr "Abbuchung hinzugefügt"
@ -748,7 +765,7 @@ msgstr "Kompensationen und Zahlungen geprüft"
msgid "Run check" msgid "Run check"
msgstr "Prüfung vornehmen" msgstr "Prüfung vornehmen"
#: intervention/forms.py:406 #: intervention/forms.py:406 konova/forms.py:347
msgid "" msgid ""
"I, {} {}, confirm that all necessary control steps have been performed by " "I, {} {}, confirm that all necessary control steps have been performed by "
"myself." "myself."
@ -802,12 +819,12 @@ msgstr ""
#: intervention/templates/intervention/detail/view.html:90 #: intervention/templates/intervention/detail/view.html:90
#: intervention/templates/intervention/detail/view.html:94 #: intervention/templates/intervention/detail/view.html:94
#: intervention/templates/intervention/detail/view.html:98 #: intervention/templates/intervention/detail/view.html:98
msgid "Missing" msgid "missing"
msgstr "Fehlt" msgstr "fehlt"
#: intervention/models.py:205 #: intervention/models.py:205
msgid "Exists" msgid "exists"
msgstr "Existiert" msgstr "vorhanden"
#: intervention/tables.py:70 #: intervention/tables.py:70
msgid "Interventions" msgid "Interventions"
@ -829,10 +846,6 @@ msgstr "Neue Kompensation hinzufügen"
msgid "Remove compensation" msgid "Remove compensation"
msgstr "Kompensation entfernen" msgstr "Kompensation entfernen"
#: intervention/templates/intervention/detail/includes/controls.html:25
msgid "Record"
msgstr "Verzeichnen"
#: intervention/templates/intervention/detail/includes/payments.html:8 #: intervention/templates/intervention/detail/includes/payments.html:8
msgid "Payments" msgid "Payments"
msgstr "Ersatzzahlungen" msgstr "Ersatzzahlungen"
@ -1024,27 +1037,47 @@ msgstr "Datei"
msgid "Added document" msgid "Added document"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
#: konova/management/commands/setup_data.py:42 #: konova/forms.py:338
msgid "Confirm record"
msgstr "Verzeichnen bestätigen"
#: konova/forms.py:346
msgid "Record data"
msgstr "Daten verzeichnen"
#: konova/forms.py:351
msgid "Confirm unrecord"
msgstr "Entzeichnen bestätigen"
#: konova/forms.py:352
msgid "Unrecord data"
msgstr "Daten entzeichnen"
#: konova/forms.py:353
msgid "I, {} {}, confirm that this data must be unrecorded."
msgstr "Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen."
#: konova/management/commands/setup_data.py:41
msgid "On new related data" msgid "On new related data"
msgstr "Wenn neue Daten für mich angelegt werden" msgstr "Wenn neue Daten für mich angelegt werden"
#: konova/management/commands/setup_data.py:43 #: konova/management/commands/setup_data.py:42
msgid "On disabled share link" msgid "On disabled share link"
msgstr "Wenn ein Freigabelink deaktiviert wird" msgstr "Wenn ein Freigabelink deaktiviert wird"
#: konova/management/commands/setup_data.py:44 #: konova/management/commands/setup_data.py:43
msgid "On shared access removed" msgid "On shared access removed"
msgstr "Wenn mir eine Freigabe zu Daten entzogen wird" msgstr "Wenn mir eine Freigabe zu Daten entzogen wird"
#: konova/management/commands/setup_data.py:45 #: konova/management/commands/setup_data.py:44
msgid "On shared data recorded" msgid "On shared data recorded"
msgstr "Wenn meine freigegebenen Daten verzeichnet wurden" msgstr "Wenn meine freigegebenen Daten verzeichnet wurden"
#: konova/management/commands/setup_data.py:46 #: konova/management/commands/setup_data.py:45
msgid "On shared data deleted" msgid "On shared data deleted"
msgstr "Wenn meine freigegebenen Daten gelöscht wurden" msgstr "Wenn meine freigegebenen Daten gelöscht wurden"
#: konova/management/commands/setup_data.py:47 #: konova/management/commands/setup_data.py:46
msgid "On registered data edited" msgid "On registered data edited"
msgstr "Wenn meine freigegebenen Daten bearbeitet wurden" msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
@ -1276,11 +1309,15 @@ msgstr ""
msgid "User contact data" msgid "User contact data"
msgstr "Kontaktdaten" msgstr "Kontaktdaten"
#: user/models.py:51 #: user/models.py:50
msgid "Unrecorded"
msgstr "Entzeichnet"
#: user/models.py:52
msgid "Edited" msgid "Edited"
msgstr "Bearbeitet" msgstr "Bearbeitet"
#: user/models.py:52 #: user/models.py:53
msgid "Deleted" msgid "Deleted"
msgstr "Gelöscht" msgstr "Gelöscht"
@ -2552,9 +2589,6 @@ msgstr ""
#~ msgid "Delete eco account" #~ msgid "Delete eco account"
#~ msgstr "Ökokonto löschen" #~ msgstr "Ökokonto löschen"
#~ msgid "Confirm check on data"
#~ msgstr "Datenprüfung bestätigen"
#~ msgid "Add new EMA" #~ msgid "Add new EMA"
#~ msgstr "Neue EMA hinzufügen" #~ msgstr "Neue EMA hinzufügen"

View File

@ -47,6 +47,7 @@ class UserAction(models.TextChoices):
""" """
CHECKED = "checked", _("Checked") CHECKED = "checked", _("Checked")
RECORDED = "recorded", _("Recorded") RECORDED = "recorded", _("Recorded")
UNRECORDED = "unrecorded", _("Unrecorded")
CREATED = "created", _("Created") CREATED = "created", _("Created")
EDITED = "edited", _("Edited") EDITED = "edited", _("Edited")
DELETED = "deleted", _("Deleted") DELETED = "deleted", _("Deleted")