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 2f155e47..e5844ea9 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 1963c4c8..f243ba26 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -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 \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"