Compare commits

..

No commits in common. "9c978f0cbfc1e38b40dd25c3a1fdaf1678eb19d6" and "ae89f3d43c554a6c7501cee7fc9c8a9b9753ee38" have entirely different histories.

67 changed files with 163 additions and 533 deletions

View File

@ -104,9 +104,9 @@ class TimespanReport:
"iterable": self.evaluated_laws, "iterable": self.evaluated_laws,
"attrs": [ "attrs": [
"short_name", "short_name",
"num",
"num_checked", "num_checked",
"num_recorded", "num_recorded",
"num",
] ]
}, },
"i_laws_checked": self.law_sum_checked, "i_laws_checked": self.law_sum_checked,

View File

@ -64,7 +64,6 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa
obj = Compensation() obj = Compensation()
created = create_action created = create_action
obj.created = created obj.created = created
obj.modified = created
obj.geometry = geometry obj.geometry = geometry
return obj return obj

View File

@ -103,7 +103,6 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1,
obj.legal = Legal() obj.legal = Legal()
created = create_action created = create_action
obj.created = created obj.created = created
obj.modified = created
obj.geometry = geometry obj.geometry = geometry
return obj return obj

View File

@ -85,7 +85,6 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe
) )
created = create_action created = create_action
obj.created = created obj.created = created
obj.modified = created
obj.geometry = geometry obj.geometry = geometry
return obj return obj

View File

@ -76,7 +76,6 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
created = create_action created = create_action
obj.legal = legal obj.legal = legal
obj.created = created obj.created = created
obj.modified = created
obj.geometry = geometry obj.geometry = geometry
obj.responsible = resp obj.responsible = resp
return obj return obj
@ -133,6 +132,7 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
id__in=payments id__in=payments
) )
obj.payments.set(payments) obj.payments.set(payments)
obj.send_data_to_egon()
return obj return obj
def create_model_from_json(self, json_model, user): def create_model_from_json(self, json_model, user):
@ -200,7 +200,6 @@ class InterventionAPISerializerV1(AbstractModelAPISerializerV1,
obj.save() obj.save()
obj.mark_as_edited(user, edit_comment="API update") obj.mark_as_edited(user, edit_comment="API update")
obj.send_data_to_egon()
celery_update_parcels.delay(obj.geometry.id) celery_update_parcels.delay(obj.geometry.id)

View File

@ -30,12 +30,11 @@ class AbstractCompensationForm(BaseForm):
label=_("Identifier"), label=_("Identifier"),
label_suffix="", label_suffix="",
max_length=255, max_length=255,
help_text=_("Generated automatically - not editable"), help_text=_("Generated automatically"),
widget=GenerateInput( widget=GenerateInput(
attrs={ attrs={
"class": "form-control", "class": "form-control",
"url": None, # Needs to be set in inheriting constructors "url": None, # Needs to be set in inheriting constructors
"readonly": True,
} }
) )
) )
@ -157,7 +156,6 @@ class NewCompensationForm(AbstractCompensationForm,
title=title, title=title,
intervention=intervention, intervention=intervention,
created=action, created=action,
modified=action,
is_cef=is_cef, is_cef=is_cef,
is_coherence_keeping=is_coherence_keeping, is_coherence_keeping=is_coherence_keeping,
is_pik=is_pik, is_pik=is_pik,

View File

@ -117,7 +117,6 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix
responsible=responsible, responsible=responsible,
deductable_surface=surface, deductable_surface=surface,
created=action, created=action,
modified=action,
comment=comment, comment=comment,
is_pik=is_pik, is_pik=is_pik,
legal=legal legal=legal

View File

@ -21,7 +21,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing finished deadline ' %} {% trans 'Missing finished deadline ' %}
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m² {% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m² {% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing finished deadline ' %} {% trans 'Missing finished deadline ' %}
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m² {% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m² {% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -71,7 +71,6 @@ class CompensationWorkflowTestCase(BaseWorkflowTestCase):
self.assertEqual(new_compensation.title, test_title) self.assertEqual(new_compensation.title, test_title)
self.assert_equal_geometries(new_compensation.geometry.geom, test_geom) self.assert_equal_geometries(new_compensation.geometry.geom, test_geom)
self.assertEqual(new_compensation.log.count(), 1) self.assertEqual(new_compensation.log.count(), 1)
self.assertEqual(new_compensation.created, new_compensation.modified)
# Expect logs to be set # Expect logs to be set
self.assertEqual(pre_creation_intervention_log_count + 1, self.intervention.log.count()) self.assertEqual(pre_creation_intervention_log_count + 1, self.intervention.log.count())

View File

@ -65,7 +65,6 @@ class EcoAccountWorkflowTestCase(BaseWorkflowTestCase):
self.assertEqual(acc.deductable_rest, test_deductable_surface) self.assertEqual(acc.deductable_rest, test_deductable_surface)
self.assert_equal_geometries(acc.geometry.geom, test_geom) self.assert_equal_geometries(acc.geometry.geom, test_geom)
self.assertEqual(acc.log.count(), 1) self.assertEqual(acc.log.count(), 1)
self.assertEqual(acc.created, acc.modified)
# Expect logs to be set # Expect logs to be set
self.assertEqual(acc.log.count(), 1) self.assertEqual(acc.log.count(), 1)

View File

@ -46,8 +46,6 @@ def index_view(request: HttpRequest):
compensations = Compensation.objects.filter( compensations = Compensation.objects.filter(
deleted=None, # only show those which are not deleted individually deleted=None, # only show those which are not deleted individually
intervention__deleted=None, # and don't show the ones whose intervention has been deleted intervention__deleted=None, # and don't show the ones whose intervention has been deleted
).order_by(
"-modified__timestamp"
) )
table = CompensationTable( table = CompensationTable(
request=request, request=request,
@ -203,12 +201,7 @@ def detail_view(request: HttpRequest, id: str):
""" """
template = "compensation/detail/compensation/view.html" template = "compensation/detail/compensation/view.html"
comp = get_object_or_404( comp = get_object_or_404(Compensation, id=id)
Compensation,
id=id,
deleted=None,
intervention__deleted=None,
)
geom_form = SimpleGeomForm(instance=comp) geom_form = SimpleGeomForm(instance=comp)
parcels = comp.get_underlying_parcels() parcels = comp.get_underlying_parcels()
_user = request.user _user = request.user

View File

@ -73,7 +73,6 @@ def report_view(request: HttpRequest, id: str):
"geom_form": geom_form, "geom_form": geom_form,
"parcels": parcels, "parcels": parcels,
"actions": actions, "actions": actions,
"tables_scrollable": False,
TAB_TITLE_IDENTIFIER: tab_title, TAB_TITLE_IDENTIFIER: tab_title,
} }
context = BaseContext(request, context).context context = BaseContext(request, context).context

View File

@ -41,8 +41,6 @@ def index_view(request: HttpRequest):
template = "generic_index.html" template = "generic_index.html"
eco_accounts = EcoAccount.objects.filter( eco_accounts = EcoAccount.objects.filter(
deleted=None, deleted=None,
).order_by(
"-modified__timestamp"
) )
table = EcoAccountTable( table = EcoAccountTable(
request=request, request=request,
@ -184,8 +182,7 @@ def detail_view(request: HttpRequest, id: str):
'geometry', 'geometry',
'responsible', 'responsible',
), ),
id=id, id=id
deleted=None,
) )
geom_form = SimpleGeomForm(instance=acc) geom_form = SimpleGeomForm(instance=acc)
parcels = acc.get_underlying_parcels() parcels = acc.get_underlying_parcels()

View File

@ -80,7 +80,6 @@ def report_view(request: HttpRequest, id: str):
"parcels": parcels, "parcels": parcels,
"actions": actions, "actions": actions,
"deductions": deductions, "deductions": deductions,
"tables_scrollable": False,
TAB_TITLE_IDENTIFIER: tab_title, TAB_TITLE_IDENTIFIER: tab_title,
} }
context = BaseContext(request, context).context context = BaseContext(request, context).context

View File

@ -81,7 +81,6 @@ class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin, Pik
title=title, title=title,
responsible=responsible, responsible=responsible,
created=action, created=action,
modified=action,
comment=comment, comment=comment,
is_pik=is_pik, is_pik=is_pik,
) )

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing finished deadline ' %} {% trans 'Missing finished deadline ' %}
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m² {% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m² {% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -62,7 +62,6 @@ class EmaWorkflowTestCase(BaseWorkflowTestCase):
self.assertEqual(ema.title, test_title) self.assertEqual(ema.title, test_title)
self.assert_equal_geometries(ema.geometry.geom, test_geom) self.assert_equal_geometries(ema.geometry.geom, test_geom)
self.assertEqual(ema.log.count(), 1) self.assertEqual(ema.log.count(), 1)
self.assertEqual(ema.created, ema.modified)
# Expect logs to be set # Expect logs to be set
self.assertEqual(ema.log.count(), 1) self.assertEqual(ema.log.count(), 1)

View File

@ -39,8 +39,6 @@ def index_view(request: HttpRequest):
template = "generic_index.html" template = "generic_index.html"
emas = Ema.objects.filter( emas = Ema.objects.filter(
deleted=None, deleted=None,
).order_by(
"-modified__timestamp"
) )
table = EmaTable( table = EmaTable(

View File

@ -73,7 +73,6 @@ def report_view(request:HttpRequest, id: str):
"geom_form": geom_form, "geom_form": geom_form,
"parcels": parcels, "parcels": parcels,
"actions": actions, "actions": actions,
"tables_scrollable": False,
TAB_TITLE_IDENTIFIER: tab_title, TAB_TITLE_IDENTIFIER: tab_title,
} }
context = BaseContext(request, context).context context = BaseContext(request, context).context

View File

@ -29,12 +29,11 @@ class NewInterventionForm(BaseForm):
label=_("Identifier"), label=_("Identifier"),
label_suffix="", label_suffix="",
max_length=255, max_length=255,
help_text=_("Generated automatically - not editable"), help_text=_("Generated automatically"),
widget=GenerateInput( widget=GenerateInput(
attrs={ attrs={
"class": "form-control", "class": "form-control",
"url": reverse_lazy("intervention:new-id"), "url": reverse_lazy("intervention:new-id"),
"readonly": True,
} }
) )
) )
@ -271,7 +270,6 @@ class NewInterventionForm(BaseForm):
responsible=responsibility_data, responsible=responsibility_data,
legal=legal_data, legal=legal_data,
created=action, created=action,
modified=action,
comment=comment, comment=comment,
) )
@ -386,7 +384,6 @@ class EditInterventionForm(NewInterventionForm):
geometry = geom_form.save(user_action) geometry = geom_form.save(user_action)
self.instance.geometry = geometry self.instance.geometry = geometry
self.instance.save() self.instance.save()
self.instance.send_data_to_egon()
return self.instance return self.instance

