Intervention check

* adds functionality for check button
* adds highlighting of important data on detail view for intervention
* adds deleting logic to BaseObject model and BaseResource model
* adds RunCheckForm
* adds check_validity() method to Intervention class
* fixes wrong success msg for adding documents
* adds/updates translations
This commit is contained in:
mipel 2021-08-04 15:19:06 +02:00
parent 6d75fdb7a7
commit c8ede788e0
12 changed files with 239 additions and 108 deletions

View File

@ -17,7 +17,6 @@ from compensation.settings import COMPENSATION_IDENTIFIER_LENGTH, COMPENSATION_I
from intervention.models import Intervention, ResponsibilityData from intervention.models import Intervention, ResponsibilityData
from konova.models import BaseObject, BaseResource, Geometry, UuidModel from konova.models import BaseObject, BaseResource, Geometry, UuidModel
from konova.utils.generators import generate_random_string from konova.utils.generators import generate_random_string
from organisation.models import Organisation
from user.models import UserActionLogEntry, UserAction from user.models import UserActionLogEntry, UserAction
@ -154,29 +153,6 @@ class Compensation(AbstractCompensation):
_str = "{}{}{}".format(curr_month, curr_year, rand_str) _str = "{}{}{}".format(curr_month, curr_year, rand_str)
return COMPENSATION_IDENTIFIER_TEMPLATE.format(_str) return COMPENSATION_IDENTIFIER_TEMPLATE.format(_str)
def delete(self, *args, **kwargs):
""" Custom delete functionality
Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
Args:
*args ():
**kwargs ():
Returns:
"""
_now = timezone.now()
_user = kwargs.get("user", None)
with transaction.atomic():
action = UserActionLogEntry.objects.create(
user=_user,
timestamp=_now,
action=UserAction.DELETED
)
self.deleted = action
self.save()
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if self.identifier is None or len(self.identifier) == 0: if self.identifier is None or len(self.identifier) == 0:
# Create new identifier # Create new identifier

View File

