Compensation detail view
* adds compensation detail view (WIP) * adds includes dir for related objects, similar to interventions * adds functionality for * adding/removing before_states * adding/removing after_states * adding/removing deadlines * adding/removing documents * refactors usage of BaseModalForm * holds now process_request() in base class for generic usage anywhere * adds __str__() method for some models * compensation__action is blank=True now * renamed tooltips * adds new routes for state/deadline/document handling inside of compensation/urls.py * adds precalculation of before/after_states for detail view, so users will see directly if there are missing states * removes unnecessary link for intervention detail payment * adds missing tooltips for check and record icon on detail views * refactors DeadlineTypeEnum into DeadlineType in konova/models.py, just as the django 3.x documentation suggests for model enumerations * UuidModel id field is not editable anymore in the admin interface * adds/updates translations
This commit is contained in:
parent
a06b532108
commit
881edaeba6
@ -9,9 +9,10 @@ from django import forms
|
||||
from django.db import transaction
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from compensation.models import Payment
|
||||
from compensation.models import Payment, CompensationState
|
||||
from konova.enums import UserActionLogEntryEnum
|
||||
from konova.forms import BaseForm, BaseModalForm
|
||||
from konova.models import Deadline, DeadlineType
|
||||
from user.models import UserActionLogEntry
|
||||
|
||||
|
||||
@ -69,4 +70,94 @@ class NewPaymentForm(BaseModalForm):
|
||||
comment=self.cleaned_data.get("transfer_note", None),
|
||||
intervention=self.intervention,
|
||||
)
|
||||
return pay
|
||||
return pay
|
||||
|
||||
|
||||
class NewStateModalForm(BaseModalForm):
|
||||
biotope_type = forms.CharField(
|
||||
label=_("Biotope Type"),
|
||||
label_suffix="",
|
||||
required=True,
|
||||
help_text=_("Select the biotope type")
|
||||
)
|
||||
surface = forms.DecimalField(
|
||||
min_value=0.00,
|
||||
decimal_places=2,
|
||||
label=_("Surface"),
|
||||
label_suffix="",
|
||||
required=True,
|
||||
help_text=_("in m²")
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.form_title = _("New state")
|
||||
self.form_caption = _("Insert data for the new state")
|
||||
|
||||
def save(self, is_before_state: bool = False):
|
||||
with transaction.atomic():
|
||||
state = CompensationState.objects.create(
|
||||
biotope_type=self.cleaned_data["biotope_type"],
|
||||
surface=self.cleaned_data["surface"],
|
||||
)
|
||||
if is_before_state:
|
||||
self.instance.before_states.add(state)
|
||||
else:
|
||||
self.instance.after_states.add(state)
|
||||
return state
|
||||
|
||||
|
||||
class NewDeadlineModalForm(BaseModalForm):
|
||||
type = forms.ChoiceField(
|
||||
label=_("Deadline Type"),
|
||||
label_suffix="",
|
||||
required=True,
|
||||
help_text=_("Select the deadline type"),
|
||||
choices=DeadlineType.choices
|
||||
)
|
||||
date = forms.DateField(
|
||||
label=_("Date"),
|
||||
label_suffix="",
|
||||
required=True,
|
||||
help_text=_("Select date"),
|
||||
widget=forms.DateInput(
|
||||
attrs={
|
||||
"type": "date",
|
||||
"data-provide": "datepicker",
|
||||
},
|
||||
format="%d.%m.%Y"
|
||||
)
|
||||
)
|
||||
comment = forms.CharField(
|
||||
required=False,
|
||||
label=_("Comment"),
|
||||
label_suffix=_(""),
|
||||
help_text=_("Additional comment"),
|
||||
widget=forms.Textarea(
|
||||
attrs={
|
||||
"cols": 30,
|
||||
"rows": 5,
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.form_title = _("New deadline")
|
||||
self.form_caption = _("Insert data for the new deadline")
|
||||
|
||||
def save(self):
|
||||
with transaction.atomic():
|
||||
action = UserActionLogEntry.objects.create(
|
||||
user=self.user,
|
||||
action=UserActionLogEntryEnum.CREATED.value
|
||||
)
|
||||
deadline = Deadline.objects.create(
|
||||
type=self.cleaned_data["type"],
|
||||
date=self.cleaned_data["date"],
|
||||
comment=self.cleaned_data["comment"],
|
||||
created=action,
|
||||
)
|
||||
self.instance.deadlines.add(deadline)
|
||||
return deadline
|
||||
|
||||
|
@ -53,13 +53,16 @@ class CompensationControl(BaseResource):
|
||||
comment = models.TextField()
|
||||
|
||||
|
||||
class CompensationState(models.Model):
|
||||
class CompensationState(UuidModel):
|
||||
"""
|
||||
Compensations must define the state of an area before and after the compensation.
|
||||
"""
|
||||
biotope_type = models.CharField(max_length=500, null=True, blank=True)
|
||||
surface = models.FloatField()
|
||||
|
||||
def __str__(self):
|
||||
return "{} | {} m²".format(self.biotope_type, self.surface)
|
||||
|
||||
|
||||
class CompensationAction(BaseResource):
|
||||
"""
|
||||
@ -70,6 +73,9 @@ class CompensationAction(BaseResource):
|
||||
unit = models.CharField(max_length=100, null=True, blank=True)
|
||||
control = models.ForeignKey(CompensationControl, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return "{} | {} {}".format(self.action_type, self.amount, self.unit)
|
||||
|
||||
|
||||
class AbstractCompensation(BaseObject):
|
||||
"""
|
||||
@ -87,7 +93,7 @@ class AbstractCompensation(BaseObject):
|
||||
|
||||
before_states = models.ManyToManyField(CompensationState, blank=True, related_name='+', help_text="Refers to 'Ausgangszustand Biotop'")
|
||||
after_states = models.ManyToManyField(CompensationState, blank=True, related_name='+', help_text="Refers to 'Zielzustand Biotop'")
|
||||
actions = models.ManyToManyField(CompensationAction, help_text="Refers to 'Maßnahmen'")
|
||||
actions = models.ManyToManyField(CompensationAction, blank=True, help_text="Refers to 'Maßnahmen'")
|
||||
|
||||
deadlines = models.ManyToManyField("konova.Deadline", null=True, blank=True, related_name="+")
|
||||
|
||||
|
@ -125,12 +125,12 @@ class CompensationTable(BaseTable):
|
||||
"""
|
||||
html = ""
|
||||
checked = value is not None
|
||||
tooltip = _("Not registered yet")
|
||||
tooltip = _("Not recorded yet")
|
||||
if checked:
|
||||
value = value.timestamp
|
||||
value = localtime(value)
|
||||
on = value.strftime(DEFAULT_DATE_TIME_FORMAT)
|
||||
tooltip = _("Registered on {} by {}").format(on, record.intervention.recorded.user)
|
||||
tooltip = _("Recorded on {} by {}").format(on, record.intervention.recorded.user)
|
||||
html += self.render_bookmark(
|
||||
tooltip=tooltip,
|
||||
icn_filled=checked,
|
||||
|
@ -0,0 +1,66 @@
|
||||
{% load i18n l10n fontawesome_5 %}
|
||||
<div id="related-documents" class="card">
|
||||
<div class="card-header rlp-r">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h5>
|
||||
<span class="badge badge-light">{{comp.deadlines.count}}</span>
|
||||
{% trans 'Deadlines' %}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="d-flex justify-content-end">
|
||||
{% if is_default_member and has_access %}
|
||||
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-deadline' comp.id %}" title="{% trans 'Add new deadline' %}">
|
||||
{% fa5_icon 'plus' %}
|
||||
{% fa5_icon 'calendar-check' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body scroll-300">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
{% trans 'Type' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Date' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Comment' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Action' %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for deadline in comp.deadlines.all %}
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
{% trans deadline.type_humanized %}
|
||||
</td>
|
||||
<td class="align-middle">{{ deadline.date }}</td>
|
||||
<td class="align-middle">{{ deadline.comment }}</td>
|
||||
<td>
|
||||
{% if is_default_member and has_access %}
|
||||
<button data-form-url="{% url 'deadline-remove' deadline.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove deadline' %}">
|
||||
{% fa5_icon 'trash' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if sum_before_states > sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,59 @@
|
||||
{% load i18n l10n fontawesome_5 %}
|
||||
<div id="related-documents" class="card">
|
||||
<div class="card-header rlp-r">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h5>
|
||||
<span class="badge badge-light">{{comp.documents.count}}</span>
|
||||
{% trans 'Documents' %}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="d-flex justify-content-end">
|
||||
{% if is_default_member and has_access %}
|
||||
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-doc' comp.id %}" title="{% trans 'Add new document' %}">
|
||||
{% fa5_icon 'plus' %}
|
||||
{% fa5_icon 'file' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body scroll-300">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
{% trans 'Title' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Comment' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Action' %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for doc in comp.documents.all %}
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
<a href="{% url 'doc-open' doc.id %}">
|
||||
{{ doc.title }}
|
||||
</a>
|
||||
</td>
|
||||
<td class="align-middle">{{ doc.comment }}</td>
|
||||
<td>
|
||||
{% if is_default_member and has_access %}
|
||||
<button data-form-url="{% url 'doc-remove' doc.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove document' %}">
|
||||
{% fa5_icon 'trash' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,62 @@
|
||||
{% load i18n l10n fontawesome_5 %}
|
||||
<div id="related-documents" class="card">
|
||||
<div class="card-header rlp-r">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h5>
|
||||
<span class="badge badge-light">{{comp.after_states.count}}</span>
|
||||
{% trans 'States after' %}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="d-flex justify-content-end">
|
||||
{% if is_default_member and has_access %}
|
||||
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-state' comp.id %}" title="{% trans 'Add new state after' %}">
|
||||
{% fa5_icon 'plus' %}
|
||||
{% fa5_icon 'layer-group' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body scroll-300">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
{% trans 'Biotope type' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Surface' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Action' %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for state in comp.after_states.all %}
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
{{ state.biotope_type }}
|
||||
</td>
|
||||
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td>
|
||||
{% if is_default_member and has_access %}
|
||||
<button data-form-url="{% url 'compensation:state-remove' state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
|
||||
{% fa5_icon 'trash' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if sum_before_states > sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,62 @@
|
||||
{% load i18n l10n fontawesome_5 %}
|
||||
<div id="related-documents" class="card">
|
||||
<div class="card-header rlp-r">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h5>
|
||||
<span class="badge badge-light">{{comp.before_states.count}}</span>
|
||||
{% trans 'States before' %}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="d-flex justify-content-end">
|
||||
{% if is_default_member and has_access %}
|
||||
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-state' comp.id %}?before=true" title="{% trans 'Add new state before' %}">
|
||||
{% fa5_icon 'plus' %}
|
||||
{% fa5_icon 'layer-group' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body scroll-300">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
{% trans 'Biotope type' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Surface' %}
|
||||
</th>
|
||||
<th scope="col">
|
||||
{% trans 'Action' %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for state in comp.before_states.all %}
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
{{ state.biotope_type }}
|
||||
</td>
|
||||
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td>
|
||||
{% if is_default_member and has_access %}
|
||||
<button data-form-url="{% url 'compensation:state-remove' state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
|
||||
{% fa5_icon 'trash' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if sum_before_states < sum_after_states %}
|
||||
<div class="row alert alert-danger">
|
||||
{% trans 'Missing surfaces: ' %}{{ diff_states|floatformat:2 }} m²
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
144
compensation/templates/compensation/detail/view.html
Normal file
144
compensation/templates/compensation/detail/view.html
Normal file
@ -0,0 +1,144 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n l10n static fontawesome_5 humanize %}
|
||||
|
||||
{% block head %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<div id="detail-header" class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<h3>{% trans 'Compensation' %} {{comp.identifier}}</h3>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="d-flex justify-content-end">
|
||||
<a href="{% url 'home' %}" class="mr-2">
|
||||
<button class="btn btn-default" title="{% trans 'Open in LANIS' %}">
|
||||
LANIS
|
||||
</button>
|
||||
</a>
|
||||
<a href="{% url 'home' %}" class="mr-2">
|
||||
<button class="btn btn-default" title="{% trans 'Public report' %}">
|
||||
{% fa5_icon 'file-alt' %}
|
||||
</button>
|
||||
</a>
|
||||
{% if has_access %}
|
||||
{% if is_default_member %}
|
||||
<a href="{% url 'home' %}" class="mr-2">
|
||||
<button class="btn btn-default" title="{% trans 'Edit' %}">
|
||||
{% fa5_icon 'edit' %}
|
||||
</button>
|
||||
</a>
|
||||
<button class="btn btn-default btn-modal" data-form-url="{% url 'compensation:remove' comp.id %}" title="{% trans 'Delete' %}">
|
||||
{% fa5_icon 'trash' %}
|
||||
</button>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="data" class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="table-container">
|
||||
<table class="table table-hover">
|
||||
<tr>
|
||||
<th class="w-25" scope="row">{% trans 'Title' %}</th>
|
||||
<td class="align-middle">{{comp.title}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{% trans 'compensates intervention' %}</th>
|
||||
<td class="align-middle">
|
||||
<a href="{% url 'intervention:open' comp.intervention.id %}">
|
||||
{{comp.intervention.identifier}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{% trans 'Checked' %}</th>
|
||||
<td class="align-middle">
|
||||
{% if comp.intervention.checked is None %}
|
||||
<span>
|
||||
{% fa5_icon 'star' 'far' %}
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="check-star" title="{% trans 'Checked on '%} {{comp.intervention.checked.timestamp}} {% trans 'by' %} {{comp.intervention.checked.user}}">
|
||||
{% fa5_icon 'star' %}
|
||||
</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{% trans 'Recorded' %}</th>
|
||||
<td class="align-middle">
|
||||
{% if comp.intervention.recorded is None %}
|
||||
<span title="{% trans 'Not recorded yet' %}">
|
||||
{% fa5_icon 'bookmark' 'far' %}
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="registered-bookmark" title="{% trans 'Recorded on '%} {{comp.intervention.recorded.timestamp}} {% trans 'by' %} {{comp.intervention.recorded.user}}">
|
||||
{% fa5_icon 'bookmark' %}
|
||||
</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{% trans 'Last modified' %}</th>
|
||||
<td class="align-middle">
|
||||
{{comp.created.timestamp|default_if_none:""|naturalday}}
|
||||
<br>
|
||||
{% with comp.created.user as user %}
|
||||
{% include 'user/includes/contact_modal_button.html' %}
|
||||
{% endwith %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{% trans 'Shared with' %}</th>
|
||||
<td class="align-middle">
|
||||
{% for user in comp.intervention.users.all %}
|
||||
{% include 'user/includes/contact_modal_button.html' %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
{% if geom_form.area == 0 %}
|
||||
<div class="alert alert-info">{% trans 'No geometry added, yet.' %}</div>
|
||||
{% endif %}
|
||||
{{geom_form.media}}
|
||||
{{geom_form.geom}}
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
{% include 'compensation/detail/includes/states-before.html' %}
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
{% include 'compensation/detail/includes/states-after.html' %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
{% include 'compensation/detail/includes/actions.html' %}
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
{% include 'compensation/detail/includes/deadlines.html' %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
{% include 'compensation/detail/includes/documents.html' %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% with 'btn-modal' as btn_class %}
|
||||
{% include 'modal/modal_form_script.html' %}
|
||||
{% endwith %}
|
||||
|
||||
{% endblock %}
|
@ -17,6 +17,11 @@ urlpatterns = [
|
||||
path('<id>', open_view, name='open'),
|
||||
path('<id>/edit', edit_view, name='edit'),
|
||||
path('<id>/remove', remove_view, name='remove'),
|
||||
path('<id>/state/new', state_new_view, name='new-state'),
|
||||
path('<id>/deadline/new', deadline_new_view, name="new-deadline"),
|
||||
|
||||
# Documents
|
||||
path('<id>/document/new/', new_document_view, name='new-doc'),
|
||||
|
||||
# Payment
|
||||
path('pay/<intervention_id>/new', new_payment_view, name='pay-new'),
|
||||
@ -34,4 +39,6 @@ urlpatterns = [
|
||||
# Eco-account withdraws
|
||||
path('acc/<id>/remove/<withdraw_id>', withdraw_remove_view, name='withdraw-remove'),
|
||||
|
||||
# Generic state routes
|
||||
path('state/<id>/remove', state_remove_view, name='state-remove'),
|
||||
]
|
@ -1,17 +1,19 @@
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db.models import Sum
|
||||
from django.http import HttpRequest, Http404
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from compensation.forms import NewPaymentForm
|
||||
from compensation.models import Compensation, EcoAccount, Payment
|
||||
from compensation.forms import NewPaymentForm, NewStateModalForm, NewDeadlineModalForm
|
||||
from compensation.models import Compensation, EcoAccount, Payment, CompensationState
|
||||
from compensation.tables import CompensationTable, EcoAccountTable
|
||||
from intervention.models import Intervention
|
||||
from konova.contexts import BaseContext
|
||||
from konova.decorators import *
|
||||
from konova.forms import RemoveModalForm
|
||||
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm
|
||||
from konova.utils.message_templates import FORM_INVALID
|
||||
from konova.utils.user_checks import in_group
|
||||
|
||||
|
||||
@login_required
|
||||
@ -59,8 +61,40 @@ def edit_view(request: HttpRequest, id: str):
|
||||
@login_required
|
||||
@any_group_check
|
||||
def open_view(request: HttpRequest, id: str):
|
||||
# ToDo
|
||||
pass
|
||||
""" Renders a detail view for a compensation
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
id (str): The compensation's id
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
template = "compensation/detail/view.html"
|
||||
comp = get_object_or_404(Compensation, id=id)
|
||||
geom_form = SimpleGeomForm(instance=comp)
|
||||
_user = request.user
|
||||
is_data_shared = comp.intervention.is_shared_with(_user)
|
||||
|
||||
# Precalculate logical errors between before- and after-states
|
||||
# Sum() returns None in case of no states, so we catch that and replace it with 0 for easier handling
|
||||
sum_before_states = comp.before_states.all().aggregate(Sum("surface"))["surface__sum"] or 0
|
||||
sum_after_states = comp.after_states.all().aggregate(Sum("surface"))["surface__sum"] or 0
|
||||
diff_states = abs(sum_before_states - sum_after_states)
|
||||
|
||||
context = {
|
||||
"comp": comp,
|
||||
"geom_form": geom_form,
|
||||
"has_access": is_data_shared,
|
||||
"is_default_member": in_group(_user, _(DEFAULT_GROUP)),
|
||||
"is_zb_member": in_group(_user, _(ZB_GROUP)),
|
||||
"is_ets_member": in_group(_user, _(ETS_GROUP)),
|
||||
"sum_before_states": sum_before_states,
|
||||
"sum_after_states": sum_after_states,
|
||||
"diff_states": diff_states,
|
||||
}
|
||||
context = BaseContext(request, context).context
|
||||
return render(request, template, context)
|
||||
|
||||
|
||||
@login_required
|
||||
@ -79,6 +113,7 @@ def remove_view(request: HttpRequest, id: str):
|
||||
return form.process_request(
|
||||
request=request,
|
||||
msg_success=_("Compensation removed"),
|
||||
redirect_url="",
|
||||
)
|
||||
|
||||
|
||||
@ -220,3 +255,69 @@ def withdraw_remove_view(request: HttpRequest, id: str, withdraw_id: str):
|
||||
request=request,
|
||||
msg_success=_("Withdraw removed")
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def new_document_view(request: HttpRequest, id: str):
|
||||
""" Renders a form for uploading new documents
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
id (str): The compensation's id to which the new document will be related
|
||||
Returns:
|
||||
|
||||
"""
|
||||
comp = get_object_or_404(Compensation, id=id)
|
||||
form = NewDocumentForm(request.POST or None, request.FILES or None, instance=comp, user=request.user)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=_("Document added")
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def state_new_view(request: HttpRequest, id: str):
|
||||
""" Renders a form for adding new states for a compensation
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
id (str): The compensation's id to which the new state will be related
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
comp = get_object_or_404(Compensation, id=id)
|
||||
form = NewStateModalForm(request.POST or None, instance=comp, user=request.user)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=_("State added")
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def deadline_new_view(request: HttpRequest, id: str):
|
||||
""" Renders a form for adding new states for a compensation
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
id (str): The compensation's id to which the new state will be related
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
comp = get_object_or_404(Compensation, id=id)
|
||||
form = NewDeadlineModalForm(request.POST or None, instance=comp, user=request.user)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=_("Deadline added")
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def state_remove_view(request: HttpRequest, id: str):
|
||||
state = get_object_or_404(CompensationState, id=id)
|
||||
form = RemoveModalForm(request.POST or None, instance=state, user=request.user)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=_("State removed")
|
||||
)
|
||||
|
@ -132,12 +132,12 @@ class InterventionTable(BaseTable):
|
||||
"""
|
||||
html = ""
|
||||
checked = value is not None
|
||||
tooltip = _("Not registered yet")
|
||||
tooltip = _("Not recorded yet")
|
||||
if checked:
|
||||
value = value.timestamp
|
||||
value = localtime(value)
|
||||
on = value.strftime(DEFAULT_DATE_TIME_FORMAT)
|
||||
tooltip = _("Registered on {} by {}").format(on, record.recorded.user)
|
||||
tooltip = _("Recorded on {} by {}").format(on, record.recorded.user)
|
||||
html += self.render_bookmark(
|
||||
tooltip=tooltip,
|
||||
icn_filled=checked,
|
||||
|
@ -42,9 +42,7 @@
|
||||
{% for pay in intervention.payments.all %}
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
<a href="{% url 'compensation:pay-open' pay.id %}">
|
||||
{{ pay.amount|floatformat:2 }} €
|
||||
</a>
|
||||
{{ pay.amount|floatformat:2 }} €
|
||||
</td>
|
||||
<td class="align-middle">{{ pay.due_on }}</td>
|
||||
<td class="align-middle">{{ pay.comment }}</td>
|
||||
|
@ -110,7 +110,7 @@
|
||||
<th scope="row">{% trans 'Recorded' %}</th>
|
||||
<td class="align-middle">
|
||||
{% if intervention.recorded is None %}
|
||||
<span>
|
||||
<span title="{% trans 'Not recorded yet' %}">
|
||||
{% fa5_icon 'bookmark' 'far' %}
|
||||
</span>
|
||||
{% else %}
|
||||
|
@ -10,7 +10,6 @@ from intervention.tables import InterventionTable
|
||||
from konova.contexts import BaseContext
|
||||
from konova.decorators import *
|
||||
from konova.forms import SimpleGeomForm, NewDocumentForm, RemoveModalForm
|
||||
from konova.utils.message_templates import FORM_INVALID
|
||||
from konova.utils.user_checks import in_group
|
||||
|
||||
|
||||
@ -89,30 +88,7 @@ def new_document_view(request: HttpRequest, id: str):
|
||||
"""
|
||||
intervention = get_object_or_404(Intervention, id=id)
|
||||
form = NewDocumentForm(request.POST or None, request.FILES or None, instance=intervention, user=request.user)
|
||||
template = form.template
|
||||
if request.method == "POST":
|
||||
if form.is_valid():
|
||||
doc = form.save()
|
||||
messages.success(
|
||||
request,
|
||||
_("Document '{}' added").format(doc.title)
|
||||
)
|
||||
|
||||
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||
else:
|
||||
messages.info(
|
||||
request,
|
||||
FORM_INVALID
|
||||
)
|
||||
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||
elif request.method == "GET":
|
||||
context = {
|
||||
"form": form
|
||||
}
|
||||
context = BaseContext(request, context).context
|
||||
return render(request, template, context)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
return form.process_request(request)
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -56,10 +56,4 @@ class UserActionLogEntryEnum(BaseEnum):
|
||||
CHECKED = "Checked"
|
||||
RECORDED = "Recorded"
|
||||
CREATED = "Created"
|
||||
DELETED = "Deleted"
|
||||
|
||||
|
||||
class DeadlineTypeEnum(BaseEnum):
|
||||
MAINTAIN = "Maintain"
|
||||
CONTROL = "Control"
|
||||
OTHER = "Other"
|
||||
DELETED = "Deleted"
|
@ -132,6 +132,45 @@ class BaseModalForm(BaseForm, BSModalForm):
|
||||
"""
|
||||
is_modal_form = True
|
||||
render_submit = True
|
||||
template = "modal/modal_form.html"
|
||||
|
||||
def process_request(self, request: HttpRequest, msg_success: str = _("Object removed"), msg_error: str = FORM_INVALID, redirect_url: str = None):
|
||||
""" Generic processing of request
|
||||
|
||||
Wraps the request processing logic, so we don't need the same code everywhere a RemoveModalForm is being used
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
msg_success (str): The message in case of successful removing
|
||||
msg_error (str): The message in case of an error
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
redirect_url = redirect_url if redirect_url is not None else request.META.get("HTTP_REFERER", "home")
|
||||
template = self.template
|
||||
if request.method == "POST":
|
||||
if self.is_valid():
|
||||
self.save()
|
||||
messages.success(
|
||||
request,
|
||||
msg_success
|
||||
)
|
||||
return redirect(redirect_url)
|
||||
else:
|
||||
messages.info(
|
||||
request,
|
||||
msg_error
|
||||
)
|
||||
return redirect(redirect_url)
|
||||
elif request.method == "GET":
|
||||
context = {
|
||||
"form": self,
|
||||
}
|
||||
context = BaseContext(request, context).context
|
||||
return render(request, template, context)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class SimpleGeomForm(BaseForm):
|
||||
@ -200,44 +239,6 @@ class RemoveModalForm(BaseModalForm):
|
||||
# If the class does not provide restorable delete functionality, we must delete the entry finally
|
||||
self.instance.delete()
|
||||
|
||||
def process_request(self, request: HttpRequest, msg_success: str = _("Object removed"), msg_error: str = FORM_INVALID, redirect_url: str = None):
|
||||
""" Generic processing of request
|
||||
|
||||
Wraps the request processing logic, so we don't need the same code everywhere a RemoveModalForm is being used
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
msg_success (str): The message in case of successful removing
|
||||
msg_error (str): The message in case of an error
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
redirect_url = redirect_url if redirect_url is not None else request.META.get("HTTP_REFERER", "home")
|
||||
template = self.template
|
||||
if request.method == "POST":
|
||||
if self.is_valid():
|
||||
self.save()
|
||||
messages.success(
|
||||
request,
|
||||
msg_success
|
||||
)
|
||||
return redirect(redirect_url)
|
||||
else:
|
||||
messages.info(
|
||||
request,
|
||||
msg_error
|
||||
)
|
||||
return redirect(redirect_url)
|
||||
elif request.method == "GET":
|
||||
context = {
|
||||
"form": self,
|
||||
}
|
||||
context = BaseContext(request, context).context
|
||||
return render(request, template, context)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class NewDocumentForm(BaseModalForm):
|
||||
""" Modal form for new documents
|
||||
@ -306,4 +307,4 @@ class NewDocumentForm(BaseModalForm):
|
||||
date_of_creation=self.cleaned_data["creation_date"],
|
||||
)
|
||||
self.instance.documents.add(doc)
|
||||
return doc
|
||||
return doc
|
@ -8,10 +8,10 @@ Created on: 17.11.20
|
||||
import os
|
||||
import uuid
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.contrib.gis.db.models import MultiPolygonField
|
||||
from django.db import models
|
||||
|
||||
from konova.enums import DeadlineTypeEnum
|
||||
from konova.settings import DEFAULT_SRID
|
||||
from user.models import UserActionLogEntry
|
||||
|
||||
@ -23,6 +23,7 @@ class UuidModel(models.Model):
|
||||
id = models.UUIDField(
|
||||
primary_key=True,
|
||||
default=uuid.uuid4,
|
||||
editable=False,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
@ -54,17 +55,43 @@ class BaseObject(BaseResource):
|
||||
abstract = True
|
||||
|
||||
|
||||
class DeadlineType(models.TextChoices):
|
||||
"""
|
||||
Django 3.x way of handling enums for models
|
||||
"""
|
||||
FINISHED = "finished", _("Finished")
|
||||
MAINTAIN = "maintain", _("Maintain")
|
||||
CONTROL = "control", _("Control")
|
||||
OTHER = "other", _("Other")
|
||||
|
||||
|
||||
class Deadline(BaseResource):
|
||||
"""
|
||||
Defines a deadline, which can be used to define dates with a semantic meaning
|
||||
"""
|
||||
type = models.CharField(max_length=255, null=True, blank=True, choices=DeadlineTypeEnum.as_choices(drop_empty_choice=True))
|
||||
|
||||
type = models.CharField(max_length=255, null=True, blank=True, choices=DeadlineType.choices)
|
||||
date = models.DateField(null=True, blank=True)
|
||||
comment = models.CharField(max_length=1000, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.type
|
||||
|
||||
@property
|
||||
def type_humanized(self):
|
||||
""" Returns humanized version of enum
|
||||
|
||||
Used for template rendering
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
choices = DeadlineType.choices
|
||||
for choice in choices:
|
||||
if choice[0] == self.type:
|
||||
return choice[1]
|
||||
return None
|
||||
|
||||
|
||||
class Document(BaseResource):
|
||||
"""
|
||||
|
@ -20,7 +20,7 @@ from simple_sso.sso_client.client import Client
|
||||
|
||||
from konova.autocompletes import OrganisationAutocomplete, NonOfficialOrganisationAutocomplete
|
||||
from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG
|
||||
from konova.views import logout_view, home_view, get_document_view, remove_document_view
|
||||
from konova.views import logout_view, home_view, get_document_view, remove_document_view, remove_deadline_view
|
||||
|
||||
sso_client = Client(SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY)
|
||||
urlpatterns = [
|
||||
@ -39,6 +39,9 @@ urlpatterns = [
|
||||
path('document/<id>', get_document_view, name="doc-open"),
|
||||
path('document/<id>/remove', remove_document_view, name="doc-remove"),
|
||||
|
||||
# Generic deadline routes
|
||||
path('deadline/<id>/remove', remove_deadline_view, name="deadline-remove"),
|
||||
|
||||
# Autocomplete paths
|
||||
path("atcmplt/orgs", OrganisationAutocomplete.as_view(), name="orgs-autocomplete"),
|
||||
path("atcmplt/orgs/other", NonOfficialOrganisationAutocomplete.as_view(), name="other-orgs-autocomplete"),
|
||||
|
@ -18,7 +18,7 @@ from intervention.models import Intervention
|
||||
from konova.contexts import BaseContext
|
||||
from konova.decorators import any_group_check
|
||||
from konova.forms import RemoveModalForm
|
||||
from konova.models import Document
|
||||
from konova.models import Document, Deadline
|
||||
from news.models import ServerMessage
|
||||
from konova.settings import SSO_SERVER_BASE
|
||||
|
||||
@ -141,3 +141,22 @@ def remove_document_view(request: HttpRequest, id: str):
|
||||
request=request,
|
||||
msg_success=_("Document '{}' deleted").format(title)
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def remove_deadline_view(request: HttpRequest, id:str):
|
||||
""" Renders a modal form for removing a deadline object
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
id (str): The deadline id
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
deadline = get_object_or_404(Deadline, id=id)
|
||||
form = RemoveModalForm(request.POST or None, instance=deadline, user=request.user)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=_("Deadline removed")
|
||||
)
|
Binary file not shown.
@ -3,17 +3,18 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#: compensation/forms.py:29 compensation/forms.py:34 compensation/forms.py:47
|
||||
#: intervention/filters.py:26 intervention/filters.py:40
|
||||
#: intervention/filters.py:47 intervention/filters.py:48 konova/forms.py:85
|
||||
#: konova/forms.py:177 konova/forms.py:248 konova/forms.py:253
|
||||
#: konova/forms.py:265 konova/forms.py:276 konova/forms.py:289 user/forms.py:38
|
||||
#: compensation/forms.py:34 compensation/forms.py:39 compensation/forms.py:52
|
||||
#: compensation/forms.py:138 intervention/filters.py:26
|
||||
#: intervention/filters.py:40 intervention/filters.py:47
|
||||
#: intervention/filters.py:48 konova/forms.py:85 konova/forms.py:216
|
||||
#: konova/forms.py:249 konova/forms.py:254 konova/forms.py:266
|
||||
#: konova/forms.py:277 konova/forms.py:290 user/forms.py:38
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-08-03 09:19+0200\n"
|
||||
"POT-Creation-Date: 2021-08-03 12:54+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -23,40 +24,103 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: compensation/forms.py:28
|
||||
#: compensation/forms.py:33
|
||||
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:33
|
||||
msgid "Amount"
|
||||
msgstr "Menge"
|
||||
|
||||
#: compensation/forms.py:30
|
||||
#: compensation/forms.py:35
|
||||
msgid "Amount in Euro"
|
||||
msgstr "Betrag in Euro"
|
||||
|
||||
#: compensation/forms.py:33
|
||||
#: compensation/forms.py:38
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:31
|
||||
msgid "Due on"
|
||||
msgstr "Fällig am"
|
||||
|
||||
#: compensation/forms.py:35
|
||||
#: compensation/forms.py:40
|
||||
msgid "Due on which date"
|
||||
msgstr "Zahlung wird an diesem Datum erwartet"
|
||||
|
||||
#: compensation/forms.py:48
|
||||
#: compensation/forms.py:53
|
||||
msgid "Transfer note"
|
||||
msgstr "Verwendungszweck"
|
||||
|
||||
#: compensation/forms.py:49
|
||||
#: compensation/forms.py:54
|
||||
msgid "Note for money transfer"
|
||||
msgstr "Verwendungszweck für Überweisung"
|
||||
|
||||
#: compensation/forms.py:56
|
||||
#: compensation/forms.py:61
|
||||
msgid "Payment"
|
||||
msgstr "Zahlung"
|
||||
|
||||
#: compensation/forms.py:57
|
||||
#: compensation/forms.py:62
|
||||
msgid "Add a payment for intervention '{}'"
|
||||
msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen"
|
||||
|
||||
#: compensation/forms.py:82
|
||||
msgid "Biotope Type"
|
||||
msgstr "Biotoptyp"
|
||||
|
||||
#: compensation/forms.py:85
|
||||
msgid "Select the biotope type"
|
||||
msgstr "Biotoptyp wählen"
|
||||
|
||||
#: compensation/forms.py:90
|
||||
#: compensation/templates/compensation/detail/includes/states-after.html:31
|
||||
#: compensation/templates/compensation/detail/includes/states-before.html:31
|
||||
msgid "Surface"
|
||||
msgstr "Fläche"
|
||||
|
||||
#: compensation/forms.py:93
|
||||
msgid "in m²"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/forms.py:98
|
||||
msgid "New state"
|
||||
msgstr "Neuer Zustand"
|
||||
|
||||
#: compensation/forms.py:99
|
||||
msgid "Insert data for the new state"
|
||||
msgstr "Geben Sie die Daten des neuen Zustandes ein"
|
||||
|
||||
#: compensation/forms.py:116
|
||||
msgid "Deadline Type"
|
||||
msgstr "Fristart"
|
||||
|
||||
#: compensation/forms.py:119
|
||||
msgid "Select the deadline type"
|
||||
msgstr "Fristart wählen"
|
||||
|
||||
#: compensation/forms.py:123
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:31
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#: compensation/forms.py:126
|
||||
msgid "Select date"
|
||||
msgstr "Datum wählen"
|
||||
|
||||
#: compensation/forms.py:137
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:34
|
||||
#: compensation/templates/compensation/detail/includes/documents.html:31
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:31
|
||||
#: konova/forms.py:276
|
||||
msgid "Comment"
|
||||
msgstr "Kommentar"
|
||||
|
||||
#: compensation/forms.py:139
|
||||
msgid "Additional comment"
|
||||
msgstr "Zusätzlicher Kommentar"
|
||||
|
||||
#: compensation/forms.py:150
|
||||
msgid "New deadline"
|
||||
msgstr "Neue Frist"
|
||||
|
||||
#: compensation/forms.py:151
|
||||
msgid "Insert data for the new deadline"
|
||||
msgstr "Geben Sie die Daten der neuen Frist ein"
|
||||
|
||||
#: compensation/tables.py:24 compensation/tables.py:164
|
||||
#: intervention/forms.py:29 intervention/tables.py:23
|
||||
#: intervention/templates/intervention/detail/includes/compensations.html:30
|
||||
@ -64,19 +128,25 @@ msgid "Identifier"
|
||||
msgstr "Kennung"
|
||||
|
||||
#: compensation/tables.py:29 compensation/tables.py:169
|
||||
#: compensation/templates/compensation/detail/includes/documents.html:28
|
||||
#: compensation/templates/compensation/detail/view.html:47
|
||||
#: intervention/forms.py:36 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:64 konova/forms.py:247
|
||||
#: intervention/templates/intervention/detail/view.html:64 konova/forms.py:248
|
||||
msgid "Title"
|
||||
msgstr "Bezeichnung"
|
||||
|
||||
#: compensation/tables.py:34 intervention/tables.py:33
|
||||
#: compensation/tables.py:34
|
||||
#: compensation/templates/compensation/detail/view.html:59
|
||||
#: intervention/tables.py:33
|
||||
#: intervention/templates/intervention/detail/view.html:96
|
||||
msgid "Checked"
|
||||
msgstr "Geprüft"
|
||||
|
||||
#: compensation/tables.py:40 intervention/tables.py:39
|
||||
#: compensation/tables.py:40
|
||||
#: compensation/templates/compensation/detail/view.html:73
|
||||
#: intervention/tables.py:39
|
||||
#: intervention/templates/intervention/detail/view.html:110
|
||||
msgid "Recorded"
|
||||
msgstr "Verzeichnet"
|
||||
@ -100,6 +170,7 @@ msgid "Open {}"
|
||||
msgstr "Öffne {}"
|
||||
|
||||
#: compensation/tables.py:83 compensation/tables.py:197
|
||||
#: compensation/templates/compensation/detail/view.html:12
|
||||
#: konova/templates/konova/home.html:49 templates/navbar.html:28
|
||||
msgid "Compensation"
|
||||
msgstr "Kompensation"
|
||||
@ -112,12 +183,15 @@ msgstr "Noch nicht geprüft"
|
||||
msgid "Checked on {} by {}"
|
||||
msgstr "Am {} von {} geprüft worden"
|
||||
|
||||
#: compensation/tables.py:128 intervention/tables.py:135
|
||||
msgid "Not registered yet"
|
||||
#: compensation/tables.py:128
|
||||
#: compensation/templates/compensation/detail/view.html:76
|
||||
#: intervention/tables.py:135
|
||||
#: intervention/templates/intervention/detail/view.html:113
|
||||
msgid "Not recorded yet"
|
||||
msgstr "Noch nicht verzeichnet"
|
||||
|
||||
#: compensation/tables.py:133 intervention/tables.py:140
|
||||
msgid "Registered on {} by {}"
|
||||
msgid "Recorded on {} by {}"
|
||||
msgstr "Am {} von {} verzeichnet worden"
|
||||
|
||||
#: compensation/tables.py:156 intervention/tables.py:163
|
||||
@ -128,7 +202,7 @@ msgstr "Für Sie freigegeben - Datensatz kann bearbeitet werden"
|
||||
msgid "Access not granted"
|
||||
msgstr "Nicht freigegeben - Datensatz nur lesbar"
|
||||
|
||||
#: compensation/tables.py:174 konova/forms.py:252
|
||||
#: compensation/tables.py:174 konova/forms.py:253
|
||||
msgid "Created on"
|
||||
msgstr "Erstellt"
|
||||
|
||||
@ -148,22 +222,172 @@ msgstr "Bearbeite {}"
|
||||
msgid "Delete {}"
|
||||
msgstr "Lösche {}"
|
||||
|
||||
#: compensation/views.py:79
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:8
|
||||
msgid "Deadlines"
|
||||
msgstr "Termine und Fristen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:14
|
||||
msgid "Add new deadline"
|
||||
msgstr "Neue Frist hinzufügen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:28
|
||||
#: intervention/forms.py:41
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:37
|
||||
#: compensation/templates/compensation/detail/includes/documents.html:34
|
||||
#: compensation/templates/compensation/detail/includes/states-after.html:34
|
||||
#: compensation/templates/compensation/detail/includes/states-before.html:34
|
||||
#: intervention/templates/intervention/detail/includes/compensations.html:36
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:34
|
||||
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:36
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:37
|
||||
msgid "Action"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:51
|
||||
msgid "Remove deadline"
|
||||
msgstr "Frist löschen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/deadlines.html:62
|
||||
#: compensation/templates/compensation/detail/includes/states-after.html:58
|
||||
#: compensation/templates/compensation/detail/includes/states-before.html:58
|
||||
msgid "Missing surfaces: "
|
||||
msgstr "Fehlende Flächen: "
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/documents.html:8
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:8
|
||||
msgid "Documents"
|
||||
msgstr "Dokumente"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/documents.html:14
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:14
|
||||
#: konova/forms.py:289
|
||||
msgid "Add new document"
|
||||
msgstr "Neues Dokument hinzufügen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/documents.html:49
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:49
|
||||
msgid "Remove document"
|
||||
msgstr "Dokument löschen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/states-after.html:8
|
||||
msgid "States after"
|
||||
msgstr "Zielzustand"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/states-after.html:14
|
||||
msgid "Add new state after"
|
||||
msgstr "Neuen Zielzustand hinzufügen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/states-after.html:28
|
||||
#: compensation/templates/compensation/detail/includes/states-before.html:28
|
||||
msgid "Biotope type"
|
||||
msgstr "Biotoptyp"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/states-after.html:47
|
||||
#: compensation/templates/compensation/detail/includes/states-before.html:47
|
||||
msgid "Remove state"
|
||||
msgstr "Zustand entfernen"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/states-before.html:8
|
||||
msgid "States before"
|
||||
msgstr "Ausgangszustand"
|
||||
|
||||
#: compensation/templates/compensation/detail/includes/states-before.html:14
|
||||
msgid "Add new state before"
|
||||
msgstr "Neuen Ausgangszustand hinzufügen"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:17
|
||||
#: intervention/templates/intervention/detail/view.html:17
|
||||
msgid "Open in LANIS"
|
||||
msgstr "In LANIS öffnen"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:22
|
||||
#: intervention/templates/intervention/detail/view.html:22
|
||||
msgid "Public report"
|
||||
msgstr "Öffentlicher Bericht"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:29
|
||||
#: intervention/templates/intervention/detail/view.html:46
|
||||
msgid "Edit"
|
||||
msgstr "Bearbeiten"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:33
|
||||
#: intervention/templates/intervention/detail/view.html:50
|
||||
#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:51
|
||||
msgid "compensates intervention"
|
||||
msgstr "kompensiert Eingriff"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:66
|
||||
#: intervention/templates/intervention/detail/view.html:103
|
||||
msgid "Checked on "
|
||||
msgstr "Geprüft am "
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:66
|
||||
#: compensation/templates/compensation/detail/view.html:80
|
||||
#: intervention/templates/intervention/detail/view.html:103
|
||||
#: intervention/templates/intervention/detail/view.html:117
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:80
|
||||
#: intervention/templates/intervention/detail/view.html:117
|
||||
msgid "Recorded on "
|
||||
msgstr "Verzeichnet am"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:87
|
||||
#: intervention/templates/intervention/detail/view.html:132
|
||||
msgid "Last modified"
|
||||
msgstr "Zuletzt bearbeitet"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:97
|
||||
#: intervention/forms.py:257
|
||||
#: intervention/templates/intervention/detail/view.html:142
|
||||
msgid "Shared with"
|
||||
msgstr "Freigegeben für"
|
||||
|
||||
#: compensation/templates/compensation/detail/view.html:109
|
||||
#: intervention/templates/intervention/detail/view.html:154
|
||||
msgid "No geometry added, yet."
|
||||
msgstr "Keine Geometrie vorhanden"
|
||||
|
||||
#: compensation/views.py:115
|
||||
msgid "Compensation removed"
|
||||
msgstr "Kompensation entfernt"
|
||||
|
||||
#: compensation/views.py:156
|
||||
#: compensation/views.py:195
|
||||
msgid "Payment added"
|
||||
msgstr "Zahlung hinzugefügt"
|
||||
|
||||
#: compensation/views.py:191
|
||||
#: compensation/views.py:230
|
||||
msgid "Payment removed"
|
||||
msgstr "Zahlung gelöscht"
|
||||
|
||||
#: compensation/views.py:217
|
||||
#: compensation/views.py:256
|
||||
msgid "Withdraw removed"
|
||||
msgstr "Abbuchung entfernt"
|
||||
|
||||
#: compensation/views.py:274
|
||||
msgid "Document added"
|
||||
msgstr "Dokument hinzugefügt"
|
||||
|
||||
#: compensation/views.py:293
|
||||
msgid "State added"
|
||||
msgstr "Zustand hinzugefügt"
|
||||
|
||||
#: compensation/views.py:312
|
||||
msgid "Deadline added"
|
||||
msgstr "Frist hinzugefügt"
|
||||
|
||||
#: compensation/views.py:322
|
||||
msgid "State removed"
|
||||
msgstr "Zustand gelöscht"
|
||||
|
||||
#: intervention/filters.py:25
|
||||
msgid "Show unshared"
|
||||
msgstr "Nicht freigegebene anzeigen"
|
||||
@ -184,10 +408,6 @@ msgstr "Nach Gemarkung suchen"
|
||||
msgid "Generated automatically if none was given"
|
||||
msgstr "Wird automatisch erzeugt, falls nicht angegeben"
|
||||
|
||||
#: intervention/forms.py:41
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
#: intervention/forms.py:44
|
||||
msgid "Which intervention type is this"
|
||||
msgstr "Welcher Eingriffstyp"
|
||||
@ -258,11 +478,6 @@ msgstr "Freigabelink"
|
||||
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:257
|
||||
#: intervention/templates/intervention/detail/view.html:142
|
||||
msgid "Shared with"
|
||||
msgstr "Freigegeben für"
|
||||
|
||||
#: intervention/forms.py:260
|
||||
msgid "Remove check to remove access for this user"
|
||||
msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen"
|
||||
@ -290,35 +505,10 @@ msgstr "Eingriff"
|
||||
msgid "Add new compensation"
|
||||
msgstr "Neue Kompensation hinzufügen"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/compensations.html:36
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:34
|
||||
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:36
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:37
|
||||
msgid "Action"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/compensations.html:51
|
||||
msgid "Remove compensation"
|
||||
msgstr "Kompensation entfernen"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:8
|
||||
msgid "Documents"
|
||||
msgstr "Dokumente"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:14
|
||||
#: konova/forms.py:288
|
||||
msgid "Add new document"
|
||||
msgstr "Neues Dokument hinzufügen"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:31
|
||||
#: konova/forms.py:275
|
||||
msgid "Comment"
|
||||
msgstr "Kommentar"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:49
|
||||
msgid "Remove document"
|
||||
msgstr "Dokument löschen"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:8
|
||||
msgid "Eco Account Withdraws"
|
||||
msgstr "Ökokonto Abbuchungen"
|
||||
@ -352,18 +542,10 @@ msgstr "Betrag"
|
||||
msgid "Transfer comment"
|
||||
msgstr "Verwendungszweck"
|
||||
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:53
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:51
|
||||
msgid "Remove payment"
|
||||
msgstr "Zahlung entfernen"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:17
|
||||
msgid "Open in LANIS"
|
||||
msgstr "In LANIS öffnen"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:22
|
||||
msgid "Public report"
|
||||
msgstr "Öffentlicher Bericht"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:32
|
||||
msgid "Run check"
|
||||
msgstr "Prüfung vornehmen"
|
||||
@ -372,15 +554,6 @@ msgstr "Prüfung vornehmen"
|
||||
msgid "Record"
|
||||
msgstr "Verzeichnen"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:46
|
||||
msgid "Edit"
|
||||
msgstr "Bearbeiten"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:50
|
||||
#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:68
|
||||
msgid "Process type"
|
||||
msgstr "Verfahrenstyp"
|
||||
@ -401,19 +574,6 @@ msgstr "Naturschutzbehörde"
|
||||
msgid "Conversation office file number"
|
||||
msgstr "Aktenzeichen Naturschutzbehörde"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:103
|
||||
msgid "Checked on "
|
||||
msgstr "Geprüft am "
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:103
|
||||
#: intervention/templates/intervention/detail/view.html:117
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:117
|
||||
msgid "Recorded on "
|
||||
msgstr "Verzeichnet am"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:124
|
||||
msgid "Registration date"
|
||||
msgstr "Datum Zulassung bzw. Satzungsbeschluss"
|
||||
@ -422,27 +582,15 @@ msgstr "Datum Zulassung bzw. Satzungsbeschluss"
|
||||
msgid "Binding on"
|
||||
msgstr "Datum Bestandskraft"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:132
|
||||
msgid "Last modified"
|
||||
msgstr "Zuletzt bearbeitet"
|
||||
|
||||
#: intervention/templates/intervention/detail/view.html:154
|
||||
msgid "No geometry added, yet."
|
||||
msgstr "Keine Geometrie vorhanden"
|
||||
|
||||
#: intervention/views.py:65
|
||||
msgid "Intervention {} added"
|
||||
msgstr "Eingriff {} hinzugefügt"
|
||||
|
||||
#: intervention/views.py:68 intervention/views.py:179
|
||||
#: intervention/views.py:68 intervention/views.py:157
|
||||
msgid "Invalid input"
|
||||
msgstr "Eingabe fehlerhaft"
|
||||
|
||||
#: intervention/views.py:97
|
||||
msgid "Document '{}' added"
|
||||
msgstr "Dokument '{}' hinzugefügt"
|
||||
|
||||
#: intervention/views.py:153
|
||||
#: intervention/views.py:131
|
||||
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 "
|
||||
@ -452,29 +600,27 @@ msgstr ""
|
||||
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
|
||||
"noch Prüfungen durchführen oder verzeichnen können."
|
||||
|
||||
#: intervention/views.py:176
|
||||
#: intervention/views.py:154
|
||||
msgid "{} edited"
|
||||
msgstr "{} bearbeitet"
|
||||
|
||||
#: intervention/views.py:205
|
||||
#, fuzzy
|
||||
#| msgid "Object removed"
|
||||
#: intervention/views.py:183
|
||||
msgid "{} removed"
|
||||
msgstr "Objekt entfernt"
|
||||
msgstr "{} entfernt"
|
||||
|
||||
#: intervention/views.py:232
|
||||
#: intervention/views.py:210
|
||||
msgid "{} has already been shared with you"
|
||||
msgstr "{} wurde bereits für Sie freigegeben"
|
||||
|
||||
#: intervention/views.py:237
|
||||
#: intervention/views.py:215
|
||||
msgid "{} has been shared with you"
|
||||
msgstr "{} ist nun für Sie freigegeben"
|
||||
|
||||
#: intervention/views.py:244
|
||||
#: intervention/views.py:222
|
||||
msgid "Share link invalid"
|
||||
msgstr "Freigabelink ungültig"
|
||||
|
||||
#: intervention/views.py:268
|
||||
#: intervention/views.py:246
|
||||
msgid "Share settings updated"
|
||||
msgstr "Freigabe Einstellungen aktualisiert"
|
||||
|
||||
@ -486,7 +632,16 @@ msgstr "Hierfür müssen Sie Mitarbeiter sein!"
|
||||
msgid "You need to be administrator to perform this action!"
|
||||
msgstr "Hierfür müssen Sie Administrator sein!"
|
||||
|
||||
#: konova/decorators.py:64 konova/decorators.py:84 konova/decorators.py:104
|
||||
#: konova/decorators.py:62
|
||||
msgid ""
|
||||
"+++ Attention: You are not part of any group. You won't be able to create, "
|
||||
"edit or do anything. Please contact an administrator. +++"
|
||||
msgstr ""
|
||||
"+++ Achtung: Ihr Account ist keiner Rechtegruppe zugewiesen. Sie können "
|
||||
"somit nichts eingeben, bearbeiten oder sonstige Aktionen ausführen. "
|
||||
"Kontaktieren Sie bitte einen Administrator. +++"
|
||||
|
||||
#: konova/decorators.py:83 konova/decorators.py:103 konova/decorators.py:123
|
||||
msgid "You need to be part of another user group."
|
||||
msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
|
||||
|
||||
@ -494,11 +649,11 @@ msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
|
||||
msgid "Not editable"
|
||||
msgstr "Nicht editierbar"
|
||||
|
||||
#: konova/forms.py:84 konova/forms.py:176
|
||||
#: konova/forms.py:84 konova/forms.py:215
|
||||
msgid "Confirm"
|
||||
msgstr "Bestätige"
|
||||
|
||||
#: konova/forms.py:96 konova/forms.py:185
|
||||
#: konova/forms.py:96 konova/forms.py:224
|
||||
msgid "Remove"
|
||||
msgstr "Löschen"
|
||||
|
||||
@ -506,28 +661,28 @@ msgstr "Löschen"
|
||||
msgid "You are about to remove {} {}"
|
||||
msgstr "Sie sind dabei {} {} zu löschen"
|
||||
|
||||
#: konova/forms.py:186
|
||||
msgid "Are you sure?"
|
||||
msgstr "Sind Sie sicher?"
|
||||
|
||||
#: konova/forms.py:203
|
||||
#: konova/forms.py:137
|
||||
msgid "Object removed"
|
||||
msgstr "Objekt entfernt"
|
||||
|
||||
#: konova/forms.py:254
|
||||
#: konova/forms.py:225
|
||||
msgid "Are you sure?"
|
||||
msgstr "Sind Sie sicher?"
|
||||
|
||||
#: konova/forms.py:255
|
||||
msgid "When has this file been created? Important for photos."
|
||||
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
|
||||
|
||||
#: konova/forms.py:264
|
||||
#: konova/forms.py:265
|
||||
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
|
||||
msgid "File"
|
||||
msgstr "Datei"
|
||||
|
||||
#: konova/forms.py:266
|
||||
#: konova/forms.py:267
|
||||
msgid "Must be smaller than 15 Mb"
|
||||
msgstr "Muss kleiner als 15 Mb sein"
|
||||
|
||||
#: konova/forms.py:277
|
||||
#: konova/forms.py:278
|
||||
msgid "Additional comment on this file"
|
||||
msgstr "Zusätzlicher Kommentar"
|
||||
|
||||
@ -555,6 +710,22 @@ msgstr "Wenn meine freigegebenen Daten gelöscht wurden"
|
||||
msgid "On registered data edited"
|
||||
msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
|
||||
|
||||
#: konova/models.py:62
|
||||
msgid "Finished"
|
||||
msgstr "Umgesetzt bis"
|
||||
|
||||
#: konova/models.py:63
|
||||
msgid "Maintain"
|
||||
msgstr "Unterhaltung bis"
|
||||
|
||||
#: konova/models.py:64
|
||||
msgid "Control"
|
||||
msgstr "Kontrolle am"
|
||||
|
||||
#: konova/models.py:65
|
||||
msgid "Other"
|
||||
msgstr "Sonstige"
|
||||
|
||||
#: konova/templates/konova/custom_widgets/text-to-clipboard-input.html:6
|
||||
msgid "Copy to clipboard"
|
||||
msgstr "In Zwischenablage kopieren"
|
||||
@ -595,18 +766,14 @@ msgstr "Abbuchen"
|
||||
msgid "There was an error on this form."
|
||||
msgstr "Es gab einen Fehler im Formular."
|
||||
|
||||
#: konova/views.py:58
|
||||
msgid ""
|
||||
"+++ Attention: You are not part of any group. You won't be able to create, "
|
||||
"edit or do anything. Please contact an administrator. +++"
|
||||
msgstr ""
|
||||
"+++ Achtung: Ihr Account ist keiner Rechtegruppe zugewiesen. Sie können somit nichts eingeben, "
|
||||
"bearbeiten oder sonstige Aktionen ausführen. Kontaktieren Sie bitte einen Administrator. +++"
|
||||
|
||||
#: konova/views.py:147
|
||||
#: konova/views.py:142
|
||||
msgid "Document '{}' deleted"
|
||||
msgstr "Dokument '{}' gelöscht"
|
||||
|
||||
#: konova/views.py:161
|
||||
msgid "Deadline removed"
|
||||
msgstr "Frist gelöscht"
|
||||
|
||||
#: news/templates/news/dashboard-news.html:12 news/templates/news/index.html:19
|
||||
msgid "Published on"
|
||||
msgstr "Veröffentlicht am"
|
||||
@ -792,7 +959,7 @@ msgstr "Benachrichtigungseinstellungen ändern"
|
||||
msgid "Notification settings"
|
||||
msgstr "Benachrichtigungen"
|
||||
|
||||
#: user/views.py:53
|
||||
#: user/views.py:56
|
||||
msgid "Notifications edited"
|
||||
msgstr "Benachrichtigungen bearbeitet"
|
||||
|
||||
@ -2004,9 +2171,6 @@ msgstr ""
|
||||
#~ msgid "Last login on"
|
||||
#~ msgstr "Zuletzt eingeloggt am"
|
||||
|
||||
#~ msgid "Delete intervention"
|
||||
#~ msgstr "Eingriff löschen"
|
||||
|
||||
#~ msgid "Delete compensation"
|
||||
#~ msgstr "Kompensation löschen"
|
||||
|
||||
@ -2070,9 +2234,6 @@ msgstr ""
|
||||
#~ msgid "Show actions"
|
||||
#~ msgstr "Zeige Maßnahmen"
|
||||
|
||||
#~ msgid "New action"
|
||||
#~ msgstr "Neue Maßnahme"
|
||||
|
||||
#~ msgid "You are currently working as "
|
||||
#~ msgstr "Sie arbeiten gerade als "
|
||||
|
||||
@ -2178,8 +2339,5 @@ msgstr ""
|
||||
#~ msgid "Registration office document identifier"
|
||||
#~ msgstr "Aktenzeichen Eintragungsstelle"
|
||||
|
||||
#~ msgid "Date"
|
||||
#~ msgstr "Datum"
|
||||
|
||||
#~ msgid "You have been logged out"
|
||||
#~ msgstr "Sie wurden ausgeloggt"
|
||||
|
Loading…
Reference in New Issue
Block a user