From 5d734638ab66c52c085a759132f9862bd319d34d Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Wed, 30 Aug 2023 16:20:06 +0200 Subject: [PATCH] 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 --- compensation/forms/eco_account.py | 17 ++ compensation/models/eco_account.py | 14 -- .../tests/ecoaccount/unit/__init__.py | 7 + .../tests/ecoaccount/unit/test_models.py | 128 ++++++++++++++ compensation/views/eco_account/eco_account.py | 4 +- konova/forms/geometry_form.py | 5 +- locale/de/LC_MESSAGES/django.mo | Bin 47502 -> 47250 bytes locale/de/LC_MESSAGES/django.po | 161 ++++++------------ 8 files changed, 209 insertions(+), 127 deletions(-) create mode 100644 compensation/tests/ecoaccount/unit/__init__.py create mode 100644 compensation/tests/ecoaccount/unit/test_models.py diff --git a/compensation/forms/eco_account.py b/compensation/forms/eco_account.py index 53ec207f..9e74e839 100644 --- a/compensation/forms/eco_account.py +++ b/compensation/forms/eco_account.py @@ -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 diff --git a/compensation/models/eco_account.py b/compensation/models/eco_account.py index b1584cb6..fc65e500 100644 --- a/compensation/models/eco_account.py +++ b/compensation/models/eco_account.py @@ -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 diff --git a/compensation/tests/ecoaccount/unit/__init__.py b/compensation/tests/ecoaccount/unit/__init__.py new file mode 100644 index 00000000..b457edc4 --- /dev/null +++ b/compensation/tests/ecoaccount/unit/__init__.py @@ -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 + +""" diff --git a/compensation/tests/ecoaccount/unit/test_models.py b/compensation/tests/ecoaccount/unit/test_models.py new file mode 100644 index 00000000..8f4555ee --- /dev/null +++ b/compensation/tests/ecoaccount/unit/test_models.py @@ -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 diff --git a/compensation/views/eco_account/eco_account.py b/compensation/views/eco_account/eco_account.py index 685ddd2e..840a39c2 100644 --- a/compensation/views/eco_account/eco_account.py +++ b/compensation/views/eco_account/eco_account.py @@ -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)) diff --git a/konova/forms/geometry_form.py b/konova/forms/geometry_form.py index ff5b0ca1..59664fdc 100644 --- a/konova/forms/geometry_form.py +++ b/konova/forms/geometry_form.py @@ -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="", diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 2f155e471e2cdb4654112d59a1edb25d5a55b0af..e5844ea944eb086d7bc0c948b8ee5234484d0af7 100644 GIT binary patch delta 12915 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 TuGHjF+%q}XH8zbKW1Rm7qlbw% delta 13063 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\n" "Language-Team: LANGUAGE \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.
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"