View File

@ -25,6 +25,8 @@ class NewInterventionDocumentModalForm(NewDocumentModalForm):
""" """
doc = super().save(*args, **kwargs) doc = super().save(*args, **kwargs)
if self.instance.payments.exists():
self.instance.send_data_to_egon() self.instance.send_data_to_egon()
return doc return doc

View File

@ -145,13 +145,11 @@ class Intervention(BaseObject,
Returns: Returns:
""" """
if self.payments.exists():
celery_export_to_egon.delay(self.id) celery_export_to_egon.delay(self.id)
def set_recorded(self, user: User) -> UserActionLogEntry: def set_recorded(self, user: User) -> UserActionLogEntry:
log_entry = super().set_recorded(user) log_entry = super().set_recorded(user)
self.add_log_entry_to_compensations(log_entry) self.add_log_entry_to_compensations(log_entry)
self.send_data_to_egon()
return log_entry return log_entry
def add_log_entry_to_compensations(self, log_entry: UserActionLogEntry): def add_log_entry_to_compensations(self, log_entry: UserActionLogEntry):

View File

@ -22,7 +22,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -25,7 +25,7 @@
{% trans 'You entered a payment. Please upload the legal document which defines the payment`s amount.' %} {% trans 'You entered a payment. Please upload the legal document which defines the payment`s amount.' %}
</div> </div>
{% endif %} {% endif %}
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -20,7 +20,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -23,7 +23,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body {% if tables_scrollable %}scroll-300{% endif %} p-2"> <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>

View File

@ -62,8 +62,6 @@
{{deduction.account.identifier}} - {{deduction.account.title}} {{deduction.account.identifier}} - {{deduction.account.title}}
</a> </a>
<br> <br>
{% empty %}
{% trans 'None' %}
{% endfor %} {% endfor %}
</td> </td>
</tr> </tr>
@ -103,7 +101,7 @@
<div class="row"> <div class="row">
{% include 'konova/includes/parcels/parcels.html' %} {% include 'konova/includes/parcels/parcels.html' %}
</div> </div>
<div class="row qrcodes"> <div class="row">
{% include 'konova/includes/report/qrcodes.html' %} {% include 'konova/includes/report/qrcodes.html' %}
</div> </div>

View File

@ -78,7 +78,6 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
self.assertEqual(1, obj.log.count()) self.assertEqual(1, obj.log.count())
self.assertEqual(obj.log.first().action, UserAction.CREATED) self.assertEqual(obj.log.first().action, UserAction.CREATED)
self.assertEqual(obj.log.first().user, self.superuser) self.assertEqual(obj.log.first().user, self.superuser)
self.assertEqual(obj.created, obj.modified)
except ObjectDoesNotExist: except ObjectDoesNotExist:
# Fail if there is no such object # Fail if there is no such object
self.fail() self.fail()

View File

@ -11,7 +11,7 @@ import json
import pika import pika
import xmltodict import xmltodict
from django.db.models import Sum from django.db.models import Sum
from django.utils import formats from django.utils import formats, timezone
from intervention.settings import EGON_RABBITMQ_HOST, EGON_RABBITMQ_USER, EGON_RABBITMQ_PW, EGON_RABBITMQ_PORT from intervention.settings import EGON_RABBITMQ_HOST, EGON_RABBITMQ_USER, EGON_RABBITMQ_PW, EGON_RABBITMQ_PORT
from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT
@ -43,7 +43,6 @@ class EgonExporter:
"nachricht": self.gml_builder.gml, "nachricht": self.gml_builder.gml,
} }
msg = json.dumps(msg) msg = json.dumps(msg)
print(msg)
credentials = pika.PlainCredentials(EGON_RABBITMQ_USER, EGON_RABBITMQ_PW) credentials = pika.PlainCredentials(EGON_RABBITMQ_USER, EGON_RABBITMQ_PW)
params = pika.ConnectionParameters( params = pika.ConnectionParameters(
EGON_RABBITMQ_HOST, EGON_RABBITMQ_HOST,
@ -68,7 +67,6 @@ class EgonGmlBuilder:
""" """
intervention = None intervention = None
gml = None gml = None
_PAYMENT_FALLBACK_DATE = ""
def __init__(self, intervention): def __init__(self, intervention):
self.intervention = intervention self.intervention = intervention
@ -166,10 +164,9 @@ class EgonGmlBuilder:
payment_date = None payment_date = None
if payment is not None: if payment is not None:
payment_date = payment.due_on payment_date = payment.due_on
if payment_date is not None: if payment_date is None:
payment_date = timezone.datetime.fromisoformat("1970-01-01")
payment_date = payment_date.strftime(DEFAULT_DATE_FORMAT) payment_date = payment_date.strftime(DEFAULT_DATE_FORMAT)
else:
payment_date = self._PAYMENT_FALLBACK_DATE
cons_office = self.intervention.responsible.conservation_office cons_office = self.intervention.responsible.conservation_office
reg_office = self.intervention.responsible.registration_office reg_office = self.intervention.responsible.registration_office
@ -191,14 +188,14 @@ class EgonGmlBuilder:
"@gml:id": self.intervention.identifier, "@gml:id": self.intervention.identifier,
"oneo:azEintragungsstelle": self.intervention.responsible.conservation_file_number, "oneo:azEintragungsstelle": self.intervention.responsible.conservation_file_number,
"oneo:azZulassungsstelle": self.intervention.responsible.registration_file_number, "oneo:azZulassungsstelle": self.intervention.responsible.registration_file_number,
"oneo:bemerkungZulassungsstelle": "", "oneo:bemerkungZulassungsstelle": None,
"oneo:eintragungsstelle": { "oneo:eintragungsstelle": {
"@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/907/{cons_office.atom_id if cons_office else ''}", "@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/907/{cons_office.atom_id if cons_office else None}",
"#text": cons_office.long_name if cons_office else "" "#text": cons_office.long_name if cons_office else None
}, },
"oneo:zulassungsstelle": { "oneo:zulassungsstelle": {
"@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/1053/{reg_office.atom_id if reg_office else ''}", "@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/1053/{reg_office.atom_id if reg_office else None}",
"#text": reg_office.long_name if reg_office else "" "#text": reg_office.long_name if reg_office else None
}, },
"oneo:ersatzzahlung": self._float_to_localized_string(self._sum_all_payments()), "oneo:ersatzzahlung": self._float_to_localized_string(self._sum_all_payments()),
"oneo:kompensationsart": { "oneo:kompensationsart": {
@ -206,33 +203,33 @@ class EgonGmlBuilder:
"#text": comp_type "#text": comp_type
}, },
"oneo:verfahrensrecht": { "oneo:verfahrensrecht": {
"@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/1048/{law.atom_id if law else ''}", "@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/1048/{law.atom_id if law else None}",
"#text": law.short_name if law else "" "#text": law.short_name if law else None
}, },
"oneo:verfahrenstyp": { "oneo:verfahrenstyp": {
"@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/44382/{process_type.atom_id if process_type else ''}", "@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/44382/{process_type.atom_id if process_type else None}",
"#text": process_type.long_name if process_type else "", "#text": process_type.long_name if process_type else None,
}, },
"oneo:eingreifer": { "oneo:eingreifer": {
"oneo:Eingreifer": { "oneo:Eingreifer": {
"oneo:art": { "oneo:art": {
"@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/1053/{handler.type.atom_id if handler.type else ''}", "@xlink:href": f"http://register.naturschutz.rlp.de/repository/services/referenzliste/1053/{handler.type.atom_id if handler.type else None}",
"#text": handler.type.long_name if handler.type else "", "#text": handler.type.long_name if handler.type else None,
}, },
"oneo:bemerkung": handler.detail if handler else "", "oneo:bemerkung": handler.detail if handler else None,
} }
}, },
"oneo:erfasser": { "oneo:erfasser": {
"oneo:Erfasser": { "oneo:Erfasser": {
"oneo:name": "", "oneo:name": None,
"oneo:bemerkung": "", "oneo:bemerkung": None,
} }
}, },
"oneo:zulassung": { "oneo:zulassung": {
"oneo:Zulassungstermin": { "oneo:Zulassungstermin": {
"oneo:bauBeginn": payment_date, "oneo:bauBeginn": payment_date,
"oneo:erlass": reg_date.strftime(DEFAULT_DATE_FORMAT) if reg_date else "", "oneo:erlass": reg_date.strftime(DEFAULT_DATE_FORMAT) if reg_date else None,
"oneo:rechtsKraft": bind_date.strftime(DEFAULT_DATE_FORMAT) if bind_date else "", "oneo:rechtsKraft": bind_date.strftime(DEFAULT_DATE_FORMAT) if bind_date else None,
} }
}, },
"oneo:geometrie": { "oneo:geometrie": {
@ -246,8 +243,8 @@ class EgonGmlBuilder:
"oneo:kennung": self.intervention.identifier, "oneo:kennung": self.intervention.identifier,
"oneo:bezeichnung": self.intervention.title, "oneo:bezeichnung": self.intervention.title,
"oneo:bemerkung": self.intervention.comment, "oneo:bemerkung": self.intervention.comment,
"oneo:verantwortlicheStelle": "", "oneo:verantwortlicheStelle": None,
"oneo:veroffentlichtAm": "", "oneo:veroffentlichtAm": None,
"oneo:raumreferenz": { "oneo:raumreferenz": {
"oneo:Raumreferenz": self._gen_raumreferenz(), "oneo:Raumreferenz": self._gen_raumreferenz(),
}, },

View File

@ -45,8 +45,6 @@ def index_view(request: HttpRequest):
deleted=None, # not deleted deleted=None, # not deleted
).select_related( ).select_related(
"legal" "legal"
).order_by(
"-modified__timestamp"
) )
table = InterventionTable( table = InterventionTable(
request=request, request=request,
@ -143,8 +141,7 @@ def detail_view(request: HttpRequest, id: str):
"legal", "legal",
"responsible", "responsible",
), ),
id=id, id=id
deleted=None
) )
compensations = intervention.compensations.filter( compensations = intervention.compensations.filter(
deleted=None, deleted=None,

View File

@ -67,7 +67,6 @@ def report_view(request:HttpRequest, id: str):
}, },
"geom_form": geom_form, "geom_form": geom_form,
"parcels": parcels, "parcels": parcels,
"tables_scrollable": False,
TAB_TITLE_IDENTIFIER: tab_title, TAB_TITLE_IDENTIFIER: tab_title,
} }
context = BaseContext(request, context).context context = BaseContext(request, context).context

