From 9b728e5d107ef0d6132f6ba34c186ef1ee1c7c7d Mon Sep 17 00:00:00 2001 From: mipel Date: Thu, 23 Sep 2021 15:05:17 +0200 Subject: [PATCH] #7 New forms WIP * adds saving functionality for new intervention form * refactors new identifier generating, so a pre-generated identifier from a new element form will be checked again before saving * adds css fixes for disturbing input field:focus bugs * adds missing csrf token to new collapsible form * adds/updates translations * introduces mark_as_deleted as only marking instead of using delete() which will really delete from the db --- compensation/forms.py | 3 + intervention/forms.py | 134 ++++++++-- intervention/models.py | 37 ++- .../templates/intervention/new/view.html | 11 + intervention/views.py | 18 +- konova/forms.py | 48 ++-- konova/models.py | 30 ++- konova/static/css/konova.css | 31 ++- locale/de/LC_MESSAGES/django.mo | Bin 20243 -> 20256 bytes locale/de/LC_MESSAGES/django.po | 236 ++++++++++-------- templates/form/main_data_collapse_form.html | 9 +- 11 files changed, 375 insertions(+), 182 deletions(-) diff --git a/compensation/forms.py b/compensation/forms.py index 9d2df376..e755fff4 100644 --- a/compensation/forms.py +++ b/compensation/forms.py @@ -74,6 +74,9 @@ class NewPaymentForm(BaseModalForm): ) ) + # Define w-100 for all form fields + full_width_fields = True + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.intervention = self.instance diff --git a/intervention/forms.py b/intervention/forms.py index 20ed4034..540e21d3 100644 --- a/intervention/forms.py +++ b/intervention/forms.py @@ -8,23 +8,21 @@ Created on: 02.12.20 from dal import autocomplete from django import forms from django.contrib.auth.models import User -from django.contrib.gis import forms as gis_forms from django.contrib.gis.geos import Polygon from django.db import transaction from django.urls import reverse from django.utils.translation import gettext_lazy as _ from codelist.models import KonovaCode -from codelist.settings import CODELIST_BIOTOPES_ID, 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 from compensation.models import EcoAccountDeduction, EcoAccount -from intervention.models import Intervention, Revocation, RevocationDocument -from konova.forms import BaseForm, BaseModalForm -from konova.settings import DEFAULT_LAT, DEFAULT_LON, DEFAULT_ZOOM, ZB_GROUP, ETS_GROUP +from intervention.models import Intervention, Revocation, RevocationDocument, LegalData, ResponsibilityData +from konova.forms import BaseForm, BaseModalForm, SimpleGeomForm +from konova.settings import ZB_GROUP, ETS_GROUP from konova.utils.general import format_german_float from konova.utils.messenger import Messenger from konova.utils.user_checks import in_group -from organisation.models import Organisation from user.models import UserActionLogEntry, UserAction @@ -40,10 +38,16 @@ class NewInterventionForm(BaseForm): label_suffix="", help_text=_("An explanatory name"), max_length=255, + widget=forms.TextInput( + attrs={ + "placeholder": _("Construction XY; Location ABC") + } + ) ) type = forms.ModelChoiceField( label=_("Process type"), label_suffix="", + help_text=_(""), required=False, queryset=KonovaCode.objects.filter( is_archived=False, @@ -107,12 +111,22 @@ class NewInterventionForm(BaseForm): label_suffix="", max_length=255, required=False, + widget=forms.TextInput( + attrs={ + "placeholder": _("ZB-123/ABC.456") + } + ) ) conservation_office_file_number = forms.CharField( label=_("Conservation office file number"), label_suffix="", max_length=255, required=False, + widget=forms.TextInput( + attrs={ + "placeholder": _("ETS-123/ABC.456") + } + ) ) handler = forms.CharField( label=_("Intervention handler"), @@ -120,20 +134,45 @@ class NewInterventionForm(BaseForm): max_length=255, required=False, help_text=_("Who performs the intervention"), - ) - geometry = gis_forms.MultiPolygonField( - widget=gis_forms.OSMWidget( + widget=forms.TextInput( attrs={ - "default_lat": DEFAULT_LAT, - "default_lon": DEFAULT_LON, - "default_zoom": DEFAULT_ZOOM, - 'map_width': 800, - 'map_height': 500 + "placeholder": _("Company Mustermann") + } + ) + ) + registration_date = forms.DateField( + label=_("Registration date"), + label_suffix=_(""), + required=False, + widget=forms.DateInput( + attrs={ + "type": "date", }, - ), - label=_("Map"), + format="%d.%m.%Y" + ) + ) + binding_date = forms.DateField( + label=_("Binding on"), + label_suffix=_(""), + required=False, + widget=forms.DateInput( + attrs={ + "type": "date", + }, + format="%d.%m.%Y" + ) + ) + comment = forms.CharField( label_suffix="", - help_text=_("Where does the intervention take place") + label=_("Comment"), + required=False, + help_text=_("Additional comment"), + widget=forms.Textarea( + attrs={ + "rows": 5, + "class": "w-100" + } + ) ) def __init__(self, *args, **kwargs): @@ -142,30 +181,69 @@ class NewInterventionForm(BaseForm): self.action_url = reverse("intervention:new") self.cancel_redirect = reverse("intervention:index") - def save(self, user: User): + tmp_intervention = Intervention() + identifier = tmp_intervention._generate_new_identifier() + self.initialize_form_field("identifier", identifier) + + def save(self, user: User, geom_form: SimpleGeomForm): with transaction.atomic(): + # Fetch data from cleaned POST values identifier = self.cleaned_data.get("identifier", None) title = self.cleaned_data.get("title", None) _type = self.cleaned_data.get("type", None) laws = self.cleaned_data.get("laws", None) handler = self.cleaned_data.get("handler", None) - geometry = self.cleaned_data.get("geometry", Polygon()) + registration_office = self.cleaned_data.get("registration_office", None) + conservation_office = self.cleaned_data.get("conservation_office", None) + conservation_office_file_number = self.cleaned_data.get("conservation_office_file_number", None) + registration_office_file_number = self.cleaned_data.get("registration_office_file_number", None) + binding_date = self.cleaned_data.get("binding_date", None) + registration_date = self.cleaned_data.get("registration_date", None) + comment = self.cleaned_data.get("comment", None) + # Create log entry action = UserActionLogEntry.objects.create( user=user, action=UserAction.CREATED, ) - intervention = Intervention( + + # Create legal data object (without M2M laws first) + legal_data = LegalData.objects.create( + registration_date=registration_date, + binding_date=binding_date, + process_type=_type, + ) + # Then add the M2M laws to the object + legal_data.laws.set(laws) + + # Create responsible data object + responsibility_data = ResponsibilityData.objects.create( + registration_office=registration_office, + conservation_office=conservation_office, + registration_file_number=registration_office_file_number, + conservation_file_number=conservation_office_file_number, + handler=handler, + ) + + # Process the geometry form + geometry = geom_form.save(action) + + # Finally create main object, holding the other objects + intervention = Intervention.objects.create( identifier=identifier, title=title, - type=_type, - laws=laws, - handler=handler, - geometry=geometry, + responsible=responsibility_data, + legal=legal_data, created=action, + geometry=geometry, + comment=comment, ) - intervention.save() + + # Add the log entry to the main objects log list intervention.log.add(action) + + # Add the performing user as the first user having access to the data + intervention.users.add(user) return intervention @@ -384,6 +462,9 @@ class NewRevocationForm(BaseModalForm): ) ) + # Define w-100 for all form fields + full_width_fields = True + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.form_title = _("Add revocation") @@ -532,6 +613,9 @@ class NewDeductionForm(BaseModalForm): ), ) + # Define w-100 for all form fields + full_width_fields = True + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.form_title = _("New Deduction") diff --git a/intervention/models.py b/intervention/models.py index f05b0ddb..59cecf64 100644 --- a/intervention/models.py +++ b/intervention/models.py @@ -260,14 +260,41 @@ class Intervention(BaseObject): self.save() def save(self, *args, **kwargs): + """ Custom save functionality + + Performs some pre-save checks: + 1. Checking for existing identifiers + + Args: + *args (): + **kwargs (): + + Returns: + + """ if self.identifier is None or len(self.identifier) == 0: - # Create new identifier - new_id = self._generate_new_identifier() - while Intervention.objects.filter(identifier=new_id).exists(): - new_id = self._generate_new_identifier() - self.identifier = new_id + # No identifier given + self.identifier = self._generate_new_identifier() + + # Before saving, make sure the set identifier is not used, yet + while Intervention.objects.filter(identifier=self.identifier).exists(): + self.identifier = self._generate_new_identifier() super().save(*args, **kwargs) + def delete(self, using=None, keep_parents=False): + to_delete = [ + self.legal, + self.responsible, + self.geometry, + self.log.all() + ] + for entry in to_delete: + try: + entry.delete() + except AttributeError: + pass + super().delete(using, keep_parents) + def quality_check(self) -> list: """ Quality check diff --git a/intervention/templates/intervention/new/view.html b/intervention/templates/intervention/new/view.html index eb37e6b7..d543b7a3 100644 --- a/intervention/templates/intervention/new/view.html +++ b/intervention/templates/intervention/new/view.html @@ -1,6 +1,17 @@ {% extends 'base.html' %} {% load i18n l10n %} +{% block head %} + {% comment %} + dal documentation (django-autocomplete-light) states using form.media for adding needed scripts. + This does not work properly with modal forms, as the scripts are not loaded properly inside the modal. + Therefore the script linkages from form.media have been extracted and put inside dal/scripts.html to ensure + these scripts are loaded when needed. + {% endcomment %} + {% include 'dal/scripts.html' %} +{% endblock %} + {% block body %} +

