Eco account unit tests

* adds eco account unit tests
* adds validity check to eco account form to check on existing deductions and potential conflict with reduced deductable surface
* improves geojson handling on SimpleGeomForm
* adds/updates translation
pull/347/head
mpeltriaux 1 year ago
parent 5684b9b6d9
commit 3fa76063d0

@ -172,6 +172,23 @@ class EditEcoAccountForm(NewEcoAccountForm):
disabled_fields
)
def is_valid(self):
valid = super().is_valid()
deductable_surface = self.cleaned_data.get("surface")
deduction_surface_sum = self.instance.get_deductions_surface()
if deductable_surface < deduction_surface_sum:
self.add_error(
"surface",
_("{}m² have been deducted from this eco account so far. The given value of {} would be too low.").format(
deduction_surface_sum,
deductable_surface
)
)
valid &= False
return valid
def save(self, user: User, geom_form: SimpleGeomForm):
with transaction.atomic():
# Fetch data from cleaned POST values

@ -59,20 +59,6 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
def __str__(self):
return f"{self.identifier} ({self.title})"
def clean(self):
# Deductable surface can not be larger than added states after surface
after_state_sum = self.get_surface_after_states()
if self.deductable_surface > after_state_sum:
raise ValidationError(_("Deductable surface can not be larger than existing surfaces in after states"))
# Deductable surface can not be lower than amount of already deducted surfaces
# User needs to contact deducting user in case of further problems
deducted_sum = self.get_deductions_surface()
if self.deductable_surface < deducted_sum:
raise ValidationError(
_("Deductable surface can not be smaller than the sum of already existing deductions. Please contact the responsible users for the deductions!")
)
def save(self, *args, **kwargs):
if self.identifier is None or len(self.identifier) == 0:
# Create new identifier if none was given

@ -0,0 +1,7 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 30.08.23
"""

@ -0,0 +1,128 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 30.08.23
"""
from django.core.exceptions import ObjectDoesNotExist
from django.urls import reverse
from compensation.models import EcoAccountDocument
from konova.tests.test_views import BaseTestCase
from konova.utils.message_templates import DOCUMENT_REMOVED_TEMPLATE, DEDUCTION_REMOVED
from user.models import UserAction
class EcoAccountTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
def test_str(self):
self.assertEqual(str(self.eco_account), f"{self.eco_account.identifier} ({self.eco_account.title})")
def test_save(self):
old_id = self.eco_account.identifier
self.assertIsNotNone(self.eco_account.identifier)
self.eco_account.identifier = None
self.eco_account.save()
self.assertIsNotNone(self.eco_account.identifier)
self.assertNotEqual(old_id, self.eco_account.identifier)
def test_property_deductions_surface_sum(self):
self.assertEqual(
self.eco_account.deductions_surface_sum,
self.eco_account.get_deductions_surface()
)
def test_get_documents(self):
docs = self.eco_account.get_documents()
self.assertEqual(docs.count(), 0)
doc = self.create_dummy_document(EcoAccountDocument, self.eco_account)
self.assertIn(doc, self.eco_account.get_documents())
def test_get_share_link(self):
self.assertEqual(
self.eco_account.get_share_link(),
reverse(
"compensation:acc:share-token",
args=(self.eco_account.id, self.eco_account.access_token)
)
)
def test_get_deductable_rest_relative(self):
self.assertEqual(self.eco_account.deductions.count(), 0)
self.eco_account.deductable_surface = 5.0
self.eco_account.save()
self.eco_account.update_deductable_rest()
self.assertEqual(self.eco_account.get_deductable_rest_relative(), 100)
self.eco_account.deductable_surface = None
self.eco_account.save()
self.assertEqual(self.eco_account.get_deductable_rest_relative(), 0)
class EcoAccountDocumentTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
def test_delete(self):
doc = self.create_dummy_document(
EcoAccountDocument,
self.eco_account
)
doc_title = doc.title
docs = self.eco_account.get_documents()
self.assertIn(doc, docs)
doc.delete(user=self.superuser)
last_log = self.eco_account.log.first()
self.assertEqual(last_log.user, self.superuser)
self.assertEqual(last_log.action, UserAction.EDITED)
self.assertEqual(last_log.comment, DOCUMENT_REMOVED_TEMPLATE.format(
doc_title
))
try:
doc.refresh_from_db()
self.fail("Document should not have been fetchable")
except ObjectDoesNotExist:
pass
class EcoAccountDeductionTestCase(BaseTestCase):
def setUp(self) -> None:
super().setUp()
def test_str(self):
self.assertEqual(str(self.deduction), f"{self.deduction.surface} of {self.deduction.account}")
def test_delete(self):
self.deduction.account = self.eco_account
self.deduction.intervention = self.intervention
self.deduction.save()
self.eco_account.update_deductable_rest()
old_deductable_rest = self.eco_account.deductable_rest
deduction_surface = self.deduction.surface
self.deduction.delete(self.superuser)
last_log_intervention = self.intervention.log.first()
last_log_account = self.eco_account.log.first()
logs = [
last_log_intervention,
last_log_account,
]
for log in logs:
self.assertEqual(log.action, UserAction.EDITED)
self.assertEqual(log.user, self.superuser)
self.assertEqual(log.comment, DEDUCTION_REMOVED)
self.assertLess(old_deductable_rest, self.eco_account.deductable_rest)
self.assertEqual(old_deductable_rest + deduction_surface, self.eco_account.deductable_rest)
try:
self.deduction.refresh_from_db()
self.fail("Deduction still fetchable after deleting")
except ObjectDoesNotExist:
pass

