Compare commits

...

4 Commits

Author SHA1 Message Date
mipel
58510eee50 EcoAccount template and logic
* adds eco-account own includes for simpler maintainability instead of refactoring to generic includes for compensation app and predefining urls and stuff on the backend
* adds before-state, after-state, actions, deadlines, documents and withdraws to eco account detail view
* adds hint for invalid withdraw in intervention detail view in case of deleted eco account
* adds/updates translations
2021-08-09 15:09:43 +02:00
mipel
abdc574ea2 EcoAccount detail
* adds detail view for eco account
* adds withdraw detail view to eco acount detail
* generalizes compensation/includes templates to be reusable for eco-accounts
* moves is_shared_with() check to class BaseObject
* adds/updates translations
2021-08-09 14:39:36 +02:00
mipel
93c02a72ca EcoAccount index
* renames eco_withdraws to withdraws
* adds EcoAccountTableFilter
* changes percentage withdraw to surface withdraw --> renames amount to surface
* updates EcoAccountTable
  * adds column for rendering rest of available account using a progress bar
* adds progressbar.html to konova/custom_widgets
* adds/updates translations
2021-08-09 14:16:54 +02:00
mipel
a7aeecde2e Restructure files
* reduce compensation/views.py file size by splitting into three sub view files in compensation/views/xy_views.py for compensation, eco-account and payment
* restructure urlpattern list by splitting into three smaller lists for a better overview and maintainability
2021-08-09 13:16:50 +02:00
30 changed files with 1376 additions and 419 deletions

View File

@ -52,7 +52,7 @@ class EcoAccountWithdrawAdmin(admin.ModelAdmin):
"id", "id",
"account", "account",
"intervention", "intervention",
"amount", "surface",
] ]

View File

@ -53,3 +53,48 @@ class CompensationTableFilter(InterventionTableFilter):
) )
else: else:
return queryset return queryset
class EcoAccountTableFilter(InterventionTableFilter):
""" TableFilter for eco accounts
Based widely on InterventionTableFilter.
Just some minor changes for EcoAccount model.
"""
def _filter_show_all(self, queryset, name, value) -> QuerySet:
""" Filters queryset depending on value of 'show_all' setting
Args:
queryset ():
name ():
value ():
Returns:
"""
if not value:
return queryset.filter(
users__in=[self.user], # requesting user has access
)
else:
return queryset
def _filter_show_recorded(self, queryset, name, value) -> QuerySet:
""" Filters queryset depending on value of 'show_recorded' setting
Args:
queryset ():
name ():
value ():
Returns:
"""
if not value:
return queryset.filter(
recorded=None,
)
else:
return queryset

View File

@ -17,7 +17,7 @@ from compensation.settings import COMPENSATION_IDENTIFIER_LENGTH, COMPENSATION_I
from intervention.models import Intervention, ResponsibilityData from intervention.models import Intervention, ResponsibilityData
from konova.models import BaseObject, BaseResource, Geometry, UuidModel from konova.models import BaseObject, BaseResource, Geometry, UuidModel
from konova.utils.generators import generate_random_string from konova.utils.generators import generate_random_string
from user.models import UserActionLogEntry, UserAction from user.models import UserActionLogEntry
class Payment(BaseResource): class Payment(BaseResource):
@ -175,6 +175,16 @@ class EcoAccount(AbstractCompensation):
help_text="Users having access (shared with)" help_text="Users having access (shared with)"
) )
# Refers to "verzeichnen"
recorded = models.OneToOneField(
UserActionLogEntry,
on_delete=models.SET_NULL,
null=True,
blank=True,
help_text="Holds data on user and timestamp of this action",
related_name="+"
)
def __str__(self): def __str__(self):
return "{}".format(self.identifier) return "{}".format(self.identifier)
@ -189,15 +199,14 @@ class EcoAccountWithdraw(BaseResource):
null=True, null=True,
blank=True, blank=True,
help_text="Withdrawn from", help_text="Withdrawn from",
related_name="eco_withdraws", related_name="withdraws",
) )
amount = models.FloatField( surface = models.FloatField(
null=True, null=True,
blank=True, blank=True,
help_text="Amount withdrawn (percentage)", help_text="Amount withdrawn ()",
validators=[ validators=[
MinValueValidator(limit_value=0.00), MinValueValidator(limit_value=0.00),
MaxValueValidator(limit_value=100),
] ]
) )
intervention = models.ForeignKey( intervention = models.ForeignKey(
@ -206,8 +215,8 @@ class EcoAccountWithdraw(BaseResource):
null=True, null=True,
blank=True, blank=True,
help_text="Withdrawn for", help_text="Withdrawn for",
related_name="eco_withdraws", related_name="withdraws",
) )
def __str__(self): def __str__(self):
return "{} of {}".format(self.amount, self.account) return "{} of {}".format(self.surface, self.account)

View File

@ -5,14 +5,16 @@ Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 01.12.20 Created on: 01.12.20
""" """
from django.db.models import Sum
from django.http import HttpRequest from django.http import HttpRequest
from django.template.loader import render_to_string
from django.urls import reverse from django.urls import reverse
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.timezone import localtime from django.utils.timezone import localtime
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from compensation.filters import CompensationTableFilter from compensation.filters import CompensationTableFilter, EcoAccountTableFilter
from compensation.models import Compensation from compensation.models import Compensation, EcoAccount
from intervention.filters import InterventionTableFilter from intervention.filters import InterventionTableFilter
from konova.sub_settings.django_settings import DEFAULT_DATE_TIME_FORMAT from konova.sub_settings.django_settings import DEFAULT_DATE_TIME_FORMAT
from konova.utils.tables import BaseTable from konova.utils.tables import BaseTable
@ -57,7 +59,7 @@ class CompensationTable(BaseTable):
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
template_name = "django_tables2/bootstrap4.html" template_name = "django_tables2/bootstrap4.html"
def __init__(self, request:HttpRequest, *args, **kwargs): def __init__(self, request: HttpRequest, *args, **kwargs):
self.title = _("Compensations") self.title = _("Compensations")
self.add_new_url = reverse("compensation:new") self.add_new_url = reverse("compensation:new")
qs = kwargs.get("queryset", None) qs = kwargs.get("queryset", None)
@ -170,43 +172,120 @@ class EcoAccountTable(BaseTable):
orderable=True, orderable=True,
accessor="title", accessor="title",
) )
d = tables.Column( av = tables.Column(
verbose_name=_("Created on"), verbose_name=_("Available"),
orderable=True,
empty_values=[],
)
r = tables.Column(
verbose_name=_("Recorded"),
orderable=True,
empty_values=[],
accessor="recorded",
)
e = tables.Column(
verbose_name=_("Editable"),
orderable=True,
empty_values=[],
accessor="users",
)
lm = tables.Column(
verbose_name=_("Last edit"),
orderable=True, orderable=True,
accessor="created__timestamp", accessor="created__timestamp",
) )
ac = tables.Column(
verbose_name=_("Actions"),
orderable=False,
empty_values=[],
attrs={"td": {"class": "action-col"}}
)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
pass template_name = "django_tables2/bootstrap4.html"
def __init__(self, *args, **kwargs): def __init__(self, request: HttpRequest, *args, **kwargs):
super().__init__(*args, **kwargs)
self.title = _("Eco Accounts") self.title = _("Eco Accounts")
self.add_new_url = reverse("compensation:acc-new") self.add_new_url = reverse("compensation:acc-new")
qs = kwargs.get("queryset", None)
self.filter = EcoAccountTableFilter(
user=request.user,
data=request.GET,
queryset=qs,
)
super().__init__(request, self.filter, *args, **kwargs)
def render_id(self, value, record: EcoAccount):
""" Renders the id column for an eco account
Args:
value (str): The identifier value
record (EcoAccount): The eco account record
Returns:
def render_ac(self, value, record):
""" """
Renders possible actions for this record, such as delete.
"""
intervention = _("Compensation")
html = "" html = ""
html += self.render_open_btn( html += self.render_link(
_("Open {}").format(intervention), tooltip=_("Open {}").format(_("Eco-account")),
reverse("compensation:open", args=(record.id,)), href=reverse("compensation:acc-open", args=(record.id,)),
new_tab=True txt=value,
) new_tab=False,
html += self.render_edit_btn( )
_("Edit {}").format(intervention), return format_html(html)
reverse("compensation:edit", args=(record.id,)),
) def render_av(self, value, record: EcoAccount):
html += self.render_delete_btn( """ Renders the available column for an eco account
_("Delete {}").format(intervention),
reverse("compensation:remove", args=(record.id,)), Args:
value (str): The identifier value
record (EcoAccount): The eco account record
Returns:
"""
withdraws = record.withdraws.all()
withdraw_surfaces = withdraws.aggregate(Sum("surface"))["surface__sum"] or 0
after_states_surfaces = record.after_states.all().aggregate(Sum("surface"))["surface__sum"] or withdraw_surfaces ## no division by zero
value = int(((after_states_surfaces - withdraw_surfaces) / after_states_surfaces) * 100)
html = render_to_string("konova/custom_widgets/progressbar.html", {"value": value})
return format_html(html)
def render_r(self, value, record: EcoAccount):
""" Renders the registered column for an eco account
Args:
value (str): The identifier value
record (EcoAccount): The eco account record
Returns:
"""
html = ""
checked = value is not None
tooltip = _("Not recorded yet. Can not be used for withdraws, yet.")
if checked:
value = value.timestamp
value = localtime(value)
on = value.strftime(DEFAULT_DATE_TIME_FORMAT)
tooltip = _("Recorded on {} by {}").format(on, record.recorded.user)
html += self.render_bookmark(
tooltip=tooltip,
icn_filled=checked,
)
return format_html(html)
def render_e(self, value, record: EcoAccount):
""" Renders the registered column for an eco account
Args:
value (str): The identifier value
record (EcoAccount): The eco account record
Returns:
"""
html = ""
has_access = value.filter(
username=self.user.username
).exists()
html += self.render_icn(
tooltip=_("Full access granted") if has_access else _("Access not granted"),
icn_class="fas fa-edit rlp-r-inv" if has_access else "far fa-edit",
) )
return format_html(html) return format_html(html)

