Merge pull request 'master' (#134) from master into Docker

Reviewed-on: SGD-Nord/konova#134
This commit is contained in:
mpeltriaux 2022-03-04 13:33:35 +01:00
commit 76e018e084
26 changed files with 448 additions and 158 deletions

View File

@ -8,7 +8,10 @@
"responsible": { "responsible": {
"conservation_office": null, "conservation_office": null,
"conservation_file_number": null, "conservation_file_number": null,
"handler": null "handler": {
"type": null,
"detail": "Someone"
}
}, },
"legal": { "legal": {
"agreement_date": null "agreement_date": null

View File

@ -7,7 +7,10 @@
"responsible": { "responsible": {
"conservation_office": null, "conservation_office": null,
"conservation_file_number": null, "conservation_file_number": null,
"handler": null "handler": {
"type": null,
"detail": "Someone"
}
}, },
"before_states": [ "before_states": [
], ],

View File

@ -9,7 +9,10 @@
"registration_file_number": null, "registration_file_number": null,
"conservation_office": null, "conservation_office": null,
"conservation_file_number": null, "conservation_file_number": null,
"handler": null "handler": {
"type": null,
"detail": "Someone"
}
}, },
"legal": { "legal": {
"registration_date": null, "registration_date": null,

View File

@ -48,7 +48,10 @@
"responsible": { "responsible": {
"conservation_office": null, "conservation_office": null,
"conservation_file_number": "123-TEST", "conservation_file_number": "123-TEST",
"handler": "TEST_HANDLER_CHANGED" "handler": {
"type": null,
"detail": "TEST HANDLER CHANGED"
}
}, },
"legal": { "legal": {
"agreement_date": "2022-01-11" "agreement_date": "2022-01-11"

View File

@ -47,7 +47,10 @@
"responsible": { "responsible": {
"conservation_office": null, "conservation_office": null,
"conservation_file_number": "TEST_CHANGED", "conservation_file_number": "TEST_CHANGED",
"handler": "TEST_HANDLER_CHANGED" "handler": {
"type": null,
"detail": "TEST_HANDLER_CHANGED"
}
}, },
"before_states": [], "before_states": [],
"after_states": [], "after_states": [],

View File

@ -49,7 +49,10 @@
"registration_file_number": "CHANGED", "registration_file_number": "CHANGED",
"conservation_office": null, "conservation_office": null,
"conservation_file_number": "CHANGED", "conservation_file_number": "CHANGED",
"handler": null "handler": {
"type": null,
"detail": "TEST_HANDLER_CHANGED"
}
}, },
"legal": { "legal": {
"registration_date": "2022-02-01", "registration_date": "2022-02-01",

View File

@ -126,7 +126,7 @@ class APIV1UpdateTestCase(BaseAPIV1TestCase):
self.assertEqual(put_props["deductable_surface"], str(self.eco_account.deductable_surface)) self.assertEqual(put_props["deductable_surface"], str(self.eco_account.deductable_surface))
self.assertEqual(put_props["responsible"]["conservation_office"], self.eco_account.responsible.conservation_office) self.assertEqual(put_props["responsible"]["conservation_office"], self.eco_account.responsible.conservation_office)
self.assertEqual(put_props["responsible"]["conservation_file_number"], self.eco_account.responsible.conservation_file_number) self.assertEqual(put_props["responsible"]["conservation_file_number"], self.eco_account.responsible.conservation_file_number)
self.assertEqual(put_props["responsible"]["handler"], self.eco_account.responsible.handler) self.assertEqual(put_props["responsible"]["handler"]["detail"], self.eco_account.responsible.handler.detail)
self.assertEqual(put_props["legal"]["agreement_date"], str(self.eco_account.legal.registration_date)) self.assertEqual(put_props["legal"]["agreement_date"], str(self.eco_account.legal.registration_date))
self.assertEqual(len(put_props["actions"]), self.eco_account.actions.count()) self.assertEqual(len(put_props["actions"]), self.eco_account.actions.count())
self.assertEqual(len(put_props["before_states"]), self.eco_account.before_states.count()) self.assertEqual(len(put_props["before_states"]), self.eco_account.before_states.count())
@ -156,7 +156,7 @@ class APIV1UpdateTestCase(BaseAPIV1TestCase):
self.assertNotEqual(modified_on, self.ema.modified) self.assertNotEqual(modified_on, self.ema.modified)
self.assertEqual(put_props["responsible"]["conservation_office"], self.ema.responsible.conservation_office) self.assertEqual(put_props["responsible"]["conservation_office"], self.ema.responsible.conservation_office)
self.assertEqual(put_props["responsible"]["conservation_file_number"], self.ema.responsible.conservation_file_number) self.assertEqual(put_props["responsible"]["conservation_file_number"], self.ema.responsible.conservation_file_number)
self.assertEqual(put_props["responsible"]["handler"], self.ema.responsible.handler) self.assertEqual(put_props["responsible"]["handler"]["detail"], self.ema.responsible.handler.detail)
self.assertEqual(len(put_props["actions"]), self.ema.actions.count()) self.assertEqual(len(put_props["actions"]), self.ema.actions.count())
self.assertEqual(len(put_props["before_states"]), self.ema.before_states.count()) self.assertEqual(len(put_props["before_states"]), self.ema.before_states.count())
self.assertEqual(len(put_props["after_states"]), self.ema.after_states.count()) self.assertEqual(len(put_props["after_states"]), self.ema.after_states.count())

View File

@ -9,9 +9,9 @@ from django.db import transaction
from api.utils.serializer.v1.serializer import AbstractModelAPISerializerV1, AbstractCompensationAPISerializerV1Mixin, \ from api.utils.serializer.v1.serializer import AbstractModelAPISerializerV1, AbstractCompensationAPISerializerV1Mixin, \
LegalAPISerializerV1Mixin, ResponsibilityAPISerializerV1Mixin, DeductableAPISerializerV1Mixin LegalAPISerializerV1Mixin, ResponsibilityAPISerializerV1Mixin, DeductableAPISerializerV1Mixin
from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID, CODELIST_HANDLER_ID
from compensation.models import EcoAccount from compensation.models import EcoAccount
from intervention.models import Legal, Responsibility from intervention.models import Legal, Responsibility, Handler
from konova.models import Geometry from konova.models import Geometry
from konova.tasks import celery_update_parcels from konova.tasks import celery_update_parcels
from user.models import UserActionLogEntry from user.models import UserActionLogEntry
@ -44,7 +44,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
return { return {
"conservation_office": self._konova_code_to_json(responsible.conservation_office), "conservation_office": self._konova_code_to_json(responsible.conservation_office),
"conservation_file_number": responsible.conservation_file_number, "conservation_file_number": responsible.conservation_file_number,
"handler": responsible.handler, "handler": self._handler_to_json(responsible.handler),
} }
def _set_responsibility(self, obj, responsibility_data: dict): def _set_responsibility(self, obj, responsibility_data: dict):
@ -64,7 +64,11 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
CODELIST_CONSERVATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID,
) )
obj.responsible.conservation_file_number = responsibility_data["conservation_file_number"] obj.responsible.conservation_file_number = responsibility_data["conservation_file_number"]
obj.responsible.handler = responsibility_data["handler"] obj.responsible.handler.type = self._konova_code_from_json(
responsibility_data["handler"]["type"],
CODELIST_HANDLER_ID,
)
obj.responsible.handler.detail = responsibility_data["handler"]["detail"]
return obj return obj
def _set_legal(self, obj, legal_data): def _set_legal(self, obj, legal_data):
@ -92,7 +96,9 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
# Create linked objects # Create linked objects
obj = EcoAccount() obj = EcoAccount()
obj.responsible = Responsibility() obj.responsible = Responsibility(
handler=Handler()
)
obj.legal = Legal() obj.legal = Legal()
created = create_action created = create_action
obj.created = created obj.created = created
@ -128,6 +134,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
obj = self._set_legal(obj, properties["legal"]) obj = self._set_legal(obj, properties["legal"])
obj.geometry.save() obj.geometry.save()
obj.responsible.handler.save()
obj.responsible.save() obj.responsible.save()
obj.legal.save() obj.legal.save()
obj.save() obj.save()
@ -170,6 +177,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
obj = self._set_legal(obj, properties["legal"]) obj = self._set_legal(obj, properties["legal"])
obj.geometry.save() obj.geometry.save()
obj.responsible.handler.save()
obj.responsible.save() obj.responsible.save()
obj.legal.save() obj.legal.save()
obj.save() obj.save()

View File

@ -9,9 +9,9 @@ from django.db import transaction
from api.utils.serializer.v1.serializer import AbstractModelAPISerializerV1, AbstractCompensationAPISerializerV1Mixin, \ from api.utils.serializer.v1.serializer import AbstractModelAPISerializerV1, AbstractCompensationAPISerializerV1Mixin, \
ResponsibilityAPISerializerV1Mixin ResponsibilityAPISerializerV1Mixin
from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID, CODELIST_HANDLER_ID
from ema.models import Ema from ema.models import Ema
from intervention.models import Responsibility from intervention.models import Responsibility, Handler
from konova.models import Geometry from konova.models import Geometry
from konova.tasks import celery_update_parcels from konova.tasks import celery_update_parcels
from user.models import UserActionLogEntry from user.models import UserActionLogEntry
@ -31,7 +31,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
return { return {
"conservation_office": self._konova_code_to_json(responsible.conservation_office), "conservation_office": self._konova_code_to_json(responsible.conservation_office),
"conservation_file_number": responsible.conservation_file_number, "conservation_file_number": responsible.conservation_file_number,
"handler": responsible.handler, "handler": self._handler_to_json(responsible.handler),
} }
def _set_responsibility(self, obj, responsibility_data: dict): def _set_responsibility(self, obj, responsibility_data: dict):
@ -51,7 +51,11 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
CODELIST_CONSERVATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID,
) )
obj.responsible.conservation_file_number = responsibility_data["conservation_file_number"] obj.responsible.conservation_file_number = responsibility_data["conservation_file_number"]
obj.responsible.handler = responsibility_data["handler"] obj.responsible.handler.type = self._konova_code_from_json(
responsibility_data["handler"]["type"],
CODELIST_HANDLER_ID,
)
obj.responsible.handler.detail = responsibility_data["handler"]["detail"]
return obj return obj
def _initialize_objects(self, json_model, user): def _initialize_objects(self, json_model, user):
@ -75,7 +79,9 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
# Create linked objects # Create linked objects
obj = Ema() obj = Ema()
obj.responsible = Responsibility() obj.responsible = Responsibility(
handler=Handler()
)
created = create_action created = create_action
obj.created = created obj.created = created
obj.geometry = geometry obj.geometry = geometry
@ -101,6 +107,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
obj = self._set_responsibility(obj, properties["responsible"]) obj = self._set_responsibility(obj, properties["responsible"])
obj.geometry.save() obj.geometry.save()
obj.responsible.handler.save()
obj.responsible.save() obj.responsible.save()
obj.save() obj.save()
@ -140,6 +147,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
obj = self._set_responsibility(obj, properties["responsible"]) obj = self._set_responsibility(obj, properties["responsible"])
obj.geometry.save() obj.geometry.save()
obj.responsible.handler.save()
obj.responsible.save() obj.responsible.save()
obj.save() obj.save()

View File

@ -11,7 +11,7 @@ from django.db.models import QuerySet
from api.utils.serializer.v1.serializer import AbstractModelAPISerializerV1, \ from api.utils.serializer.v1.serializer import AbstractModelAPISerializerV1, \
ResponsibilityAPISerializerV1Mixin, LegalAPISerializerV1Mixin, DeductableAPISerializerV1Mixin ResponsibilityAPISerializerV1Mixin, LegalAPISerializerV1Mixin, DeductableAPISerializerV1Mixin
from compensation.models import Payment from compensation.models import Payment
from intervention.models import Intervention, Responsibility, Legal from intervention.models import Intervention, Responsibility, Legal, Handler
from konova.models import Geometry from konova.models import Geometry
from konova.tasks import celery_update_parcels from konova.tasks import celery_update_parcels
from user.models import UserActionLogEntry from user.models import UserActionLogEntry
@ -69,7 +69,9 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
# Create linked objects # Create linked objects
obj = Intervention() obj = Intervention()
resp = Responsibility() resp = Responsibility(
handler=Handler()
)
legal = Legal() legal = Legal()
created = create_action created = create_action
obj.legal = legal obj.legal = legal
@ -152,6 +154,7 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
self._set_responsibility(obj, properties["responsible"]) self._set_responsibility(obj, properties["responsible"])
self._set_legal(obj, properties["legal"]) self._set_legal(obj, properties["legal"])
obj.responsible.handler.save()
obj.responsible.save() obj.responsible.save()
obj.geometry.save() obj.geometry.save()
obj.legal.save() obj.legal.save()
@ -188,6 +191,7 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
obj.geometry.geom = self._create_geometry_from_json(json_model) obj.geometry.geom = self._create_geometry_from_json(json_model)
obj.geometry.modified = update_action obj.geometry.modified = update_action
obj.responsible.handler.save()
obj.responsible.save() obj.responsible.save()
obj.geometry.save() obj.geometry.save()
obj.legal.save() obj.legal.save()

View File

@ -15,9 +15,9 @@ from api.utils.serializer.serializer import AbstractModelAPISerializer
from codelist.models import KonovaCode from codelist.models import KonovaCode
from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_PROCESS_TYPE_ID, \ from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_PROCESS_TYPE_ID, \
CODELIST_LAW_ID, CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, \ CODELIST_LAW_ID, CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, \
CODELIST_COMPENSATION_ACTION_DETAIL_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID CODELIST_COMPENSATION_ACTION_DETAIL_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID, CODELIST_HANDLER_ID
from compensation.models import CompensationAction, UnitChoices, CompensationState from compensation.models import CompensationAction, UnitChoices, CompensationState
from intervention.models import Responsibility, Legal from intervention.models import Responsibility, Legal, Handler
from konova.models import Deadline, DeadlineType from konova.models import Deadline, DeadlineType
from konova.utils.message_templates import DATA_UNSHARED from konova.utils.message_templates import DATA_UNSHARED
@ -176,6 +176,12 @@ class ResponsibilityAPISerializerV1Mixin:
class Meta: class Meta:
abstract = True abstract = True
def _handler_to_json(self, handler: Handler):
return {
"type": self._konova_code_to_json(handler.type),
"detail": handler.detail
}
def _responsible_to_json(self, responsible: Responsibility): def _responsible_to_json(self, responsible: Responsibility):
""" Serializes Responsibility model into json """ Serializes Responsibility model into json
@ -190,7 +196,7 @@ class ResponsibilityAPISerializerV1Mixin:
"registration_file_number": responsible.registration_file_number, "registration_file_number": responsible.registration_file_number,
"conservation_office": self._konova_code_to_json(responsible.conservation_office), "conservation_office": self._konova_code_to_json(responsible.conservation_office),
"conservation_file_number": responsible.conservation_file_number, "conservation_file_number": responsible.conservation_file_number,
"handler": responsible.handler, "handler": self._handler_to_json(responsible.handler),
} }
def _set_responsibility(self, obj, responsibility_data: dict): def _set_responsibility(self, obj, responsibility_data: dict):
@ -215,7 +221,11 @@ class ResponsibilityAPISerializerV1Mixin:
CODELIST_CONSERVATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID,
) )
obj.responsible.conservation_file_number = responsibility_data["conservation_file_number"] obj.responsible.conservation_file_number = responsibility_data["conservation_file_number"]
obj.responsible.handler = responsibility_data["handler"] obj.responsible.handler.type = self._konova_code_from_json(
responsibility_data["handler"]["type"],
CODELIST_HANDLER_ID,
)
obj.responsible.handler.detail = responsibility_data["handler"]["detail"]
return obj return obj