View File

@ -28,7 +28,6 @@ class BaseContext:
"help_link": HELP_LINK, "help_link": HELP_LINK,
"impressum_link": IMPRESSUM_LINK, "impressum_link": IMPRESSUM_LINK,
"CONTACT_MAIL": EMAIL_REPLY_TO, "CONTACT_MAIL": EMAIL_REPLY_TO,
"tables_scrollable": True, # tables in boxes
} }
# Add additional context, derived from given parameters # Add additional context, derived from given parameters

View File

@ -19,7 +19,7 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet):
Specialized on filtering GeoReferenced model types Specialized on filtering GeoReferenced model types
""" """
# District # Parcel gmrkng
di = django_filters.CharFilter( di = django_filters.CharFilter(
method="filter_district", method="filter_district",
label=_(""), label=_(""),
@ -72,7 +72,7 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet):
), ),
) )
# Parcel number # Parcel counter
pn = django_filters.NumberFilter( pn = django_filters.NumberFilter(
method="filter_parcel_number", method="filter_parcel_number",
label=_(""), label=_(""),
@ -112,7 +112,7 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet):
return queryset return queryset
def filter_district(self, queryset, name, value) -> QuerySet: def filter_district(self, queryset, name, value) -> QuerySet:
""" Filters queryset depending on value for 'Kreis' """ Filters queryset depending on value for 'Gemarkung'
Args: Args:
queryset (): queryset ():
@ -122,13 +122,10 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet):
Returns: Returns:
""" """
values = value.split(",") matching_districts = District.objects.filter(
q = Q() Q(name__icontains=value) |
for val in values: Q(key__icontains=value)
val = val.strip() ).distinct()
q |= Q(name__icontains=val) | Q(key__icontains=val)
matching_districts = District.objects.filter(q).distinct()
matching_parcels = Parcel.objects.filter( matching_parcels = Parcel.objects.filter(
district__in=matching_districts district__in=matching_districts
) )
@ -151,14 +148,9 @@ class GeoReferencedTableFilterMixin(django_filters.FilterSet):
Returns: Returns:
""" """
values = value.split(",")
q = Q()
for val in values:
val = val.strip()
q |= Q(parcel_group__name__icontains=val) | Q(parcel_group__key__icontains=val)
queryset = self._filter_parcel_reference( queryset = self._filter_parcel_reference(
queryset, queryset,
q, Q(parcel_group__name__icontains=value) | Q(parcel_group__key__icontains=value),
) )
return queryset return queryset

View File

@ -24,7 +24,6 @@ class RecordableTableFilterMixin(django_filters.FilterSet):
widget=forms.CheckboxInput( widget=forms.CheckboxInput(
attrs={ attrs={
"class": "form-check-input", "class": "form-check-input",
"title": _("If activated also shows entries which have been already recorded"),
} }
) )
) )

View File