View File

@ -4,14 +4,14 @@
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<h5> <h5>
<span class="badge badge-light">{{comp.actions.count}}</span> <span class="badge badge-light">{{obj.actions.count}}</span>
{% trans 'Actions' context 'Compensation' %} {% trans 'Actions' context 'Compensation' %}
</h5> </h5>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
{% if is_default_member and has_access %} {% if is_default_member and has_access %}
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-action' comp.id %}" title="{% trans 'Add new action' %}"> <button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-action' obj.id %}" title="{% trans 'Add new action' %}">
{% fa5_icon 'plus' %} {% fa5_icon 'plus' %}
{% fa5_icon 'seedling' %} {% fa5_icon 'seedling' %}
</button> </button>
@ -39,7 +39,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for action in comp.actions.all %} {% for action in obj.actions.all %}
<tr> <tr>
<td class="align-middle"> <td class="align-middle">
{{ action.action_type }} {{ action.action_type }}

View File

@ -18,10 +18,10 @@
{% fa5_icon 'edit' %} {% fa5_icon 'edit' %}
</button> </button>
</a> </a>
<button class="btn btn-default btn-modal mr-2" data-form-url="{% url 'compensation:log' comp.id %}" title="{% trans 'Show log' %}"> <button class="btn btn-default btn-modal mr-2" data-form-url="{% url 'compensation:log' obj.id %}" title="{% trans 'Show log' %}">
{% fa5_icon 'history' %} {% fa5_icon 'history' %}
</button> </button>
<button class="btn btn-default btn-modal" data-form-url="{% url 'compensation:remove' comp.id %}" title="{% trans 'Delete' %}"> <button class="btn btn-default btn-modal" data-form-url="{% url 'compensation:remove' obj.id %}" title="{% trans 'Delete' %}">
{% fa5_icon 'trash' %} {% fa5_icon 'trash' %}
</button> </button>
{% endif %} {% endif %}

View File

@ -4,14 +4,14 @@
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<h5> <h5>
<span class="badge badge-light">{{comp.deadlines.count}}</span> <span class="badge badge-light">{{obj.deadlines.count}}</span>
{% trans 'Deadlines' %} {% trans 'Deadlines' %}
</h5> </h5>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
{% if is_default_member and has_access %} {% 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' %}"> <button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-deadline' obj.id %}" title="{% trans 'Add new deadline' %}">
{% fa5_icon 'plus' %} {% fa5_icon 'plus' %}
{% fa5_icon 'calendar-check' %} {% fa5_icon 'calendar-check' %}
</button> </button>
@ -39,7 +39,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for deadline in comp.deadlines.all %} {% for deadline in obj.deadlines.all %}
<tr> <tr>
<td class="align-middle"> <td class="align-middle">
{% trans deadline.type_humanized %} {% trans deadline.type_humanized %}

View File

@ -4,14 +4,14 @@
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<h5> <h5>
<span class="badge badge-light">{{comp.documents.count}}</span> <span class="badge badge-light">{{obj.documents.count}}</span>
{% trans 'Documents' %} {% trans 'Documents' %}
</h5> </h5>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
{% if is_default_member and has_access %} {% 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' %}"> <button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-doc' obj.id %}" title="{% trans 'Add new document' %}">
{% fa5_icon 'plus' %} {% fa5_icon 'plus' %}
{% fa5_icon 'file' %} {% fa5_icon 'file' %}
</button> </button>
@ -36,7 +36,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for doc in comp.documents.all %} {% for doc in obj.documents.all %}
<tr> <tr>
<td class="align-middle"> <td class="align-middle">
<a href="{% url 'doc-open' doc.id %}"> <a href="{% url 'doc-open' doc.id %}">

View File

@ -4,14 +4,14 @@
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<h5> <h5>
<span class="badge badge-light">{{comp.after_states.count}}</span> <span class="badge badge-light">{{obj.after_states.count}}</span>
{% trans 'States after' %} {% trans 'States after' %}
</h5> </h5>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
{% if is_default_member and has_access %} {% 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' %}"> <button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-state' obj.id %}" title="{% trans 'Add new state after' %}">
{% fa5_icon 'plus' %} {% fa5_icon 'plus' %}
{% fa5_icon 'layer-group' %} {% fa5_icon 'layer-group' %}
</button> </button>

View File

@ -4,14 +4,14 @@
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<h5> <h5>
<span class="badge badge-light">{{comp.before_states.count}}</span> <span class="badge badge-light">{{obj.before_states.count}}</span>
{% trans 'States before' %} {% trans 'States before' %}
</h5> </h5>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
{% if is_default_member and has_access %} {% 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' %}"> <button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:new-state' obj.id %}?before=true" title="{% trans 'Add new state before' %}">
{% fa5_icon 'plus' %} {% fa5_icon 'plus' %}
{% fa5_icon 'layer-group' %} {% fa5_icon 'layer-group' %}
</button> </button>

View File

@ -9,10 +9,10 @@
<div id="detail-header" class="row"> <div id="detail-header" class="row">
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
<h3>{% trans 'Compensation' %} {{comp.identifier}}</h3> <h3>{% trans 'Compensation' %} {{obj.identifier}}</h3>
</div> </div>
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/includes/controls.html' %} {% include 'compensation/detail/compensation/includes/controls.html' %}
</div> </div>
</div> </div>
<hr> <hr>
@ -22,25 +22,25 @@
<table class="table table-hover"> <table class="table table-hover">
<tr> <tr>
<th class="w-25" scope="row">{% trans 'Title' %}</th> <th class="w-25" scope="row">{% trans 'Title' %}</th>
<td class="align-middle">{{comp.title}}</td> <td class="align-middle">{{obj.title}}</td>
</tr> </tr>
<tr> <tr>
<th scope="row">{% trans 'compensates intervention' %}</th> <th scope="row">{% trans 'compensates intervention' %}</th>
<td class="align-middle"> <td class="align-middle">
<a href="{% url 'intervention:open' comp.intervention.id %}"> <a href="{% url 'intervention:open' obj.intervention.id %}">
{{comp.intervention.identifier}} {{obj.intervention.identifier}}
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<th scope="row">{% trans 'Checked' %}</th> <th scope="row">{% trans 'Checked' %}</th>
<td class="align-middle"> <td class="align-middle">
{% if comp.intervention.checked is None %} {% if obj.intervention.checked is None %}
<span> <span>
{% fa5_icon 'star' 'far' %} {% fa5_icon 'star' 'far' %}
</span> </span>
{% else %} {% else %}
<span class="check-star" title="{% trans 'Checked on '%} {{comp.intervention.checked.timestamp}} {% trans 'by' %} {{comp.intervention.checked.user}}"> <span class="check-star" title="{% trans 'Checked on '%} {{obj.intervention.checked.timestamp}} {% trans 'by' %} {{obj.intervention.checked.user}}">
{% fa5_icon 'star' %} {% fa5_icon 'star' %}
</span> </span>
{% endif %} {% endif %}
@ -49,12 +49,12 @@
<tr> <tr>
<th scope="row">{% trans 'Recorded' %}</th> <th scope="row">{% trans 'Recorded' %}</th>
<td class="align-middle"> <td class="align-middle">
{% if comp.intervention.recorded is None %} {% if obj.intervention.recorded is None %}
<span title="{% trans 'Not recorded yet' %}"> <span title="{% trans 'Not recorded yet' %}">
{% fa5_icon 'bookmark' 'far' %} {% fa5_icon 'bookmark' 'far' %}
</span> </span>
{% else %} {% else %}
<span class="registered-bookmark" title="{% trans 'Recorded on '%} {{comp.intervention.recorded.timestamp}} {% trans 'by' %} {{comp.intervention.recorded.user}}"> <span class="registered-bookmark" title="{% trans 'Recorded on '%} {{obj.intervention.recorded.timestamp}} {% trans 'by' %} {{obj.intervention.recorded.user}}">
{% fa5_icon 'bookmark' %} {% fa5_icon 'bookmark' %}
</span> </span>
{% endif %} {% endif %}
@ -63,15 +63,15 @@
<tr> <tr>
<th scope="row">{% trans 'Last modified' %}</th> <th scope="row">{% trans 'Last modified' %}</th>
<td class="align-middle"> <td class="align-middle">
{{comp.created.timestamp|default_if_none:""|naturalday}} {{obj.created.timestamp|default_if_none:""|naturalday}}
<br> <br>
{{comp.created.user.username}} {{obj.created.user.username}}
</td> </td>
</tr> </tr>
<tr> <tr>
<th scope="row">{% trans 'Shared with' %}</th> <th scope="row">{% trans 'Shared with' %}</th>
<td class="align-middle"> <td class="align-middle">
{% for user in comp.intervention.users.all %} {% for user in obj.intervention.users.all %}
{% include 'user/includes/contact_modal_button.html' %} {% include 'user/includes/contact_modal_button.html' %}
{% endfor %} {% endfor %}
</td> </td>
@ -91,23 +91,23 @@
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/includes/states-before.html' %} {% include 'compensation/detail/compensation/includes/states-before.html' %}
</div> </div>
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/includes/states-after.html' %} {% include 'compensation/detail/compensation/includes/states-after.html' %}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/includes/actions.html' %} {% include 'compensation/detail/compensation/includes/actions.html' %}
</div> </div>
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/includes/deadlines.html' %} {% include 'compensation/detail/compensation/includes/deadlines.html' %}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/includes/documents.html' %} {% include 'compensation/detail/compensation/includes/documents.html' %}
</div> </div>
</div> </div>

View File