@ -6,6 +6,7 @@ from intervention.models import Intervention, ResponsibilityData, LegalData, Rev
class InterventionAdmin(admin.ModelAdmin): class InterventionAdmin(admin.ModelAdmin):
list_display = [ list_display = [
"id", "id",
"identifier",
"title", "title",
"created", "created",
"deleted", "deleted",

View File

@ -383,3 +383,42 @@ class NewRevocationForm(BaseModalForm):
self.instance.legal.revocation = revocation self.instance.legal.revocation = revocation
self.instance.legal.save() self.instance.legal.save()
return revocation return revocation
class RunCheckForm(BaseModalForm):
checked_intervention = forms.BooleanField(
label=_("Checked intervention data"),
label_suffix="",
widget=forms.CheckboxInput(),
required=True,
)
checked_comps = forms.BooleanField(
label=_("Checked compensations data and payments"),
label_suffix="",
widget=forms.CheckboxInput(),
required=True
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("Run check")
self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
def is_valid(self):
super_result = super().is_valid()
# Perform check
result, msgs = self.instance.check_validity()
self.errors.update(msgs)
return result & super_result
def save(self):
with transaction.atomic():
user_action = UserActionLogEntry.objects.create(
user=self.user,
action=UserAction.CHECKED
)
# Replace old checked
if self.instance.checked:
self.instance.checked.delete()
self.instance.checked = user_action
self.instance.save()

View File

@ -9,6 +9,7 @@ from django.contrib.auth.models import User
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.db import transaction from django.db import transaction
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.utils.timezone import now from django.utils.timezone import now
from intervention.settings import INTERVENTION_IDENTIFIER_LENGTH, INTERVENTION_IDENTIFIER_TEMPLATE from intervention.settings import INTERVENTION_IDENTIFIER_LENGTH, INTERVENTION_IDENTIFIER_TEMPLATE
@ -133,36 +134,6 @@ class Intervention(BaseObject):
def __str__(self): def __str__(self):
return "{} ({})".format(self.identifier, self.title) return "{} ({})".format(self.identifier, self.title)
def delete(self, *args, **kwargs):
""" Custom delete functionality
Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
Args:
*args ():
**kwargs ():
Returns:
"""
_now = timezone.now()
_user = kwargs.get("user", None)
with transaction.atomic():
# "Delete" related compensations as well
coms = self.compensations.all()
action = UserActionLogEntry.objects.create(
user=_user,
timestamp=_now,
action=UserAction.DELETED
)
for com in coms:
com.deleted = action
com.save()
self.deleted = action
self.save()
@staticmethod @staticmethod
def _generate_new_identifier() -> str: def _generate_new_identifier() -> str:
""" Generates a new identifier for the intervention object """ Generates a new identifier for the intervention object
@ -234,3 +205,37 @@ class Intervention(BaseObject):
""" """
return self.users.filter(username=user.username).exists() return self.users.filter(username=user.username).exists()
def check_validity(self) -> (bool, dict):
""" Validity check
Returns:
"""
ret_msgs = {}
missing_str = _("Missing")
not_missing_str = _("Exists")
# Check responsible data
if self.responsible:
if self.responsible.registration_file_number is None or len(self.responsible.registration_file_number) == 0:
ret_msgs["Registration office file number"] = missing_str
if self.responsible.conservation_file_number is None or len(self.responsible.conservation_file_number) == 0:
ret_msgs["Conversation office file number"] = missing_str
else:
ret_msgs["responsible"] = missing_str
# Check revocation
if self.legal.revocation:
ret_msgs["Revocation"] = not_missing_str
if self.legal:
if self.legal.registration_date is None:
ret_msgs["Registration date"] = missing_str
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
return ret_result, ret_msgs

View File

@ -16,11 +16,9 @@
{% fa5_icon 'share-alt' %} {% fa5_icon 'share-alt' %}
</button> </button>
{% if is_zb_member %} {% if is_zb_member %}
<a href="{% url 'home' %}" class="mr-2"> <button class="btn btn-default btn-modal mr-2" title="{% trans 'Run check' %}" data-form-url="{% url 'intervention:run-check' intervention.id %}">
<button class="btn btn-default" title="{% trans 'Run check' %}">
{% fa5_icon 'star' %} {% fa5_icon 'star' %}
</button> </button>
</a>
{% endif %} {% endif %}
{% if is_ets_member %} {% if is_ets_member %}
<a href="{% url 'home' %}" class="mr-2"> <a href="{% url 'home' %}" class="mr-2">

View File

@ -20,15 +20,15 @@
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
<div class="table-container"> <div class="table-container">
<table class="table table-hover"> <table class="table table-hover">
<tr> <tr {% if not intervention.title %}class="alert alert-danger"{% endif %}>
<th class="w-25" scope="row">{% trans 'Title' %}</th> <th class="w-25" scope="row">{% trans 'Title' %}</th>
<td class="align-middle">{{intervention.title}}</td> <td class="align-middle">{{intervention.title|default_if_none:""}}</td>
</tr> </tr>
<tr> <tr {% if not intervention.legal.process_type %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Process type' %}</th> <th scope="row">{% trans 'Process type' %}</th>
<td class="align-middle">{{intervention.legal.process_type|default_if_none:""}}</td> <td class="align-middle">{{intervention.legal.process_type|default_if_none:""}}</td>
</tr> </tr>
<tr> <tr {% if not intervention.legal.law %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Law' %}</th> <th scope="row">{% trans 'Law' %}</th>
<td class="align-middle">{{intervention.legal.law|default_if_none:""}}</td> <td class="align-middle">{{intervention.legal.law|default_if_none:""}}</td>
</tr> </tr>
@ -36,7 +36,7 @@
<th scope="row">{% trans 'Registration office' %}</th> <th scope="row">{% trans 'Registration office' %}</th>
<td class="align-middle">{{intervention.responsible.registration_office|default_if_none:""}}</td> <td class="align-middle">{{intervention.responsible.registration_office|default_if_none:""}}</td>
</tr> </tr>
<tr> <tr {% if not intervention.responsible.registration_file_number %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Registration office file number' %}</th> <th scope="row">{% trans 'Registration office file number' %}</th>
<td class="align-middle">{{intervention.responsible.registration_file_number|default_if_none:""}}</td> <td class="align-middle">{{intervention.responsible.registration_file_number|default_if_none:""}}</td>
</tr> </tr>
@ -44,11 +44,11 @@
<th scope="row">{% trans 'Conservation office' %}</th> <th scope="row">{% trans 'Conservation office' %}</th>
<td class="align-middle">{{intervention.responsible.conservation_office|default_if_none:""}}</td> <td class="align-middle">{{intervention.responsible.conservation_office|default_if_none:""}}</td>
</tr> </tr>
<tr> <tr{% if not intervention.responsible.conservation_file_number %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Conversation office file number' %}</th> <th scope="row">{% trans 'Conversation office file number' %}</th>
<td class="align-middle">{{intervention.responsible.conservation_file_number|default_if_none:""}}</td> <td class="align-middle">{{intervention.responsible.conservation_file_number|default_if_none:""}}</td>
</tr> </tr>
<tr> <tr {% if not intervention.responsible.handler %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Intervention handler' %}</th> <th scope="row">{% trans 'Intervention handler' %}</th>
<td class="align-middle">{{intervention.responsible.handler|default_if_none:""}}</td> <td class="align-middle">{{intervention.responsible.handler|default_if_none:""}}</td>
</tr> </tr>
@ -80,11 +80,11 @@
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
<tr> <tr {% if not intervention.legal.registration_date %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Registration date' %}</th> <th scope="row">{% trans 'Registration date' %}</th>
<td class="align-middle">{{intervention.legal.registration_date|default_if_none:""}}</td> <td class="align-middle">{{intervention.legal.registration_date|default_if_none:""}}</td>
</tr> </tr>
<tr> <tr {% if not intervention.legal.binding_date %}class="alert alert-danger"{% endif %}>
<th scope="row">{% trans 'Binding on' %}</th> <th scope="row">{% trans 'Binding on' %}</th>
<td class="align-middle">{{intervention.legal.binding_date|default_if_none:""}}</td> <td class="align-middle">{{intervention.legal.binding_date|default_if_none:""}}</td>
</tr> </tr>

View File

@ -8,7 +8,7 @@ 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 create_share_view, remove_revocation_view, new_revocation_view, run_check_view
app_name = "intervention" app_name = "intervention"
urlpatterns = [ urlpatterns = [
@ -20,6 +20,7 @@ urlpatterns = [
path('<id>/remove', remove_view, name='remove'), path('<id>/remove', remove_view, name='remove'),
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'),
# Revocation routes # Revocation routes
path('<id>/revocation/new', new_revocation_view, name='revocation-new'), path('<id>/revocation/new', new_revocation_view, name='revocation-new'),

View File

@ -4,7 +4,8 @@ from django.utils.translation import gettext_lazy as _
from django.http import HttpRequest from django.http import HttpRequest
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from intervention.forms import NewInterventionForm, EditInterventionForm, ShareInterventionForm, NewRevocationForm from intervention.forms import NewInterventionForm, EditInterventionForm, ShareInterventionForm, NewRevocationForm, \
RunCheckForm
from intervention.models import Intervention, Revocation 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
@ -90,7 +91,10 @@ def new_document_view(request: HttpRequest, id: str):
""" """
intervention = get_object_or_404(Intervention, id=id) intervention = get_object_or_404(Intervention, id=id)
form = NewDocumentForm(request.POST or None, request.FILES or None, instance=intervention, user=request.user) form = NewDocumentForm(request.POST or None, request.FILES or None, instance=intervention, user=request.user)
return form.process_request(request) return form.process_request(
request,
msg_success=_("Document added")
)
@login_required @login_required
@ -286,6 +290,49 @@ def create_share_view(request: HttpRequest, id: str):
raise NotImplementedError raise NotImplementedError
@login_required
def run_check_view(request: HttpRequest, id: str):
""" Renders check form for an intervention
Args:
request (HttpRequest): The incoming request
id (str): Intervention's id
Returns:
"""
intervention = get_object_or_404(Intervention, id=id)
form = RunCheckForm(request.POST or None, instance=intervention, user=request.user)
if request.method == "POST":
if form.is_valid():
form.save()
messages.info(
request,
_("Check performed")
)
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
def new_revocation_view(request: HttpRequest, id: str): def new_revocation_view(request: HttpRequest, id: str):
""" Renders sharing form for an intervention """ Renders sharing form for an intervention

View File

@ -313,7 +313,7 @@ class NewDocumentForm(BaseModalForm):
created=action, created=action,
title=self.cleaned_data["title"], title=self.cleaned_data["title"],
comment=self.cleaned_data["comment"], comment=self.cleaned_data["comment"],
document=self.cleaned_data["file"], file=self.cleaned_data["file"],
date_of_creation=self.cleaned_data["creation_date"], date_of_creation=self.cleaned_data["creation_date"],
) )
self.instance.documents.add(doc) self.instance.documents.add(doc)

View File

@ -10,9 +10,9 @@ import uuid
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.contrib.gis.db.models import MultiPolygonField from django.contrib.gis.db.models import MultiPolygonField
from django.db import models from django.db import models, transaction
from user.models import UserActionLogEntry from user.models import UserActionLogEntry, UserAction
class UuidModel(models.Model): class UuidModel(models.Model):
@ -38,6 +38,11 @@ class BaseResource(UuidModel):
class Meta: class Meta:
abstract = True abstract = True
def delete(self, using=None, keep_parents=False):
if self.created:
self.created.delete()
super().delete()
class BaseObject(BaseResource): class BaseObject(BaseResource):
""" """
@ -53,6 +58,31 @@ class BaseObject(BaseResource):
class Meta: class Meta:
abstract = True abstract = True
def delete(self, *args, **kwargs):
""" Custom delete functionality
Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
Args:
*args ():
**kwargs ():
Returns:
"""
if self.deleted:
# Nothing to do here
return
_user = kwargs.get("user", None)
with transaction.atomic():
action = UserActionLogEntry.objects.create(
user=_user,
action=UserAction.DELETED
)
self.deleted = action
self.save()
class DeadlineType(models.TextChoices): class DeadlineType(models.TextChoices):
""" """

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-04 13:27+0200\n" "POT-Creation-Date: 2021-08-04 15:12+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"
@ -160,27 +160,27 @@ msgstr "Neue Maßnahme"
msgid "Insert data for the new action" msgid "Insert data for the new action"
msgstr "Geben Sie die Daten der neuen Maßnahme ein" msgstr "Geben Sie die Daten der neuen Maßnahme ein"
#: compensation/models.py:60 #: compensation/models.py:59
msgid "cm" msgid "cm"
msgstr "" msgstr ""
#: compensation/models.py:61 #: compensation/models.py:60
msgid "m" msgid "m"
msgstr "" msgstr ""
#: compensation/models.py:62 #: compensation/models.py:61
msgid "km" msgid "km"
msgstr "" msgstr ""
#: compensation/models.py:63 #: compensation/models.py:62
msgid "m²" msgid "m²"
msgstr "" msgstr ""
#: compensation/models.py:64 #: compensation/models.py:63
msgid "ha" msgid "ha"
msgstr "" msgstr ""
#: compensation/models.py:65 #: compensation/models.py:64
msgid "Pieces" msgid "Pieces"
msgstr "Stück" msgstr "Stück"
@ -331,12 +331,12 @@ msgid "Public report"
msgstr "Öffentlicher Bericht" msgstr "Öffentlicher Bericht"
#: compensation/templates/compensation/detail/includes/controls.html:17 #: compensation/templates/compensation/detail/includes/controls.html:17
#: intervention/templates/intervention/detail/includes/controls.html:34 #: intervention/templates/intervention/detail/includes/controls.html:32
msgid "Edit" msgid "Edit"
msgstr "Bearbeiten" msgstr "Bearbeiten"
#: compensation/templates/compensation/detail/includes/controls.html:21 #: compensation/templates/compensation/detail/includes/controls.html:21
#: intervention/templates/intervention/detail/includes/controls.html:38 #: intervention/templates/intervention/detail/includes/controls.html:36
#: 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"
msgstr "Löschen" msgstr "Löschen"
@ -461,7 +461,7 @@ msgstr "Zahlung gelöscht"
msgid "Withdraw removed" msgid "Withdraw removed"
msgstr "Abbuchung entfernt" msgstr "Abbuchung entfernt"
#: compensation/views.py:280 #: compensation/views.py:280 intervention/views.py:96
msgid "Document added" msgid "Document added"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
@ -606,6 +606,35 @@ msgstr "Muss kleiner als 15 Mb sein"
msgid "Add revocation" msgid "Add revocation"
msgstr "Widerspruch hinzufügen" msgstr "Widerspruch hinzufügen"
#: intervention/forms.py:390
msgid "Checked intervention data"
msgstr "Eingriffsdaten geprüft"
#: intervention/forms.py:396
msgid "Checked compensations data and payments"
msgstr "Kompensationen und Zahlungen geprüft"
#: intervention/forms.py:404
#: intervention/templates/intervention/detail/includes/controls.html:19
msgid "Run check"
msgstr "Prüfung vornehmen"
#: intervention/forms.py:405
msgid ""
"I, {} {}, confirm that all necessary control steps have been performed by "
"myself."
msgstr ""
"Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt "
"wurden:"
#: intervention/models.py:216
msgid "Missing"
msgstr "Fehlt"
#: intervention/models.py:217
msgid "Exists"
msgstr "Existiert"
#: intervention/tables.py:70 #: intervention/tables.py:70
msgid "Interventions" msgid "Interventions"
msgstr "Eingriffe" msgstr "Eingriffe"
@ -624,11 +653,7 @@ msgstr "Neue Kompensation hinzufügen"
msgid "Remove compensation" msgid "Remove compensation"
msgstr "Kompensation entfernen" msgstr "Kompensation entfernen"
#: intervention/templates/intervention/detail/includes/controls.html:20 #: intervention/templates/intervention/detail/includes/controls.html:25
msgid "Run check"
msgstr "Prüfung vornehmen"
#: intervention/templates/intervention/detail/includes/controls.html:27
msgid "Record" msgid "Record"
msgstr "Verzeichnen" msgstr "Verzeichnen"
@ -711,19 +736,19 @@ msgstr "Datum Zulassung bzw. Satzungsbeschluss"
msgid "Binding on" msgid "Binding on"
msgstr "Datum Bestandskraft" msgstr "Datum Bestandskraft"
#: intervention/views.py:67 #: intervention/views.py:68
msgid "Intervention {} added" msgid "Intervention {} added"
msgstr "Eingriff {} hinzugefügt" msgstr "Eingriff {} hinzugefügt"
#: intervention/views.py:70 intervention/views.py:167 #: intervention/views.py:71 intervention/views.py:171
msgid "Invalid input" msgid "Invalid input"
msgstr "Eingabe fehlerhaft" msgstr "Eingabe fehlerhaft"
#: intervention/views.py:126 #: intervention/views.py:130
msgid "This intervention has a revocation from {}" msgid "This intervention has a revocation from {}"
msgstr "Es existiert ein Widerspruch vom {}" msgstr "Es existiert ein Widerspruch vom {}"
#: intervention/views.py:141 #: intervention/views.py:145
msgid "" msgid ""
"Remember: This data has not been shared with you, yet. This means you can " "Remember: This data has not been shared with you, yet. This means you can "
"only read but can not edit or perform any actions like running a check or " "only read but can not edit or perform any actions like running a check or "
@ -733,35 +758,47 @@ msgstr ""
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, " "bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
"noch Prüfungen durchführen oder verzeichnen können." "noch Prüfungen durchführen oder verzeichnen können."
#: intervention/views.py:164 #: intervention/views.py:168
msgid "{} edited" msgid "{} edited"
msgstr "{} bearbeitet" msgstr "{} bearbeitet"
#: intervention/views.py:193 #: intervention/views.py:197
msgid "{} removed" msgid "{} removed"
msgstr "{} entfernt" msgstr "{} entfernt"
#: intervention/views.py:214 #: intervention/views.py:218
msgid "Revocation removed" msgid "Revocation removed"
msgstr "Widerspruch entfernt" msgstr "Widerspruch entfernt"
#: intervention/views.py:240 #: intervention/views.py:244
msgid "{} has already been shared with you" msgid "{} has already been shared with you"
msgstr "{} wurde bereits für Sie freigegeben" msgstr "{} wurde bereits für Sie freigegeben"
#: intervention/views.py:245 #: intervention/views.py:249
msgid "{} has been shared with you" msgid "{} has been shared with you"
msgstr "{} ist nun für Sie freigegeben" msgstr "{} ist nun für Sie freigegeben"
#: intervention/views.py:252 #: intervention/views.py:256
msgid "Share link invalid" msgid "Share link invalid"
msgstr "Freigabelink ungültig" msgstr "Freigabelink ungültig"
#: intervention/views.py:276 #: intervention/views.py:280
msgid "Share settings updated" msgid "Share settings updated"
msgstr "Freigabe Einstellungen aktualisiert" msgstr "Freigabe Einstellungen aktualisiert"
#: intervention/views.py:307 #: intervention/views.py:311
msgid "Check performed"
msgstr "Prüfung durchgeführt"
#: intervention/views.py:316
msgid "There has been errors on this intervention:"
msgstr "Es liegen Fehler in diesem Eingriff vor:"
#: intervention/views.py:322
msgid "{}: {}"
msgstr ""
#: intervention/views.py:354
msgid "Revocation added" msgid "Revocation added"
msgstr "Widerspruch hinzugefügt" msgstr "Widerspruch hinzugefügt"
@ -839,19 +876,19 @@ msgstr "Wenn meine freigegebenen Daten gelöscht wurden"
msgid "On registered data edited" msgid "On registered data edited"
msgstr "Wenn meine freigegebenen Daten bearbeitet wurden" msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
#: konova/models.py:61 #: konova/models.py:92
msgid "Finished" msgid "Finished"
msgstr "Umgesetzt bis" msgstr "Umgesetzt bis"
#: konova/models.py:62 #: konova/models.py:93
msgid "Maintain" msgid "Maintain"
msgstr "Unterhaltung bis" msgstr "Unterhaltung bis"
#: konova/models.py:63 #: konova/models.py:94
msgid "Control" msgid "Control"
msgstr "Kontrolle am" msgstr "Kontrolle am"
#: konova/models.py:64 #: konova/models.py:95
msgid "Other" msgid "Other"
msgstr "Sonstige" msgstr "Sonstige"
@ -2365,9 +2402,6 @@ msgstr ""
#~ msgid "Show intervention" #~ msgid "Show intervention"
#~ msgstr "Zeige Eingriffe" #~ msgstr "Zeige Eingriffe"
#~ msgid "Compensation management"
#~ msgstr "Kompensationsverwaltung"
#~ msgid "Show compensation" #~ msgid "Show compensation"
#~ msgstr "Zeige Kompensationen" #~ msgstr "Zeige Kompensationen"