@ -1,53 +0,0 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 06.12.22
"""
import django_filters
from django import forms
from django.db.models import QuerySet
from django.utils.translation import gettext_lazy as _
class SelfCreatedTableFilterMixin(django_filters.FilterSet):
""" A mixin for AbstractTableFilter
Specialized on filtering recordable model types
"""
sc = django_filters.BooleanFilter(
method='filter_show_self_created',
label=_("Show only self created"),
label_suffix=_(""),
widget=forms.CheckboxInput(
attrs={
"class": "form-check-input",
"title": _("If activated only shows entries which have been created by you"),
}
),
)
class Meta:
abstract = True
def filter_show_self_created(self, queryset, name, value) -> QuerySet:
""" Filters queryset depending on value of 'self_created' setting
Args:
queryset ():
name ():
value ():
Returns:
"""
if value:
return queryset.filter(
created__user=self.user,
)
else:
return queryset

View File

@ -24,7 +24,6 @@ class ShareableTableFilterMixin(django_filters.FilterSet):
widget=forms.CheckboxInput( widget=forms.CheckboxInput(
attrs={ attrs={
"class": "form-check-input", "class": "form-check-input",
"title": _("If activated also shows entries which are not shared with you"),
} }
) )
) )

View File

@ -12,7 +12,6 @@ from konova.filters.mixins.geo_reference import GeoReferencedTableFilterMixin
from konova.filters.mixins.keyword import KeywordTableFilterMixin from konova.filters.mixins.keyword import KeywordTableFilterMixin
from konova.filters.mixins.office import ConservationOfficeTableFilterMixin, RegistrationOfficeTableFilterMixin from konova.filters.mixins.office import ConservationOfficeTableFilterMixin, RegistrationOfficeTableFilterMixin
from konova.filters.mixins.record import RecordableTableFilterMixin from konova.filters.mixins.record import RecordableTableFilterMixin
from konova.filters.mixins.self_created import SelfCreatedTableFilterMixin
from konova.filters.mixins.share import ShareableTableFilterMixin from konova.filters.mixins.share import ShareableTableFilterMixin
@ -47,9 +46,7 @@ class QueryTableFilter(KeywordTableFilterMixin,
pass pass
class CheckboxTableFilter(ShareableTableFilterMixin, class CheckboxTableFilter(ShareableTableFilterMixin, RecordableTableFilterMixin):
RecordableTableFilterMixin,
SelfCreatedTableFilterMixin):
""" TableFilter holding different filter options for checkbox related filtering """ TableFilter holding different filter options for checkbox related filtering
""" """

View File

@ -29,7 +29,6 @@ class BaseForm(forms.Form):
form_attrs = {} # Holds additional attributes, that can be used in the template form_attrs = {} # Holds additional attributes, that can be used in the template
has_required_fields = False # Automatically set. Triggers hint rendering in templates has_required_fields = False # Automatically set. Triggers hint rendering in templates
show_cancel_btn = True show_cancel_btn = True
label_input_ratio = (3, 9) # used for col-sm-xy in the template. Must sum up to 12. Specify on inheriting forms
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.instance = kwargs.pop("instance", None) self.instance = kwargs.pop("instance", None)
@ -43,26 +42,12 @@ class BaseForm(forms.Form):
break break
self.check_for_recorded_instance() self.check_for_recorded_instance()
self.__check_valid_label_input_ratio()
@abstractmethod @abstractmethod
def save(self): def save(self):
# To be implemented in subclasses! # To be implemented in subclasses!
pass pass
def __check_valid_label_input_ratio(self):
""" Checks whether the configured label-input ratio is valid
If not valid an AssertionError will be raised.
The valid sum of label-input ratio is defined by bootstrap's column layout system.
Returns:
"""
ratio = self.label_input_ratio[0] + self.label_input_ratio[1]
if ratio != 12:
raise AssertionError(f"Label-input ratio on form must sum up to 12! It's {self.label_input_ratio}")
def disable_form_field(self, field: str): def disable_form_field(self, field: str):
""" """
Disables a form field for user editing Disables a form field for user editing

View File

@ -24,7 +24,6 @@ class RemoveModalForm(BaseModalForm):
widget=forms.CheckboxInput(), widget=forms.CheckboxInput(),
required=True, required=True,
) )
label_input_ratio = (2, 10)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.template = "modal/modal_form.html" self.template = "modal/modal_form.html"

View File

@ -1,137 +0,0 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 26.10.22
"""
import zipfile
from io import BytesIO
from django.core.mail import EmailMessage
from django.utils import timezone
from django.utils.datetime_safe import datetime
from analysis.utils.excel.excel import TempExcelFile
from analysis.utils.report import TimespanReport
from codelist.models import KonovaCode
from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID
from konova.management.commands.setup import BaseKonovaCommand
from konova.sub_settings.django_settings import DEFAULT_FROM_EMAIL, ADMINS
class Command(BaseKonovaCommand):
help = "Generates reports for conservation offices"
__from_key = "from"
__to_key = "to"
__for_key = "for"
from_date = None
to_date = None
offices = None
def add_arguments(self, parser):
try:
parser.add_argument(f"--{self.__from_key}", type=str, nargs="+")
parser.add_argument(f"--{self.__to_key}", type=str, nargs="+")
parser.add_argument(f"--{self.__for_key}", type=str, nargs="*")
except ValueError as e:
self._write_error(f"Argument error: {e}")
exit(-1)
def handle(self, *args, **options):
self.__check_arguments(options)
in_memory_zipped_reports = self.generate_reports_in_memory_zipped()
self.send_mail_to_admins(in_memory_zipped_reports)
def generate_reports_in_memory_zipped(self):
"""
Generates in-memory reports and zips into in-memory zip file.
Returns:
"""
memory_zip = BytesIO()
with zipfile.ZipFile(memory_zip, "w", compression=zipfile.ZIP_DEFLATED) as zf:
for office in self.offices:
self._write_warning(f" Process report for {office.long_name}...")
report = TimespanReport(office.id, self.from_date, self.to_date)
excel_file = TempExcelFile(report.excel_template_path, report.excel_map)
zf.writestr(zinfo_or_arcname=f"{office.long_name}_{self.from_date.date()}_{self.to_date.date()}.xlsx", data=excel_file.stream)
self._write_success(f"Reports generated for {self.offices.count()} offices and zipped.")
return memory_zip.getvalue()
def __check_arguments(self, options):
"""
Checks given parameters for validity
Args:
options ():
Returns:
"""
_from_value = options.get(self.__from_key, [None])[0]
_to_value = options.get(self.__to_key, [None])[0]
_for_value = options.get(self.__for_key, [])
# Check ISO dates
try:
_from_date = timezone.make_aware(datetime.fromisoformat(_from_value))
_to_date = timezone.make_aware(datetime.fromisoformat(_to_value))
except Exception as e:
self._write_warning(f"One of the dates is not in ISO format (YYYY-MM-DD). {e}")
exit(-1)
# Check conservation office IDs
_filter = {
"is_archived": False,
"is_leaf": True,
"code_lists__in": [CODELIST_CONSERVATION_OFFICE_ID],
}
offices = KonovaCode.objects.filter(**_filter)
if _for_value is not None and len(_for_value) != 0:
# Specifc offices requested
offices = offices.filter(short_name__in=_for_value)
all_requested_offices_exist = offices.count() == len(_for_value)
if not all_requested_offices_exist:
offices_short_name = set(offices.values_list("short_name", flat=True))
missing_ids = []
for val in _for_value:
if val not in offices_short_name:
missing_ids.append(val)
self._write_warning(
f"Unknown offices: {missing_ids}"
)
exit(-1)
self.offices = offices
self.from_date = _from_date
self.to_date = _to_date
def send_mail_to_admins(self, attachment):
office_names = [office.long_name for office in self.offices]
admin_mails = [admin[1] for admin in ADMINS]
date_from_date = self.from_date.date()
date_to_date = self.to_date.date()
mail = EmailMessage(
subject="Konova reports generated",
body=f"Zipped reports attached from {date_from_date} to {date_to_date} for {office_names}.",
from_email=DEFAULT_FROM_EMAIL,
to=admin_mails,
attachments=[
(
f"reports_{date_from_date}_{date_to_date}.zip",
attachment,
"application/zip"
)
]
)
success = mail.send()
if success == 1:
self._write_success(f"Mails with zip as attachment sent to {admin_mails}.")
else:
self._write_error(f"Something went wrong during mail sending. Returned sending code was '{success}'")

View File

@ -39,9 +39,6 @@ class Command(BaseKonovaCommand):
for obj in all_objs: for obj in all_objs:
obj.resubmit() obj.resubmit()
self._write_success("Mails have been sent.") self._write_success("Mails have been sent.")
resubmissions = Resubmission.objects.filter(
resubmission_sent=True,
)
resubmissions.delete() resubmissions.delete()
self._write_success("Resubmissions have been deleted.") self._write_success("Resubmissions have been deleted.")
except KeyboardInterrupt: except KeyboardInterrupt:

View File