@ -0,0 +1,61 @@
{% load i18n l10n fontawesome_5 humanize %}
<div id="actions" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">
<h5>
<span class="badge badge-light">{{obj.actions.count}}</span>
{% trans 'Actions' context 'Compensation' %}
</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:acc-new-action' obj.id %}" title="{% trans 'Add new action' %}">
{% fa5_icon 'plus' %}
{% fa5_icon 'seedling' %}
</button>
{% endif %}
</div>
</div>
</div>
</div>
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">
{% trans 'Action type' %}
</th>
<th scope="col">
{% trans 'Amount' context 'Compensation' %}
</th>
<th scope="col">
{% trans 'Comment' %}
</th>
<th scope="col">
{% trans 'Action' %}
</th>
</tr>
</thead>
<tbody>
{% for action in obj.actions.all %}
<tr>
<td class="align-middle">
{{ action.action_type }}
</td>
<td class="align-middle">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
<td class="align-middle">{{ action.comment|default_if_none:"" }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:action-remove' action.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove action' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View File

@ -0,0 +1,29 @@
{% load i18n l10n fontawesome_5 %}
<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 mr-2" data-form-url="{% url 'compensation:acc-log' obj.id %}" title="{% trans 'Show log' %}">
{% fa5_icon 'history' %}
</button>
<button class="btn btn-default btn-modal" data-form-url="{% url 'compensation:acc-remove' obj.id %}" title="{% trans 'Delete' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
{% endif %}
</div>

View File

@ -0,0 +1,61 @@
{% load i18n l10n fontawesome_5 %}
<div id="deadlines" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">
<h5>
<span class="badge badge-light">{{obj.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:acc-new-deadline' obj.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 obj.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>
</div>
</div>

View File

@ -0,0 +1,59 @@
{% load i18n l10n fontawesome_5 %}
<div id="documents" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">
<h5>
<span class="badge badge-light">{{obj.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:acc-new-doc' obj.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 obj.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>

View File

@ -0,0 +1,62 @@
{% load i18n l10n fontawesome_5 %}
<div id="states-after" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">
<h5>
<span class="badge badge-light">{{obj.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:acc-new-state' obj.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">
{% if sum_before_states > sum_after_states %}
<div class="row alert alert-danger">
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<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 after_states %}
<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>
</div>
</div>

View File

@ -0,0 +1,62 @@
{% load i18n l10n fontawesome_5 %}
<div id="states-before" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">
<h5>
<span class="badge badge-light">{{obj.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:acc-new-state' obj.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">
{% if sum_before_states < sum_after_states %}
<div class="row alert alert-danger">
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<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 before_states %}
<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>
</div>
</div>

View File

@ -0,0 +1,61 @@
{% load i18n l10n fontawesome_5 humanize %}
<div id="eco-account-withdraws" class="card">
<div class="card-header rlp-r">
<div class="row">
<div class="col-sm-6">
<h5>
<span class="badge badge-light">{{obj.withdraws.count}}</span>
{% trans 'Eco Account Withdraws' %}
</h5>
</div>
<div class="col-sm-6">
<div class="d-flex justify-content-end">
{% if is_default_member and has_access %}
<a href="{% url 'compensation:new' %}" title="{% trans 'Add new withdraw' %}">
<button class="btn btn-outline-default">
{% fa5_icon 'plus' %}
{% fa5_icon 'tree' %}
</button>
</a>
{% endif %}
</div>
</div>
</div>
</div>
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">
{% trans 'Intervention Identifier' %}
</th>
<th scope="col">
{% trans 'Amount' %}
</th>
<th scope="col">
{% trans 'Action' %}
</th>
</tr>
</thead>
<tbody>
{% for withdraw in obj.withdraws.all %}
<tr>
<td class="align-middle">
<a href="{% url 'intervention:open' withdraw.intervention.id %}">
{{ withdraw.intervention.identifier }}
</a>
</td>
<td class="align-middle">{{ withdraw.surface|floatformat:2|intcomma }} m²</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:withdraw-remove' withdraw.account.id withdraw.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove Withdraw' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

View File

@ -0,0 +1,108 @@
{% 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 'Eco-account' %} {{obj.identifier}}</h3>
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/eco_account/includes/controls.html' %}
</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">{{obj.title}}</td>
</tr>
<tr>
<th scope="row">{% trans 'Available' %}</th>
<td class="align-middle">
{% with available as value %}
{% include 'konova/custom_widgets/progressbar.html' %}
{% endwith %}
</td>
</tr>
<tr>
<th scope="row">{% trans 'Recorded' %}</th>
<td class="align-middle">
{% if obj.recorded is None %}
<span title="{% trans 'Not recorded yet' %}">
{% fa5_icon 'bookmark' 'far' %}
</span>
{% else %}
<span class="registered-bookmark" title="{% trans 'Recorded on '%} {{obj.recorded.timestamp}} {% trans 'by' %} {{obj.recorded.user}}">
{% fa5_icon 'bookmark' %}
</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">{% trans 'Last modified' %}</th>
<td class="align-middle">
{{obj.created.timestamp|default_if_none:""|naturalday}}
<br>
{{obj.created.user.username}}
</td>
</tr>
<tr>
<th scope="row">{% trans 'Shared with' %}</th>
<td class="align-middle">
{% for user in obj.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/eco_account/includes/states-before.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/eco_account/includes/states-after.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/eco_account/includes/actions.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/eco_account/includes/deadlines.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/eco_account/includes/documents.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/eco_account/includes/withdraws.html' %}
</div>
</div>
{% with 'btn-modal' as btn_class %}
{% include 'modal/modal_form_script.html' %}
{% endwith %}
{% endblock %}

View File

@ -7,43 +7,60 @@ Created on: 30.11.20
""" """
from django.urls import path from django.urls import path
from compensation.views import * from compensation.views import compensation_views
from compensation.views import payment_views
from compensation.views import eco_account_views
app_name = "compensation" app_name = "compensation"
urlpatterns = [
# Main compensation # Split lists for each sub-component for better overview
path("", index_view, name="index"), urlpatterns_payment = [
path('new', new_view, name='new'), path('pay/<intervention_id>/new', payment_views.new_payment_view, name='pay-new'),
path('<id>', open_view, name='open'), path('pay/<id>/remove', payment_views.payment_remove_view, name='pay-remove'),
path('<id>/log', log_view, name='log'), ]
path('<id>/edit', edit_view, name='edit'),
path('<id>/remove', remove_view, name='remove'), urlaptterns_eco_acc = [
path('<id>/state/new', state_new_view, name='new-state'), path("acc/", eco_account_views.index_view, name="acc-index"),
path('<id>/action/new', action_new_view, name='new-action'), path('acc/new/', eco_account_views.new_view, name='acc-new'),
path('<id>/deadline/new', deadline_new_view, name="new-deadline"), path('acc/<id>', eco_account_views.open_view, name='acc-open'),
path('acc/<id>/log', eco_account_views.log_view, name='acc-log'),
path('acc/<id>/edit', eco_account_views.edit_view, name='acc-edit'),
path('acc/<id>/remove', eco_account_views.remove_view, name='acc-remove'),
path('acc/<id>/state/new', eco_account_views.state_new_view, name='acc-new-state'),
path('acc/<id>/action/new', eco_account_views.action_new_view, name='acc-new-action'),
path('acc/<id>/deadline/new', eco_account_views.deadline_new_view, name="acc-new-deadline"),
# Documents # Documents
path('<id>/document/new/', new_document_view, name='new-doc'), # Document remove route can be found in konova/urls.py
path('acc/<id>/document/new/', eco_account_views.new_document_view, name='acc-new-doc'),
# Payment
path('pay/<intervention_id>/new', new_payment_view, name='pay-new'),
path('pay/<id>', open_view, name='pay-open'),
path('pay/<id>/edit', edit_view, name='pay-edit'),
path('pay/<id>/remove', payment_remove_view, name='pay-remove'),
# Eco-account
path("acc/", account_index_view, name="acc-index"),
path('acc/new/', account_new_view, name='acc-new'),
path('acc/<id>', account_open_view, name='acc-open'),
path('acc/<id>/edit', account_edit_view, name='acc-edit'),
path('acc/<id>/remove', account_remove_view, name='acc-remove'),
# Eco-account withdraws # Eco-account withdraws
path('acc/<id>/remove/<withdraw_id>', withdraw_remove_view, name='withdraw-remove'), path('acc/<id>/remove/<withdraw_id>', eco_account_views.withdraw_remove_view, name='withdraw-remove'),
]
urlpatterns_compensation = [
# Main compensation
path("", compensation_views.index_view, name="index"),
path('new', compensation_views.new_view, name='new'),
path('<id>', compensation_views.open_view, name='open'),
path('<id>/log', compensation_views.log_view, name='log'),
path('<id>/edit', compensation_views.edit_view, name='edit'),
path('<id>/remove', compensation_views.remove_view, name='remove'),
path('<id>/state/new', compensation_views.state_new_view, name='new-state'),
path('<id>/action/new', compensation_views.action_new_view, name='new-action'),
path('<id>/deadline/new', compensation_views.deadline_new_view, name="new-deadline"),
# Documents
# Document remove route can be found in konova/urls.py
path('<id>/document/new/', compensation_views.new_document_view, name='new-doc'),
# Generic state routes # Generic state routes
path('state/<id>/remove', state_remove_view, name='state-remove'), path('state/<id>/remove', compensation_views.state_remove_view, name='state-remove'),
# Generic action routes # Generic action routes
path('action/<id>/remove', action_remove_view, name='action-remove'), path('action/<id>/remove', compensation_views.action_remove_view, name='action-remove'),
]
]
# Merge all together in the end
urlpatterns = urlpatterns_compensation + urlaptterns_eco_acc + urlpatterns_payment

View File

@ -1,18 +1,15 @@
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Sum from django.db.models import Sum
from django.http import HttpRequest, Http404 from django.http import HttpRequest
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from compensation.forms import NewPaymentForm, NewStateModalForm, NewDeadlineModalForm, NewActionModalForm from compensation.forms import NewStateModalForm, NewDeadlineModalForm, NewActionModalForm
from compensation.models import Compensation, EcoAccount, Payment, CompensationState, CompensationAction from compensation.models import Compensation, CompensationState, CompensationAction
from compensation.tables import CompensationTable, EcoAccountTable from compensation.tables import CompensationTable
from intervention.models import Intervention
from konova.contexts import BaseContext from konova.contexts import BaseContext
from konova.decorators import * from konova.decorators import *
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm
from konova.utils.message_templates import FORM_INVALID
from konova.utils.user_checks import in_group from konova.utils.user_checks import in_group
@ -70,7 +67,7 @@ def open_view(request: HttpRequest, id: str):
Returns: Returns:
""" """
template = "compensation/detail/view.html" template = "compensation/detail/compensation/view.html"
comp = get_object_or_404(Compensation, id=id) comp = get_object_or_404(Compensation, id=id)
geom_form = SimpleGeomForm(instance=comp) geom_form = SimpleGeomForm(instance=comp)
_user = request.user _user = request.user
@ -87,7 +84,7 @@ def open_view(request: HttpRequest, id: str):
diff_states = abs(sum_before_states - sum_after_states) diff_states = abs(sum_before_states - sum_after_states)
context = { context = {
"comp": comp, "obj": comp,
"geom_form": geom_form, "geom_form": geom_form,
"has_access": is_data_shared, "has_access": is_data_shared,
"before_states": before_states, "before_states": before_states,
@ -147,146 +144,6 @@ def remove_view(request: HttpRequest, id: str):
) )
@login_required
@any_group_check
def account_index_view(request: HttpRequest):
"""
Renders the index view for eco accounts
Args:
request (HttpRequest): The incoming request
Returns:
A rendered view
"""
template = "generic_index.html"
user = request.user
eco_accounts = EcoAccount.objects.filter(
deleted=None,
)
table = EcoAccountTable(
request=request,
queryset=eco_accounts
)
context = {
"table": table,
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
@default_group_required
def account_new_view(request: HttpRequest):
# ToDo
pass
@login_required
@default_group_required
def account_edit_view(request: HttpRequest, id: str):
# ToDo
pass
@login_required
@any_group_check
def account_open_view(request: HttpRequest, id: str):
# ToDo
pass
@login_required
def account_remove_view(request: HttpRequest, id: str):
# ToDo
pass
@login_required
@default_group_required
def new_payment_view(request: HttpRequest, intervention_id: str):
""" Renders a modal view for adding new payments
Args:
request (HttpRequest): The incoming request
intervention_id (str): The intervention's id for which a new payment shall be added
Returns:
"""
intervention = get_object_or_404(Intervention, id=intervention_id)
form = NewPaymentForm(request.POST or None, instance=intervention, user=request.user)
template = form.template
if request.method == "POST":
if form.is_valid():
payment = form.save()
messages.success(
request,
_("Payment added")
)
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
@login_required
@default_group_required
def payment_remove_view(request: HttpRequest, id: str):
""" Renders a modal view for removing payments
Args:
request (HttpRequest): The incoming request
id (str): The payment's id
Returns:
"""
payment = get_object_or_404(Payment, id=id)
form = RemoveModalForm(request.POST or None, instance=payment, user=request.user)
return form.process_request(
request=request,
msg_success=_("Payment removed"),
)
@login_required
@default_group_required
def withdraw_remove_view(request: HttpRequest, id: str, withdraw_id: str):
""" Renders a modal view for removing withdraws
Args:
request (HttpRequest): The incoming request
id (str): The eco account's id
withdraw_id (str): The withdraw's id
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
try:
eco_withdraw = acc.eco_withdraws.get(id=withdraw_id)
except ObjectDoesNotExist:
raise Http404("Unknown withdraw")
form = RemoveModalForm(request.POST or None, instance=eco_withdraw, user=request.user)
return form.process_request(
request=request,
msg_success=_("Withdraw removed")
)
@login_required @login_required
def new_document_view(request: HttpRequest, id: str): def new_document_view(request: HttpRequest, id: str):
""" Renders a form for uploading new documents """ Renders a form for uploading new documents

View File

@ -0,0 +1,262 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 09.08.21
"""
from django.db.models import Sum
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpRequest, Http404
from django.shortcuts import render, get_object_or_404
from compensation.forms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm
from compensation.models import EcoAccount
from compensation.tables import EcoAccountTable
from konova.contexts import BaseContext
from konova.decorators import any_group_check, default_group_required
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
from konova.utils.user_checks import in_group
@login_required
@any_group_check
def index_view(request: HttpRequest):
"""
Renders the index view for eco accounts
Args:
request (HttpRequest): The incoming request
Returns:
A rendered view
"""
template = "generic_index.html"
user = request.user
eco_accounts = EcoAccount.objects.filter(
deleted=None,
)
table = EcoAccountTable(
request=request,
queryset=eco_accounts
)
context = {
"table": table,
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
@default_group_required
def new_view(request: HttpRequest):
# ToDo
pass
@login_required
@default_group_required
def edit_view(request: HttpRequest, id: str):
# ToDo
pass
@login_required
@any_group_check
def open_view(request: HttpRequest, id: str):
""" Renders a detail view for a compensation
Args:
request (HttpRequest): The incoming request
id (str): The compensation's id
Returns:
"""
template = "compensation/detail/eco_account/view.html"
acc = get_object_or_404(EcoAccount, id=id)
geom_form = SimpleGeomForm(instance=acc)
_user = request.user
is_data_shared = acc.is_shared_with(_user)
# Order states according to surface
before_states = acc.before_states.all().order_by("-surface")
after_states = acc.after_states.all().order_by("-surface")
# 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 = before_states.aggregate(Sum("surface"))["surface__sum"] or 0
sum_after_states = after_states.aggregate(Sum("surface"))["surface__sum"] or 0
diff_states = abs(sum_before_states - sum_after_states)
# Calculate rest of available surface for withdraws
withdraws = acc.withdraws.all()
withdraw_surfaces = withdraws.aggregate(Sum("surface"))["surface__sum"] or 0
available = int(((sum_after_states - withdraw_surfaces) / sum_after_states) * 100)
context = {
"obj": acc,
"geom_form": geom_form,
"has_access": is_data_shared,
"before_states": before_states,
"after_states": after_states,
"sum_before_states": sum_before_states,
"sum_after_states": sum_after_states,
"available": available,
"diff_states": diff_states,
"is_default_member": in_group(_user, DEFAULT_GROUP),
"is_zb_member": in_group(_user, ZB_GROUP),
"is_ets_member": in_group(_user, ETS_GROUP),
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
def remove_view(request: HttpRequest, id: str):
""" Renders a modal view for removing the eco account
Args:
request (HttpRequest): The incoming request
id (str): The account's id
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
form = RemoveModalForm(request.POST or None, instance=acc, user=request.user)
return form.process_request(
request=request,
msg_success=_("Eco-account removed"),
redirect_url=reverse("compensation:acc-index"),
)
@login_required
@default_group_required
def withdraw_remove_view(request: HttpRequest, id: str, withdraw_id: str):
""" Renders a modal view for removing withdraws
Args:
request (HttpRequest): The incoming request
id (str): The eco account's id
withdraw_id (str): The withdraw's id
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
try:
eco_withdraw = acc.withdraws.get(id=withdraw_id)
except ObjectDoesNotExist:
raise Http404("Unknown withdraw")
form = RemoveModalForm(request.POST or None, instance=eco_withdraw, user=request.user)
return form.process_request(
request=request,
msg_success=_("Withdraw removed")
)
@login_required
@default_group_required
def log_view(request: HttpRequest, id: str):
""" Renders a log view using modal
Args:
request (HttpRequest): The incoming request
id (str): The eco acount's id
Returns:
"""
comp = get_object_or_404(EcoAccount, id=id)
template = "modal/modal_generic.html"
body_template = "log.html"
context = {
"modal_body_template": body_template,
"log": comp.log.all().order_by("-timestamp"),
"modal_title": _("Log"),
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
def state_new_view(request: HttpRequest, id: str):
""" Renders a form for adding new states for an eco account
Args:
request (HttpRequest): The incoming request
id (str): The account's id to which the new state will be related
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
form = NewStateModalForm(request.POST or None, instance=acc, user=request.user)
return form.process_request(
request,
msg_success=_("State added")
)
@login_required
def action_new_view(request: HttpRequest, id: str):
""" Renders a form for adding new actions for an eco account
Args:
request (HttpRequest): The incoming request
id (str): The account's id to which the new state will be related
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
form = NewActionModalForm(request.POST or None, instance=acc, user=request.user)
return form.process_request(
request,
msg_success=_("Action added")
)
@login_required
def deadline_new_view(request: HttpRequest, id: str):
""" Renders a form for adding new states for an eco account
Args:
request (HttpRequest): The incoming request
id (str): The account's id to which the new state will be related
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
form = NewDeadlineModalForm(request.POST or None, instance=acc, user=request.user)
return form.process_request(
request,
msg_success=_("Deadline added")
)
@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 account's id to which the new document will be related
Returns:
"""
acc = get_object_or_404(EcoAccount, id=id)
form = NewDocumentForm(request.POST or None, request.FILES or None, instance=acc, user=request.user)
return form.process_request(
request,
msg_success=_("Document added")
)

View File

@ -0,0 +1,80 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 09.08.21
"""
from django.utils.translation import gettext_lazy as _
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpRequest
from django.shortcuts import get_object_or_404, render, redirect
from compensation.forms import NewPaymentForm
from compensation.models import Payment
from intervention.models import Intervention
from konova.contexts import BaseContext
from konova.decorators import default_group_required
from konova.forms import RemoveModalForm
from konova.utils.message_templates import FORM_INVALID
@login_required
@default_group_required
def new_payment_view(request: HttpRequest, intervention_id: str):
""" Renders a modal view for adding new payments
Args:
request (HttpRequest): The incoming request
intervention_id (str): The intervention's id for which a new payment shall be added
Returns:
"""
intervention = get_object_or_404(Intervention, id=intervention_id)
form = NewPaymentForm(request.POST or None, instance=intervention, user=request.user)
template = form.template
if request.method == "POST":
if form.is_valid():
payment = form.save()
messages.success(
request,
_("Payment added")
)
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
@login_required
@default_group_required
def payment_remove_view(request: HttpRequest, id: str):
""" Renders a modal view for removing payments
Args:
request (HttpRequest): The incoming request
id (str): The payment's id
Returns:
"""
payment = get_object_or_404(Payment, id=id)
form = RemoveModalForm(request.POST or None, instance=payment, user=request.user)
return form.process_request(
request=request,
msg_success=_("Payment removed"),
)

View File

@ -193,19 +193,6 @@ class Intervention(BaseObject):
self.identifier = new_id self.identifier = new_id
super().save(*args, **kwargs) super().save(*args, **kwargs)
def is_shared_with(self, user: User):
""" Access check
Checks whether a given user has access to this intervention
Args:
user ():
Returns:
"""
return self.users.filter(username=user.username).exists()
def check_validity(self) -> (bool, dict): def check_validity(self) -> (bool, dict):
""" Validity check """ Validity check

View File

@ -1,10 +1,10 @@
{% load i18n l10n fontawesome_5 %} {% load i18n l10n fontawesome_5 humanize %}
<div id="eco-account-withdraws" class="card"> <div id="eco-account-withdraws" class="card">
<div class="card-header rlp-r"> <div class="card-header rlp-r">
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<h5> <h5>
<span class="badge badge-light">{{intervention.eco_withdraws.count}}</span> <span class="badge badge-light">{{intervention.withdraws.count}}</span>
{% trans 'Eco Account Withdraws' %} {% trans 'Eco Account Withdraws' %}
</h5> </h5>
</div> </div>
@ -38,14 +38,17 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for withdraw in intervention.eco_withdraws.all %} {% for withdraw in intervention.withdraws.all %}
<tr> <tr {% if withdraw.account.deleted %}class="align-middle alert-danger" title="{% trans 'Eco-account deleted! Withdraw invalid!' %}" {% endif %}>
<td class="align-middle"> <td class="align-middle">
<a href="{% url 'compensation:acc-open' withdraw.account.id %}"> <a href="{% url 'compensation:acc-open' withdraw.account.id %}">
{% if withdraw.account.deleted %}
{% fa5_icon 'exclamation-triangle' %}
{% endif %}
{{ withdraw.account.identifier }} {{ withdraw.account.identifier }}
</a> </a>
</td> </td>
<td class="align-middle">{{ withdraw.amount|floatformat:2 }} %</td> <td class="align-middle">{{ withdraw.surface|floatformat:2|intcomma }} m²</td>
<td> <td>
{% if is_default_member and has_access %} {% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:withdraw-remove' withdraw.account.id withdraw.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove Withdraw' %}"> <button data-form-url="{% url 'compensation:withdraw-remove' withdraw.account.id withdraw.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove Withdraw' %}">

View File

@ -131,7 +131,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/eco-account-withdraws.html' %} {% include 'intervention/detail/includes/withdraws.html' %}
</div> </div>
<div class="col-sm-12 col-md-12 col-lg-6"> <div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/revocation.html' %} {% include 'intervention/detail/includes/revocation.html' %}

View File

@ -102,6 +102,22 @@ class BaseObject(BaseResource):
) )
self.log.add(user_action) self.log.add(user_action)
def is_shared_with(self, user: User):
""" Access check
Checks whether a given user has access to this object
Args:
user ():
Returns:
"""
if hasattr(self, "users"):
return self.users.filter(username=user.username).exists()
else:
return User.objects.none()
class DeadlineType(models.TextChoices): class DeadlineType(models.TextChoices):
""" """

View File

@ -0,0 +1,7 @@
{% load i18n %}
<div class="progress" title="{% trans 'Available' %}: {{ value }}%">
<div class="progress-bar rlp-r" role="progressbar" style="width: {{ value }}%" aria-valuenow="{{ value }}" aria-valuemin="0" aria-valuemax="100">
{{ value }} %
</div>
</div>

Binary file not shown.

View File

@ -8,15 +8,15 @@
#: intervention/filters.py:26 intervention/filters.py:40 #: intervention/filters.py:26 intervention/filters.py:40
#: intervention/filters.py:47 intervention/filters.py:48 #: intervention/filters.py:47 intervention/filters.py:48
#: intervention/forms.py:318 intervention/forms.py:330 #: intervention/forms.py:318 intervention/forms.py:330
#: intervention/forms.py:342 konova/forms.py:92 konova/forms.py:228 #: intervention/forms.py:342 konova/forms.py:91 konova/forms.py:227
#: konova/forms.py:261 konova/forms.py:266 konova/forms.py:278 #: konova/forms.py:260 konova/forms.py:265 konova/forms.py:277
#: konova/forms.py:290 konova/forms.py:303 user/forms.py:38 #: konova/forms.py:289 konova/forms.py:302 user/forms.py:38
#, fuzzy #, fuzzy
msgid "" 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: 2021-08-05 12:43+0200\n" "POT-Creation-Date: 2021-08-09 15:06+0200\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"
@ -27,7 +27,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: compensation/forms.py:41 compensation/forms.py:260 #: compensation/forms.py:41 compensation/forms.py:260
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:33 #: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:33
#: intervention/templates/intervention/detail/includes/withdraws.html:33
msgid "Amount" msgid "Amount"
msgstr "Menge" msgstr "Menge"
@ -73,8 +74,10 @@ msgid "Select the biotope type"
msgstr "Biotoptyp wählen" msgstr "Biotoptyp wählen"
#: compensation/forms.py:103 #: compensation/forms.py:103
#: compensation/templates/compensation/detail/includes/states-after.html:36 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:36
#: compensation/templates/compensation/detail/includes/states-before.html:36 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:36
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:36
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:36
msgid "Surface" msgid "Surface"
msgstr "Fläche" msgstr "Fläche"
@ -94,7 +97,7 @@ msgstr "Geben Sie die Daten des neuen Zustandes ein"
msgid "Added state" msgid "Added state"
msgstr "Zustand hinzugefügt" msgstr "Zustand hinzugefügt"
#: compensation/forms.py:133 konova/forms.py:142 #: compensation/forms.py:133 konova/forms.py:141
msgid "Object removed" msgid "Object removed"
msgstr "Objekt entfernt" msgstr "Objekt entfernt"
@ -107,7 +110,8 @@ msgid "Select the deadline type"
msgstr "Fristart wählen" msgstr "Fristart wählen"
#: compensation/forms.py:187 #: compensation/forms.py:187
#: compensation/templates/compensation/detail/includes/deadlines.html:31 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31
#: intervention/forms.py:317 #: intervention/forms.py:317
msgid "Date" msgid "Date"
msgstr "Datum" msgstr "Datum"
@ -117,18 +121,21 @@ msgid "Select date"
msgstr "Datum wählen" msgstr "Datum wählen"
#: compensation/forms.py:202 compensation/forms.py:270 #: compensation/forms.py:202 compensation/forms.py:270
#: compensation/templates/compensation/detail/includes/actions.html:34 #: compensation/templates/compensation/detail/compensation/includes/actions.html:34
#: compensation/templates/compensation/detail/includes/deadlines.html:34 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34
#: compensation/templates/compensation/detail/includes/documents.html:31 #: compensation/templates/compensation/detail/compensation/includes/documents.html:31
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:34
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:34
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:31
#: intervention/forms.py:341 #: intervention/forms.py:341
#: intervention/templates/intervention/detail/includes/documents.html:31 #: intervention/templates/intervention/detail/includes/documents.html:31
#: intervention/templates/intervention/detail/includes/revocation.html:35 #: intervention/templates/intervention/detail/includes/revocation.html:35
#: konova/forms.py:289 #: konova/forms.py:288
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: compensation/forms.py:204 compensation/forms.py:272 #: compensation/forms.py:204 compensation/forms.py:272
#: intervention/forms.py:343 konova/forms.py:291 #: intervention/forms.py:343 konova/forms.py:290
msgid "Additional comment, maximum {} letters" msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
@ -200,316 +207,393 @@ msgstr ""
msgid "Pieces" msgid "Pieces"
msgstr "Stück" msgstr "Stück"
#: compensation/tables.py:24 compensation/tables.py:164 #: compensation/tables.py:26 compensation/tables.py:166
#: intervention/forms.py:28 intervention/tables.py:23 #: intervention/forms.py:28 intervention/tables.py:23
#: intervention/templates/intervention/detail/includes/compensations.html:30 #: intervention/templates/intervention/detail/includes/compensations.html:30
msgid "Identifier" msgid "Identifier"
msgstr "Kennung" msgstr "Kennung"
#: compensation/tables.py:29 compensation/tables.py:169 #: compensation/tables.py:31 compensation/tables.py:171
#: compensation/templates/compensation/detail/includes/documents.html:28 #: compensation/templates/compensation/detail/compensation/includes/documents.html:28
#: compensation/templates/compensation/detail/view.html:24 #: compensation/templates/compensation/detail/compensation/view.html:24
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:28
#: compensation/templates/compensation/detail/eco_account/view.html:24
#: intervention/forms.py:35 intervention/tables.py:28 #: intervention/forms.py:35 intervention/tables.py:28
#: intervention/templates/intervention/detail/includes/compensations.html:33 #: intervention/templates/intervention/detail/includes/compensations.html:33
#: intervention/templates/intervention/detail/includes/documents.html:28 #: intervention/templates/intervention/detail/includes/documents.html:28
#: intervention/templates/intervention/detail/view.html:24 konova/forms.py:260 #: intervention/templates/intervention/detail/view.html:24 konova/forms.py:259
msgid "Title" msgid "Title"
msgstr "Bezeichnung" msgstr "Bezeichnung"
#: compensation/tables.py:34 #: compensation/tables.py:36
#: compensation/templates/compensation/detail/view.html:36 #: compensation/templates/compensation/detail/compensation/view.html:36
#: intervention/tables.py:33 #: intervention/tables.py:33
#: intervention/templates/intervention/detail/view.html:56 user/models.py:48 #: intervention/templates/intervention/detail/view.html:56 user/models.py:48
msgid "Checked" msgid "Checked"
msgstr "Geprüft" msgstr "Geprüft"
#: compensation/tables.py:40 #: compensation/tables.py:42 compensation/tables.py:181
#: compensation/templates/compensation/detail/view.html:50 #: compensation/templates/compensation/detail/compensation/view.html:50
#: compensation/templates/compensation/detail/eco_account/view.html:36
#: intervention/tables.py:39 #: intervention/tables.py:39
#: intervention/templates/intervention/detail/view.html:70 user/models.py:49 #: intervention/templates/intervention/detail/view.html:70 user/models.py:49
msgid "Recorded" msgid "Recorded"
msgstr "Verzeichnet" msgstr "Verzeichnet"
#: compensation/tables.py:46 intervention/tables.py:45 #: compensation/tables.py:48 compensation/tables.py:187
#: intervention/tables.py:45
msgid "Editable" msgid "Editable"
msgstr "Freigegeben" msgstr "Freigegeben"
#: compensation/tables.py:52 intervention/tables.py:51 #: compensation/tables.py:54 compensation/tables.py:193
#: intervention/tables.py:51
msgid "Last edit" msgid "Last edit"
msgstr "Zuletzt bearbeitet" msgstr "Zuletzt bearbeitet"
#: compensation/tables.py:61 #: compensation/tables.py:63
#: intervention/templates/intervention/detail/includes/compensations.html:8 #: intervention/templates/intervention/detail/includes/compensations.html:8
msgid "Compensations" msgid "Compensations"
msgstr "Kompensationen" msgstr "Kompensationen"
#: compensation/tables.py:83 compensation/tables.py:200 #: compensation/tables.py:85 compensation/tables.py:224
#: intervention/tables.py:92 intervention/tables.py:175 #: intervention/tables.py:92 intervention/tables.py:175
msgid "Open {}" msgid "Open {}"
msgstr "Öffne {}" msgstr "Öffne {}"
#: compensation/tables.py:83 compensation/tables.py:197 #: compensation/tables.py:85
#: compensation/templates/compensation/detail/view.html:12 #: compensation/templates/compensation/detail/compensation/view.html:12
#: konova/templates/konova/home.html:49 templates/navbar.html:28 #: konova/templates/konova/home.html:49 templates/navbar.html:28
msgid "Compensation" msgid "Compensation"
msgstr "Kompensation" msgstr "Kompensation"
#: compensation/tables.py:104 intervention/tables.py:111 #: compensation/tables.py:106 intervention/tables.py:111
msgid "Not checked yet" msgid "Not checked yet"
msgstr "Noch nicht geprüft" msgstr "Noch nicht geprüft"
#: compensation/tables.py:109 intervention/tables.py:116 #: compensation/tables.py:111 intervention/tables.py:116
msgid "Checked on {} by {}" msgid "Checked on {} by {}"
msgstr "Am {} von {} geprüft worden" msgstr "Am {} von {} geprüft worden"
#: compensation/tables.py:128 #: compensation/tables.py:130
#: compensation/templates/compensation/detail/view.html:53 #: compensation/templates/compensation/detail/compensation/view.html:53
#: compensation/templates/compensation/detail/eco_account/view.html:39
#: intervention/tables.py:135 #: intervention/tables.py:135
#: intervention/templates/intervention/detail/view.html:73 #: intervention/templates/intervention/detail/view.html:73
msgid "Not recorded yet" msgid "Not recorded yet"
msgstr "Noch nicht verzeichnet" msgstr "Noch nicht verzeichnet"
#: compensation/tables.py:133 intervention/tables.py:140 #: compensation/tables.py:135 compensation/tables.py:265
#: intervention/tables.py:140
msgid "Recorded on {} by {}" msgid "Recorded on {} by {}"
msgstr "Am {} von {} verzeichnet worden" msgstr "Am {} von {} verzeichnet worden"
#: compensation/tables.py:156 intervention/tables.py:163 #: compensation/tables.py:158 compensation/tables.py:288
#: intervention/tables.py:163
msgid "Full access granted" msgid "Full access granted"
msgstr "Für Sie freigegeben - Datensatz kann bearbeitet werden" msgstr "Für Sie freigegeben - Datensatz kann bearbeitet werden"
#: compensation/tables.py:156 intervention/tables.py:163 #: compensation/tables.py:158 compensation/tables.py:288
#: intervention/tables.py:163
msgid "Access not granted" msgid "Access not granted"
msgstr "Nicht freigegeben - Datensatz nur lesbar" msgstr "Nicht freigegeben - Datensatz nur lesbar"
#: compensation/tables.py:174 konova/forms.py:265 #: compensation/tables.py:176
msgid "Created on" #: compensation/templates/compensation/detail/eco_account/view.html:28
msgstr "Erstellt" #: konova/templates/konova/custom_widgets/progressbar.html:3
msgid "Available"
msgstr "Verfügbar"
#: compensation/tables.py:179 #: compensation/tables.py:202
msgid "Actions"
msgstr "Aktionen"
#: compensation/tables.py:190
msgid "Eco Accounts" msgid "Eco Accounts"
msgstr "Ökokonten" msgstr "Ökokonten"
#: compensation/tables.py:205 intervention/tables.py:179 #: compensation/tables.py:224
msgid "Edit {}" #: compensation/templates/compensation/detail/eco_account/view.html:12
msgstr "Bearbeite {}" #: konova/templates/konova/home.html:88 templates/navbar.html:34
msgid "Eco-account"
msgstr "Ökokonto"
#: compensation/tables.py:209 intervention/tables.py:183 #: compensation/tables.py:260
msgid "Delete {}" msgid "Not recorded yet. Can not be used for withdraws, yet."
msgstr "Lösche {}" msgstr ""
"Noch nicht verzeichnet. Kann noch nicht für Abbuchungen genutzt werden."
#: compensation/templates/compensation/detail/includes/actions.html:8 #: compensation/templates/compensation/detail/compensation/includes/actions.html:8
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:8
msgctxt "Compensation" msgctxt "Compensation"
msgid "Actions" msgid "Actions"
msgstr "Maßnahmen" msgstr "Maßnahmen"
#: compensation/templates/compensation/detail/includes/actions.html:14 #: compensation/templates/compensation/detail/compensation/includes/actions.html:14
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:14
msgid "Add new action" msgid "Add new action"
msgstr "Neue Maßnahme hinzufügen" msgstr "Neue Maßnahme hinzufügen"
#: compensation/templates/compensation/detail/includes/actions.html:28 #: compensation/templates/compensation/detail/compensation/includes/actions.html:28
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:28
msgid "Action type" msgid "Action type"
msgstr "Maßnahmentyp" msgstr "Maßnahmentyp"
#: compensation/templates/compensation/detail/includes/actions.html:31 #: compensation/templates/compensation/detail/compensation/includes/actions.html:31
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:31
msgctxt "Compensation" msgctxt "Compensation"
msgid "Amount" msgid "Amount"
msgstr "Menge" msgstr "Menge"
#: compensation/templates/compensation/detail/includes/actions.html:37 #: compensation/templates/compensation/detail/compensation/includes/actions.html:37
#: compensation/templates/compensation/detail/includes/deadlines.html:37 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:37
#: compensation/templates/compensation/detail/includes/documents.html:34 #: compensation/templates/compensation/detail/compensation/includes/documents.html:34
#: compensation/templates/compensation/detail/includes/states-after.html:39 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:39
#: compensation/templates/compensation/detail/includes/states-before.html:39 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:39
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:37
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:37
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:34
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:39
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:39
#: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:36
#: intervention/templates/intervention/detail/includes/compensations.html:36 #: intervention/templates/intervention/detail/includes/compensations.html:36
#: intervention/templates/intervention/detail/includes/documents.html:34 #: 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 #: intervention/templates/intervention/detail/includes/payments.html:37
#: intervention/templates/intervention/detail/includes/revocation.html:41 #: intervention/templates/intervention/detail/includes/revocation.html:41
#: intervention/templates/intervention/detail/includes/withdraws.html:36
#: templates/log.html:10 #: templates/log.html:10
msgid "Action" msgid "Action"
msgstr "Aktionen" msgstr "Aktionen"
#: compensation/templates/compensation/detail/includes/actions.html:51 #: compensation/templates/compensation/detail/compensation/includes/actions.html:51
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:51
msgid "Remove action" msgid "Remove action"
msgstr "Maßnahme entfernen" msgstr "Maßnahme entfernen"
#: compensation/templates/compensation/detail/includes/controls.html:5 #: compensation/templates/compensation/detail/compensation/includes/controls.html:5
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:5
#: intervention/templates/intervention/detail/includes/controls.html:5 #: intervention/templates/intervention/detail/includes/controls.html:5
msgid "Open in LANIS" msgid "Open in LANIS"
msgstr "In LANIS öffnen" msgstr "In LANIS öffnen"
#: compensation/templates/compensation/detail/includes/controls.html:10 #: compensation/templates/compensation/detail/compensation/includes/controls.html:10
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:10
#: intervention/templates/intervention/detail/includes/controls.html:10 #: intervention/templates/intervention/detail/includes/controls.html:10
msgid "Public report" msgid "Public report"
msgstr "Öffentlicher Bericht" msgstr "Öffentlicher Bericht"
#: compensation/templates/compensation/detail/includes/controls.html:17 #: compensation/templates/compensation/detail/compensation/includes/controls.html:17
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:17
#: intervention/templates/intervention/detail/includes/controls.html:32 #: intervention/templates/intervention/detail/includes/controls.html:32
msgid "Edit" msgid "Edit"
msgstr "Bearbeiten" msgstr "Bearbeiten"
#: compensation/templates/compensation/detail/includes/controls.html:21 #: compensation/templates/compensation/detail/compensation/includes/controls.html:21
#: compensation/templates/compensation/detail/eco_account/includes/controls.html:21
#: intervention/templates/intervention/detail/includes/controls.html:36
msgid "Show log" msgid "Show log"
msgstr "Log anzeigen" msgstr "Log anzeigen"
#: compensation/templates/compensation/detail/includes/controls.html:24 #: compensation/templates/compensation/detail/compensation/includes/controls.html:24
#: intervention/templates/intervention/detail/includes/controls.html:36 #: compensation/templates/compensation/detail/eco_account/includes/controls.html:24
#: intervention/templates/intervention/detail/includes/controls.html:39
#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391 #: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: compensation/templates/compensation/detail/includes/deadlines.html:8 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:8
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:8
msgid "Deadlines" msgid "Deadlines"
msgstr "Termine und Fristen" msgstr "Termine und Fristen"
#: compensation/templates/compensation/detail/includes/deadlines.html:14 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:14
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:14
msgid "Add new deadline" msgid "Add new deadline"
msgstr "Neue Frist hinzufügen" msgstr "Neue Frist hinzufügen"
#: compensation/templates/compensation/detail/includes/deadlines.html:28 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:28
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:28
#: intervention/forms.py:40 #: intervention/forms.py:40
msgid "Type" msgid "Type"
msgstr "Typ" msgstr "Typ"
#: compensation/templates/compensation/detail/includes/deadlines.html:51 #: compensation/templates/compensation/detail/compensation/includes/deadlines.html:51
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:51
msgid "Remove deadline" msgid "Remove deadline"
msgstr "Frist löschen" msgstr "Frist löschen"
#: compensation/templates/compensation/detail/includes/documents.html:8 #: compensation/templates/compensation/detail/compensation/includes/documents.html:8
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:8
#: intervention/templates/intervention/detail/includes/documents.html:8 #: intervention/templates/intervention/detail/includes/documents.html:8
msgid "Documents" msgid "Documents"
msgstr "Dokumente" msgstr "Dokumente"
#: compensation/templates/compensation/detail/includes/documents.html:14 #: compensation/templates/compensation/detail/compensation/includes/documents.html:14
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:14
#: intervention/templates/intervention/detail/includes/documents.html:14 #: intervention/templates/intervention/detail/includes/documents.html:14
#: konova/forms.py:302 #: konova/forms.py:301
msgid "Add new document" msgid "Add new document"
msgstr "Neues Dokument hinzufügen" msgstr "Neues Dokument hinzufügen"
#: compensation/templates/compensation/detail/includes/documents.html:49 #: compensation/templates/compensation/detail/compensation/includes/documents.html:49
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:49
#: intervention/templates/intervention/detail/includes/documents.html:49 #: intervention/templates/intervention/detail/includes/documents.html:49
msgid "Remove document" msgid "Remove document"
msgstr "Dokument löschen" msgstr "Dokument löschen"
#: compensation/templates/compensation/detail/includes/states-after.html:8 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:8
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:8
msgid "States after" msgid "States after"
msgstr "Zielzustand" msgstr "Zielzustand"
#: compensation/templates/compensation/detail/includes/states-after.html:14 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:14
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:14
msgid "Add new state after" msgid "Add new state after"
msgstr "Neuen Zielzustand hinzufügen" msgstr "Neuen Zielzustand hinzufügen"
#: compensation/templates/compensation/detail/includes/states-after.html:26 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:26
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:26
msgid "Missing surfaces according to states before: " msgid "Missing surfaces according to states before: "
msgstr "Fehlende Flächenmengen aus Ausgangszustand: " msgstr "Fehlende Flächenmengen aus Ausgangszustand: "
#: compensation/templates/compensation/detail/includes/states-after.html:33 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:33
#: compensation/templates/compensation/detail/includes/states-before.html:33 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:33
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:33
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:33
msgid "Biotope type" msgid "Biotope type"
msgstr "Biotoptyp" msgstr "Biotoptyp"
#: compensation/templates/compensation/detail/includes/states-after.html:52 #: compensation/templates/compensation/detail/compensation/includes/states-after.html:52
#: compensation/templates/compensation/detail/includes/states-before.html:52 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:52
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:52
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:52
msgid "Remove state" msgid "Remove state"
msgstr "Zustand entfernen" msgstr "Zustand entfernen"
#: compensation/templates/compensation/detail/includes/states-before.html:8 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:8
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:8
msgid "States before" msgid "States before"
msgstr "Ausgangszustand" msgstr "Ausgangszustand"
#: compensation/templates/compensation/detail/includes/states-before.html:14 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:14
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:14
msgid "Add new state before" msgid "Add new state before"
msgstr "Neuen Ausgangszustand hinzufügen" msgstr "Neuen Ausgangszustand hinzufügen"
#: compensation/templates/compensation/detail/includes/states-before.html:26 #: compensation/templates/compensation/detail/compensation/includes/states-before.html:26
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:26
msgid "Missing surfaces according to states after: " msgid "Missing surfaces according to states after: "
msgstr "Fehlende Flächenmengen aus Zielzustand: " msgstr "Fehlende Flächenmengen aus Zielzustand: "
#: compensation/templates/compensation/detail/view.html:28 #: compensation/templates/compensation/detail/compensation/view.html:28
msgid "compensates intervention" msgid "compensates intervention"
msgstr "kompensiert Eingriff" msgstr "kompensiert Eingriff"
#: compensation/templates/compensation/detail/view.html:43 #: compensation/templates/compensation/detail/compensation/view.html:43
#: intervention/templates/intervention/detail/view.html:63 #: intervention/templates/intervention/detail/view.html:63
msgid "Checked on " msgid "Checked on "
msgstr "Geprüft am " msgstr "Geprüft am "
#: compensation/templates/compensation/detail/view.html:43 #: compensation/templates/compensation/detail/compensation/view.html:43
#: compensation/templates/compensation/detail/view.html:57 #: compensation/templates/compensation/detail/compensation/view.html:57
#: compensation/templates/compensation/detail/eco_account/view.html:43
#: intervention/templates/intervention/detail/view.html:63 #: intervention/templates/intervention/detail/view.html:63
#: intervention/templates/intervention/detail/view.html:77 #: intervention/templates/intervention/detail/view.html:77
msgid "by" msgid "by"
msgstr "von" msgstr "von"
#: compensation/templates/compensation/detail/view.html:57 #: compensation/templates/compensation/detail/compensation/view.html:57
#: compensation/templates/compensation/detail/eco_account/view.html:43
#: intervention/templates/intervention/detail/view.html:77 #: intervention/templates/intervention/detail/view.html:77
msgid "Recorded on " msgid "Recorded on "
msgstr "Verzeichnet am" msgstr "Verzeichnet am"
#: compensation/templates/compensation/detail/view.html:64 #: compensation/templates/compensation/detail/compensation/view.html:64
#: compensation/templates/compensation/detail/eco_account/view.html:50
#: intervention/templates/intervention/detail/view.html:96 #: intervention/templates/intervention/detail/view.html:96
msgid "Last modified" msgid "Last modified"
msgstr "Zuletzt bearbeitet" msgstr "Zuletzt bearbeitet"
#: compensation/templates/compensation/detail/view.html:72 #: compensation/templates/compensation/detail/compensation/view.html:72
#: compensation/templates/compensation/detail/eco_account/view.html:58
#: intervention/forms.py:251 #: intervention/forms.py:251
#: intervention/templates/intervention/detail/view.html:104 #: intervention/templates/intervention/detail/view.html:104
msgid "Shared with" msgid "Shared with"
msgstr "Freigegeben für" msgstr "Freigegeben für"
#: compensation/templates/compensation/detail/view.html:84 #: compensation/templates/compensation/detail/compensation/view.html:84
#: compensation/templates/compensation/detail/eco_account/view.html:70
#: intervention/templates/intervention/detail/view.html:116 #: intervention/templates/intervention/detail/view.html:116
msgid "No geometry added, yet." msgid "No geometry added, yet."
msgstr "Keine Geometrie vorhanden" msgstr "Keine Geometrie vorhanden"
#: compensation/views.py:127 #: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:8
#: intervention/templates/intervention/detail/includes/withdraws.html:8
msgid "Eco Account Withdraws"
msgstr "Ökokonto Abbuchungen"
#: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:14
#: intervention/templates/intervention/detail/includes/withdraws.html:14
msgid "Add new withdraw"
msgstr "Neue Abbuchung hinzufügen"
#: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:30
msgid "Intervention Identifier"
msgstr "Eingriffskennung"
#: compensation/templates/compensation/detail/eco_account/includes/withdraws.html:51
#: intervention/templates/intervention/detail/includes/withdraws.html:54
msgid "Remove Withdraw"
msgstr "Abbuchung entfernen"
#: compensation/views/compensation_views.py:121
#: compensation/views/eco_account_views.py:184 intervention/views.py:391
msgid "Log" msgid "Log"
msgstr "Log" msgstr "Log"
#: compensation/views.py:148 #: compensation/views/compensation_views.py:142
msgid "Compensation removed" msgid "Compensation removed"
msgstr "Kompensation entfernt" msgstr "Kompensation entfernt"
#: compensation/views.py:228 #: compensation/views/compensation_views.py:161
msgid "Payment added" #: compensation/views/eco_account_views.py:261 intervention/views.py:96
msgstr "Zahlung hinzugefügt"
#: compensation/views.py:263
msgid "Payment removed"
msgstr "Zahlung gelöscht"
#: compensation/views.py:289
msgid "Withdraw removed"
msgstr "Abbuchung entfernt"
#: compensation/views.py:307 intervention/views.py:96
msgid "Document added" msgid "Document added"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
#: compensation/views.py:326 #: compensation/views/compensation_views.py:180
#: compensation/views/eco_account_views.py:205
msgid "State added" msgid "State added"
msgstr "Zustand hinzugefügt" msgstr "Zustand hinzugefügt"
#: compensation/views.py:345 #: compensation/views/compensation_views.py:199
#: compensation/views/eco_account_views.py:224
msgid "Action added" msgid "Action added"
msgstr "Maßnahme hinzugefügt" msgstr "Maßnahme hinzugefügt"
#: compensation/views.py:364 #: compensation/views/compensation_views.py:218
#: compensation/views/eco_account_views.py:243
msgid "Deadline added" msgid "Deadline added"
msgstr "Frist hinzugefügt" msgstr "Frist hinzugefügt"
#: compensation/views.py:383 #: compensation/views/compensation_views.py:237
msgid "State removed" msgid "State removed"
msgstr "Zustand gelöscht" msgstr "Zustand gelöscht"
#: compensation/views.py:402 #: compensation/views/compensation_views.py:256
msgid "Action removed" msgid "Action removed"
msgstr "Maßnahme entfernt" msgstr "Maßnahme entfernt"
#: compensation/views/eco_account_views.py:134
msgid "Eco-account removed"
msgstr "Ökokonto entfernt"
#: compensation/views/eco_account_views.py:161
msgid "Withdraw removed"
msgstr "Abbuchung entfernt"
#: compensation/views/payment_views.py:43
msgid "Payment added"
msgstr "Zahlung hinzugefügt"
#: compensation/views/payment_views.py:78
msgid "Payment removed"
msgstr "Zahlung gelöscht"
#: intervention/filters.py:25 #: intervention/filters.py:25
msgid "Show unshared" msgid "Show unshared"
msgstr "Nicht freigegebene anzeigen" msgstr "Nicht freigegebene anzeigen"
@ -622,7 +706,7 @@ msgstr "Datum des Widerspruchs"
msgid "Document" msgid "Document"
msgstr "Dokument" msgstr "Dokument"
#: intervention/forms.py:331 konova/forms.py:279 #: intervention/forms.py:331 konova/forms.py:278
msgid "Must be smaller than 15 Mb" msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein" msgstr "Muss kleiner als 15 Mb sein"
@ -652,11 +736,19 @@ msgstr ""
"Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt " "Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt "
"wurden:" "wurden:"
#: intervention/models.py:216 #: intervention/models.py:203
#: intervention/templates/intervention/detail/view.html:23
#: intervention/templates/intervention/detail/view.html:27
#: intervention/templates/intervention/detail/view.html:31
#: intervention/templates/intervention/detail/view.html:39
#: intervention/templates/intervention/detail/view.html:51
#: intervention/templates/intervention/detail/view.html:83
#: intervention/templates/intervention/detail/view.html:87
#: intervention/templates/intervention/detail/view.html:91
msgid "Missing" msgid "Missing"
msgstr "Fehlt" msgstr "Fehlt"
#: intervention/models.py:217 #: intervention/models.py:204
msgid "Exists" msgid "Exists"
msgstr "Existiert" msgstr "Existiert"
@ -670,6 +762,14 @@ msgstr "Eingriffe"
msgid "Intervention" msgid "Intervention"
msgstr "Eingriff" msgstr "Eingriff"
#: intervention/tables.py:179
msgid "Edit {}"
msgstr "Bearbeite {}"
#: intervention/tables.py:183
msgid "Delete {}"
msgstr "Lösche {}"
#: intervention/templates/intervention/detail/includes/compensations.html:14 #: intervention/templates/intervention/detail/includes/compensations.html:14
msgid "Add new compensation" msgid "Add new compensation"
msgstr "Neue Kompensation hinzufügen" msgstr "Neue Kompensation hinzufügen"
@ -682,22 +782,6 @@ msgstr "Kompensation entfernen"
msgid "Record" msgid "Record"
msgstr "Verzeichnen" msgstr "Verzeichnen"
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:8
msgid "Eco Account Withdraws"
msgstr "Ökokonto Abbuchungen"
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:14
msgid "Add new withdraw"
msgstr "Neue Abbuchung hinzufügen"
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:30
msgid "Account Identifier"
msgstr "Ökokonto Kennung"
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:51
msgid "Remove Withdraw"
msgstr "Abbuchung entfernen"
#: intervention/templates/intervention/detail/includes/payments.html:8 #: intervention/templates/intervention/detail/includes/payments.html:8
msgid "Payments" msgid "Payments"
msgstr "Ersatzzahlungen" msgstr "Ersatzzahlungen"
@ -733,6 +817,14 @@ msgstr "Vom"
msgid "Remove revocation" msgid "Remove revocation"
msgstr "Widerspruch entfernen" msgstr "Widerspruch entfernen"
#: intervention/templates/intervention/detail/includes/withdraws.html:30
msgid "Account Identifier"
msgstr "Ökokonto Kennung"
#: intervention/templates/intervention/detail/includes/withdraws.html:42
msgid "Eco-account deleted! Withdraw invalid!"
msgstr "Ökokonto gelöscht! Abbuchung ungültig!"
#: intervention/templates/intervention/detail/view.html:28 #: intervention/templates/intervention/detail/view.html:28
msgid "Process type" msgid "Process type"
msgstr "Verfahrenstyp" msgstr "Verfahrenstyp"
@ -848,36 +940,40 @@ msgstr ""
msgid "You need to be part of another user group." msgid "You need to be part of another user group."
msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!" msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
#: konova/forms.py:65 #: konova/forms.py:64
msgid "Not editable" msgid "Not editable"
msgstr "Nicht editierbar" msgstr "Nicht editierbar"
#: konova/forms.py:91 konova/forms.py:227 #: konova/forms.py:90 konova/forms.py:226
msgid "Confirm" msgid "Confirm"
msgstr "Bestätige" msgstr "Bestätige"
#: konova/forms.py:103 konova/forms.py:236 #: konova/forms.py:102 konova/forms.py:235
msgid "Remove" msgid "Remove"
msgstr "Löschen" msgstr "Löschen"
#: konova/forms.py:105 #: konova/forms.py:104
msgid "You are about to remove {} {}" msgid "You are about to remove {} {}"
msgstr "Sie sind dabei {} {} zu löschen" msgstr "Sie sind dabei {} {} zu löschen"
#: konova/forms.py:237 #: konova/forms.py:236
msgid "Are you sure?" msgid "Are you sure?"
msgstr "Sind Sie sicher?" msgstr "Sind Sie sicher?"
#: konova/forms.py:267 #: konova/forms.py:264
msgid "Created on"
msgstr "Erstellt"
#: konova/forms.py:266
msgid "When has this file been created? Important for photos." msgid "When has this file been created? Important for photos."
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?" msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
#: konova/forms.py:277 #: konova/forms.py:276
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
msgid "File" msgid "File"
msgstr "Datei" msgstr "Datei"
#: konova/forms.py:327 #: konova/forms.py:326
msgid "Added document" msgid "Added document"
msgstr "Dokument hinzugefügt" msgstr "Dokument hinzugefügt"
@ -905,19 +1001,19 @@ msgstr "Wenn meine freigegebenen Daten gelöscht wurden"
msgid "On registered data edited" msgid "On registered data edited"
msgstr "Wenn meine freigegebenen Daten bearbeitet wurden" msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
#: konova/models.py:110 #: konova/models.py:126
msgid "Finished" msgid "Finished"
msgstr "Umgesetzt bis" msgstr "Umgesetzt bis"
#: konova/models.py:111 #: konova/models.py:127
msgid "Maintain" msgid "Maintain"
msgstr "Unterhaltung bis" msgstr "Unterhaltung bis"
#: konova/models.py:112 #: konova/models.py:128
msgid "Control" msgid "Control"
msgstr "Kontrolle am" msgstr "Kontrolle am"
#: konova/models.py:113 #: konova/models.py:129
msgid "Other" msgid "Other"
msgstr "Sonstige" msgstr "Sonstige"
@ -949,10 +1045,6 @@ msgstr "Neu"
msgid "Show" msgid "Show"
msgstr "Anzeigen" msgstr "Anzeigen"
#: konova/templates/konova/home.html:88 templates/navbar.html:34
msgid "Eco-account"
msgstr "Ökokonto"
#: konova/templates/konova/home.html:130 #: konova/templates/konova/home.html:130
msgid "Withdraw" msgid "Withdraw"
msgstr "Abbuchen" msgstr "Abbuchen"
@ -2377,6 +2469,9 @@ msgstr ""
msgid "A fontawesome icon field" msgid "A fontawesome icon field"
msgstr "" msgstr ""
#~ msgid "Actions"
#~ msgstr "Aktionen"
#~ msgid "Additional comment" #~ msgid "Additional comment"
#~ msgstr "Zusätzlicher Kommentar" #~ msgstr "Zusätzlicher Kommentar"
@ -2523,9 +2618,6 @@ msgstr ""
#~ msgid "official" #~ msgid "official"
#~ msgstr "bestandskräftig" #~ msgstr "bestandskräftig"
#~ msgid "Intervention identifier"
#~ msgstr "Eingriffskennung"
#~ msgid "" #~ msgid ""
#~ "A process is based on an intervention. Please fill in the missing data " #~ "A process is based on an intervention. Please fill in the missing data "
#~ "for this intervention" #~ "for this intervention"