@ -150,7 +150,9 @@ def edit_view(request: HttpRequest, id: str):
data_form = EditEcoAccountForm(request.POST or None, instance=acc)
geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=acc)
if request.method == "POST":
if data_form.is_valid() and geom_form.is_valid():
data_form_valid = data_form.is_valid()
geom_form_valid = geom_form.is_valid()
if data_form_valid and geom_form_valid:
# The data form takes the geom form for processing, as well as the performing user
acc = data_form.save(request.user, geom_form)
messages.success(request, _("Eco-Account {} edited").format(acc.identifier))

@ -8,10 +8,10 @@ Created on: 15.08.22
import json
from django.contrib.gis import gdal
from django.contrib.gis.forms import MultiPolygonField
from django.contrib.gis.geos import MultiPolygon, Polygon
from django.contrib.gis.geos.prototypes.io import WKTWriter
from django.utils.translation import gettext_lazy as _
from django.forms import JSONField
from konova.forms.base_form import BaseForm
from konova.models import Geometry
@ -27,8 +27,7 @@ class SimpleGeomForm(BaseForm):
"""
read_only = True
geometry_simplified = False
geom = MultiPolygonField(
srid=DEFAULT_SRID_RLP,
geom = JSONField(
label=_("Geometry"),
help_text=_(""),
label_suffix="",

Binary file not shown.

@ -43,7 +43,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-10 10:16+0200\n"
"POT-Creation-Date: 2023-08-30 13:24+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"
@ -96,15 +96,16 @@ msgstr "Verantwortliche Stelle"
msgid "Click for selection"
msgstr "Auswählen..."
#: analysis/forms.py:70
#: analysis/forms.py:70 analysis/tests/unit/test_forms.py:25
msgid "Generate report"
msgstr "Bericht generieren"
#: analysis/forms.py:71
#: analysis/forms.py:71 analysis/tests/unit/test_forms.py:26
msgid "Select a timespan and the desired conservation office"
msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle"
#: analysis/forms.py:74 konova/forms/modals/base_form.py:30
#: analysis/forms.py:74 analysis/tests/unit/test_forms.py:29
#: konova/forms/modals/base_form.py:30
msgid "Continue"
msgstr "Weiter"
@ -484,7 +485,15 @@ msgstr "Ökokonto XY; Flur ABC"
msgid "Edit Eco-Account"
msgstr "Ökokonto bearbeiten"
#: compensation/forms/eco_account.py:232
#: compensation/forms/eco_account.py:183
msgid ""
"{}m² have been deducted from this eco account so far. The given value of {} "
"would be too low."
msgstr ""
"{}n² wurden bereits von diesem Ökokonto abgebucht. Der eingegebene Wert von {} "
"wäre daher zu klein."
#: compensation/forms/eco_account.py:249
msgid "The account can not be removed, since there are still deductions."
msgstr ""
"Das Ökokonto kann nicht entfernt werden, da hierzu noch Abbuchungen "
@ -597,16 +606,19 @@ msgid "Insert the amount"
msgstr "Menge eingeben"
#: compensation/forms/modals/compensation_action.py:94
#: compensation/tests/compensation/unit/test_forms.py:42
msgid "New action"
msgstr "Neue Maßnahme"
#: compensation/forms/modals/compensation_action.py:95
#: compensation/tests/compensation/unit/test_forms.py:43
msgid "Insert data for the new action"
msgstr "Geben Sie die Daten der neuen Maßnahme ein"
#: compensation/forms/modals/compensation_action.py:119
#: compensation/templates/compensation/detail/compensation/includes/actions.html:68
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:67
#: compensation/tests/compensation/unit/test_forms.py:84
#: ema/templates/ema/detail/includes/actions.html:65
msgid "Edit action"
msgstr "Maßnahme bearbeiten"
@ -640,18 +652,21 @@ msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
#: compensation/forms/modals/deadline.py:65
#: konova/tests/unit/test_deadline.py:29
msgid "New deadline"
msgstr "Neue Frist"
#: compensation/forms/modals/deadline.py:66
#: konova/tests/unit/test_deadline.py:30
msgid "Insert data for the new deadline"
msgstr "Geben Sie die Daten der neuen Frist ein"
#: compensation/forms/modals/deadline.py:75
#: compensation/forms/modals/deadline.py:78
#: konova/tests/unit/test_deadline.py:57
msgid "Please explain this 'other' type of deadline."
msgstr "Bitte erklären Sie um welchen 'sonstigen' Termin es sich handelt."
#: compensation/forms/modals/deadline.py:92
#: compensation/forms/modals/deadline.py:95
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:64
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:62
#: ema/templates/ema/detail/includes/deadlines.html:62
@ -706,10 +721,12 @@ msgid "in m²"
msgstr ""
#: compensation/forms/modals/state.py:72
#: compensation/tests/compensation/unit/test_forms.py:175
msgid "New state"
msgstr "Neuer Zustand"
#: compensation/forms/modals/state.py:73
#: compensation/tests/compensation/unit/test_forms.py:176
msgid "Insert data for the new state"
msgstr "Geben Sie die Daten des neuen Zustandes ein"
@ -722,6 +739,7 @@ msgstr "Objekt entfernt"
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:62
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:62
#: compensation/tests/compensation/unit/test_forms.py:236
#: ema/templates/ema/detail/includes/states-after.html:60
#: ema/templates/ema/detail/includes/states-before.html:60
msgid "Edit state"
@ -755,21 +773,6 @@ msgstr ""
msgid "Pieces"
msgstr "Stück"
#: compensation/models/eco_account.py:62
msgid ""
"Deductable surface can not be larger than existing surfaces in after states"
msgstr ""
"Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht "
"überschreiten"
#: compensation/models/eco_account.py:69
msgid ""
"Deductable surface can not be smaller than the sum of already existing "
"deductions. Please contact the responsible users for the deductions!"
msgstr ""
"Es wurde bereits mehr Fläche abgebucht, als Sie nun als abbuchbar einstellen "
"wollen. Kontaktieren Sie die für die Abbuchungen verantwortlichen Nutzer!"
#: compensation/tables/compensation.py:33 compensation/tables/eco_account.py:34
#: ema/tables.py:36 intervention/tables.py:33
#: konova/filters/mixins/geo_reference.py:42
@ -1424,6 +1427,7 @@ msgid "Binding on"
msgstr "Datum Bestandskraft bzw. Rechtskraft"
#: intervention/forms/intervention.py:216
#: intervention/tests/unit/test_forms.py:27
#: intervention/views/intervention.py:105
msgid "New intervention"
msgstr "Neuer Eingriff"
@ -1802,7 +1806,6 @@ msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
#: konova/forms/modals/document_form.py:49
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
#: venv_py3.9/lib/python3.9/site-packages/django/db/models/fields/files.py:231
msgid "File"
msgstr "Datei"
@ -2234,15 +2237,11 @@ msgstr "Dokument bearbeitet"
msgid "Edited general data"
msgstr "Allgemeine Daten bearbeitet"
#: konova/utils/message_templates.py:82
msgid "Added deadline"
msgstr "Frist/Termin hinzugefügt"
#: konova/utils/message_templates.py:85
#: konova/utils/message_templates.py:84
msgid "Geometry conflict detected with {}"
msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}"
#: konova/utils/message_templates.py:86
#: konova/utils/message_templates.py:85
msgid ""
"The geometry contained more than {} vertices. It had to be simplified to "
"match the allowed limit of {} vertices."
@ -2250,20 +2249,20 @@ msgstr ""
"Die Geometrie enthielt mehr als {} Eckpunkte. Sie musste vereinfacht werden "
"um die Obergrenze von {} erlaubten Eckpunkten einzuhalten."
#: konova/utils/message_templates.py:89
#: konova/utils/message_templates.py:88
msgid "This intervention has {} revocations"
msgstr "Dem Eingriff liegen {} Widersprüche vor"
#: konova/utils/message_templates.py:92
#: konova/utils/message_templates.py:91
msgid "Checked on {} by {}"
msgstr "Am {} von {} geprüft worden"
#: konova/utils/message_templates.py:93
#: konova/utils/message_templates.py:92
msgid "Data has changed since last check on {} by {}"
msgstr ""
"Daten wurden nach der letzten Prüfung geändert. Letzte Prüfung am {} durch {}"
#: konova/utils/message_templates.py:94
#: konova/utils/message_templates.py:93
msgid "Current data not checked yet"
msgstr "Momentane Daten noch nicht geprüft"
@ -2297,7 +2296,7 @@ msgstr ""
"Dieses Datum ist unrealistisch. Geben Sie bitte das korrekte Datum ein "
"(>1950)."
#: konova/views/home.py:74 templates/navbars/navbar.html:16
#: konova/views/home.py:75 templates/navbars/navbar.html:16
msgid "Home"
msgstr "Home"
@ -2305,7 +2304,7 @@ msgstr "Home"
msgid "Log"
msgstr "Log"
#: konova/views/map_proxy.py:71
#: konova/views/map_proxy.py:70
msgid ""
"The external service is currently unavailable.<br>Please try again in a few "
"moments..."
@ -3118,26 +3117,20 @@ msgstr "Team verlassen"
#: venv/lib/python3.7/site-packages/bootstrap4/components.py:17
#: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3
#: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/messages.html:4
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/components.py:17
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/templates/bootstrap4/messages.html:4
msgid "close"
msgstr "Schließen"
#: venv/lib/python3.7/site-packages/click/_termui_impl.py:496
#: venv_py3.9/lib/python3.9/site-packages/click/_termui_impl.py:496
#, python-brace-format
msgid "{editor}: Editing failed"
msgstr ""
#: venv/lib/python3.7/site-packages/click/_termui_impl.py:500
#: venv_py3.9/lib/python3.9/site-packages/click/_termui_impl.py:500
#, python-brace-format
msgid "{editor}: Editing failed: {e}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:20
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:20
msgid ""
"Click will abort further execution because Python was configured to use "
"ASCII as encoding for the environment. Consult https://click.palletsprojects."
@ -3145,7 +3138,6 @@ msgid ""
msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:56
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:56
msgid ""
"Additional information: on this system no suitable UTF-8 locales were "
"discovered. This most likely requires resolving by reconfiguring the locale "
@ -3153,14 +3145,12 @@ msgid ""
msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:65
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:65
msgid ""
"This system supports the C.UTF-8 locale which is recommended. You might be "
"able to resolve your issue by exporting the following environment variables:"
msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:75
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:75
#, python-brace-format
msgid ""
"This system lists some UTF-8 supporting locales that you can pick from. The "
@ -3168,7 +3158,6 @@ msgid ""
msgstr ""
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:93
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:93
msgid ""
"Click discovered that you exported a UTF-8 locale but the locale system "
"could not pick up from it because it does not exist. The exported locale is "
@ -3176,32 +3165,25 @@ msgid ""
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1095
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1095
msgid "Aborted!"
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1279
#: venv/lib/python3.7/site-packages/click/decorators.py:434
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1279
#: venv_py3.9/lib/python3.9/site-packages/click/decorators.py:434
msgid "Show this message and exit."
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1308
#: venv/lib/python3.7/site-packages/click/core.py:1334
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1308
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1334
#, python-brace-format
msgid "(Deprecated) {text}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1351
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1351
msgid "Options"
msgstr "Optionen"
#: venv/lib/python3.7/site-packages/click/core.py:1375
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1375
#, python-brace-format
msgid "Got unexpected extra argument ({args})"
msgid_plural "Got unexpected extra arguments ({args})"
@ -3209,32 +3191,26 @@ msgstr[0] ""
msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/core.py:1390
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1390
msgid "DeprecationWarning: The command {name!r} is deprecated."
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:1607
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1607
msgid "Commands"
msgstr "Befehle"
#: venv/lib/python3.7/site-packages/click/core.py:1639
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1639
msgid "Missing command."
msgstr "Befehl fehlt"
#: venv/lib/python3.7/site-packages/click/core.py:1717
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1717
msgid "No such command {name!r}."
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2258
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2258
msgid "Value must be an iterable."
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2278
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2278
#, python-brace-format
msgid "Takes {nargs} values but 1 was given."
msgid_plural "Takes {nargs} values but {len} were given."
@ -3242,99 +3218,81 @@ msgstr[0] ""
msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/core.py:2701
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2701
#, python-brace-format
msgid "env var: {var}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2724
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2724
msgid "(dynamic)"
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2735
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2735
#, python-brace-format
msgid "default: {default}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/core.py:2748
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2748
msgid "required"
msgstr ""
#: venv/lib/python3.7/site-packages/click/decorators.py:339
#: venv_py3.9/lib/python3.9/site-packages/click/decorators.py:339
#, python-format
msgid "%(prog)s, version %(version)s"
msgstr ""
#: venv/lib/python3.7/site-packages/click/decorators.py:403
#: venv_py3.9/lib/python3.9/site-packages/click/decorators.py:403
msgid "Show the version and exit."
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:43
#: venv/lib/python3.7/site-packages/click/exceptions.py:79
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:43
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:79
#, python-brace-format
msgid "Error: {message}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:71
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:71
#, python-brace-format
msgid "Try '{command} {option}' for help."
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:120
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:120
#, python-brace-format
msgid "Invalid value: {message}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:122
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:122
#, python-brace-format
msgid "Invalid value for {param_hint}: {message}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:178
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:178
msgid "Missing argument"
msgstr "Argument fehlt"
#: venv/lib/python3.7/site-packages/click/exceptions.py:180
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:180
msgid "Missing option"
msgstr "Option fehlt"
#: venv/lib/python3.7/site-packages/click/exceptions.py:182
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:182
msgid "Missing parameter"
msgstr "Parameter fehlt"
#: venv/lib/python3.7/site-packages/click/exceptions.py:184
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:184
#, python-brace-format
msgid "Missing {param_type}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:191
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:191
#, python-brace-format
msgid "Missing parameter: {param_name}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:211
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:211
#, python-brace-format
msgid "No such option: {name}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:223
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:223
#, python-brace-format
msgid "Did you mean {possibility}?"
msgid_plural "(Possible options: {possibilities})"
@ -3342,75 +3300,61 @@ msgstr[0] ""
msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:261
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:261
msgid "unknown error"
msgstr ""
#: venv/lib/python3.7/site-packages/click/exceptions.py:268
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:268
msgid "Could not open file {filename!r}: {message}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/parser.py:231
#: venv_py3.9/lib/python3.9/site-packages/click/parser.py:231
msgid "Argument {name!r} takes {nargs} values."
msgstr ""
#: venv/lib/python3.7/site-packages/click/parser.py:413
#: venv_py3.9/lib/python3.9/site-packages/click/parser.py:413
msgid "Option {name!r} does not take a value."
msgstr ""
#: venv/lib/python3.7/site-packages/click/parser.py:474
#: venv_py3.9/lib/python3.9/site-packages/click/parser.py:474
msgid "Option {name!r} requires an argument."
msgid_plural "Option {name!r} requires {nargs} arguments."
msgstr[0] ""
msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/shell_completion.py:316
#: venv_py3.9/lib/python3.9/site-packages/click/shell_completion.py:316
msgid "Shell completion is not supported for Bash versions older than 4.4."
msgstr ""
#: venv/lib/python3.7/site-packages/click/shell_completion.py:322
#: venv_py3.9/lib/python3.9/site-packages/click/shell_completion.py:322
msgid "Couldn't detect Bash version, shell completion is not supported."
msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:161
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:161
msgid "Repeat for confirmation"
msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:178
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:178
msgid "Error: The value you entered was invalid."
msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:180
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:180
#, python-brace-format
msgid "Error: {e.message}"
msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:191
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:191
msgid "Error: The two entered values do not match."
msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:247
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:247
msgid "Error: invalid input"
msgstr ""
#: venv/lib/python3.7/site-packages/click/termui.py:798
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:798
msgid "Press any key to continue..."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:258
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:258
#, python-brace-format
msgid ""
"Choose from:\n"
@ -3418,82 +3362,67 @@ msgid ""
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:290
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:290
msgid "{value!r} is not {choice}."
msgid_plural "{value!r} is not one of {choices}."
msgstr[0] ""
msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/types.py:380
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:380
msgid "{value!r} does not match the format {format}."
msgid_plural "{value!r} does not match the formats {formats}."
msgstr[0] ""
msgstr[1] ""
#: venv/lib/python3.7/site-packages/click/types.py:402
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:402
msgid "{value!r} is not a valid {number_type}."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:458
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:458
#, python-brace-format
msgid "{value} is not in the range {range}."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:599
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:599
msgid "{value!r} is not a valid boolean."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:623
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:623
msgid "{value!r} is not a valid UUID."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:801
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:801
msgid "file"
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:803
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:803
msgid "directory"
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:805
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:805
msgid "path"
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:851
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:851
msgid "{name} {filename!r} does not exist."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:860
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:860
msgid "{name} {filename!r} is a file."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:868
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:868
msgid "{name} {filename!r} is a directory."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:876
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:876
msgid "{name} {filename!r} is not writable."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:884
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:884
msgid "{name} {filename!r} is not readable."
msgstr ""
#: venv/lib/python3.7/site-packages/click/types.py:951
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:951
#, python-brace-format
msgid "{len_type} values are required, but {len_value} was given."
msgid_plural "{len_type} values are required, but {len_value} were given."
@ -3501,22 +3430,18 @@ msgstr[0] ""
msgstr[1] ""
#: venv/lib/python3.7/site-packages/django/contrib/messages/apps.py:7
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/messages/apps.py:7
msgid "Messages"
msgstr "Nachrichten"
#: venv/lib/python3.7/site-packages/django/contrib/sitemaps/apps.py:7
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/sitemaps/apps.py:7
msgid "Site Maps"
msgstr ""
#: venv/lib/python3.7/site-packages/django/contrib/staticfiles/apps.py:9
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/staticfiles/apps.py:9
msgid "Static Files"
msgstr ""
#: venv/lib/python3.7/site-packages/django/contrib/syndication/apps.py:7
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/syndication/apps.py:7
msgid "Syndication"
msgstr ""
@ -4688,6 +4613,24 @@ msgstr ""
msgid "Unable to connect to qpid with SASL mechanism %s"
msgstr ""
#~ msgid ""
#~ "Deductable surface can not be larger than existing surfaces in after "
#~ "states"
#~ msgstr ""
#~ "Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht "
#~ "überschreiten"
#~ msgid ""
#~ "Deductable surface can not be smaller than the sum of already existing "
#~ "deductions. Please contact the responsible users for the deductions!"
#~ msgstr ""
#~ "Es wurde bereits mehr Fläche abgebucht, als Sie nun als abbuchbar "
#~ "einstellen wollen. Kontaktieren Sie die für die Abbuchungen "
#~ "verantwortlichen Nutzer!"
#~ msgid "Added deadline"
#~ msgstr "Frist/Termin hinzugefügt"
#~ msgid "Change default configuration for your KSP map"
#~ msgstr "Karteneinstellungen ändern"

Loading…
Cancel
Save