@ -16,72 +16,7 @@ class CompensationMigrater(BaseMigrater):
def migrate(self): def migrate(self):
self.connect_db() self.connect_db()
cursor = self.db_connection.cursor() cursor = self.db_connection.cursor()
#el = "'KOM-1011-075001000051090029__'" # Test purposes #el = "'KOM-1568808121948'" # Test purposes
els = [
"\'KOM-31-3b-075003000006300002__\'",
"\'KOM-38/12-075001000032000008__\'",
"\'KOM-38/16-075001000032570001__\'",
"\'KOM-38/18-07500100003196______\'",
"\'KOM-38/17-07500100003202______\'",
"\'KOM-38/14-075001000031670010__\'",
"\'KOM-38/11-075001000031520001__\'",
"\'KOM-38/10-075001000031390004__\'",
"\'KOM-38/13-075001000031560004__\'",
"\'KOM-38/15-075001000032320001__\'",
"\'KOM-31-3b-07500300000630______\'",
"\'KOM-31-3b-075003000006300003__\'",
"\'KOM-31-3b-075003000006160005__\'",
"\'KOM-31-3b-07500300000629______\'",
"\'KOM-24-1b-07500900000909______\'",
"\'KOM-24-1b-075009000009090002__\'",
"\'KOM-24-1c-07500900000890______\'",
"\'KOM-24-1e-075009000009070001__\'",
"\'KOM-24-9-075009000009190002__\'",
"\'KOM-31-3b-075003000006160002__\'",
"\'KOM-24-1b-075009000009380007__\'",
"\'KOM-24-1c-07500900000904______\'",
"\'KOM-24-1c-07500900000903______\'",
"\'KOM-36-2-075001000044750002__\'",
"\'KOM-31-3b-075003000006160004__\'",
"\'KOM-31-3b-07500300000616______\'",
"\'KOM-31-2-075003000006830001__\'",
"\'KOM-24-1c-075009000009380020__\'",
"\'KOM-24-1c-07500900000906______\'",
"\'KOM-24-1c-07500900000894______\'",
"\'KOM-36-1-075001000044750009__\'",
"\'KOM-24-1c-07500900000891______\'",
"\'KOM-22-2-075009000009650001__b\'",
"\'KOM-100-075001000031810001__\'",
"\'KOM-24-9-075009000009380027__\'",
"\'KOM-24-9-07500900000919______\'",
"\'KOM-24-9-075009000009170002__\'",
"\'KOM-31-3b-075003000006160003__\'",
"\'KOM-1011-075001000051090029__\'",
"\'KOM-1010-075001000036370001__\'",
"\'KOM-50/3-075001000037300001__\'",
"\'KOM-50/2-075001000037300001__\'",
"\'KOM-50/1-07500100003725______\'",
"\'KOM-A4-075004000012160279__\'",
"\'KOM-52-07500100003724______\'",
"\'KOM-1012-075001000036420012__\'",
"\'KOM-KaEINS2_AN1-075001000036710042__\'",
"\'KOM-KaEINS2_AN3-075001000036710042__\'",
"\'KOM-KaEINS2_E8-075009000009460002__\'",
"\'KOM-KaEINS2_E2_E3-075004000009450004__\'",
"\'KOM-KaEINS2_E4-075001000039540001__a\'",
"\'KOM-KaEINS2_E1-075001000037520001__\'",
"\'KOM-KaEINS2_E5-075001000036910003__\'",
"\'KOM-KaEINS2_E9-075001000039540001__\'",
"\'KOM-KaEINS2_E6-075009000009480001__\'",
"\'KOM-KAEINS2_AN6_V6-075001000036710042__\'",
"\'KOM-KaEINS2_AN2-075001000036710042__\'",
"\'KOM-KaEins2_AN4_A1_KM1-075001000036710042__\'",
"\'KOM-KaEINS2_AN5_A4-075001000036710042__\'",
"\'KOM-KaEINS2_E7-075009000009650001__\'",
"\'KOM-KaEINS2_E3-075004000009280006_\'",
]
els = ",".join(els)
els = f"({els})"
empty_str = "''" empty_str = "''"
cursor.execute( cursor.execute(
'select ' 'select '
@ -102,8 +37,7 @@ class CompensationMigrater(BaseMigrater):
'om."OKL"=7730080 and ' 'om."OKL"=7730080 and '
'om.archiv=false and ' 'om.archiv=false and '
f'(auf."Infos" is null or auf."Infos"={empty_str}) and ' f'(auf."Infos" is null or auf."Infos"={empty_str}) and '
'om.nicht_vollstaendig=0 and ' 'om.nicht_vollstaendig=0 '
f'om."KENNUNG" in {els}'
) )
all_koms = cursor.fetchall() all_koms = cursor.fetchall()
@ -124,30 +58,30 @@ class CompensationMigrater(BaseMigrater):
identifier=kom_identifier identifier=kom_identifier
)[0] )[0]
compensation.title = kom_title #compensation.title = kom_title
compensation.comment = kom_comment #compensation.comment = kom_comment
### FOR INITIAL RECONSTRUCTION OF EIV-KOM RELATIONSHIP ### FOR INITIAL RECONSTRUCTION OF EIV-KOM RELATIONSHIP
try: #try:
compensation = self._migrate_interventions_reference(compensation, kom) # compensation = self._migrate_interventions_reference(compensation, kom)
except ObjectDoesNotExist: #except ObjectDoesNotExist:
compensation.delete() # compensation.delete()
unsuccessfull_compensations[kom_identifier] = "EIV does not exist" # unsuccessfull_compensations[kom_identifier] = "EIV does not exist"
continue # continue
compensation = self._migrate_par_7_data(compensation, kom) #compensation = self._migrate_par_7_data(compensation, kom)
compensation = self._migrate_responsibility(compensation, kom) #compensation = self._migrate_responsibility(compensation, kom)
compensation = self._migrate_compensation_type(compensation, kom) #compensation = self._migrate_compensation_type(compensation, kom)
compensation = self._migrate_states(compensation, kom) #compensation = self._migrate_states(compensation, kom)
compensation = self._migrate_deadlines(compensation, kom) #compensation = self._migrate_deadlines(compensation, kom)
compensation = self._migrate_action_control_deadlines(compensation, kom) #compensation = self._migrate_action_control_deadlines(compensation, kom)
compensation = self._migrate_actions(compensation, kom) #compensation = self._migrate_actions(compensation, kom)
compensation = self._migrate_log(compensation, kom) #compensation = self._migrate_log(compensation, kom)
compensation = self._migrate_documents(compensation, CompensationDocument, kom) compensation = self._migrate_documents(compensation, CompensationDocument, kom)
compensation.save() compensation.save()
num_processed += 1 num_processed += 1
compensation = self._migrate_geometry(compensation, kom) #compensation = self._migrate_geometry(compensation, kom)
compensation.save() #compensation.save()
#print("The following KOMs could not be migrated: ") #print("The following KOMs could not be migrated: ")
#for kom, val in unsuccessfull_compensations.items(): #for kom, val in unsuccessfull_compensations.items():
# print(kom) # print(kom)
@ -173,7 +107,7 @@ class CompensationMigrater(BaseMigrater):
eiv = eivs[0] eiv = eivs[0]
try: try:
intervention = Intervention.objects.get( intervention = Intervention.objects.get(
identifier__iexact=eiv[0] identifier=eiv[0]
) )
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise ObjectDoesNotExist(f"{kom_identifier} could not find migrated {eiv}") raise ObjectDoesNotExist(f"{kom_identifier} could not find migrated {eiv}")

View File