View File

@ -11,7 +11,7 @@ from xml.etree import ElementTree as etree
from codelist.models import KonovaCode, KonovaCodeList from codelist.models import KonovaCode, KonovaCodeList
from codelist.settings import CODELIST_INTERVENTION_HANDLER_ID, CODELIST_CONSERVATION_OFFICE_ID, \ from codelist.settings import CODELIST_INTERVENTION_HANDLER_ID, CODELIST_CONSERVATION_OFFICE_ID, \
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, CODELIST_COMPENSATION_HANDLER_ID, \ CODELIST_REGISTRATION_OFFICE_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, CODELIST_HANDLER_ID, \
CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_CLASS_ID, CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID, \ CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_CLASS_ID, CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID, \
CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID, \ CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID, \
CODELIST_COMPENSATION_ACTION_DETAIL_ID CODELIST_COMPENSATION_ACTION_DETAIL_ID
@ -36,7 +36,7 @@ class Command(BaseKonovaCommand):
CODELIST_BIOTOPES_ID, CODELIST_BIOTOPES_ID,
CODELIST_BIOTOPES_EXTRA_CODES_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID,
CODELIST_LAW_ID, CODELIST_LAW_ID,
CODELIST_COMPENSATION_HANDLER_ID, CODELIST_HANDLER_ID,
CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_ID,
CODELIST_COMPENSATION_ACTION_CLASS_ID, CODELIST_COMPENSATION_ACTION_CLASS_ID,
CODELIST_COMPENSATION_ACTION_DETAIL_ID, CODELIST_COMPENSATION_ACTION_DETAIL_ID,

View File

@ -1,9 +1,13 @@
# Generated by Django 3.1.3 on 2022-01-14 08:36 # Generated by Django 3.1.3 on 2022-01-14 08:36
from django.core.management import call_command
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
def load_initial_codes(apps, schema_editor):
call_command('update_codelist')
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
@ -32,4 +36,5 @@ class Migration(migrations.Migration):
('codes', models.ManyToManyField(blank=True, help_text='Codes for this list', related_name='code_lists', to='codelist.KonovaCode')), ('codes', models.ManyToManyField(blank=True, help_text='Codes for this list', related_name='code_lists', to='codelist.KonovaCode')),
], ],
), ),
migrations.RunPython(load_initial_codes),
] ]

View File

@ -19,7 +19,7 @@ CODELIST_BIOTOPES_EXTRA_CODES_ID = 975 # CLZusatzbezeichnung
CODELIST_LAW_ID = 1048 # CLVerfahrensrecht CODELIST_LAW_ID = 1048 # CLVerfahrensrecht
CODELIST_PROCESS_TYPE_ID = 44382 # CLVerfahrenstyp CODELIST_PROCESS_TYPE_ID = 44382 # CLVerfahrenstyp
CODELIST_COMPENSATION_HANDLER_ID = 1052 # CLEingreifer CODELIST_HANDLER_ID = 1052 # CLEingreifer
CODELIST_COMPENSATION_ACTION_ID = 1026 # CLMassnahmedetail CODELIST_COMPENSATION_ACTION_ID = 1026 # CLMassnahmedetail
CODELIST_COMPENSATION_ACTION_DETAIL_ID = 1035 # CLZusatzmerkmal CODELIST_COMPENSATION_ACTION_DETAIL_ID = 1035 # CLZusatzmerkmal
CODELIST_COMPENSATION_ACTION_CLASS_ID = 1034 # CLMassnahmeklasse CODELIST_COMPENSATION_ACTION_CLASS_ID = 1034 # CLMassnahmeklasse

View File