{{data_form.form_title}}

{% include 'form/main_data_collapse_form.html' %} {% endblock %} \ No newline at end of file diff --git a/intervention/views.py b/intervention/views.py index 4c0d1c9a..1c759810 100644 --- a/intervention/views.py +++ b/intervention/views.py @@ -59,11 +59,18 @@ def new_view(request: HttpRequest): """ template = "intervention/new/view.html" - form = NewInterventionForm(request.POST or None) + data_form = NewInterventionForm(request.POST or None) + geom_form = SimpleGeomForm(request.POST or None, read_only=False) if request.method == "POST": - if form.is_valid(): - intervention = form.save(request.user) - messages.success(request, _("Intervention {} added").format(intervention.title)) + if data_form.is_valid() and geom_form.is_valid(): + generated_identifier = data_form.cleaned_data.get("identifier", None) + intervention = data_form.save(request.user, geom_form) + if generated_identifier != intervention.identifier: + messages.info( + request, + _("The identifier '{}' had to be changed to '{}' since another entry has been added in the meanwhile, which uses this identifier") + ) + messages.success(request, _("Intervention {} added").format(intervention.identifier)) return redirect("intervention:index") else: messages.error(request, _("Invalid input")) @@ -71,7 +78,8 @@ def new_view(request: HttpRequest): # For clarification: nothing in this case pass context = { - "form": form, + "data_form": data_form, + "geom_form": geom_form, } context = BaseContext(request, context).context return render(request, template, context) diff --git a/konova/forms.py b/konova/forms.py index 2b0f18a5..4575ee88 100644 --- a/konova/forms.py +++ b/konova/forms.py @@ -13,8 +13,8 @@ from bootstrap_modal_forms.utils import is_ajax from django import forms from django.contrib import messages from django.contrib.auth.models import User -from django.contrib.gis.forms import GeometryField, OSMWidget -from django.contrib.gis.geos import Polygon +from django.contrib.gis.forms import OSMWidget, MultiPolygonField +from django.contrib.gis.geos import Polygon, MultiPolygon from django.db import transaction from django.http import HttpRequest, HttpResponseRedirect from django.shortcuts import render @@ -25,7 +25,8 @@ from compensation.models import EcoAccount, Compensation, EcoAccountDocument, Co from ema.models import Ema, EmaDocument from intervention.models import Intervention, Revocation, RevocationDocument, InterventionDocument from konova.contexts import BaseContext -from konova.models import BaseObject +from konova.models import BaseObject, Geometry +from konova.settings import DEFAULT_SRID from konova.utils.message_templates import FORM_INVALID from user.models import UserActionLogEntry, UserAction @@ -187,8 +188,7 @@ class BaseModalForm(BaseForm, BSModalForm): full_width_fields = False template = "modal/modal_form.html" - def __init__(self, full_width_fields: bool = True, *args, **kwargs): - self.full_width_fields = full_width_fields + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.full_width_fields: # Automatically add bootstrap w-100 class for maximum width of form fields in modals @@ -243,18 +243,26 @@ class SimpleGeomForm(BaseForm): """ A geometry form for rendering geometry read-only using a widget """ - geom = GeometryField( + geom = MultiPolygonField( + srid=DEFAULT_SRID, + label=_("Geometry"), + help_text=_(""), + label_suffix="", required=False, - disabled=True, + disabled=False, widget=OSMWidget( attrs={ "map_width": 600, "map_height": 400, + # default_zoom defines the nearest possible zoom level from which the JS automatically + # zooms out if geometry requires a larger view port. So define a larger range for smaller geometries + "default_zoom": 25, } ) ) def __init__(self, *args, **kwargs): + read_only = kwargs.pop("read_only", True) super().__init__(*args, **kwargs) # Initialize geometry @@ -267,8 +275,17 @@ class SimpleGeomForm(BaseForm): geom = Polygon.from_bbox([0, 0, 0, 0]) # Zoom out to a very high level, so the user can see directly that there is no geometry for this entry self.fields["geom"].widget.attrs["default_zoom"] = 1 - self.initialize_form_field("geom", geom) - self.area = geom.area + if read_only: + self.initialize_form_field("geom", geom) + self.area = geom.area + self.fields["geom"].disabled = True + + def save(self, action: UserActionLogEntry): + geometry = Geometry.objects.create( + geom=self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID)), + created=action, + ) + return geometry class RemoveModalForm(BaseModalForm): @@ -294,15 +311,7 @@ class RemoveModalForm(BaseModalForm): def save(self): if isinstance(self.instance, BaseObject): - with transaction.atomic(): - action = UserActionLogEntry.objects.create( - user=self.user, - timestamp=timezone.now(), - action=UserAction.DELETED, - ) - self.instance.deleted = action - self.instance.log.add(action) - self.instance.save() + self.instance.mark_as_deleted(self.user) else: # If the class does not provide restorable delete functionality, we must delete the entry finally self.instance.delete() @@ -360,6 +369,9 @@ class NewDocumentForm(BaseModalForm): Ema: EmaDocument, } + # Define w-100 for all form fields + full_width_fields = True + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.form_title = _("Add new document") diff --git a/konova/models.py b/konova/models.py index 492dcef7..40711259 100644 --- a/konova/models.py +++ b/konova/models.py @@ -9,6 +9,8 @@ import os import uuid from django.contrib.auth.models import User +from django.core.exceptions import ObjectDoesNotExist +from django.utils import timezone from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ from django.contrib.gis.db.models import MultiPolygonField @@ -61,8 +63,20 @@ class BaseResource(UuidModel): abstract = True def delete(self, using=None, keep_parents=False): - if self.created: + """ Base deletin of a resource + + Args: + using (): + keep_parents (): + + Returns: + + """ + try: self.created.delete() + except ObjectDoesNotExist: + # Object does not exist anymore - we can skip this + pass super().delete() @@ -81,14 +95,13 @@ class BaseObject(BaseResource): class Meta: abstract = True - def delete(self, *args, **kwargs): - """ Custom delete functionality + def mark_as_deleted(self, user: User): + """ Mark an entry as deleted Does not delete from database but sets a timestamp for being deleted on and which user deleted the object Args: - *args (): - **kwargs (): + user (User): The performing user Returns: @@ -97,13 +110,14 @@ class BaseObject(BaseResource): # Nothing to do here return - _user = kwargs.get("user", None) with transaction.atomic(): action = UserActionLogEntry.objects.create( - user=_user, - action=UserAction.DELETED + user=user, + action=UserAction.DELETED, + timestamp=timezone.now() ) self.deleted = action + self.log.add(action) self.save() def add_log_entry(self, action: UserAction, user: User, comment: str): diff --git a/konova/static/css/konova.css b/konova/static/css/konova.css index 990b6643..3d04ce33 100644 --- a/konova/static/css/konova.css +++ b/konova/static/css/konova.css @@ -60,8 +60,18 @@ a { color: var(--rlp-red); } -input[type=text] { - width: 100%; +input[type=text], input[type=date] { + border: 1px solid gray; + border-radius: 0.2rem; + padding: 0.3rem 0.5rem; +} + +input:focus, textarea:focus, select:focus{ + outline: none; + border-color: var(--rlp-red); + box-shadow: 0 0 3px var(--rlp-red); + -moz-box-shadow: 0 0 3px var(--rlp-red); + -webkit-box-shadow: 0 0 3px var(--rlp-red); } .body-content{ @@ -137,6 +147,13 @@ input[type=text] { height: 8rem; } +/** +Overwrites bootstrap .btn:focus box shadow color +*/ +.btn:focus{ + box-shadow: 0 0 5px .2rem var(--rlp-gray-light); +} + .btn-default{ color: white; background-color: var(--rlp-red); @@ -175,13 +192,6 @@ input[type=text] { background-color: var(--rlp-gray-light); } -input:focus, textarea:focus, select:focus{ - border-color: var(--rlp-red) !important; - box-shadow: 0 0 3px var(--rlp-red) !important; - -moz-box-shadow: 0 0 3px var(--rlp-red) !important; - -webkit-box-shadow: 0 0 3px var(--rlp-red) !important; -} - .check-star{ color: goldenrod; } @@ -219,4 +229,7 @@ No other approach worked to get the autocomplete fields to full width of parent */ .select2-container{ width: 100% !important; +} +.select2-results__option--highlighted{ + background-color: var(--rlp-red) !important; } \ No newline at end of file diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 3ec4be48fae4d4a4eb4737275c842f46023d3be1..65c85dc8ebfc24cbd3b9c1f27228d5a472f57b99 100644 GIT binary patch delta 5882 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 ZdVa1`7tcy)=Tq`=;=BGO8EJbx{tv?rXT|^k delta 5859 zcmYk<33yId0><&1MHWdc2@y+@&zeLe#F|RQUP~+^l$P4_B|;lSL@B+tDIK-OUNR~z zMUgg!qFS{UWhfeEv^p3aT1&Lkp{nNpe)r^gdY`_2=bZ1}bI&>V+)FnUdKDCU6|eKM zgDuO7iL|V0*b>9Ahp7+65bC+;k2A3n&c`aa3U&Vb7>%D`3|>Kc7%1DT8(z#P;7mSG?kq59d5X}Aj)phi_0-a_4Q z9cmyuQ0MQCww;CpG-#wpjc2er^-|Og@1Sn<8|p$om(yVg>ITsmgiSFVQ&20Lj%pu{ zF*pvJU;%0+4%!s@Qn-Mcaf7-}$8o5cr=SMb2X*5?*cpeJ`bMlxeGBUPqp0&wqHb^= zHSq6I11iHB_&e%6JG`FLaWtxfM#gyTN4*)g#M!7vvj}!S_-vj*p2Gw9BQ*&M9ug*s^hz;0X{};z6uSUdN}%0 zccEt55OsY!)ZR!#T|WeM-5AsgPQ~in-zuh{3yz_d=mKif-9p{)A!<{3H*%h7O{_^h z0VA**>h}?-0ZhSGxESN`D60Q^rv3!AGBNB(y8?x#6x7fPJtIeLsx+*FS*V%JMJ@Sq z)UIBSez*lS!(!C+2Tc8x`TY{={Hv(ze=xuQ9K-r+#$K_`rU^&QEEctUJ0WkJH4wSR z%Ev-1MBTU@)6ldR2USupmt?XgcCjBao_1DO6(BO|{s3m=b>NvEq zvj^&!i`Cl)oZWYh%gb`;cMU(};` z0kxE`7+=F+>ThBYt~Bi%O?$DaA3&|(DI9|5k$q-0O>i8DF6uLoIa-CtO4-&43Yy7z z<7LzcuNrTl26ziY@BwPZR-$uW5Nak>Q0LV{4J000V++(k#-ct@ON~3RrQZM36f`35 zrp|{V0lldYMh$Ez>XD2_bvzw|aV}~gOHt2!9rBH`HX;96C;3Bf(XXhL3vcF}Uk^2r z1ngvc@r|eO4Gpg+S=MHJsX4C@`nIqvKGW7AjKv$MnTE7HgsTch?sZ__>k zHIN+C2d)sc0((&tDn(mA+&3o#@zu}|jZi1HM-5;oYIEAC8?8dUraQ1Yeu3KE-(od< zfb2iZpY_+HY=K(IWK=(?SQ!VlX8o&B$fQ9_IR(|xY}5@_qL#MUxX*Y5wX|nY&-ONk zW7Rg!%EV$r>Pe^@4njS$@u&~lbX31<+L-shhz1Ry7&X%UsF{6^m9W(OeiLg@FEa)v zJCCF;>Tkmqr~##;_R3WB!&#^S%tuXZ1#0DY+7$Gc&PmknJ!33I4dgr2%x;?YC#Vkm zo^h7Yg<7#@sO!7n0PKycaU<&bl(x>^NJpLLHrhE9v=mc}v&;_*P%~YQT8R(L?}tz; z^(AVFOR)l*_z7x;KF>PmS3#ZE2-SZQ#$gJw&n-8yS#4_-g)ADjqAmz+=gcS)wF#3@ zuTNjp??aGDS(&JgH=qW%6}4gqQE$aD(P;)%kSSMxEaT1NHuQqM&Eh3)R5@ z)UF+j{c$*^VF~KIr`QSo+dI3wC&p0EH}yi)4Nsz$`Z8*hUqiheKVbw0bYK8Bg}M~< z-o_hKjr~xYCj<2;#-aAg98|~iP#rHp4g4MBX4HypH}$>PnEGePx6ZnanqbY2tiMJQ zMM1Aq8`KT@qh>J3n2B2Y$*85BY1$W=`g+t2w_#1(gBsX5)aJZq>c5~iqd&{n9iuw2 z{+f9f4RRVr;zHC1VjHUC{ixUKIBFB!#by}M+4(nJ57d`#3Tkt0#^>-dHb++%XF&b2 z1N98l-g&PJ>#wEUNrRs4$Eas?5VhnNF$(XXKE1(Roqx_-&g)G=;6G8J@%@Scd8#ifQQgBy5QN@H9?A4ZLeNXNmh5M`3%~ z^HEE^8+D`8r~zCt-bD@6)`QRw;iwK{(S=E-JsmZJ4D`VXs6CU1>R=%zU=eEN&Y=c= z6Sc&T&<}ljIOkWyTGU<0irH3*`Jo4DAj46cXCfxyY}8)Zg}iyz5!6!q^mGPX74_k% zg_>~;>XD^leH@DFZx(8R%P;^pV<`8xiYcgr!>G65ENW&yn!0zI^LrGkgLu?HJ75r| zqXsw({V@k$#e9s#d&Y=f&dPQ~4Qv#8-v2i!1ktcW4Y&@q)SFNpZZ*Gugu3ykrhXQ+ zv{x_~uVY2LkGk$L@>RBcdOLsXrJ~-hA?U)XXlsOPDWu?GY=loy18CI8>98?s=B-d2 z_e9+|9X0S5F$CSHO*#qnI<7%&-V;~}Z=ueAXzIRwS${7YCKDZ>k(Oi;nM59wlVlsY zL3ErU{#^7w^wq_GI8IQmK-Q9#}K1l%Eeu%up6y$WGK-~ zl23GuAllP|iH_GCJpaDEN?CsaYiHC%J;2N6_gffF+e^5CRHLjNu$^=yI|&~zwveab z{P7eDOkGdiZOZ?}I;0_azTm^KF#9i*&Xd0p9r0urnNMO!F8P7v5gkQjJo%UmCx=P- z@ndKwPv`%Z`cwXdJR;pmUs8iPdyzuQ<;NEkHj-&% z28knE$xWg|ufGrR=DM?L;21?t5p8@{%=$?8FQzbnROiG5)Um?B^Rc>5If~!1@dZ*s z+LEQ@D5*zud`fnBO3oii@D(Vv@-;a}Mw7piATO0TnvqaX$+G^9O~{+3{v1Yd zf?WN^IGIOu zyh{E~>XX;WEb<%CvCzTuKbod!Riv+fQ0Z+NX5$(S{?FxS;O}G)=|B#WXGs7TR>AV4 z28D0QDsq~9P6|dg4=_V^rE-pFxo*Myfxj&_%)) YU9)qta\n" "Language-Team: LANGUAGE \n" @@ -53,16 +54,16 @@ msgstr "Zahlung wird an diesem Datum erwartet" #: ema/templates/ema/detail/includes/actions.html:34 #: ema/templates/ema/detail/includes/deadlines.html:34 #: ema/templates/ema/detail/includes/documents.html:31 -#: intervention/forms.py:376 +#: intervention/forms.py:446 #: intervention/templates/intervention/detail/includes/documents.html:31 #: intervention/templates/intervention/detail/includes/payments.html:34 #: intervention/templates/intervention/detail/includes/revocation.html:38 -#: konova/forms.py:345 +#: konova/forms.py:359 msgid "Comment" msgstr "Kommentar" #: compensation/forms.py:68 compensation/forms.py:265 compensation/forms.py:346 -#: intervention/forms.py:378 konova/forms.py:347 +#: intervention/forms.py:448 konova/forms.py:361 msgid "Additional comment, maximum {} letters" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" @@ -97,11 +98,11 @@ msgstr "Biotoptyp wählen" #: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36 #: ema/templates/ema/detail/includes/states-after.html:36 #: ema/templates/ema/detail/includes/states-before.html:36 -#: intervention/forms.py:517 +#: intervention/forms.py:587 msgid "Surface" msgstr "Fläche" -#: compensation/forms.py:155 intervention/forms.py:519 +#: compensation/forms.py:155 intervention/forms.py:589 msgid "in m²" msgstr "" @@ -117,7 +118,7 @@ msgstr "Geben Sie die Daten des neuen Zustandes ein" msgid "Added state" msgstr "Zustand hinzugefügt" -#: compensation/forms.py:185 konova/forms.py:198 +#: compensation/forms.py:185 konova/forms.py:199 msgid "Object removed" msgstr "Objekt entfernt" @@ -133,7 +134,7 @@ msgstr "Fristart wählen" #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31 #: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31 #: ema/templates/ema/detail/includes/deadlines.html:31 -#: intervention/forms.py:351 +#: intervention/forms.py:421 msgid "Date" msgstr "Datum" @@ -257,7 +258,7 @@ msgstr "" "wollen. Kontaktieren Sie die für die Abbuchungen verantwortlichen Nutzer!" #: compensation/tables.py:24 compensation/tables.py:164 ema/tables.py:28 -#: intervention/forms.py:33 intervention/tables.py:23 +#: intervention/forms.py:37 intervention/tables.py:23 #: intervention/templates/intervention/detail/includes/compensations.html:30 msgid "Identifier" msgstr "Kennung" @@ -268,11 +269,11 @@ msgstr "Kennung" #: compensation/templates/compensation/detail/eco_account/includes/documents.html:28 #: compensation/templates/compensation/detail/eco_account/view.html:31 #: ema/tables.py:33 ema/templates/ema/detail/includes/documents.html:28 -#: ema/templates/ema/detail/view.html:24 intervention/forms.py:39 +#: ema/templates/ema/detail/view.html:24 intervention/forms.py:43 #: intervention/tables.py:28 #: intervention/templates/intervention/detail/includes/compensations.html:33 #: intervention/templates/intervention/detail/includes/documents.html:28 -#: intervention/templates/intervention/detail/view.html:31 konova/forms.py:316 +#: intervention/templates/intervention/detail/view.html:31 konova/forms.py:330 msgid "Title" msgstr "Bezeichnung" @@ -363,7 +364,7 @@ msgstr "Ökokonten" #: compensation/tables.py:222 #: compensation/templates/compensation/detail/eco_account/view.html:19 -#: intervention/forms.py:501 intervention/forms.py:508 +#: intervention/forms.py:571 intervention/forms.py:578 #: konova/templates/konova/home.html:88 templates/navbar.html:34 msgid "Eco-account" msgstr "Ökokonto" @@ -476,7 +477,7 @@ msgstr "Dokumente" #: compensation/templates/compensation/detail/eco_account/includes/documents.html:14 #: ema/templates/ema/detail/includes/documents.html:14 #: intervention/templates/intervention/detail/includes/documents.html:14 -#: konova/forms.py:365 +#: konova/forms.py:379 msgid "Add new document" msgstr "Neues Dokument hinzufügen" @@ -581,7 +582,7 @@ msgstr "Zuletzt bearbeitet" #: compensation/templates/compensation/detail/compensation/view.html:92 #: compensation/templates/compensation/detail/eco_account/view.html:91 -#: ema/templates/ema/detail/view.html:82 intervention/forms.py:285 +#: ema/templates/ema/detail/view.html:82 intervention/forms.py:355 #: intervention/templates/intervention/detail/view.html:116 msgid "Shared with" msgstr "Freigegeben für" @@ -642,19 +643,19 @@ msgid "Missing" msgstr "Fehlt" #: compensation/templates/compensation/detail/eco_account/view.html:58 -#: ema/templates/ema/detail/view.html:42 intervention/forms.py:91 +#: ema/templates/ema/detail/view.html:42 intervention/forms.py:101 #: intervention/templates/intervention/detail/view.html:56 msgid "Conservation office" msgstr "Eintragungsstelle" #: compensation/templates/compensation/detail/eco_account/view.html:62 -#: ema/templates/ema/detail/view.html:46 intervention/forms.py:112 +#: ema/templates/ema/detail/view.html:46 intervention/forms.py:127 #: intervention/templates/intervention/detail/view.html:60 msgid "Conservation office file number" msgstr "Aktenzeichen Eintragungsstelle" #: compensation/templates/compensation/detail/eco_account/view.html:66 -#: ema/templates/ema/detail/view.html:50 intervention/forms.py:118 +#: ema/templates/ema/detail/view.html:50 intervention/forms.py:138 #: intervention/templates/intervention/detail/view.html:64 msgid "Intervention handler" msgstr "Eingriffsverursacher" @@ -666,7 +667,7 @@ msgstr "" #: compensation/views/compensation_views.py:123 #: compensation/views/eco_account_views.py:190 ema/views.py:128 -#: intervention/views.py:391 +#: intervention/views.py:393 msgid "Log" msgstr "Log" @@ -676,7 +677,7 @@ msgstr "Kompensation entfernt" #: compensation/views/compensation_views.py:163 #: compensation/views/eco_account_views.py:289 ema/views.py:250 -#: intervention/views.py:94 +#: intervention/views.py:96 msgid "Document added" msgstr "Dokument hinzugefügt" @@ -712,16 +713,16 @@ msgid "Deduction removed" msgstr "Abbuchung entfernt" #: compensation/views/eco_account_views.py:210 ema/views.py:171 -#: intervention/views.py:431 +#: intervention/views.py:433 msgid "{} unrecorded" msgstr "{} entzeichnet" #: compensation/views/eco_account_views.py:210 ema/views.py:171 -#: intervention/views.py:431 +#: intervention/views.py:433 msgid "{} recorded" msgstr "{} verzeichnet" -#: compensation/views/eco_account_views.py:346 intervention/views.py:413 +#: compensation/views/eco_account_views.py:346 intervention/views.py:415 msgid "Deduction added" msgstr "Abbuchung hinzugefügt" @@ -773,111 +774,129 @@ msgstr "Gemarkung" msgid "Search for district" msgstr "Nach Gemarkung suchen" -#: intervention/forms.py:36 +#: intervention/forms.py:40 msgid "Generated automatically" msgstr "Automatisch generiert" -#: intervention/forms.py:41 +#: intervention/forms.py:45 msgid "An explanatory name" msgstr "Aussagekräftiger Titel" -#: intervention/forms.py:45 +#: intervention/forms.py:49 +msgid "Construction XY; Location ABC" +msgstr "Bauvorhaben XY; Flur ABC" + +#: intervention/forms.py:54 #: intervention/templates/intervention/detail/view.html:35 msgid "Process type" msgstr "Verfahrenstyp" -#: intervention/forms.py:60 +#: intervention/forms.py:70 #: intervention/templates/intervention/detail/view.html:39 msgid "Law" msgstr "Gesetz" -#: intervention/forms.py:62 +#: intervention/forms.py:72 msgid "Multiple selection possible" msgstr "Mehrfachauswahl möglich" -#: intervention/forms.py:76 +#: intervention/forms.py:86 #: intervention/templates/intervention/detail/view.html:48 msgid "Registration office" msgstr "Zulassungsbehörde" -#: intervention/forms.py:106 +#: intervention/forms.py:116 #: intervention/templates/intervention/detail/view.html:52 msgid "Registration office file number" msgstr "Aktenzeichen Zulassungsbehörde" #: intervention/forms.py:122 +msgid "ZB-123/ABC.456" +msgstr "" + +#: intervention/forms.py:133 +msgid "ETS-123/ABC.456" +msgstr "" + +#: intervention/forms.py:142 msgid "Who performs the intervention" msgstr "Wer führt den Eingriff durch" -#: intervention/forms.py:134 -msgid "Map" -msgstr "Karte" +#: intervention/forms.py:145 +msgid "Company Mustermann" +msgstr "Firma Mustermann" -#: intervention/forms.py:136 -msgid "Where does the intervention take place" -msgstr "Wo findet der Eingriff statt" +#: intervention/forms.py:150 +#: intervention/templates/intervention/detail/view.html:96 +msgid "Registration date" +msgstr "Datum Zulassung bzw. Satzungsbeschluss" -#: intervention/forms.py:141 +#: intervention/forms.py:161 +#: intervention/templates/intervention/detail/view.html:100 +msgid "Binding on" +msgstr "Datum Bestandskraft" + +#: intervention/forms.py:174 msgid "New intervention" msgstr "Neuer Eingriff" -#: intervention/forms.py:178 +#: intervention/forms.py:248 msgid "Edit intervention" msgstr "Eingriff bearbeiten" -#: intervention/forms.py:274 +#: intervention/forms.py:344 msgid "Share link" msgstr "Freigabelink" -#: intervention/forms.py:276 +#: intervention/forms.py:346 msgid "Send this link to users who you want to have writing access on the data" msgstr "Andere Nutzer erhalten über diesen Link Zugriff auf die Daten" -#: intervention/forms.py:288 +#: intervention/forms.py:358 msgid "Remove check to remove access for this user" msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen" -#: intervention/forms.py:299 +#: intervention/forms.py:369 #: intervention/templates/intervention/detail/includes/controls.html:15 msgid "Share" msgstr "Freigabe" -#: intervention/forms.py:300 +#: intervention/forms.py:370 msgid "Share settings for {}" msgstr "Freigabe Einstellungen für {}" -#: intervention/forms.py:353 +#: intervention/forms.py:423 msgid "Date of revocation" msgstr "Datum des Widerspruchs" -#: intervention/forms.py:363 +#: intervention/forms.py:433 #: intervention/templates/intervention/detail/includes/revocation.html:35 msgid "Document" msgstr "Dokument" -#: intervention/forms.py:366 konova/forms.py:335 +#: intervention/forms.py:436 konova/forms.py:349 msgid "Must be smaller than 15 Mb" msgstr "Muss kleiner als 15 Mb sein" -#: intervention/forms.py:389 +#: intervention/forms.py:459 #: intervention/templates/intervention/detail/includes/revocation.html:18 msgid "Add revocation" msgstr "Widerspruch hinzufügen" -#: intervention/forms.py:429 +#: intervention/forms.py:499 msgid "Checked intervention data" msgstr "Eingriffsdaten geprüft" -#: intervention/forms.py:435 +#: intervention/forms.py:505 msgid "Checked compensations data and payments" msgstr "Kompensationen und Zahlungen geprüft" -#: intervention/forms.py:443 +#: intervention/forms.py:513 #: intervention/templates/intervention/detail/includes/controls.html:19 msgid "Run check" msgstr "Prüfung vornehmen" -#: intervention/forms.py:444 konova/forms.py:419 +#: intervention/forms.py:514 konova/forms.py:433 msgid "" "I, {} {}, confirm that all necessary control steps have been performed by " "myself." @@ -885,30 +904,30 @@ msgstr "" "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "wurden:" -#: intervention/forms.py:503 +#: intervention/forms.py:573 msgid "Only recorded accounts can be selected for deductions" msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden." -#: intervention/forms.py:522 intervention/forms.py:529 +#: intervention/forms.py:592 intervention/forms.py:599 #: intervention/tables.py:88 #: intervention/templates/intervention/detail/view.html:19 #: konova/templates/konova/home.html:11 templates/navbar.html:22 msgid "Intervention" msgstr "Eingriff" -#: intervention/forms.py:524 +#: intervention/forms.py:594 msgid "Only shared interventions can be selected" msgstr "Nur freigegebene Eingriffe können gewählt werden" -#: intervention/forms.py:537 +#: intervention/forms.py:607 msgid "New Deduction" msgstr "Neue Abbuchung" -#: intervention/forms.py:538 +#: intervention/forms.py:608 msgid "Enter the information for a new deduction from a chosen eco-account" msgstr "Geben Sie die Informationen für eine neue Abbuchung ein." -#: intervention/forms.py:574 +#: intervention/forms.py:644 msgid "" "Eco-account {} is not recorded yet. You can only deduct from recorded " "accounts." @@ -916,7 +935,7 @@ msgstr "" "Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von " "verzeichneten Ökokonten erfolgen." -#: intervention/forms.py:587 +#: intervention/forms.py:657 msgid "" "The account {} has not enough surface for a deduction of {} m². There are " "only {} m² left" @@ -1017,31 +1036,23 @@ msgstr "Vom" msgid "Remove revocation" msgstr "Widerspruch entfernen" -#: intervention/templates/intervention/detail/view.html:96 -msgid "Registration date" -msgstr "Datum Zulassung bzw. Satzungsbeschluss" - -#: intervention/templates/intervention/detail/view.html:100 -msgid "Binding on" -msgstr "Datum Bestandskraft" - #: intervention/templates/intervention/detail/view.html:103 msgid "Exists" msgstr "vorhanden" -#: intervention/views.py:66 +#: intervention/views.py:67 msgid "Intervention {} added" msgstr "Eingriff {} hinzugefügt" -#: intervention/views.py:69 intervention/views.py:224 +#: intervention/views.py:70 intervention/views.py:226 msgid "Invalid input" msgstr "Eingabe fehlerhaft" -#: intervention/views.py:182 +#: intervention/views.py:184 msgid "This intervention has a revocation from {}" msgstr "Es existiert ein Widerspruch vom {}" -#: intervention/views.py:198 +#: intervention/views.py:200 msgid "" "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 " @@ -1051,43 +1062,43 @@ msgstr "" "bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, " "noch Prüfungen durchführen oder verzeichnen können." -#: intervention/views.py:221 +#: intervention/views.py:223 msgid "{} edited" msgstr "{} bearbeitet" -#: intervention/views.py:250 +#: intervention/views.py:252 msgid "{} removed" msgstr "{} entfernt" -#: intervention/views.py:271 +#: intervention/views.py:273 msgid "Revocation removed" msgstr "Widerspruch entfernt" -#: intervention/views.py:297 +#: intervention/views.py:299 msgid "{} has already been shared with you" msgstr "{} wurde bereits für Sie freigegeben" -#: intervention/views.py:302 +#: intervention/views.py:304 msgid "{} has been shared with you" msgstr "{} ist nun für Sie freigegeben" -#: intervention/views.py:309 +#: intervention/views.py:311 msgid "Share link invalid" msgstr "Freigabelink ungültig" -#: intervention/views.py:330 +#: intervention/views.py:332 msgid "Share settings updated" msgstr "Freigabe Einstellungen aktualisiert" -#: intervention/views.py:349 +#: intervention/views.py:351 msgid "Check performed" msgstr "Prüfung durchgeführt" -#: intervention/views.py:369 +#: intervention/views.py:371 msgid "Revocation added" msgstr "Widerspruch hinzugefügt" -#: intervention/views.py:436 +#: intervention/views.py:438 msgid "There are errors on this intervention:" msgstr "Es liegen Fehler in diesem Eingriff vor:" @@ -1112,60 +1123,64 @@ msgstr "" msgid "You need to be part of another user group." msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!" -#: konova/forms.py:68 +#: konova/forms.py:69 msgid "Not editable" msgstr "Nicht editierbar" -#: konova/forms.py:138 konova/forms.py:281 +#: konova/forms.py:139 konova/forms.py:295 msgid "Confirm" msgstr "Bestätige" -#: konova/forms.py:150 konova/forms.py:290 +#: konova/forms.py:151 konova/forms.py:304 msgid "Remove" msgstr "Löschen" -#: konova/forms.py:152 +#: konova/forms.py:153 msgid "You are about to remove {} {}" msgstr "Sie sind dabei {} {} zu löschen" -#: konova/forms.py:291 +#: konova/forms.py:249 templates/form/main_data_collapse_form.html:47 +msgid "Geometry" +msgstr "Geometrie" + +#: konova/forms.py:305 msgid "Are you sure?" msgstr "Sind Sie sicher?" -#: konova/forms.py:321 +#: konova/forms.py:335 msgid "Created on" msgstr "Erstellt" -#: konova/forms.py:323 +#: konova/forms.py:337 msgid "When has this file been created? Important for photos." msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?" -#: konova/forms.py:333 +#: konova/forms.py:347 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231 msgid "File" msgstr "Datei" -#: konova/forms.py:396 +#: konova/forms.py:410 msgid "Added document" msgstr "Dokument hinzugefügt" -#: konova/forms.py:410 +#: konova/forms.py:424 msgid "Confirm record" msgstr "Verzeichnen bestätigen" -#: konova/forms.py:418 +#: konova/forms.py:432 msgid "Record data" msgstr "Daten verzeichnen" -#: konova/forms.py:425 +#: konova/forms.py:439 msgid "Confirm unrecord" msgstr "Entzeichnen bestätigen" -#: konova/forms.py:426 +#: konova/forms.py:440 msgid "Unrecord data" msgstr "Daten entzeichnen" -#: konova/forms.py:427 +#: konova/forms.py:441 msgid "I, {} {}, confirm that this data must be unrecorded." msgstr "" "Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen." @@ -1311,12 +1326,12 @@ msgid "Contact" msgstr "Kontakt" #: templates/form/generic_table_form.html:23 -#: templates/form/main_data_collapse_form.html:58 +#: templates/form/main_data_collapse_form.html:61 msgid "Cancel" msgstr "Abbrechen" #: templates/form/generic_table_form.html:27 -#: templates/form/main_data_collapse_form.html:62 +#: templates/form/main_data_collapse_form.html:65 msgid "Save" msgstr "Speichern" @@ -1324,7 +1339,7 @@ msgstr "Speichern" msgid "Fields with * are required." msgstr "* sind Pflichtfelder." -#: templates/form/main_data_collapse_form.html:13 +#: templates/form/main_data_collapse_form.html:14 msgid "" "\n" " First enter the most basic data. Of course you can " @@ -1335,23 +1350,20 @@ msgid "" " " msgstr "" "\n" -"Geben Sie zunächst die grundlegenden Daten ein. Sie können diese später immer noch ändern.\n" -"Alle weiteren Daten, wie Dokumente oder weitere Details, können nach dem Speichern des neuen Eintrags hinzugefügt " -"werden.\n" +"Geben Sie zunächst die grundlegenden Daten ein. Sie können diese später " +"immer noch ändern.\n" +"Alle weiteren Daten, wie Dokumente oder weitere Details, können nach dem " +"Speichern des neuen Eintrags hinzugefügt werden.\n" " " -#: templates/form/main_data_collapse_form.html:19 +#: templates/form/main_data_collapse_form.html:20 msgid "Open the input topic with a simple click." msgstr "Mit einem Linksklick öffnen Sie den jeweiligen Formularbereich." -#: templates/form/main_data_collapse_form.html:29 +#: templates/form/main_data_collapse_form.html:30 msgid "General data" msgstr "Allgemeine Daten" -#: templates/form/main_data_collapse_form.html:44 -msgid "Geometry" -msgstr "Geometrie" - #: templates/generic_index.html:28 msgid "New entry" msgstr "Neuer Eintrag" @@ -2708,6 +2720,12 @@ msgstr "" msgid "A fontawesome icon field" msgstr "" +#~ msgid "Map" +#~ msgstr "Karte" + +#~ msgid "Where does the intervention take place" +#~ msgstr "Wo findet der Eingriff statt" + #~ msgid "Which intervention type is this" #~ msgstr "Welcher Eingriffstyp" diff --git a/templates/form/main_data_collapse_form.html b/templates/form/main_data_collapse_form.html index 08e1bd15..2c783e4c 100644 --- a/templates/form/main_data_collapse_form.html +++ b/templates/form/main_data_collapse_form.html @@ -1,5 +1,6 @@ {% load i18n l10n fontawesome_5 %}
+ {% csrf_token %}

{{form.form_title}}

@@ -31,7 +32,9 @@
- {% include 'form/generic_table_form_body.html' %} + {% with data_form as form %} + {% include 'form/generic_table_form_body.html' %} + {% endwith %}
@@ -44,9 +47,9 @@ {% trans 'Geometry' %} -
+
- ToDo + {% include 'map/geom_form.html' %}