@ -19,10 +19,10 @@ class Command(BaseKonovaCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
try: try:
migraters = [ migraters = [
#InterventionMigrater(options), InterventionMigrater(options),
CompensationMigrater(options), CompensationMigrater(options),
#EmaMigrater(options), EmaMigrater(options),
#EcoAccountMigrater(options), EcoAccountMigrater(options),
#InterventionRecordedMigrater(options), #InterventionRecordedMigrater(options),
#UserMigrater(options), #UserMigrater(options),
] ]

View File

@ -87,7 +87,7 @@ class AbstractDocument(BaseResource):
""" """
try: try:
os.remove(self.file.file.name) os.remove(self.file.file.name)
except (FileNotFoundError, ValueError): except FileNotFoundError:
# File seems to missing anyway - continue! # File seems to missing anyway - continue!
pass pass
super().delete(using=using, keep_parents=keep_parents) super().delete(using=using, keep_parents=keep_parents)
@ -113,7 +113,7 @@ class AbstractDocument(BaseResource):
""" """
try: try:
os.remove(self.file.file.name) os.remove(self.file.file.name)
except (FileNotFoundError, ValueError): except FileNotFoundError:
pass pass
self.file = new_file self.file = new_file
self.save() self.save()

View File

@ -60,10 +60,6 @@ a {
color: var(--rlp-red); color: var(--rlp-red);
} }
.form-label {
width: 100%;
}
.form-control:focus{ .form-control:focus{
outline: none; outline: none;
border-color: var(--rlp-red); border-color: var(--rlp-red);

View File

@ -429,7 +429,7 @@ class Mailer:
"EMAIL_REPLY_TO": EMAIL_REPLY_TO, "EMAIL_REPLY_TO": EMAIL_REPLY_TO,
} }
msg = render_to_string("email/resubmission/resubmission.html", context) msg = render_to_string("email/resubmission/resubmission.html", context)
user_mail_address = [resubmission.user.email] user_mail_address = [SUPPORT_MAIL_RECIPIENT]
self.send( self.send(
user_mail_address, user_mail_address,
_("Resubmission - {}").format(obj_identifier), _("Resubmission - {}").format(obj_identifier),

View File

@ -5,13 +5,11 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22 Created on: 19.08.22
""" """
from django.contrib.gis.geos import MultiPolygon
from django.http import HttpResponse, HttpRequest from django.http import HttpResponse, HttpRequest
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.template.loader import render_to_string from django.template.loader import render_to_string
from konova.models import Geometry, Municipal from konova.models import Geometry, Municipal
from konova.sub_settings.lanis_settings import DEFAULT_SRID_RLP
def get_geom_parcels(request: HttpRequest, id: str): def get_geom_parcels(request: HttpRequest, id: str):
@ -32,7 +30,7 @@ def get_geom_parcels(request: HttpRequest, id: str):
template = "konova/includes/parcels/parcel_table_frame.html" template = "konova/includes/parcels/parcel_table_frame.html"
geom = get_object_or_404(Geometry, id=id) geom = get_object_or_404(Geometry, id=id)
parcels = geom.get_underlying_parcels() parcels = geom.get_underlying_parcels()
geos_geom = geom.geom or MultiPolygon(srid=DEFAULT_SRID_RLP) geos_geom = geom.geom
geometry_exists = not geos_geom.empty geometry_exists = not geos_geom.empty
parcels_are_currently_calculated = geometry_exists and geos_geom.area > 0 and len(parcels) == 0 parcels_are_currently_calculated = geometry_exists and geos_geom.area > 0 and len(parcels) == 0

Binary file not shown.

View File

@ -28,8 +28,8 @@
#: konova/filters/mixins/geo_reference.py:79 konova/filters/mixins/office.py:24 #: konova/filters/mixins/geo_reference.py:79 konova/filters/mixins/office.py:24
#: konova/filters/mixins/office.py:25 konova/filters/mixins/office.py:56 #: konova/filters/mixins/office.py:25 konova/filters/mixins/office.py:56
#: konova/filters/mixins/office.py:57 konova/filters/mixins/record.py:23 #: konova/filters/mixins/office.py:57 konova/filters/mixins/record.py:23
#: konova/filters/mixins/self_created.py:24 konova/filters/mixins/share.py:23 #: konova/filters/mixins/share.py:23 konova/forms/geometry_form.py:30
#: konova/forms/geometry_form.py:31 konova/forms/modals/document_form.py:25 #: konova/forms/modals/document_form.py:25
#: konova/forms/modals/document_form.py:35 #: konova/forms/modals/document_form.py:35
#: konova/forms/modals/document_form.py:48 #: konova/forms/modals/document_form.py:48
#: konova/forms/modals/document_form.py:60 #: konova/forms/modals/document_form.py:60
@ -43,7 +43,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-12-06 08:23+0100\n" "POT-Creation-Date: 2022-11-16 13:36+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"
@ -77,7 +77,7 @@ msgstr "Einträge erstellt bis..."
#: intervention/forms/intervention.py:103 #: intervention/forms/intervention.py:103
#: intervention/templates/intervention/detail/view.html:56 #: intervention/templates/intervention/detail/view.html:56
#: intervention/templates/intervention/report/report.html:37 #: intervention/templates/intervention/report/report.html:37
#: intervention/utils/quality.py:62 konova/filters/mixins/office.py:34 #: intervention/utils/quality.py:49 konova/filters/mixins/office.py:34
msgid "Conservation office" msgid "Conservation office"
msgstr "Eintragungsstelle" msgstr "Eintragungsstelle"
@ -365,8 +365,8 @@ msgstr "Kennung"
#: compensation/forms/compensation.py:33 intervention/forms/intervention.py:32 #: compensation/forms/compensation.py:33 intervention/forms/intervention.py:32
#: user/forms/user.py:77 #: user/forms/user.py:77
msgid "Generated automatically - not editable" msgid "Generated automatically"
msgstr "Automatisch generiert - nicht bearbeitbar" msgstr "Automatisch generiert"
#: compensation/forms/compensation.py:42 compensation/tables/compensation.py:28 #: compensation/forms/compensation.py:42 compensation/tables/compensation.py:28
#: compensation/tables/eco_account.py:28 #: compensation/tables/eco_account.py:28
@ -392,7 +392,7 @@ msgstr "Bezeichnung"
msgid "An explanatory name" msgid "An explanatory name"
msgstr "Aussagekräftiger Titel" msgstr "Aussagekräftiger Titel"
#: compensation/forms/compensation.py:48 ema/forms.py:51 ema/forms.py:114 #: compensation/forms/compensation.py:48 ema/forms.py:51 ema/forms.py:111
msgid "Compensation XY; Location ABC" msgid "Compensation XY; Location ABC"
msgstr "Kompensation XY; Flur ABC" msgstr "Kompensation XY; Flur ABC"
@ -438,11 +438,11 @@ 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/compensation.py:113 #: compensation/forms/compensation.py:113
#: compensation/views/compensation/compensation.py:115 #: compensation/views/compensation/compensation.py:113
msgid "New compensation" msgid "New compensation"
msgstr "Neue Kompensation" msgstr "Neue Kompensation"
#: compensation/forms/compensation.py:189 #: compensation/forms/compensation.py:186
msgid "Edit compensation" msgid "Edit compensation"
msgstr "Bearbeite Kompensation" msgstr "Bearbeite Kompensation"
@ -465,7 +465,7 @@ msgid "When did the parties agree on this?"
msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?" msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?"
#: compensation/forms/eco_account.py:70 #: compensation/forms/eco_account.py:70
#: compensation/views/eco_account/eco_account.py:96 #: compensation/views/eco_account/eco_account.py:94
msgid "New Eco-Account" msgid "New Eco-Account"
msgstr "Neues Ökokonto" msgstr "Neues Ökokonto"
@ -473,11 +473,11 @@ msgstr "Neues Ökokonto"
msgid "Eco-Account XY; Location ABC" msgid "Eco-Account XY; Location ABC"
msgstr "Ökokonto XY; Flur ABC" msgstr "Ökokonto XY; Flur ABC"
#: compensation/forms/eco_account.py:145 #: compensation/forms/eco_account.py:143
msgid "Edit Eco-Account" msgid "Edit Eco-Account"
msgstr "Ökokonto bearbeiten" msgstr "Ökokonto bearbeiten"
#: compensation/forms/eco_account.py:230 #: compensation/forms/eco_account.py:228
msgid "The account can not be removed, since there are still deductions." msgid "The account can not be removed, since there are still deductions."
msgstr "" msgstr ""
"Das Ökokonto kann nicht entfernt werden, da hierzu noch Abbuchungen " "Das Ökokonto kann nicht entfernt werden, da hierzu noch Abbuchungen "
@ -491,7 +491,7 @@ msgstr ""
#: intervention/forms/intervention.py:131 #: intervention/forms/intervention.py:131
#: intervention/templates/intervention/detail/view.html:60 #: intervention/templates/intervention/detail/view.html:60
#: intervention/templates/intervention/report/report.html:41 #: intervention/templates/intervention/report/report.html:41
#: intervention/utils/quality.py:55 #: intervention/utils/quality.py:42
msgid "Conservation office file number" msgid "Conservation office file number"
msgstr "Aktenzeichen Eintragungsstelle" msgstr "Aktenzeichen Eintragungsstelle"
@ -725,22 +725,18 @@ msgid "m"
msgstr "" msgstr ""
#: compensation/models/action.py:22 #: compensation/models/action.py:22
msgid "m²"
msgstr ""
#: compensation/models/action.py:23
msgid "m³"
msgstr ""
#: compensation/models/action.py:24
msgid "km" msgid "km"
msgstr "" msgstr ""
#: compensation/models/action.py:25 #: compensation/models/action.py:23
msgid "m²"
msgstr ""
#: compensation/models/action.py:24
msgid "ha" msgid "ha"
msgstr "" msgstr ""
#: compensation/models/action.py:26 #: compensation/models/action.py:25
msgid "Pieces" msgid "Pieces"
msgstr "Stück" msgstr "Stück"
@ -975,7 +971,6 @@ msgstr "Frist löschen"
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:8 #: compensation/templates/compensation/detail/eco_account/includes/documents.html:8
#: ema/templates/ema/detail/includes/documents.html:8 #: ema/templates/ema/detail/includes/documents.html:8
#: intervention/templates/intervention/detail/includes/documents.html:8 #: intervention/templates/intervention/detail/includes/documents.html:8
#: intervention/utils/quality.py:37
msgid "Documents" msgid "Documents"
msgstr "Dokumente" msgstr "Dokumente"
@ -1140,7 +1135,7 @@ msgstr "Verzeichnet am"
#: ema/templates/ema/detail/view.html:71 #: ema/templates/ema/detail/view.html:71
#: ema/templates/ema/report/report.html:34 #: ema/templates/ema/report/report.html:34
#: intervention/templates/intervention/detail/view.html:113 #: intervention/templates/intervention/detail/view.html:113
#: intervention/templates/intervention/report/report.html:89 #: intervention/templates/intervention/report/report.html:87
msgid "Last modified" msgid "Last modified"
msgstr "Zuletzt bearbeitet" msgstr "Zuletzt bearbeitet"
@ -1245,8 +1240,7 @@ msgstr "Abbuchungen für"
#: compensation/templates/compensation/report/eco_account/report.html:42 #: compensation/templates/compensation/report/eco_account/report.html:42
#: intervention/templates/intervention/report/report.html:53 #: intervention/templates/intervention/report/report.html:53
#: intervention/templates/intervention/report/report.html:66 #: intervention/templates/intervention/report/report.html:74
#: intervention/templates/intervention/report/report.html:76
msgid "None" msgid "None"
msgstr "-" msgstr "-"
@ -1258,7 +1252,7 @@ msgstr "Ungleiche Zustandsflächenmengen"
msgid "Finished deadlines" msgid "Finished deadlines"
msgstr "Umsetzungstermin" msgstr "Umsetzungstermin"
#: compensation/utils/quality.py:85 intervention/utils/quality.py:97 #: compensation/utils/quality.py:85 intervention/utils/quality.py:84
msgid "Legal data" msgid "Legal data"
msgstr "Rechtliche Daten" msgstr "Rechtliche Daten"
@ -1269,22 +1263,22 @@ msgstr ""
"überschreiten" "überschreiten"
#: compensation/utils/quality.py:115 ema/utils/quality.py:30 #: compensation/utils/quality.py:115 ema/utils/quality.py:30
#: intervention/utils/quality.py:68 #: intervention/utils/quality.py:55
msgid "Responsible data" msgid "Responsible data"
msgstr "Daten zu den verantwortlichen Stellen" msgstr "Daten zu den verantwortlichen Stellen"
#: compensation/views/compensation/compensation.py:58 #: compensation/views/compensation/compensation.py:56
msgid "Compensations - Overview" msgid "Compensations - Overview"
msgstr "Kompensationen - Übersicht" msgstr "Kompensationen - Übersicht"
#: compensation/views/compensation/compensation.py:177 #: compensation/views/compensation/compensation.py:175
#: konova/utils/message_templates.py:37 #: konova/utils/message_templates.py:37
msgid "Compensation {} edited" msgid "Compensation {} edited"
msgstr "Kompensation {} bearbeitet" msgstr "Kompensation {} bearbeitet"
#: compensation/views/compensation/compensation.py:187 #: compensation/views/compensation/compensation.py:185
#: compensation/views/eco_account/eco_account.py:161 ema/views/ema.py:212 #: compensation/views/eco_account/eco_account.py:159 ema/views/ema.py:210
#: intervention/views/intervention.py:230 #: intervention/views/intervention.py:228
msgid "Edit {}" msgid "Edit {}"
msgstr "Bearbeite {}" msgstr "Bearbeite {}"
@ -1294,27 +1288,27 @@ msgstr "Bearbeite {}"
msgid "Report {}" msgid "Report {}"
msgstr "Bericht {}" msgstr "Bericht {}"
#: compensation/views/eco_account/eco_account.py:53 #: compensation/views/eco_account/eco_account.py:51
msgid "Eco-account - Overview" msgid "Eco-account - Overview"
msgstr "Ökokonten - Übersicht" msgstr "Ökokonten - Übersicht"
#: compensation/views/eco_account/eco_account.py:86 #: compensation/views/eco_account/eco_account.py:84
msgid "Eco-Account {} added" msgid "Eco-Account {} added"
msgstr "Ökokonto {} hinzugefügt" msgstr "Ökokonto {} hinzugefügt"
#: compensation/views/eco_account/eco_account.py:151 #: compensation/views/eco_account/eco_account.py:149
msgid "Eco-Account {} edited" msgid "Eco-Account {} edited"
msgstr "Ökokonto {} bearbeitet" msgstr "Ökokonto {} bearbeitet"
#: compensation/views/eco_account/eco_account.py:267 #: compensation/views/eco_account/eco_account.py:265
msgid "Eco-account removed" msgid "Eco-account removed"
msgstr "Ökokonto entfernt" msgstr "Ökokonto entfernt"
#: ema/forms.py:42 ema/views/ema.py:95 #: ema/forms.py:42 ema/views/ema.py:93
msgid "New EMA" msgid "New EMA"
msgstr "Neue EMA hinzufügen" msgstr "Neue EMA hinzufügen"
#: ema/forms.py:108 #: ema/forms.py:105
msgid "Edit EMA" msgid "Edit EMA"
msgstr "Bearbeite EMA" msgstr "Bearbeite EMA"
@ -1338,19 +1332,19 @@ msgstr ""
msgid "Payment funded compensation" msgid "Payment funded compensation"
msgstr "Ersatzzahlungsmaßnahme" msgstr "Ersatzzahlungsmaßnahme"
#: ema/views/ema.py:52 #: ema/views/ema.py:50
msgid "EMAs - Overview" msgid "EMAs - Overview"
msgstr "EMAs - Übersicht" msgstr "EMAs - Übersicht"
#: ema/views/ema.py:85 #: ema/views/ema.py:83
msgid "EMA {} added" msgid "EMA {} added"
msgstr "EMA {} hinzugefügt" msgstr "EMA {} hinzugefügt"
#: ema/views/ema.py:202 #: ema/views/ema.py:200
msgid "EMA {} edited" msgid "EMA {} edited"
msgstr "EMA {} bearbeitet" msgstr "EMA {} bearbeitet"
#: ema/views/ema.py:236 #: ema/views/ema.py:234
msgid "EMA removed" msgid "EMA removed"
msgstr "EMA entfernt" msgstr "EMA entfernt"
@ -1361,7 +1355,7 @@ msgstr "Bauvorhaben XY; Flur ABC"
#: intervention/forms/intervention.py:53 #: intervention/forms/intervention.py:53
#: intervention/templates/intervention/detail/view.html:35 #: intervention/templates/intervention/detail/view.html:35
#: intervention/templates/intervention/report/report.html:16 #: intervention/templates/intervention/report/report.html:16
#: intervention/utils/quality.py:95 #: intervention/utils/quality.py:82
msgid "Process type" msgid "Process type"
msgstr "Verfahrenstyp" msgstr "Verfahrenstyp"
@ -1372,14 +1366,14 @@ msgstr "Mehrfachauswahl möglich"
#: intervention/forms/intervention.py:87 #: intervention/forms/intervention.py:87
#: intervention/templates/intervention/detail/view.html:48 #: intervention/templates/intervention/detail/view.html:48
#: intervention/templates/intervention/report/report.html:29 #: intervention/templates/intervention/report/report.html:29
#: intervention/utils/quality.py:59 konova/filters/mixins/office.py:66 #: intervention/utils/quality.py:46 konova/filters/mixins/office.py:66
msgid "Registration office" msgid "Registration office"
msgstr "Zulassungsbehörde" msgstr "Zulassungsbehörde"
#: intervention/forms/intervention.py:119 #: intervention/forms/intervention.py:119
#: intervention/templates/intervention/detail/view.html:52 #: intervention/templates/intervention/detail/view.html:52
#: intervention/templates/intervention/report/report.html:33 #: intervention/templates/intervention/report/report.html:33
#: intervention/utils/quality.py:52 #: intervention/utils/quality.py:39
msgid "Registration office file number" msgid "Registration office file number"
msgstr "Aktenzeichen Zulassungsbehörde" msgstr "Aktenzeichen Zulassungsbehörde"
@ -1401,23 +1395,22 @@ msgstr "Detailangabe zum Eingriffsverursacher"
#: intervention/forms/intervention.py:174 #: intervention/forms/intervention.py:174
#: intervention/templates/intervention/detail/view.html:101 #: intervention/templates/intervention/detail/view.html:101
#: intervention/templates/intervention/report/report.html:81 #: intervention/templates/intervention/report/report.html:79
#: intervention/utils/quality.py:86 #: intervention/utils/quality.py:73
msgid "Registration date" msgid "Registration date"
msgstr "Datum Zulassung bzw. Satzungsbeschluss" msgstr "Datum Zulassung bzw. Satzungsbeschluss"
#: intervention/forms/intervention.py:186 #: intervention/forms/intervention.py:186
#: intervention/templates/intervention/detail/view.html:105 #: intervention/templates/intervention/detail/view.html:105
#: intervention/templates/intervention/report/report.html:85 #: intervention/templates/intervention/report/report.html:83
msgid "Binding on" msgid "Binding on"
msgstr "Datum Bestandskraft bzw. Rechtskraft" msgstr "Datum Bestandskraft bzw. Rechtskraft"
#: intervention/forms/intervention.py:212 #: intervention/forms/intervention.py:212 intervention/views/intervention.py:98
#: intervention/views/intervention.py:100
msgid "New intervention" msgid "New intervention"
msgstr "Neuer Eingriff" msgstr "Neuer Eingriff"
#: intervention/forms/intervention.py:302 #: intervention/forms/intervention.py:299
msgid "Edit intervention" msgid "Edit intervention"
msgstr "Eingriff bearbeiten" msgstr "Eingriff bearbeiten"
@ -1566,11 +1559,10 @@ msgid ""
"You entered a payment. Please upload the legal document which defines the " "You entered a payment. Please upload the legal document which defines the "
"payment`s amount." "payment`s amount."
msgstr "" msgstr ""
"Sie haben Ersatzzahlungen angegeben. Laden Sie bitte den Zahlungsbescheid " "Sie haben Ersatzzahlungen angegeben. Laden Sie bitte den Zahlungsbescheid als Dokument hoch."
"als Dokument hoch."
#: intervention/templates/intervention/detail/includes/payments.html:8 #: intervention/templates/intervention/detail/includes/payments.html:8
#: intervention/templates/intervention/report/report.html:71 #: intervention/templates/intervention/report/report.html:69
msgid "Payments" msgid "Payments"
msgstr "Ersatzzahlungen" msgstr "Ersatzzahlungen"
@ -1606,7 +1598,7 @@ msgid "Remove revocation"
msgstr "Widerspruch entfernen" msgstr "Widerspruch entfernen"
#: intervention/templates/intervention/detail/view.html:64 #: intervention/templates/intervention/detail/view.html:64
#: intervention/utils/quality.py:65 #: intervention/utils/quality.py:52
msgid "Intervention handler" msgid "Intervention handler"
msgstr "Eingriffsverursacher" msgstr "Eingriffsverursacher"
@ -1618,24 +1610,24 @@ msgstr "vorhanden"
msgid "Deductions of eco-accounts" msgid "Deductions of eco-accounts"
msgstr "Abbuchungen von Ökokonten" msgstr "Abbuchungen von Ökokonten"
#: intervention/templates/intervention/report/report.html:74 #: intervention/templates/intervention/report/report.html:72
msgid "Exist" msgid "Exist"
msgstr "Vorhanden" msgstr "Vorhanden"
#: intervention/utils/quality.py:83 #: intervention/utils/quality.py:70
#: templates/table/revocation_warning_col.html:5 #: templates/table/revocation_warning_col.html:5
msgid "Revocations exists" msgid "Revocations exists"
msgstr "Widersprüche liegen vor" msgstr "Widersprüche liegen vor"
#: intervention/utils/quality.py:89 #: intervention/utils/quality.py:76
msgid "Binding date" msgid "Binding date"
msgstr "Datum Bestandskraft bzw. Rechtskraft" msgstr "Datum Bestandskraft bzw. Rechtskraft"
#: intervention/utils/quality.py:92 #: intervention/utils/quality.py:79
msgid "Laws" msgid "Laws"
msgstr "Gesetze" msgstr "Gesetze"
#: intervention/utils/quality.py:114 #: intervention/utils/quality.py:101
msgid "No compensation of any type found (Compensation, Payment, Deduction)" msgid "No compensation of any type found (Compensation, Payment, Deduction)"
msgstr "" msgstr ""
"Kein Ausgleich jeglicher Art gefunden (Kompensation, Ersatzzahlung, " "Kein Ausgleich jeglicher Art gefunden (Kompensation, Ersatzzahlung, "
@ -1645,19 +1637,19 @@ msgstr ""
msgid "Check performed" msgid "Check performed"
msgstr "Prüfung durchgeführt" msgstr "Prüfung durchgeführt"
#: intervention/views/intervention.py:57 #: intervention/views/intervention.py:55
msgid "Interventions - Overview" msgid "Interventions - Overview"
msgstr "Eingriffe - Übersicht" msgstr "Eingriffe - Übersicht"
#: intervention/views/intervention.py:90 #: intervention/views/intervention.py:88
msgid "Intervention {} added" msgid "Intervention {} added"
msgstr "Eingriff {} hinzugefügt" msgstr "Eingriff {} hinzugefügt"
#: intervention/views/intervention.py:218 #: intervention/views/intervention.py:216
msgid "Intervention {} edited" msgid "Intervention {} edited"
msgstr "Eingriff {} bearbeitet" msgstr "Eingriff {} bearbeitet"
#: intervention/views/intervention.py:255 #: intervention/views/intervention.py:253
msgid "{} removed" msgid "{} removed"
msgstr "{} entfernt" msgstr "{} entfernt"
@ -1742,26 +1734,10 @@ msgstr "Nach Zulassungsbehörde suchen"
msgid "Show recorded" msgid "Show recorded"
msgstr "Verzeichnete anzeigen" msgstr "Verzeichnete anzeigen"
#: konova/filters/mixins/record.py:27
msgid "If activated also shows entries which have been already recorded"
msgstr "Wenn aktiviert werden auch Einträge angezeigt, die bereits verzeichnet wurden"
#: konova/filters/mixins/self_created.py:23
msgid "Show only self created"
msgstr "Nur selbst erstellte anzeigen"
#: konova/filters/mixins/self_created.py:28
msgid "If activated only shows entries which have been created by you"
msgstr "Wenn aktiviert werden nur Einträge angezeigt, die von Ihnen erstellt worden sind"
#: konova/filters/mixins/share.py:22 #: konova/filters/mixins/share.py:22
msgid "Show unshared" msgid "Show unshared"
msgstr "Nicht freigegebene anzeigen" msgstr "Nicht freigegebene anzeigen"
#: konova/filters/mixins/share.py:27
msgid "If activated also shows entries which are not shared with you"
msgstr "Wenn aktiviert werden auch Einträge angezeigt, die nicht für Sie freigegeben sind"
#: konova/forms/base_form.py:23 templates/form/collapsable/form.html:62 #: konova/forms/base_form.py:23 templates/form/collapsable/form.html:62
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@ -1770,12 +1746,12 @@ msgstr "Speichern"
msgid "Not editable" msgid "Not editable"
msgstr "Nicht editierbar" msgstr "Nicht editierbar"
#: konova/forms/geometry_form.py:30 konova/utils/quality.py:44 #: konova/forms/geometry_form.py:29 konova/utils/quality.py:44
#: konova/utils/quality.py:46 templates/form/collapsable/form.html:45 #: konova/utils/quality.py:46 templates/form/collapsable/form.html:45
msgid "Geometry" msgid "Geometry"
msgstr "Geometrie" msgstr "Geometrie"
#: konova/forms/geometry_form.py:99 #: konova/forms/geometry_form.py:80
msgid "Only surfaces allowed. Points or lines must be buffered." msgid "Only surfaces allowed. Points or lines must be buffered."
msgstr "" msgstr ""
"Nur Flächen erlaubt. Punkte oder Linien müssen zu Flächen gepuffert werden." "Nur Flächen erlaubt. Punkte oder Linien müssen zu Flächen gepuffert werden."
@ -1928,10 +1904,6 @@ msgstr "Gemarkungsschlüssel"
msgid "Spatial reference" msgid "Spatial reference"
msgstr "Raumreferenz" msgstr "Raumreferenz"
#: konova/templates/konova/includes/parcels/parcels.html:28
msgid "No geometry entry found on database. Please contact an admin!"
msgstr ""
#: konova/templates/konova/includes/quickstart/compensations.html:20 #: konova/templates/konova/includes/quickstart/compensations.html:20
#: konova/templates/konova/includes/quickstart/ecoaccounts.html:20 #: konova/templates/konova/includes/quickstart/ecoaccounts.html:20
#: konova/templates/konova/includes/quickstart/interventions.html:20 #: konova/templates/konova/includes/quickstart/interventions.html:20
@ -2336,9 +2308,7 @@ msgstr ""
#: templates/500.html:10 #: templates/500.html:10
msgid "Something happened. Admins have been informed. We are working on it!" msgid "Something happened. Admins have been informed. We are working on it!"
msgstr "" msgstr "Irgendetwas ist passiert. Die Administratoren wurden informiert. Wir arbeiten daran!"
"Irgendetwas ist passiert. Die Administratoren wurden informiert. Wir "
"arbeiten daran!"
#: templates/email/api/verify_token.html:7 #: templates/email/api/verify_token.html:7
msgid "Hello support" msgid "Hello support"

View File

@ -4,18 +4,12 @@
<tbody> <tbody>
{% for field in form %} {% for field in form %}
<tr title="{{ field.help_text }}" class="{% if field.errors %}alert-danger{% endif %}"> <tr title="{{ field.help_text }}" class="{% if field.errors %}alert-danger{% endif %}">
{{form.small_label_column}} <th scope="row" class="col-sm-3">
<th scope="row" class="col-sm-{{form.label_input_ratio.0}}"> <label for="id_{{ field.name }}">{{ field.label }}<span class="label-required">{% if field.field.required %}*{% endif %}</span></label>
<label class="form-label" for="id_{{ field.name }}">
{{ field.label }}
<span class="label-required">
{% if field.field.required %}*{% endif %}
</span>
<br> <br>
<small>{{ field.help_text }}</small> <small>{{ field.help_text }}</small>
</label>
</th> </th>
<td class="col-sm-{{form.label_input_ratio.1}}"> <td class="col-sm-9">
{{ field }} {{ field }}
{% for error in field.errors %} {% for error in field.errors %}
<br> <br>

View File

@ -4,9 +4,9 @@
Encapsules the rendering and initializing of a geometry view component, e.g. used in the detail views. Encapsules the rendering and initializing of a geometry view component, e.g. used in the detail views.
{% endcomment %} {% endcomment %}
{% if geom_form.empty and geom_form.read_only %} {% if geom_form.empty %}
<div class="w-100"> <div class="w-100">
<div class="alert alert-danger"> <div class="alert alert-info">
{% fa5_icon 'search-location' %} {% fa5_icon 'search-location' %}
{% trans 'No geometry added, yet.' %} {% trans 'No geometry added, yet.' %}
</div> </div>

View File

@ -74,7 +74,7 @@ class UserAPITokenForm(BaseForm):
label_suffix="", label_suffix="",
max_length=255, max_length=255,
required=True, required=True,
help_text=_("Generated automatically - not editable"), help_text=_("Generated automatically"),
widget=GenerateInput( widget=GenerateInput(
attrs={ attrs={
"class": "form-control", "class": "form-control",