@ -13,10 +13,10 @@ from django.utils.translation import gettext_lazy as _
from django import forms from django import forms
from codelist.models import KonovaCode from codelist.models import KonovaCode
from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID, CODELIST_HANDLER_ID
from compensation.models import Compensation, EcoAccount from compensation.models import Compensation, EcoAccount
from intervention.inputs import GenerateInput from intervention.inputs import GenerateInput
from intervention.models import Intervention, Responsibility, Legal from intervention.models import Intervention, Responsibility, Legal, Handler
from konova.forms import BaseForm, SimpleGeomForm from konova.forms import BaseForm, SimpleGeomForm
from konova.utils.message_templates import EDITED_GENERAL_DATA, COMPENSATION_ADDED_TEMPLATE from konova.utils.message_templates import EDITED_GENERAL_DATA, COMPENSATION_ADDED_TEMPLATE
from user.models import UserActionLogEntry from user.models import UserActionLogEntry
@ -101,12 +101,30 @@ class CompensationResponsibleFormMixin(forms.Form):
} }
) )
) )
handler = forms.CharField(
label=_("Eco-account handler"), handler_type = forms.ModelChoiceField(
label=_("Eco-Account handler type"),
label_suffix="",
help_text=_("What type of handler is responsible for the ecoaccount?"),
required=False,
queryset=KonovaCode.objects.filter(
is_archived=False,
is_leaf=True,
code_lists__in=[CODELIST_HANDLER_ID],
),
widget=autocomplete.ModelSelect2(
url="codes-handler-autocomplete",
attrs={
"data-placeholder": _("Click for selection"),
}
),
)
handler_detail = forms.CharField(
label=_("Eco-Account handler detail"),
label_suffix="", label_suffix="",
max_length=255, max_length=255,
required=False, required=False,
help_text=_("Who handles the eco-account"), help_text=_("Detail input on the handler"),
widget=forms.TextInput( widget=forms.TextInput(
attrs={ attrs={
"placeholder": _("Company Mustermann"), "placeholder": _("Company Mustermann"),
@ -345,7 +363,8 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix
"registration_date", "registration_date",
"surface", "surface",
"conservation_file_number", "conservation_file_number",
"handler", "handler_type",
"handler_detail",
"comment", "comment",
] ]
@ -368,7 +387,8 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix
identifier = self.cleaned_data.get("identifier", None) identifier = self.cleaned_data.get("identifier", None)
title = self.cleaned_data.get("title", None) title = self.cleaned_data.get("title", None)
registration_date = self.cleaned_data.get("registration_date", None) registration_date = self.cleaned_data.get("registration_date", None)
handler = self.cleaned_data.get("handler", None) handler_type = self.cleaned_data.get("handler_type", None)
handler_detail = self.cleaned_data.get("handler_detail", None)
surface = self.cleaned_data.get("surface", None) surface = self.cleaned_data.get("surface", None)
conservation_office = self.cleaned_data.get("conservation_office", None) conservation_office = self.cleaned_data.get("conservation_office", None)
conservation_file_number = self.cleaned_data.get("conservation_file_number", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None)
@ -379,6 +399,11 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix
# Process the geometry form # Process the geometry form
geometry = geom_form.save(action) geometry = geom_form.save(action)
handler = Handler.objects.create(
type=handler_type,
detail=handler_detail,
)
responsible = Responsibility.objects.create( responsible = Responsibility.objects.create(
handler=handler, handler=handler,
conservation_file_number=conservation_file_number, conservation_file_number=conservation_file_number,
@ -423,11 +448,13 @@ class EditEcoAccountForm(NewEcoAccountForm):
reg_date = self.instance.legal.registration_date reg_date = self.instance.legal.registration_date
if reg_date is not None: if reg_date is not None:
reg_date = reg_date.isoformat() reg_date = reg_date.isoformat()
form_data = { form_data = {
"identifier": self.instance.identifier, "identifier": self.instance.identifier,
"title": self.instance.title, "title": self.instance.title,
"surface": self.instance.deductable_surface, "surface": self.instance.deductable_surface,
"handler": self.instance.responsible.handler, "handler_type": self.instance.responsible.handler.type,
"handler_detail": self.instance.responsible.handler.detail,
"registration_date": reg_date, "registration_date": reg_date,
"conservation_office": self.instance.responsible.conservation_office, "conservation_office": self.instance.responsible.conservation_office,
"conservation_file_number": self.instance.responsible.conservation_file_number, "conservation_file_number": self.instance.responsible.conservation_file_number,
@ -445,7 +472,8 @@ class EditEcoAccountForm(NewEcoAccountForm):
identifier = self.cleaned_data.get("identifier", None) identifier = self.cleaned_data.get("identifier", None)
title = self.cleaned_data.get("title", None) title = self.cleaned_data.get("title", None)
registration_date = self.cleaned_data.get("registration_date", None) registration_date = self.cleaned_data.get("registration_date", None)
handler = self.cleaned_data.get("handler", None) handler_type = self.cleaned_data.get("handler_type", None)
handler_detail = self.cleaned_data.get("handler_detail", None)
surface = self.cleaned_data.get("surface", None) surface = self.cleaned_data.get("surface", None)
conservation_office = self.cleaned_data.get("conservation_office", None) conservation_office = self.cleaned_data.get("conservation_office", None)
conservation_file_number = self.cleaned_data.get("conservation_file_number", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None)
@ -458,7 +486,9 @@ class EditEcoAccountForm(NewEcoAccountForm):
geometry = geom_form.save(action) geometry = geom_form.save(action)
# Update responsible data # Update responsible data
self.instance.responsible.handler = handler self.instance.responsible.handler.type = handler_type
self.instance.responsible.handler.detail = handler_detail
self.instance.responsible.handler.save()
self.instance.responsible.conservation_office = conservation_office self.instance.responsible.conservation_office = conservation_office
self.instance.responsible.conservation_file_number = conservation_file_number self.instance.responsible.conservation_file_number = conservation_file_number
self.instance.responsible.save() self.instance.responsible.save()

View File

@ -14,7 +14,7 @@ from django.utils.translation import gettext_lazy as _
from compensation.forms.forms import AbstractCompensationForm, CompensationResponsibleFormMixin from compensation.forms.forms import AbstractCompensationForm, CompensationResponsibleFormMixin
from ema.models import Ema, EmaDocument from ema.models import Ema, EmaDocument
from intervention.models import Responsibility from intervention.models import Responsibility, Handler
from konova.forms import SimpleGeomForm, NewDocumentModalForm from konova.forms import SimpleGeomForm, NewDocumentModalForm
from user.models import UserActionLogEntry from user.models import UserActionLogEntry
@ -31,7 +31,8 @@ class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin):
"title", "title",
"conservation_office", "conservation_office",
"conservation_file_number", "conservation_file_number",
"handler", "handler_type",
"handler_detail",
"comment", "comment",
] ]
@ -53,7 +54,8 @@ class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin):
# Fetch data from cleaned POST values # Fetch data from cleaned POST values
identifier = self.cleaned_data.get("identifier", None) identifier = self.cleaned_data.get("identifier", None)
title = self.cleaned_data.get("title", None) title = self.cleaned_data.get("title", None)
handler = self.cleaned_data.get("handler", None) handler_type = self.cleaned_data.get("handler_type", None)
handler_detail = self.cleaned_data.get("handler_detail", None)
conservation_office = self.cleaned_data.get("conservation_office", None) conservation_office = self.cleaned_data.get("conservation_office", None)
conservation_file_number = self.cleaned_data.get("conservation_file_number", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None)
comment = self.cleaned_data.get("comment", None) comment = self.cleaned_data.get("comment", None)
@ -63,6 +65,10 @@ class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin):
# Process the geometry form # Process the geometry form
geometry = geom_form.save(action) geometry = geom_form.save(action)
handler = Handler.objects.create(
type=handler_type,
detail=handler_detail
)
responsible = Responsibility.objects.create( responsible = Responsibility.objects.create(
handler=handler, handler=handler,
conservation_file_number=conservation_file_number, conservation_file_number=conservation_file_number,
@ -105,7 +111,8 @@ class EditEmaForm(NewEmaForm):
form_data = { form_data = {
"identifier": self.instance.identifier, "identifier": self.instance.identifier,
"title": self.instance.title, "title": self.instance.title,
"handler": self.instance.responsible.handler, "handler_type": self.instance.responsible.handler.type,
"handler_detail": self.instance.responsible.handler.detail,
"conservation_office": self.instance.responsible.conservation_office, "conservation_office": self.instance.responsible.conservation_office,
"conservation_file_number": self.instance.responsible.conservation_file_number, "conservation_file_number": self.instance.responsible.conservation_file_number,
"comment": self.instance.comment, "comment": self.instance.comment,
@ -121,7 +128,8 @@ class EditEmaForm(NewEmaForm):
# Fetch data from cleaned POST values # Fetch data from cleaned POST values
identifier = self.cleaned_data.get("identifier", None) identifier = self.cleaned_data.get("identifier", None)
title = self.cleaned_data.get("title", None) title = self.cleaned_data.get("title", None)
handler = self.cleaned_data.get("handler", None) handler_type = self.cleaned_data.get("handler_type", None)
handler_detail = self.cleaned_data.get("handler_detail", None)
conservation_office = self.cleaned_data.get("conservation_office", None) conservation_office = self.cleaned_data.get("conservation_office", None)
conservation_file_number = self.cleaned_data.get("conservation_file_number", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None)
comment = self.cleaned_data.get("comment", None) comment = self.cleaned_data.get("comment", None)
@ -132,7 +140,9 @@ class EditEmaForm(NewEmaForm):
geometry = geom_form.save(action) geometry = geom_form.save(action)
# Update responsible data # Update responsible data
self.instance.responsible.handler = handler self.instance.responsible.handler.type = handler_type
self.instance.responsible.handler.detail = handler_detail
self.instance.responsible.handler.save()
self.instance.responsible.conservation_office = conservation_office self.instance.responsible.conservation_office = conservation_office
self.instance.responsible.conservation_file_number = conservation_file_number self.instance.responsible.conservation_file_number = conservation_file_number
self.instance.responsible.save() self.instance.responsible.save()

View File

@ -79,7 +79,9 @@ class EmaViewTestCase(CompensationViewTestCase):
# Create log entry # Create log entry
action = UserActionLogEntry.get_created_action(self.superuser) action = UserActionLogEntry.get_created_action(self.superuser)
# Create responsible data object # Create responsible data object
responsibility_data = Responsibility.objects.create() responsibility_data = Responsibility.objects.create(
handler=self.handler
)
geometry = Geometry.objects.create() geometry = Geometry.objects.create()
self.ema = Ema.objects.create( self.ema = Ema.objects.create(
identifier="TEST", identifier="TEST",

View File

@ -16,9 +16,9 @@ from django.utils.translation import gettext_lazy as _
from codelist.models import KonovaCode from codelist.models import KonovaCode
from codelist.settings import CODELIST_PROCESS_TYPE_ID, CODELIST_LAW_ID, \ from codelist.settings import CODELIST_PROCESS_TYPE_ID, CODELIST_LAW_ID, \
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_HANDLER_ID
from intervention.inputs import GenerateInput from intervention.inputs import GenerateInput
from intervention.models import Intervention, Legal, Responsibility from intervention.models import Intervention, Legal, Responsibility, Handler
from konova.forms import BaseForm, SimpleGeomForm from konova.forms import BaseForm, SimpleGeomForm
from user.models import UserActionLogEntry from user.models import UserActionLogEntry
@ -138,12 +138,29 @@ class NewInterventionForm(BaseForm):
} }
) )
) )
handler = forms.CharField( handler_type = forms.ModelChoiceField(
label=_("Intervention handler"), label=_("Intervention handler type"),
label_suffix="",
help_text=_("What type of handler is responsible for the intervention?"),
required=False,
queryset=KonovaCode.objects.filter(
is_archived=False,
is_leaf=True,
code_lists__in=[CODELIST_HANDLER_ID],
),
widget=autocomplete.ModelSelect2(
url="codes-handler-autocomplete",
attrs={
"data-placeholder": _("Click for selection"),
}
),
)
handler_detail = forms.CharField(
label=_("Intervention handler detail"),
label_suffix="", label_suffix="",
max_length=255, max_length=255,
required=False, required=False,
help_text=_("Who performs the intervention"), help_text=_("Detail input on the handler"),
widget=forms.TextInput( widget=forms.TextInput(
attrs={ attrs={
"placeholder": _("Company Mustermann"), "placeholder": _("Company Mustermann"),
@ -151,6 +168,7 @@ class NewInterventionForm(BaseForm):
} }
) )
) )
registration_date = forms.DateField( registration_date = forms.DateField(
label=_("Registration date"), label=_("Registration date"),
label_suffix=_(""), label_suffix=_(""),
@ -205,7 +223,8 @@ class NewInterventionForm(BaseForm):
title = self.cleaned_data.get("title", None) title = self.cleaned_data.get("title", None)
_type = self.cleaned_data.get("type", None) _type = self.cleaned_data.get("type", None)
laws = self.cleaned_data.get("laws", None) laws = self.cleaned_data.get("laws", None)
handler = self.cleaned_data.get("handler", None) handler_type = self.cleaned_data.get("handler_type", None)
handler_detail = self.cleaned_data.get("handler_detail", None)
registration_office = self.cleaned_data.get("registration_office", None) registration_office = self.cleaned_data.get("registration_office", None)
conservation_office = self.cleaned_data.get("conservation_office", None) conservation_office = self.cleaned_data.get("conservation_office", None)
conservation_file_number = self.cleaned_data.get("conservation_file_number", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None)
@ -226,6 +245,10 @@ class NewInterventionForm(BaseForm):
# Then add the M2M laws to the object # Then add the M2M laws to the object
legal_data.laws.set(laws) legal_data.laws.set(laws)
handler = Handler.objects.create(
type=handler_type,
detail=handler_detail
)
# Create responsible data object # Create responsible data object
responsibility_data = Responsibility.objects.create( responsibility_data = Responsibility.objects.create(
registration_office=registration_office, registration_office=registration_office,
@ -284,7 +307,8 @@ class EditInterventionForm(NewInterventionForm):
"title": self.instance.title, "title": self.instance.title,
"type": self.instance.legal.process_type, "type": self.instance.legal.process_type,
"laws": list(self.instance.legal.laws.values_list("id", flat=True)), "laws": list(self.instance.legal.laws.values_list("id", flat=True)),
"handler": self.instance.responsible.handler, "handler_type": self.instance.responsible.handler.type,
"handler_detail": self.instance.responsible.handler.detail,
"registration_office": self.instance.responsible.registration_office, "registration_office": self.instance.responsible.registration_office,
"registration_file_number": self.instance.responsible.registration_file_number, "registration_file_number": self.instance.responsible.registration_file_number,
"conservation_office": self.instance.responsible.conservation_office, "conservation_office": self.instance.responsible.conservation_office,
@ -313,7 +337,8 @@ class EditInterventionForm(NewInterventionForm):
title = self.cleaned_data.get("title", None) title = self.cleaned_data.get("title", None)
process_type = self.cleaned_data.get("type", None) process_type = self.cleaned_data.get("type", None)
laws = self.cleaned_data.get("laws", None) laws = self.cleaned_data.get("laws", None)
handler = self.cleaned_data.get("handler", None) handler_type = self.cleaned_data.get("handler_type", None)
handler_detail = self.cleaned_data.get("handler_detail", None)
registration_office = self.cleaned_data.get("registration_office", None) registration_office = self.cleaned_data.get("registration_office", None)
registration_file_number = self.cleaned_data.get("registration_file_number", None) registration_file_number = self.cleaned_data.get("registration_file_number", None)
conservation_office = self.cleaned_data.get("conservation_office", None) conservation_office = self.cleaned_data.get("conservation_office", None)
@ -328,7 +353,10 @@ class EditInterventionForm(NewInterventionForm):
self.instance.legal.laws.set(laws) self.instance.legal.laws.set(laws)
self.instance.legal.save() self.instance.legal.save()
self.instance.responsible.handler = handler self.instance.responsible.handler.type = handler_type
self.instance.responsible.handler.detail = handler_detail
self.instance.responsible.handler.save()
self.instance.responsible.registration_office = registration_office self.instance.responsible.registration_office = registration_office
self.instance.responsible.registration_file_number = registration_file_number self.instance.responsible.registration_file_number = registration_file_number
self.instance.responsible.conservation_office = conservation_office self.instance.responsible.conservation_office = conservation_office

View File

@ -0,0 +1,64 @@
# Generated by Django 3.1.3 on 2022-03-03 08:56
from django.db import migrations, models, transaction
import django.db.models.deletion
import uuid
def migrate_handler(apps, schema_editor):
KonovaCode = apps.get_model('codelist', 'KonovaCode')
Responsibility = apps.get_model('intervention', 'Responsibility')
Handler = apps.get_model('intervention', 'Handler')
all_responsibs = Responsibility.objects.all()
if all_responsibs.exists():
handler_tmp_code = KonovaCode.objects.get(
atom_id=710185,
)
with transaction.atomic():
for resp in all_responsibs:
handler_old = resp.handler_old
handler = Handler.objects.create(
type=handler_tmp_code,
detail=handler_old
)
resp.handler = handler
resp.save()
class Migration(migrations.Migration):
dependencies = [
('codelist', '0001_initial'),
('intervention', '0003_intervention_teams'),
]
operations = [
migrations.CreateModel(
name='Handler',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('detail', models.CharField(blank=True, max_length=500, null=True)),
('type', models.ForeignKey(blank=True, limit_choices_to={'code_lists__in': [1052], 'is_archived': False, 'is_selectable': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, to='codelist.konovacode')),
],
options={
'abstract': False,
},
),
migrations.RenameField(
model_name='responsibility',
old_name='handler',
new_name='handler_old',
),
migrations.AddField(
model_name='responsibility',
name='handler',
field=models.ForeignKey(blank=True, help_text="Refers to 'Eingriffsverursacher' or 'Maßnahmenträger'", null=True, on_delete=django.db.models.deletion.SET_NULL, to='intervention.handler'),
),
migrations.RunPython(migrate_handler),
migrations.RemoveField(
model_name='responsibility',
name='handler_old'
),
]

View File

@ -6,10 +6,42 @@ Created on: 15.11.21
""" """
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _
from codelist.models import KonovaCode from codelist.models import KonovaCode
from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID, CODELIST_REGISTRATION_OFFICE_ID from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID, CODELIST_REGISTRATION_OFFICE_ID, \
CODELIST_HANDLER_ID
from konova.models import UuidModel from konova.models import UuidModel
from konova.utils.message_templates import UNKNOWN, NO_DETAILS
class Handler(UuidModel):
""" The handler of an entry
Refers to 'Eingriffsverursacher' or 'Maßnahmenträger'
"""
type = models.ForeignKey(
KonovaCode,
on_delete=models.SET_NULL,
null=True,
blank=True,
limit_choices_to={
"code_lists__in": [CODELIST_HANDLER_ID],
"is_selectable": True,
"is_archived": False,
}
)
detail = models.CharField(
max_length=500,
null=True,
blank=True,
)
def __str__(self):
detail = self.detail or NO_DETAILS
_type = self.type.long_name if self.type is not None else UNKNOWN
return f'{_type}, {detail}'
class Responsibility(UuidModel): class Responsibility(UuidModel):
@ -43,11 +75,17 @@ class Responsibility(UuidModel):
} }
) )
conservation_file_number = models.CharField(max_length=1000, blank=True, null=True) conservation_file_number = models.CharField(max_length=1000, blank=True, null=True)
handler = models.CharField(max_length=500, null=True, blank=True, help_text="Refers to 'Eingriffsverursacher' or 'Maßnahmenträger'") handler = models.ForeignKey(
Handler,
null=True,
blank=True,
help_text="Refers to 'Eingriffsverursacher' or 'Maßnahmenträger'",
on_delete=models.SET_NULL,
)
def __str__(self): def __str__(self):
return "ZB: {} | ETS: {} | Handler: {}".format( return "ZB: {} | ETS: {} | Handler: {}".format(
self.registration_office, self.registration_office,
self.conservation_office, self.conservation_office,
self.handler str(self.handler)
) )

View File

@ -17,7 +17,7 @@ from django.db.models import Q
from codelist.models import KonovaCode from codelist.models import KonovaCode
from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, \ from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_ID, CODELIST_LAW_ID, \
CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_PROCESS_TYPE_ID, \ CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_PROCESS_TYPE_ID, \
CODELIST_BIOTOPES_EXTRA_CODES_ID, CODELIST_COMPENSATION_ACTION_DETAIL_ID CODELIST_BIOTOPES_EXTRA_CODES_ID, CODELIST_COMPENSATION_ACTION_DETAIL_ID, CODELIST_HANDLER_ID
from compensation.models import EcoAccount from compensation.models import EcoAccount
from intervention.models import Intervention from intervention.models import Intervention
@ -357,3 +357,18 @@ class ConservationOfficeCodeAutocomplete(KonovaCodeAutocomplete):
def get_result_label(self, result): def get_result_label(self, result):
return f"{result.long_name} ({result.short_name})" return f"{result.long_name} ({result.short_name})"
class HandlerCodeAutocomplete(KonovaCodeAutocomplete):
"""
Due to limitations of the django dal package, we need to subclass for each code list
"""
group_by_related = "parent"
related_field_name = "long_name"
def __init__(self, *args, **kwargs):
self.c = CODELIST_HANDLER_ID
super().__init__(*args, **kwargs)
def get_result_label(self, result):
return result.long_name

View File

@ -18,7 +18,7 @@ from django.urls import reverse
from codelist.models import KonovaCode, KonovaCodeList from codelist.models import KonovaCode, KonovaCodeList
from compensation.models import Compensation, CompensationState, CompensationAction, EcoAccount, EcoAccountDeduction from compensation.models import Compensation, CompensationState, CompensationAction, EcoAccount, EcoAccountDeduction
from intervention.models import Legal, Responsibility, Intervention from intervention.models import Legal, Responsibility, Intervention, Handler
from konova.management.commands.setup_data import GROUPS_DATA from konova.management.commands.setup_data import GROUPS_DATA
from konova.models import Geometry from konova.models import Geometry
from konova.settings import DEFAULT_GROUP from konova.settings import DEFAULT_GROUP
@ -57,6 +57,7 @@ class BaseTestCase(TestCase):
self.create_users() self.create_users()
self.create_groups() self.create_groups()
self.handler = self.create_dummy_handler()
self.intervention = self.create_dummy_intervention() self.intervention = self.create_dummy_intervention()
self.compensation = self.create_dummy_compensation() self.compensation = self.create_dummy_compensation()
self.eco_account = self.create_dummy_eco_account() self.eco_account = self.create_dummy_eco_account()
@ -122,7 +123,9 @@ class BaseTestCase(TestCase):
# Create legal data object (without M2M laws first) # Create legal data object (without M2M laws first)
legal_data = Legal.objects.create() legal_data = Legal.objects.create()
# Create responsible data object # Create responsible data object
responsibility_data = Responsibility.objects.create() responsibility_data = Responsibility.objects.create(
handler=self.handler
)
geometry = Geometry.objects.create() geometry = Geometry.objects.create()
# Finally create main object, holding the other objects # Finally create main object, holding the other objects
intervention = Intervention.objects.create( intervention = Intervention.objects.create(
@ -173,6 +176,9 @@ class BaseTestCase(TestCase):
# Create responsible data object # Create responsible data object
lega_data = Legal.objects.create() lega_data = Legal.objects.create()
responsible_data = Responsibility.objects.create() responsible_data = Responsibility.objects.create()
handler = self.handler
responsible_data.handler = handler
responsible_data.save()
# Finally create main object, holding the other objects # Finally create main object, holding the other objects
eco_account = EcoAccount.objects.create( eco_account = EcoAccount.objects.create(
identifier="TEST", identifier="TEST",
@ -197,6 +203,8 @@ class BaseTestCase(TestCase):
geometry = Geometry.objects.create() geometry = Geometry.objects.create()
# Create responsible data object # Create responsible data object
responsible_data = Responsibility.objects.create() responsible_data = Responsibility.objects.create()
responsible_data.handler = self.handler
responsible_data.save()
# Finally create main object, holding the other objects # Finally create main object, holding the other objects
ema = Ema.objects.create( ema = Ema.objects.create(
identifier="TEST", identifier="TEST",
@ -282,6 +290,18 @@ class BaseTestCase(TestCase):
polygon = polygon.transform(3857, clone=True) polygon = polygon.transform(3857, clone=True)
return MultiPolygon(polygon, srid=3857) # 3857 is the default srid used for MultiPolygonField in the form return MultiPolygon(polygon, srid=3857) # 3857 is the default srid used for MultiPolygonField in the form
def create_dummy_handler(self) -> Handler:
""" Creates a Handler
Returns:
"""
handler = Handler.objects.get_or_create(
type=KonovaCode.objects.all().first(),
detail="Test handler"
)[0]
return handler
def fill_out_intervention(self, intervention: Intervention) -> Intervention: def fill_out_intervention(self, intervention: Intervention) -> Intervention:
""" Adds all required (dummy) data to an intervention """ Adds all required (dummy) data to an intervention
@ -295,7 +315,7 @@ class BaseTestCase(TestCase):
intervention.responsible.conservation_office = KonovaCode.objects.get(id=2) intervention.responsible.conservation_office = KonovaCode.objects.get(id=2)
intervention.responsible.registration_file_number = "test" intervention.responsible.registration_file_number = "test"
intervention.responsible.conservation_file_number = "test" intervention.responsible.conservation_file_number = "test"
intervention.responsible.handler = "handler" intervention.responsible.handler = self.handler
intervention.responsible.save() intervention.responsible.save()
intervention.legal.registration_date = datetime.date.fromisoformat("1970-01-01") intervention.legal.registration_date = datetime.date.fromisoformat("1970-01-01")
intervention.legal.binding_date = datetime.date.fromisoformat("1970-01-01") intervention.legal.binding_date = datetime.date.fromisoformat("1970-01-01")
@ -343,7 +363,7 @@ class BaseTestCase(TestCase):
""" """
ema.responsible.conservation_office = self.get_conservation_office_code() ema.responsible.conservation_office = self.get_conservation_office_code()
ema.responsible.conservation_file_number = "test" ema.responsible.conservation_file_number = "test"
ema.responsible.handler = "handler" ema.responsible.handler = self.handler
ema.responsible.save() ema.responsible.save()
ema.after_states.add(self.comp_state) ema.after_states.add(self.comp_state)
ema.before_states.add(self.comp_state) ema.before_states.add(self.comp_state)
@ -361,7 +381,7 @@ class BaseTestCase(TestCase):
eco_account.legal.save() eco_account.legal.save()
eco_account.responsible.conservation_office = self.get_conservation_office_code() eco_account.responsible.conservation_office = self.get_conservation_office_code()
eco_account.responsible.conservation_file_number = "test" eco_account.responsible.conservation_file_number = "test"
eco_account.responsible.handler = "handler" eco_account.responsible.handler = self.handler
eco_account.responsible.save() eco_account.responsible.save()
eco_account.after_states.add(self.comp_state) eco_account.after_states.add(self.comp_state)
eco_account.before_states.add(self.comp_state) eco_account.before_states.add(self.comp_state)

View File

@ -20,7 +20,8 @@ from django.urls import path, include
from konova.autocompletes import EcoAccountAutocomplete, \ from konova.autocompletes import EcoAccountAutocomplete, \
InterventionAutocomplete, CompensationActionCodeAutocomplete, BiotopeCodeAutocomplete, LawCodeAutocomplete, \ InterventionAutocomplete, CompensationActionCodeAutocomplete, BiotopeCodeAutocomplete, LawCodeAutocomplete, \
RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete, \ RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete, \
ShareUserAutocomplete, BiotopeExtraCodeAutocomplete, CompensationActionDetailCodeAutocomplete, ShareTeamAutocomplete ShareUserAutocomplete, BiotopeExtraCodeAutocomplete, CompensationActionDetailCodeAutocomplete, \
ShareTeamAutocomplete, HandlerCodeAutocomplete
from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG
from konova.sso.sso import KonovaSSOClient from konova.sso.sso import KonovaSSOClient
from konova.views import logout_view, home_view, get_geom_parcels from konova.views import logout_view, home_view, get_geom_parcels
@ -52,6 +53,7 @@ urlpatterns = [
path("atcmplt/codes/prc-type", ProcessTypeCodeAutocomplete.as_view(), name="codes-process-type-autocomplete"), path("atcmplt/codes/prc-type", ProcessTypeCodeAutocomplete.as_view(), name="codes-process-type-autocomplete"),
path("atcmplt/codes/reg-off", RegistrationOfficeCodeAutocomplete.as_view(), name="codes-registration-office-autocomplete"), path("atcmplt/codes/reg-off", RegistrationOfficeCodeAutocomplete.as_view(), name="codes-registration-office-autocomplete"),
path("atcmplt/codes/cons-off", ConservationOfficeCodeAutocomplete.as_view(), name="codes-conservation-office-autocomplete"), path("atcmplt/codes/cons-off", ConservationOfficeCodeAutocomplete.as_view(), name="codes-conservation-office-autocomplete"),
path("atcmplt/codes/handler", HandlerCodeAutocomplete.as_view(), name="codes-handler-autocomplete"),
path("atcmplt/share/u", ShareUserAutocomplete.as_view(), name="share-user-autocomplete"), path("atcmplt/share/u", ShareUserAutocomplete.as_view(), name="share-user-autocomplete"),
path("atcmplt/share/t", ShareTeamAutocomplete.as_view(), name="share-team-autocomplete"), path("atcmplt/share/t", ShareTeamAutocomplete.as_view(), name="share-team-autocomplete"),
] ]

View File

@ -7,6 +7,8 @@ Created on: 02.08.21
""" """
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
NO_DETAILS = _("no further details")
UNKNOWN = _("Unknown")
UNGROUPED = _("Ungrouped") UNGROUPED = _("Ungrouped")
FORM_INVALID = _("There was an error on this form.") FORM_INVALID = _("There was an error on this form.")
PARAMS_INVALID = _("Invalid parameters") PARAMS_INVALID = _("Invalid parameters")

Binary file not shown.

View File

@ -6,8 +6,8 @@
#: compensation/filters.py:123 compensation/forms/modalForms.py:36 #: compensation/filters.py:123 compensation/forms/modalForms.py:36
#: compensation/forms/modalForms.py:47 compensation/forms/modalForms.py:63 #: compensation/forms/modalForms.py:47 compensation/forms/modalForms.py:63
#: compensation/forms/modalForms.py:358 compensation/forms/modalForms.py:466 #: compensation/forms/modalForms.py:358 compensation/forms/modalForms.py:466
#: intervention/forms/forms.py:54 intervention/forms/forms.py:156 #: intervention/forms/forms.py:54 intervention/forms/forms.py:174
#: intervention/forms/forms.py:168 intervention/forms/modalForms.py:150 #: intervention/forms/forms.py:186 intervention/forms/modalForms.py:150
#: intervention/forms/modalForms.py:163 intervention/forms/modalForms.py:176 #: intervention/forms/modalForms.py:163 intervention/forms/modalForms.py:176
#: konova/filters/mixins.py:53 konova/filters/mixins.py:54 #: konova/filters/mixins.py:53 konova/filters/mixins.py:54
#: konova/filters/mixins.py:81 konova/filters/mixins.py:82 #: konova/filters/mixins.py:81 konova/filters/mixins.py:82
@ -26,7 +26,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-02-21 14:44+0100\n" "POT-Creation-Date: 2022-03-03 12:08+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -61,9 +61,10 @@ msgid "Select the responsible office"
msgstr "Verantwortliche Stelle" msgstr "Verantwortliche Stelle"
#: analysis/forms.py:58 compensation/forms/forms.py:88 #: analysis/forms.py:58 compensation/forms/forms.py:88
#: compensation/forms/forms.py:165 intervention/forms/forms.py:64 #: compensation/forms/forms.py:118 compensation/forms/forms.py:183
#: intervention/forms/forms.py:81 intervention/forms/forms.py:97 #: intervention/forms/forms.py:64 intervention/forms/forms.py:81
#: intervention/forms/forms.py:113 intervention/forms/modalForms.py:49 #: intervention/forms/forms.py:97 intervention/forms/forms.py:113
#: intervention/forms/forms.py:154 intervention/forms/modalForms.py:49
#: intervention/forms/modalForms.py:63 user/forms.py:196 #: intervention/forms/modalForms.py:63 user/forms.py:196
msgid "Click for selection" msgid "Click for selection"
msgstr "Auswählen..." msgstr "Auswählen..."
@ -349,7 +350,7 @@ msgstr "Bezeichnung"
msgid "An explanatory name" msgid "An explanatory name"
msgstr "Aussagekräftiger Titel" msgstr "Aussagekräftiger Titel"
#: compensation/forms/forms.py:50 ema/forms.py:49 ema/forms.py:102 #: compensation/forms/forms.py:50 ema/forms.py:50 ema/forms.py:108
msgid "Compensation XY; Location ABC" msgid "Compensation XY; Location ABC"
msgstr "Kompensation XY; Flur ABC" msgstr "Kompensation XY; Flur ABC"
@ -364,7 +365,7 @@ msgstr "Kompensation XY; Flur ABC"
#: ema/templates/ema/detail/includes/actions.html:34 #: ema/templates/ema/detail/includes/actions.html:34
#: ema/templates/ema/detail/includes/deadlines.html:34 #: ema/templates/ema/detail/includes/deadlines.html:34
#: ema/templates/ema/detail/includes/documents.html:34 #: ema/templates/ema/detail/includes/documents.html:34
#: intervention/forms/forms.py:180 intervention/forms/modalForms.py:175 #: intervention/forms/forms.py:198 intervention/forms/modalForms.py:175
#: intervention/templates/intervention/detail/includes/documents.html:34 #: intervention/templates/intervention/detail/includes/documents.html:34
#: intervention/templates/intervention/detail/includes/payments.html:34 #: intervention/templates/intervention/detail/includes/payments.html:34
#: intervention/templates/intervention/detail/includes/revocation.html:38 #: intervention/templates/intervention/detail/includes/revocation.html:38
@ -373,7 +374,7 @@ msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: compensation/forms/forms.py:59 compensation/forms/modalForms.py:467 #: compensation/forms/forms.py:59 compensation/forms/modalForms.py:467
#: intervention/forms/forms.py:182 #: intervention/forms/forms.py:200
msgid "Additional comment" msgid "Additional comment"
msgstr "Zusätzlicher Kommentar" msgstr "Zusätzlicher Kommentar"
@ -393,80 +394,88 @@ msgstr "Aktenzeichen Eintragungsstelle"
msgid "ETS-123/ABC.456" msgid "ETS-123/ABC.456"
msgstr "" msgstr ""
#: compensation/forms/forms.py:105 #: compensation/forms/forms.py:106
msgid "Eco-account handler" msgid "Eco-Account handler type"
msgstr "Maßnahmenträger" msgstr "Art des Maßnahmenträgers"
#: compensation/forms/forms.py:109 #: compensation/forms/forms.py:108
msgid "Who handles the eco-account" msgid "What type of handler is responsible for the ecoaccount?"
msgstr "Wer für die Herrichtung des Ökokontos verantwortlich ist" msgstr "Zu welcher Kategorie dieser Maßnahmenträger gehört"
#: compensation/forms/forms.py:112 intervention/forms/forms.py:149 #: compensation/forms/forms.py:123
msgid "Eco-Account handler detail"
msgstr "Detailangabe zum Maßnahmenträger"
#: compensation/forms/forms.py:127 intervention/forms/forms.py:163
msgid "Detail input on the handler"
msgstr "Name der Behörde, Stadt, Firma, ..."
#: compensation/forms/forms.py:130 intervention/forms/forms.py:166
msgid "Company Mustermann" msgid "Company Mustermann"
msgstr "Firma Mustermann" msgstr "Firma Mustermann"
#: compensation/forms/forms.py:125 #: compensation/forms/forms.py:143
msgid "Is CEF" msgid "Is CEF"
msgstr "Ist CEF-Maßnahme" msgstr "Ist CEF-Maßnahme"
#: compensation/forms/forms.py:126 #: compensation/forms/forms.py:144
msgid "Optionally: Whether this compensation is a CEF compensation?" msgid "Optionally: Whether this compensation is a CEF compensation?"
msgstr "Optional: Handelt es sich um eine CEF-Maßnahme?" msgstr "Optional: Handelt es sich um eine CEF-Maßnahme?"
#: compensation/forms/forms.py:138 #: compensation/forms/forms.py:156
msgid "Is coherence keeping" msgid "Is coherence keeping"
msgstr "Ist Kohärenzsicherungsmaßnahme" msgstr "Ist Kohärenzsicherungsmaßnahme"
#: compensation/forms/forms.py:139 #: compensation/forms/forms.py:157
msgid "" msgid ""
"Optionally: Whether this compensation is a coherence keeping compensation?" "Optionally: Whether this compensation is a coherence keeping compensation?"
msgstr "Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?" msgstr "Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?"
#: compensation/forms/forms.py:156 #: compensation/forms/forms.py:174
#: compensation/templates/compensation/detail/compensation/view.html:36 #: compensation/templates/compensation/detail/compensation/view.html:36
#: compensation/templates/compensation/report/compensation/report.html:16 #: compensation/templates/compensation/report/compensation/report.html:16
msgid "compensates intervention" msgid "compensates intervention"
msgstr "kompensiert Eingriff" msgstr "kompensiert Eingriff"
#: compensation/forms/forms.py:158 #: compensation/forms/forms.py:176
msgid "Select the intervention for which this compensation compensates" msgid "Select the intervention for which this compensation compensates"
msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist" msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist"
#: compensation/forms/forms.py:184 compensation/views/compensation.py:96 #: compensation/forms/forms.py:202 compensation/views/compensation.py:96
msgid "New compensation" msgid "New compensation"
msgstr "Neue Kompensation" msgstr "Neue Kompensation"
#: compensation/forms/forms.py:255 #: compensation/forms/forms.py:273
msgid "Edit compensation" msgid "Edit compensation"
msgstr "Bearbeite Kompensation" msgstr "Bearbeite Kompensation"
#: compensation/forms/forms.py:316 compensation/utils/quality.py:84 #: compensation/forms/forms.py:334 compensation/utils/quality.py:84
msgid "Available Surface" msgid "Available Surface"
msgstr "Verfügbare Fläche" msgstr "Verfügbare Fläche"
#: compensation/forms/forms.py:319 #: compensation/forms/forms.py:337
msgid "The amount that can be used for deductions" msgid "The amount that can be used for deductions"
msgstr "Die für Abbuchungen zur Verfügung stehende Menge" msgstr "Die für Abbuchungen zur Verfügung stehende Menge"
#: compensation/forms/forms.py:328 #: compensation/forms/forms.py:346
#: compensation/templates/compensation/detail/eco_account/view.html:67 #: compensation/templates/compensation/detail/eco_account/view.html:67
#: compensation/utils/quality.py:72 #: compensation/utils/quality.py:72
msgid "Agreement date" msgid "Agreement date"
msgstr "Vereinbarungsdatum" msgstr "Vereinbarungsdatum"
#: compensation/forms/forms.py:330 #: compensation/forms/forms.py:348
msgid "When did the parties agree on this?" msgid "When did the parties agree on this?"
msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?" msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?"
#: compensation/forms/forms.py:354 compensation/views/eco_account.py:107 #: compensation/forms/forms.py:373 compensation/views/eco_account.py:107
msgid "New Eco-Account" msgid "New Eco-Account"
msgstr "Neues Ökokonto" msgstr "Neues Ökokonto"
#: compensation/forms/forms.py:363 #: compensation/forms/forms.py:382
msgid "Eco-Account XY; Location ABC" msgid "Eco-Account XY; Location ABC"
msgstr "Ökokonto XY; Flur ABC" msgstr "Ökokonto XY; Flur ABC"
#: compensation/forms/forms.py:417 #: compensation/forms/forms.py:442
msgid "Edit Eco-Account" msgid "Edit Eco-Account"
msgstr "Ökokonto bearbeiten" msgstr "Ökokonto bearbeiten"
@ -1150,7 +1159,7 @@ msgstr "Daten zu den verantwortlichen Stellen"
msgid "Compensations - Overview" msgid "Compensations - Overview"
msgstr "Kompensationen - Übersicht" msgstr "Kompensationen - Übersicht"
#: compensation/views/compensation.py:151 konova/utils/message_templates.py:33 #: compensation/views/compensation.py:151 konova/utils/message_templates.py:35
msgid "Compensation {} edited" msgid "Compensation {} edited"
msgstr "Kompensation {} bearbeitet" msgstr "Kompensation {} bearbeitet"
@ -1215,11 +1224,11 @@ msgstr "Freigabelink ungültig"
msgid "Share settings updated" msgid "Share settings updated"
msgstr "Freigabe Einstellungen aktualisiert" msgstr "Freigabe Einstellungen aktualisiert"
#: ema/forms.py:40 ema/views.py:98 #: ema/forms.py:41 ema/views.py:98
msgid "New EMA" msgid "New EMA"
msgstr "Neue EMA hinzufügen" msgstr "Neue EMA hinzufügen"
#: ema/forms.py:96 #: ema/forms.py:102
msgid "Edit EMA" msgid "Edit EMA"
msgstr "Bearbeite EMA" msgstr "Bearbeite EMA"
@ -1293,33 +1302,35 @@ msgid "ZB-123/ABC.456"
msgstr "" msgstr ""
#: intervention/forms/forms.py:142 #: intervention/forms/forms.py:142
#: intervention/templates/intervention/detail/view.html:64 msgid "Intervention handler type"
#: intervention/utils/quality.py:52 msgstr "Art des Eingriffsverursachers"
msgid "Intervention handler"
msgstr "Eingriffsverursacher"
#: intervention/forms/forms.py:146 #: intervention/forms/forms.py:144
msgid "Who performs the intervention" msgid "What type of handler is responsible for the intervention?"
msgstr "Wer führt den Eingriff durch" msgstr "Zu welcher Kategorie dieser Eingriffsverursacher gehört"
#: intervention/forms/forms.py:155 #: intervention/forms/forms.py:159
msgid "Intervention handler detail"
msgstr "Detailangabe zum Eingriffsverursacher"
#: intervention/forms/forms.py:173
#: intervention/templates/intervention/detail/view.html:96 #: intervention/templates/intervention/detail/view.html:96
#: intervention/templates/intervention/report/report.html:79 #: intervention/templates/intervention/report/report.html:79
#: intervention/utils/quality.py:73 #: intervention/utils/quality.py:73
msgid "Registration date" msgid "Registration date"
msgstr "Datum Zulassung bzw. Satzungsbeschluss" msgstr "Datum Zulassung bzw. Satzungsbeschluss"
#: intervention/forms/forms.py:167 #: intervention/forms/forms.py:185
#: intervention/templates/intervention/detail/view.html:100 #: intervention/templates/intervention/detail/view.html:100
#: intervention/templates/intervention/report/report.html:83 #: intervention/templates/intervention/report/report.html:83
msgid "Binding on" msgid "Binding on"
msgstr "Datum Bestandskraft" msgstr "Datum Bestandskraft"
#: intervention/forms/forms.py:193 intervention/views.py:94 #: intervention/forms/forms.py:211 intervention/views.py:94
msgid "New intervention" msgid "New intervention"
msgstr "Neuer Eingriff" msgstr "Neuer Eingriff"
#: intervention/forms/forms.py:271 #: intervention/forms/forms.py:294
msgid "Edit intervention" msgid "Edit intervention"
msgstr "Eingriff bearbeiten" msgstr "Eingriff bearbeiten"
@ -1491,6 +1502,11 @@ msgstr "Widerspruch"
msgid "Remove revocation" msgid "Remove revocation"
msgstr "Widerspruch entfernen" msgstr "Widerspruch entfernen"
#: intervention/templates/intervention/detail/view.html:64
#: intervention/utils/quality.py:52
msgid "Intervention handler"
msgstr "Eingriffsverursacher"
#: intervention/templates/intervention/detail/view.html:103 #: intervention/templates/intervention/detail/view.html:103
msgid "Exists" msgid "Exists"
msgstr "vorhanden" msgstr "vorhanden"
@ -1739,7 +1755,9 @@ msgstr ""
#: konova/templates/konova/includes/parcel_table.html:5 #: konova/templates/konova/includes/parcel_table.html:5
msgid "Parcels can not be calculated, since no geometry is given." msgid "Parcels can not be calculated, since no geometry is given."
msgstr "Flurstücke können nicht berechnet werden, da keine Geometrie eingegeben wurde." msgstr ""
"Flurstücke können nicht berechnet werden, da keine Geometrie eingegeben "
"wurde."
#: konova/templates/konova/includes/parcel_table.html:11 #: konova/templates/konova/includes/parcel_table.html:11
msgid "Kreis" msgid "Kreis"
@ -1749,11 +1767,11 @@ msgstr "Kreis"
msgid "Gemarkung" msgid "Gemarkung"
msgstr "Gemarkung" msgstr "Gemarkung"
#: konova/templates/konova/includes/parcels.html:3 #: konova/templates/konova/includes/parcels.html:7
msgid "Spatial reference" msgid "Spatial reference"
msgstr "Raumreferenz" msgstr "Raumreferenz"
#: konova/templates/konova/includes/parcels.html:6 #: konova/templates/konova/includes/parcels.html:11
msgid "Loading..." msgid "Loading..."
msgstr "Lade..." msgstr "Lade..."
@ -1821,22 +1839,31 @@ msgid "Request for new API token"
msgstr "Anfrage für neuen API Token" msgstr "Anfrage für neuen API Token"
#: konova/utils/message_templates.py:10 #: konova/utils/message_templates.py:10
msgid "no further details"
msgstr "keine weitere Angabe"
#: konova/utils/message_templates.py:11
#: venv/lib/python3.7/site-packages/django/forms/widgets.py:709
msgid "Unknown"
msgstr "Unbekannt"
#: konova/utils/message_templates.py:12
msgid "Ungrouped" msgid "Ungrouped"
msgstr "Ohne Zuordnung" msgstr "Ohne Zuordnung"
#: konova/utils/message_templates.py:11 #: konova/utils/message_templates.py:13
msgid "There was an error on this form." msgid "There was an error on this form."
msgstr "Es gab einen Fehler im Formular." msgstr "Es gab einen Fehler im Formular."
#: konova/utils/message_templates.py:12 #: konova/utils/message_templates.py:14
msgid "Invalid parameters" msgid "Invalid parameters"
msgstr "Parameter ungültig" msgstr "Parameter ungültig"
#: konova/utils/message_templates.py:13 #: konova/utils/message_templates.py:15
msgid "There are errors in this intervention." msgid "There are errors in this intervention."
msgstr "Es liegen Fehler in diesem Eingriff vor:" msgstr "Es liegen Fehler in diesem Eingriff vor:"
#: konova/utils/message_templates.py:14 #: konova/utils/message_templates.py:16
msgid "" msgid ""
"The identifier '{}' had to be changed to '{}' since another entry has been " "The identifier '{}' had to be changed to '{}' since another entry has been "
"added in the meanwhile, which uses this identifier" "added in the meanwhile, which uses this identifier"
@ -1844,26 +1871,26 @@ msgstr ""
"Die Kennung '{}' musste zu '{}' geändert werden, da ein anderer Eintrag in " "Die Kennung '{}' musste zu '{}' geändert werden, da ein anderer Eintrag in "
"der Zwischenzeit angelegt wurde, welcher diese Kennung nun bereits verwendet" "der Zwischenzeit angelegt wurde, welcher diese Kennung nun bereits verwendet"
#: konova/utils/message_templates.py:15 #: konova/utils/message_templates.py:17
msgid "" msgid ""
"Only conservation or registration office users are allowed to remove entries." "Only conservation or registration office users are allowed to remove entries."
msgstr "" msgstr ""
"Nur Mitarbeiter der Naturschutz- oder Zulassungsbehördengruppe dürfen " "Nur Mitarbeiter der Naturschutz- oder Zulassungsbehördengruppe dürfen "
"Einträge entfernen" "Einträge entfernen"
#: konova/utils/message_templates.py:16 #: konova/utils/message_templates.py:18
msgid "You need to be part of another user group." msgid "You need to be part of another user group."
msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!" msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
#: konova/utils/message_templates.py:17 #: konova/utils/message_templates.py:19
msgid "Status of Checked and Recorded reseted" msgid "Status of Checked and Recorded reseted"
msgstr "'Geprüft'/'Verzeichnet' wurde zurückgesetzt" msgstr "'Geprüft'/'Verzeichnet' wurde zurückgesetzt"
#: konova/utils/message_templates.py:20 #: konova/utils/message_templates.py:22
msgid "This data is not shared with you" msgid "This data is not shared with you"
msgstr "Diese Daten sind für Sie nicht freigegeben" msgstr "Diese Daten sind für Sie nicht freigegeben"
#: konova/utils/message_templates.py:21 #: konova/utils/message_templates.py:23
msgid "" msgid ""
"Remember: This data has not been shared with you, yet. This means you can " "Remember: This data has not been shared with you, yet. This means you can "
"only read but can not edit or perform any actions like running a check or " "only read but can not edit or perform any actions like running a check or "
@ -1873,15 +1900,15 @@ msgstr ""
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, " "bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
"noch Prüfungen durchführen oder verzeichnen können." "noch Prüfungen durchführen oder verzeichnen können."
#: konova/utils/message_templates.py:24 #: konova/utils/message_templates.py:26
msgid "Unsupported file type" msgid "Unsupported file type"
msgstr "Dateiformat nicht unterstützt" msgstr "Dateiformat nicht unterstützt"
#: konova/utils/message_templates.py:25 #: konova/utils/message_templates.py:27
msgid "File too large" msgid "File too large"
msgstr "Datei zu groß" msgstr "Datei zu groß"
#: konova/utils/message_templates.py:28 #: konova/utils/message_templates.py:30
msgid "" msgid ""
"Action canceled. Eco account is recorded or deductions exist. Only " "Action canceled. Eco account is recorded or deductions exist. Only "
"conservation office member can perform this action." "conservation office member can perform this action."
@ -1889,119 +1916,119 @@ msgstr ""
"Aktion abgebrochen. Ökokonto ist bereits verzeichnet oder Abbuchungen liegen " "Aktion abgebrochen. Ökokonto ist bereits verzeichnet oder Abbuchungen liegen "
"vor. Nur Eintragungsstellennutzer können diese Aktion jetzt durchführen." "vor. Nur Eintragungsstellennutzer können diese Aktion jetzt durchführen."
#: konova/utils/message_templates.py:31 #: konova/utils/message_templates.py:33
msgid "Compensation {} added" msgid "Compensation {} added"
msgstr "Kompensation {} hinzugefügt" msgstr "Kompensation {} hinzugefügt"
#: konova/utils/message_templates.py:32 #: konova/utils/message_templates.py:34
msgid "Compensation {} removed" msgid "Compensation {} removed"
msgstr "Kompensation {} entfernt" msgstr "Kompensation {} entfernt"
#: konova/utils/message_templates.py:34 #: konova/utils/message_templates.py:36
msgid "Added compensation action" msgid "Added compensation action"
msgstr "Maßnahme hinzugefügt" msgstr "Maßnahme hinzugefügt"
#: konova/utils/message_templates.py:35 #: konova/utils/message_templates.py:37
msgid "Added compensation state" msgid "Added compensation state"
msgstr "Zustand hinzugefügt" msgstr "Zustand hinzugefügt"
#: konova/utils/message_templates.py:38 #: konova/utils/message_templates.py:40
msgid "State removed" msgid "State removed"
msgstr "Zustand gelöscht" msgstr "Zustand gelöscht"
#: konova/utils/message_templates.py:39 #: konova/utils/message_templates.py:41
msgid "State edited" msgid "State edited"
msgstr "Zustand bearbeitet" msgstr "Zustand bearbeitet"
#: konova/utils/message_templates.py:40 #: konova/utils/message_templates.py:42
msgid "State added" msgid "State added"
msgstr "Zustand hinzugefügt" msgstr "Zustand hinzugefügt"
#: konova/utils/message_templates.py:43 #: konova/utils/message_templates.py:45
msgid "Action added" msgid "Action added"
msgstr "Maßnahme hinzugefügt" msgstr "Maßnahme hinzugefügt"
#: konova/utils/message_templates.py:44 #: konova/utils/message_templates.py:46
msgid "Action edited" msgid "Action edited"
msgstr "Maßnahme bearbeitet" msgstr "Maßnahme bearbeitet"
#: konova/utils/message_templates.py:45 #: konova/utils/message_templates.py:47
msgid "Action removed" msgid "Action removed"
msgstr "Maßnahme entfernt" msgstr "Maßnahme entfernt"
#: konova/utils/message_templates.py:48 #: konova/utils/message_templates.py:50
msgid "Deduction added" msgid "Deduction added"
msgstr "Abbuchung hinzugefügt" msgstr "Abbuchung hinzugefügt"
#: konova/utils/message_templates.py:49 #: konova/utils/message_templates.py:51
msgid "Deduction edited" msgid "Deduction edited"
msgstr "Abbuchung bearbeitet" msgstr "Abbuchung bearbeitet"
#: konova/utils/message_templates.py:50 #: konova/utils/message_templates.py:52
msgid "Deduction removed" msgid "Deduction removed"
msgstr "Abbuchung entfernt" msgstr "Abbuchung entfernt"
#: konova/utils/message_templates.py:53 #: konova/utils/message_templates.py:55
msgid "Deadline added" msgid "Deadline added"
msgstr "Frist/Termin hinzugefügt" msgstr "Frist/Termin hinzugefügt"
#: konova/utils/message_templates.py:54 #: konova/utils/message_templates.py:56
msgid "Deadline edited" msgid "Deadline edited"
msgstr "Frist/Termin bearbeitet" msgstr "Frist/Termin bearbeitet"
#: konova/utils/message_templates.py:55 #: konova/utils/message_templates.py:57
msgid "Deadline removed" msgid "Deadline removed"
msgstr "Frist/Termin gelöscht" msgstr "Frist/Termin gelöscht"
#: konova/utils/message_templates.py:58 #: konova/utils/message_templates.py:60
msgid "Payment added" msgid "Payment added"
msgstr "Zahlung hinzugefügt" msgstr "Zahlung hinzugefügt"
#: konova/utils/message_templates.py:59 #: konova/utils/message_templates.py:61
msgid "Payment edited" msgid "Payment edited"
msgstr "Zahlung bearbeitet" msgstr "Zahlung bearbeitet"
#: konova/utils/message_templates.py:60 #: konova/utils/message_templates.py:62
msgid "Payment removed" msgid "Payment removed"
msgstr "Zahlung gelöscht" msgstr "Zahlung gelöscht"
#: konova/utils/message_templates.py:63 #: konova/utils/message_templates.py:65
msgid "Revocation added" msgid "Revocation added"
msgstr "Widerspruch hinzugefügt" msgstr "Widerspruch hinzugefügt"
#: konova/utils/message_templates.py:64 #: konova/utils/message_templates.py:66
msgid "Revocation edited" msgid "Revocation edited"
msgstr "Widerspruch bearbeitet" msgstr "Widerspruch bearbeitet"
#: konova/utils/message_templates.py:65 #: konova/utils/message_templates.py:67
msgid "Revocation removed" msgid "Revocation removed"
msgstr "Widerspruch entfernt" msgstr "Widerspruch entfernt"
#: konova/utils/message_templates.py:68 #: konova/utils/message_templates.py:70
msgid "Document '{}' deleted" msgid "Document '{}' deleted"
msgstr "Dokument '{}' gelöscht" msgstr "Dokument '{}' gelöscht"
#: konova/utils/message_templates.py:69 #: konova/utils/message_templates.py:71
msgid "Document added" msgid "Document added"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
#: konova/utils/message_templates.py:70 #: konova/utils/message_templates.py:72
msgid "Document edited" msgid "Document edited"
msgstr "Dokument bearbeitet" msgstr "Dokument bearbeitet"
#: konova/utils/message_templates.py:73 #: konova/utils/message_templates.py:75
msgid "Edited general data" msgid "Edited general data"
msgstr "Allgemeine Daten bearbeitet" msgstr "Allgemeine Daten bearbeitet"
#: konova/utils/message_templates.py:74 #: konova/utils/message_templates.py:76
msgid "Added deadline" msgid "Added deadline"
msgstr "Frist/Termin hinzugefügt" msgstr "Frist/Termin hinzugefügt"
#: konova/utils/message_templates.py:77 #: konova/utils/message_templates.py:79
msgid "Geometry conflict detected with {}" msgid "Geometry conflict detected with {}"
msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}" msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}"
#: konova/utils/message_templates.py:80 #: konova/utils/message_templates.py:82
msgid "This intervention has {} revocations" msgid "This intervention has {} revocations"
msgstr "Dem Eingriff liegen {} Widersprüche vor" msgstr "Dem Eingriff liegen {} Widersprüche vor"
@ -2021,7 +2048,7 @@ msgstr "{} wurde erfolgreich vom Nutzer {} geprüft! {}"
msgid "missing" msgid "missing"
msgstr "fehlt" msgstr "fehlt"
#: konova/views.py:99 templates/navbars/navbar.html:16 #: konova/views.py:96 templates/navbars/navbar.html:16
msgid "Home" msgid "Home"
msgstr "Home" msgstr "Home"
@ -3577,10 +3604,6 @@ msgstr ""
msgid "Change" msgid "Change"
msgstr "" msgstr ""
#: venv/lib/python3.7/site-packages/django/forms/widgets.py:709
msgid "Unknown"
msgstr ""
#. Translators: Please do not add spaces around commas. #. Translators: Please do not add spaces around commas.
#: venv/lib/python3.7/site-packages/django/template/defaultfilters.py:790 #: venv/lib/python3.7/site-packages/django/template/defaultfilters.py:790
msgid "yes,no,maybe" msgid "yes,no,maybe"
@ -4165,3 +4188,6 @@ msgstr ""
#, python-format #, python-format
msgid "Unable to connect to qpid with SASL mechanism %s" msgid "Unable to connect to qpid with SASL mechanism %s"
msgstr "" msgstr ""
#~ msgid "Who handles the eco-account"
#~ msgstr "Wer für die Herrichtung des Ökokontos verantwortlich ist"