Compare commits

..

No commits in common. "b17b0b5144145e4136cf399251c945fe00ed0cb9" and "0fb27f979f3c175639a720b05dcff1f16ada7115" have entirely different histories.

64 changed files with 722 additions and 953 deletions

View File

@ -339,13 +339,13 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix
super().__init__(*args, **kwargs)
self.form_title = _("New Eco-Account")
self.action_url = reverse("compensation:acc:new")
self.cancel_redirect = reverse("compensation:acc:index")
self.action_url = reverse("compensation:acc-new")
self.cancel_redirect = reverse("compensation:acc-index")
tmp = EcoAccount()
identifier = tmp.generate_new_identifier()
self.initialize_form_field("identifier", identifier)
self.fields["identifier"].widget.attrs["url"] = reverse_lazy("compensation:acc:new-id")
self.fields["identifier"].widget.attrs["url"] = reverse_lazy("compensation:acc-new-id")
self.fields["title"].widget.attrs["placeholder"] = _("Eco-Account XY; Location ABC")
def save(self, user: User, geom_form: SimpleGeomForm):
@ -402,8 +402,8 @@ class EditEcoAccountForm(NewEcoAccountForm):
super().__init__(*args, **kwargs)
self.form_title = _("Edit Eco-Account")
self.action_url = reverse("compensation:acc:edit", args=(self.instance.id,))
self.cancel_redirect = reverse("compensation:acc:detail", args=(self.instance.id,))
self.action_url = reverse("compensation:acc-edit", args=(self.instance.id,))
self.cancel_redirect = reverse("compensation:acc-detail", args=(self.instance.id,))
# Initialize form data
reg_date = self.instance.legal.registration_date

View File

@ -21,7 +21,7 @@ from konova.contexts import BaseContext
from konova.forms import BaseModalForm, NewDocumentForm
from konova.models import DeadlineType
from konova.utils.message_templates import FORM_INVALID, ADDED_COMPENSATION_STATE, ADDED_DEADLINE, \
ADDED_COMPENSATION_ACTION, PAYMENT_ADDED
ADDED_COMPENSATION_ACTION
class NewPaymentForm(BaseModalForm):
@ -100,7 +100,7 @@ class NewPaymentForm(BaseModalForm):
def save(self):
pay = self.instance.add_payment(self)
self.instance.mark_as_edited(self.user, self.request, edit_comment=PAYMENT_ADDED)
self.instance.mark_as_edited(self.user, self.request)
return pay
@ -346,9 +346,10 @@ class NewActionModalForm(BaseModalForm):
)
comment = forms.CharField(
required=False,
max_length=200,
label=_("Comment"),
label_suffix=_(""),
help_text=_("Additional comment"),
help_text=_("Additional comment, maximum {} letters").format(200),
widget=forms.Textarea(
attrs={
"rows": 5,

View File

@ -326,7 +326,7 @@ class Compensation(AbstractCompensation, CEFMixin, CoherenceMixin):
Returns:
"""
return self.intervention.mark_as_edited(user, request, edit_comment, reset_recorded)
self.intervention.mark_as_edited(user, request, edit_comment, reset_recorded)
def is_ready_for_publish(self) -> bool:
""" Not inherited by RecordableObjectMixin

View File

@ -7,12 +7,10 @@ Created on: 16.11.21
"""
import shutil
from django.urls import reverse
from konova.utils.message_templates import DEDUCTION_REMOVED
from user.models import User
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator
from django.db import models
from django.db import models, transaction
from django.db.models import Sum, QuerySet
from django.utils.translation import gettext_lazy as _
@ -22,6 +20,7 @@ from compensation.utils.quality import EcoAccountQualityChecker
from konova.models import ShareableObjectMixin, RecordableObjectMixin, AbstractDocument, BaseResource, \
generate_document_file_upload_path
from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE
from user.models import UserActionLogEntry
class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin):
@ -166,6 +165,34 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
)
return docs
def add_deduction(self, form):
""" Adds a new deduction to the intervention
Args:
form (NewDeductionModalForm): The form holding the data
Returns:
"""
form_data = form.cleaned_data
user = form.user
with transaction.atomic():
# Create log entry
user_action_create = UserActionLogEntry.get_created_action(user)
user_action_edit = UserActionLogEntry.get_edited_action(user)
self.log.add(user_action_edit)
self.modified = user_action_edit
self.save()
deduction = EcoAccountDeduction.objects.create(
intervention=form_data["intervention"],
account=self,
surface=form_data["surface"],
created=user_action_create,
)
return deduction
def is_ready_for_publish(self) -> bool:
""" Checks whether the data passes all constraints for being publishable
@ -176,14 +203,6 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
is_ready = is_recorded
return is_ready
def get_share_link(self):
""" Returns the share url for the object
Returns:
"""
return reverse("compensation:acc:share", args=(self.id, self.access_token))
class EcoAccountDocument(AbstractDocument):
"""
@ -266,9 +285,3 @@ class EcoAccountDeduction(BaseResource):
def __str__(self):
return "{} of {}".format(self.surface, self.account)
def delete(self, user=None, *args, **kwargs):
if user is not None:
self.intervention.mark_as_edited(user, edit_comment=DEDUCTION_REMOVED)
self.account.mark_as_edited(user, edit_comment=DEDUCTION_REMOVED, reset_recorded=False)
super().delete(*args, **kwargs)

View File

@ -10,8 +10,6 @@ from django.db import models
from intervention.models import Intervention
from konova.models import BaseResource
from konova.utils.message_templates import PAYMENT_REMOVED
from user.models import UserActionLogEntry
class Payment(BaseResource):
@ -37,8 +35,3 @@ class Payment(BaseResource):
ordering = [
"-amount",
]
def delete(self, user=None, *args, **kwargs):
if user is not None:
self.intervention.mark_as_edited(user, edit_comment=PAYMENT_REMOVED)
super().delete(*args, **kwargs)

View File

@ -201,7 +201,7 @@ class EcoAccountTable(BaseTable, TableRenderMixin):
def __init__(self, request: HttpRequest, *args, **kwargs):
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,
@ -224,7 +224,7 @@ class EcoAccountTable(BaseTable, TableRenderMixin):
html = ""
html += self.render_link(
tooltip=_("Open {}").format(_("Eco-account")),
href=reverse("compensation:acc:detail", args=(record.id,)),
href=reverse("compensation:acc-detail", args=(record.id,)),
txt=value,
new_tab=False,
)

View File

@ -1,5 +1,4 @@
{% load i18n l10n fontawesome_5 humanize ksp_filters %}
{% load i18n l10n fontawesome_5 humanize %}
<div id="actions" class="card">
<div class="card-header rlp-r">
<div class="row">
@ -21,13 +20,16 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th class="" scope="col">
<th class="w-25" scope="col">
{% trans 'Action type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Action type details' %}
</th>
<th scope="col">
{% trans 'Amount' context 'Compensation' %}
</th>
@ -36,9 +38,7 @@
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -46,24 +46,19 @@
<tbody>
{% for action in actions %}
<tr>
<td class="">
<span>{{ action.action_type }}</span>
{% if action.action_type_details.count > 0 %}
<br>
{% for detail in action.action_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ action.action_type }}
</td>
<td class="">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
<td class="">
<div class="scroll-150">
{{ action.comment }}
</div>
<td class="align-middle">
{% for detail in action.action_type_details.all %}
<div class="mb-2" title="{{detail}}">{{detail.long_name}}</div>
{% endfor %}
</td>
<td class="">
<td class="align-middle">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
<td class="align-middle">{{ action.comment|default_if_none:"" }}</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:action-remove' obj.id action.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove action' %}">
<button data-form-url="{% url 'compensation:action-remove' obj.id action.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove action' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -35,9 +35,7 @@
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -49,14 +47,10 @@
{% trans deadline.type_humanized %}
</td>
<td class="align-middle">{{ deadline.date|default_if_none:"---" }}</td>
<td class="align-middle">
<div class="scroll-150">
{{ deadline.comment }}
</div>
</td>
<td class="align-middle">{{ deadline.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:deadline-remove' obj.id deadline.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove deadline' %}">
<button data-form-url="{% url 'deadline-remove' deadline.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove deadline' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -32,9 +32,7 @@
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -47,14 +45,10 @@
{{ doc.title }}
</a>
</td>
<td class="align-middle">
<div class="scroll-150">
{{ doc.comment }}
</div>
</td>
<td class="align-middle">
<td class="align-middle">{{ doc.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:remove-doc' doc.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove document' %}">
<button data-form-url="{% url 'compensation:remove-doc' doc.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove document' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,26 +20,27 @@
</div>
</div>
</div>
{% if sum_before_states > sum_after_states %}
<div class="alert alert-danger mb-0">
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<div class="card-body scroll-300 p-2">
<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 class="w-50" scope="col">
<th class="w-25" scope="col">
{% trans 'Biotope type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col">
{% trans 'Surface' %}
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -47,19 +48,20 @@
<tbody>
{% for state in after_states %}
<tr>
<td>
<span>{{ state.biotope_type }}</span>
{% if state.biotope_type_details.count > 0 %}
<br>
{% for detail in state.biotope_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ state.biotope_type }}
</td>
<td>{{ state.surface|floatformat:2 }} m²</td>
<td>
<td class="align-middle">
{% for biotope_extra in state.biotope_type_details.all %}
<div class="mb-2" title="{{ biotope_extra }}">
{{ biotope_extra.long_name }}
</div>
{% endfor %}
</td>
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:state-remove' obj.id state.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove state' %}">
<button data-form-url="{% url 'compensation:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,26 +20,27 @@
</div>
</div>
</div>
{% if sum_before_states < sum_after_states %}
<div class="alert alert-danger mb-0">
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<div class="card-body scroll-300 p-2">
<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 class="w-50" scope="col">
<th class="w-25" scope="col">
{% trans 'Biotope type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col">
{% trans 'Surface' %}
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -47,19 +48,20 @@
<tbody>
{% for state in before_states %}
<tr>
<td>
<span>{{ state.biotope_type }}</span>
{% if state.biotope_type_details.count > 0 %}
<br>
{% for detail in state.biotope_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ state.biotope_type }}
</td>
<td>{{ state.surface|floatformat:2 }} m²</td>
<td>
<td class="align-middle">
{% for biotope_extra in state.biotope_type_details.all %}
<div class="mb-2" title="{{ biotope_extra }}">
{{ biotope_extra.long_name }}
</div>
{% endfor %}
</td>
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:state-remove' obj.id state.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove state' %}">
<button data-form-url="{% url 'compensation:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -118,27 +118,26 @@
</div>
</div>
<hr>
<div id="related_data">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/states-before.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/states-after.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/states-before.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/actions.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/deadlines.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/states-after.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/documents.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/actions.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/deadlines.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/compensation/includes/documents.html' %}
</div>
</div>

View File

@ -1,4 +1,4 @@
{% load i18n l10n fontawesome_5 humanize ksp_filters %}
{% load i18n l10n fontawesome_5 humanize %}
<div id="actions" class="card">
<div class="card-header rlp-r">
<div class="row">
@ -11,7 +11,7 @@
<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' %}">
<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>
@ -20,24 +20,25 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th class="" scope="col">
<th class="w-25" scope="col">
{% trans 'Action type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Action type details' %}
</th>
<th scope="col">
{% trans 'Amount' context 'Compensation' %}
</th>
<th scope="col">
{% trans 'Comment' %}
</th>
{% if is_default_member and has_access %}
{% if default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -45,24 +46,19 @@
<tbody>
{% for action in actions %}
<tr>
<td class="">
<span>{{ action.action_type }}</span>
{% if action.action_type_details.count > 0 %}
<br>
{% for detail in action.action_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ action.action_type }}
</td>
<td class="">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
<td class="">
<div class="scroll-150">
{{ action.comment }}
</div>
<td class="align-middle">
{% for detail in action.action_type_details.all %}
<div class="mb-2" title="{{detail}}">{{detail.long_name}}</div>
{% endfor %}
</td>
<td class="">
<td class="align-middle">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
<td class="align-middle">{{ action.comment|default_if_none:"" }}</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:acc:action-remove' obj.id action.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove action' %}">
<button data-form-url="{% url 'compensation:acc-action-remove' obj.id action.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove action' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -6,36 +6,36 @@
LANIS
</button>
</a>
<a href="{% url 'compensation:acc:report' obj.id %}" target="_blank" class="mr-2">
<a href="{% url 'compensation:acc-report' obj.id %}" target="_blank" class="mr-2">
<button class="btn btn-default" title="{% trans 'Public report' %}">
{% fa5_icon 'file-alt' %}
</button>
</a>
{% if has_access %}
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Share' %}" data-form-url="{% url 'compensation:acc:share-create' obj.id %}">
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Share' %}" data-form-url="{% url 'compensation:share-create' obj.id %}">
{% fa5_icon 'share-alt' %}
</button>
{% if is_ets_member %}
{% if obj.recorded %}
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Unrecord' %}" data-form-url="{% url 'compensation:acc:record' obj.id %}">
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Unrecord' %}" data-form-url="{% url 'compensation:acc-record' obj.id %}">
{% fa5_icon 'bookmark' 'far' %}
</button>
{% else %}
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Record' %}" data-form-url="{% url 'compensation:acc:record' obj.id %}">
<button class="btn btn-default btn-modal mr-2" title="{% trans 'Record' %}" data-form-url="{% url 'compensation:acc-record' obj.id %}">
{% fa5_icon 'bookmark' %}
</button>
{% endif %}
{% endif %}
{% if is_default_member %}
<a href="{% url 'compensation:acc:edit' obj.id %}" class="mr-2">
<a href="{% url 'compensation:acc-edit' obj.id %}" 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' %}">
<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' %}">
<button class="btn btn-default btn-modal" data-form-url="{% url 'compensation:acc-remove' obj.id %}" title="{% trans 'Delete' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -11,7 +11,7 @@
<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' %}">
<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>
@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -34,9 +34,7 @@
{% trans 'Comment' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
@ -47,14 +45,10 @@
{% trans deadline.type_humanized %}
</td>
<td class="align-middle">{{ deadline.date|default_if_none:"---" }}</td>
<td class="align-middle">
<div class="scroll-150">
{{ deadline.comment }}
</div>
</td>
<td class="align-middle">
<td class="align-middle">{{ deadline.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:acc:deadline-remove' obj.id deadline.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove deadline' %}">
<button data-form-url="{% url 'deadline-remove' deadline.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove deadline' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -11,7 +11,7 @@
<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-deduction' obj.id %}" title="{% trans 'Add new deduction' %}">
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:acc-new-deduction' obj.id %}" title="{% trans 'Add new deduction' %}">
{% fa5_icon 'plus' %}
{% fa5_icon 'tree' %}
</button>
@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -37,9 +37,7 @@
{% trans 'Created' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
@ -62,7 +60,7 @@
<td class="align-middle">{{ deduction.created.timestamp|default_if_none:""|naturalday}}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:acc:remove-deduction' deduction.account.id deduction.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove Deduction' %}">
<button data-form-url="{% url 'compensation:acc-remove-deduction' deduction.account.id deduction.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove Deduction' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -11,7 +11,7 @@
<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' %}">
<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>
@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -31,9 +31,7 @@
{% trans 'Comment' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
@ -41,18 +39,14 @@
{% for doc in obj.documents.all %}
<tr>
<td class="align-middle">
<a href="{% url 'compensation:acc:get-doc' doc.id %}">
<a href="{% url 'compensation:acc-get-doc' doc.id %}">
{{ doc.title }}
</a>
</td>
<td class="align-middle">
<div class="scroll-150">
{{ doc.comment }}
</div>
</td>
<td class="align-middle">
<td class="align-middle">{{ doc.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:acc:remove-doc' doc.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove document' %}">
<button data-form-url="{% url 'compensation:acc-remove-doc' doc.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove document' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -11,7 +11,7 @@
<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' %}">
<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>
@ -20,26 +20,27 @@
</div>
</div>
</div>
{% if sum_before_states > sum_after_states %}
<div class="alert alert-danger mb-0">
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<div class="card-body scroll-300 p-2">
<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 class="w-50" scope="col">
<th class="w-25" scope="col">
{% trans 'Biotope type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col">
{% trans 'Surface' %}
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -47,19 +48,20 @@
<tbody>
{% for state in after_states %}
<tr>
<td>
<span>{{ state.biotope_type }}</span>
{% if state.biotope_type_details.count > 0 %}
<br>
{% for detail in state.biotope_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ state.biotope_type }}
</td>
<td>{{ state.surface|floatformat:2 }} m²</td>
<td>
<td class="align-middle">
{% for biotope_extra in state.biotope_type_details.all %}
<div class="mb-2" title="{{ biotope_extra }}">
{{ biotope_extra.long_name }}
</div>
{% endfor %}
</td>
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:acc:state-remove' obj.id state.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove state' %}">
<button data-form-url="{% url 'compensation:acc-state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -11,7 +11,7 @@
<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' %}">
<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>
@ -20,26 +20,27 @@
</div>
</div>
</div>
{% if sum_before_states < sum_after_states %}
<div class="alert alert-danger mb-0">
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<div class="card-body scroll-300 p-2">
<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 class="w-50" scope="col">
<th class="w-25" scope="col">
{% trans 'Biotope type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col">
{% trans 'Surface' %}
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -47,19 +48,20 @@
<tbody>
{% for state in before_states %}
<tr>
<td>
<span>{{ state.biotope_type }}</span>
{% if state.biotope_type_details.count > 0 %}
<br>
{% for detail in state.biotope_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ state.biotope_type }}
</td>
<td>{{ state.surface|floatformat:2 }} m²</td>
<td>
<td class="align-middle">
{% for biotope_extra in state.biotope_type_details.all %}
<div class="mb-2" title="{{ biotope_extra }}">
{{ biotope_extra.long_name }}
</div>
{% endfor %}
</td>
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:acc:state-remove' obj.id state.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove state' %}">
<button data-form-url="{% url 'compensation:acc-state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -102,30 +102,28 @@
</div>
<hr>
<div id="related_data">
<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 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="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 class="col-sm-12 col-md-12 col-lg-6">
{% include 'compensation/detail/eco_account/includes/states-after.html' %}
</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/deductions.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/deductions.html' %}
</div>
</div>

View File

@ -245,20 +245,20 @@ class EcoAccountViewTestCase(CompensationViewTestCase):
cls.eco_account.actions.set([action])
# Prepare urls
cls.index_url = reverse("compensation:acc:index", args=())
cls.new_url = reverse("compensation:acc:new", args=())
cls.new_id_url = reverse("compensation:acc:new-id", args=())
cls.detail_url = reverse("compensation:acc:detail", args=(cls.eco_account.id,))
cls.log_url = reverse("compensation:acc:log", args=(cls.eco_account.id,))
cls.edit_url = reverse("compensation:acc:edit", args=(cls.eco_account.id,))
cls.remove_url = reverse("compensation:acc:remove", args=(cls.eco_account.id,))
cls.report_url = reverse("compensation:acc:report", args=(cls.eco_account.id,))
cls.state_new_url = reverse("compensation:acc:new-state", args=(cls.eco_account.id,))
cls.action_new_url = reverse("compensation:acc:new-action", args=(cls.eco_account.id,))
cls.deadline_new_url = reverse("compensation:acc:new-deadline", args=(cls.eco_account.id,))
cls.new_doc_url = reverse("compensation:acc:new-doc", args=(cls.eco_account.id,))
cls.state_remove_url = reverse("compensation:acc:state-remove", args=(cls.eco_account.id, cls.comp_state.id,))
cls.action_remove_url = reverse("compensation:acc:action-remove", args=(cls.eco_account.id, cls.comp_action.id,))
cls.index_url = reverse("compensation:acc-index", args=())
cls.new_url = reverse("compensation:acc-new", args=())
cls.new_id_url = reverse("compensation:acc-new-id", args=())
cls.detail_url = reverse("compensation:acc-detail", args=(cls.eco_account.id,))
cls.log_url = reverse("compensation:acc-log", args=(cls.eco_account.id,))
cls.edit_url = reverse("compensation:acc-edit", args=(cls.eco_account.id,))
cls.remove_url = reverse("compensation:acc-remove", args=(cls.eco_account.id,))
cls.report_url = reverse("compensation:acc-report", args=(cls.eco_account.id,))
cls.state_new_url = reverse("compensation:acc-new-state", args=(cls.eco_account.id,))
cls.action_new_url = reverse("compensation:acc-new-action", args=(cls.eco_account.id,))
cls.deadline_new_url = reverse("compensation:acc-new-deadline", args=(cls.eco_account.id,))
cls.new_doc_url = reverse("compensation:acc-new-doc", args=(cls.eco_account.id,))
cls.state_remove_url = reverse("compensation:acc-state-remove", args=(cls.eco_account.id, cls.comp_state.id,))
cls.action_remove_url = reverse("compensation:acc-action-remove", args=(cls.eco_account.id, cls.comp_action.id,))
def test_logged_in_no_groups_shared(self):
""" Check correct status code for all requests

View File

@ -258,7 +258,7 @@ class EcoAccountWorkflowTestCase(BaseWorkflowTestCase):
self.intervention.share_with(self.superuser)
# Prepare data for deduction creation
deduct_url = reverse("compensation:acc:new-deduction", args=(self.eco_account.id,))
deduct_url = reverse("compensation:acc-new-deduction", args=(self.eco_account.id,))
test_surface = 10.00
post_data = {
"surface": test_surface,

View File

@ -23,7 +23,6 @@ urlpatterns = [
path('<id>/state/<state_id>/remove', state_remove_view, name='state-remove'),
path('<id>/action/<action_id>/remove', action_remove_view, name='action-remove'),
path('<id>/deadline/new', deadline_new_view, name="new-deadline"),
path('<id>/deadline/<deadline_id>/remove', deadline_remove_view, name='deadline-remove'),
path('<id>/report', report_view, name='report'),
# Documents

View File

@ -8,33 +8,31 @@ Created on: 24.08.21
from django.urls import path
from compensation.views.eco_account import *
app_name = "acc"
urlpatterns = [
path("", index_view, name="index"),
path('new/', new_view, name='new'),
path('new/id', new_id_view, name='new-id'),
path('<id>', detail_view, name='detail'),
path('<id>/log', log_view, name='log'),
path('<id>/record', record_view, name='record'),
path('<id>/report', report_view, name='report'),
path('<id>/edit', edit_view, name='edit'),
path('<id>/remove', remove_view, name='remove'),
path('<id>/state/new', state_new_view, name='new-state'),
path('<id>/action/new', action_new_view, name='new-action'),
path('<id>/state/<state_id>/remove', state_remove_view, name='state-remove'),
path('<id>/action/<action_id>/remove', action_remove_view, name='action-remove'),
path('<id>/deadline/<deadline_id>/remove', deadline_remove_view, name='deadline-remove'),
path('<id>/deadline/new', deadline_new_view, name="new-deadline"),
path("", index_view, name="acc-index"),
path('new/', new_view, name='acc-new'),
path('new/id', new_id_view, name='acc-new-id'),
path('<id>', detail_view, name='acc-detail'),
path('<id>/log', log_view, name='acc-log'),
path('<id>/record', record_view, name='acc-record'),
path('<id>/report', report_view, name='acc-report'),
path('<id>/edit', edit_view, name='acc-edit'),
path('<id>/remove', remove_view, name='acc-remove'),
path('<id>/state/new', state_new_view, name='acc-new-state'),
path('<id>/action/new', action_new_view, name='acc-new-action'),
path('<id>/state/<state_id>/remove', state_remove_view, name='acc-state-remove'),
path('<id>/action/<action_id>/remove', action_remove_view, name='acc-action-remove'),
path('<id>/deadline/new', deadline_new_view, name="acc-new-deadline"),
path('<id>/share/<token>', share_view, name='share'),
path('<id>/share', create_share_view, name='share-create'),
# Documents
path('<id>/document/new/', new_document_view, name='new-doc'),
path('document/<doc_id>', get_document_view, name='get-doc'),
path('document/<doc_id>/remove/', remove_document_view, name='remove-doc'),
path('<id>/document/new/', new_document_view, name='acc-new-doc'),
path('document/<doc_id>', get_document_view, name='acc-get-doc'),
path('document/<doc_id>/remove/', remove_document_view, name='acc-remove-doc'),
# Eco-account deductions
path('<id>/remove/<deduction_id>', deduction_remove_view, name='remove-deduction'),
path('<id>/deduct/new', new_deduction_view, name='new-deduction'),
path('<id>/remove/<deduction_id>', deduction_remove_view, name='acc-remove-deduction'),
path('<id>/deduct/new', new_deduction_view, name='acc-new-deduction'),
]

View File

@ -8,8 +8,7 @@ Created on: 24.08.21
from django.urls import path
from compensation.views.payment import *
app_name = "pay"
urlpatterns = [
path('<intervention_id>/new', new_payment_view, name='new'),
path('<id>/remove', payment_remove_view, name='remove'),
path('<intervention_id>/new', new_payment_view, name='pay-new'),
path('<id>/remove', payment_remove_view, name='pay-remove'),
]

View File

@ -10,6 +10,6 @@ from django.urls import path, include
app_name = "compensation"
urlpatterns = [
path("", include("compensation.urls.compensation")),
path("acc/", include("compensation.urls.eco_account", namespace="acc")),
path("pay/", include("compensation.urls.payment", namespace="pay")),
path("acc/", include("compensation.urls.eco_account")),
path("pay/", include("compensation.urls.payment")),
]

View File

@ -13,7 +13,6 @@ from intervention.models import Intervention
from konova.contexts import BaseContext
from konova.decorators import *
from konova.forms import RemoveModalForm, SimpleGeomForm
from konova.models import Deadline
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.documents import get_document, remove_document
from konova.utils.generators import generate_qr_code
@ -277,8 +276,7 @@ def new_document_view(request: HttpRequest, id: str):
form = NewCompensationDocumentForm(request.POST or None, request.FILES or None, instance=comp, request=request)
return form.process_request(
request,
msg_success=_("Document added"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
msg_success=_("Document added")
)
@ -347,8 +345,7 @@ def state_new_view(request: HttpRequest, id: str):
form = NewStateModalForm(request.POST or None, instance=comp, request=request)
return form.process_request(
request,
msg_success=_("State added"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
msg_success=_("State added")
)
@ -369,8 +366,7 @@ def action_new_view(request: HttpRequest, id: str):
form = NewActionModalForm(request.POST or None, instance=comp, request=request)
return form.process_request(
request,
msg_success=_("Action added"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
msg_success=_("Action added")
)
@ -391,31 +387,7 @@ def deadline_new_view(request: HttpRequest, id: str):
form = NewDeadlineModalForm(request.POST or None, instance=comp, request=request)
return form.process_request(
request,
msg_success=_("Deadline added"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
)
@login_required
@default_group_required
@shared_access_required(Compensation, "id")
def deadline_remove_view(request: HttpRequest, id: str, deadline_id: str):
""" Renders a form for removing deadlines from a compensation
Args:
request (HttpRequest): The incoming request
id (str): The compensation's id
deadline_id (str): The deadline's id
Returns:
"""
deadline = get_object_or_404(Deadline, id=deadline_id)
form = RemoveModalForm(request.POST or None, instance=deadline, request=request)
return form.process_request(
request,
msg_success=_("Deadline removed"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
msg_success=_("Deadline added")
)
@ -437,8 +409,7 @@ def state_remove_view(request: HttpRequest, id: str, state_id: str):
form = RemoveModalForm(request.POST or None, instance=state, request=request)
return form.process_request(
request,
msg_success=_("State removed"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
msg_success=_("State removed")
)
@ -460,8 +431,7 @@ def action_remove_view(request: HttpRequest, id: str, action_id: str):
form = RemoveModalForm(request.POST or None, instance=action, request=request)
return form.process_request(
request,
msg_success=_("Action removed"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
msg_success=_("Action removed")
)

View File

@ -24,13 +24,12 @@ from konova.contexts import BaseContext
from konova.decorators import any_group_check, default_group_required, conservation_office_group_required, \
shared_access_required
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm, RecordModalForm
from konova.models import Deadline
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.documents import get_document, remove_document
from konova.utils.generators import generate_qr_code
from konova.utils.message_templates import IDENTIFIER_REPLACED, FORM_INVALID, DATA_UNSHARED, DATA_UNSHARED_EXPLANATION, \
CANCEL_ACC_RECORDED_OR_DEDUCTED, DEDUCTION_REMOVED, DEDUCTION_ADDED
CANCEL_ACC_RECORDED_OR_DEDUCTED
from konova.utils.user_checks import in_group
@ -90,7 +89,7 @@ def new_view(request: HttpRequest):
)
)
messages.success(request, _("Eco-Account {} added").format(acc.identifier))
return redirect("compensation:acc:detail", id=acc.id)
return redirect("compensation:acc-detail", id=acc.id)
else:
messages.error(request, FORM_INVALID, extra_tags="danger",)
else:
@ -148,7 +147,7 @@ def edit_view(request: HttpRequest, id: str):
# The data form takes the geom form for processing, as well as the performing user
acc = data_form.save(request.user, geom_form)
messages.success(request, _("Eco-Account {} edited").format(acc.identifier))
return redirect("compensation:acc:detail", id=acc.id)
return redirect("compensation:acc-detail", id=acc.id)
else:
messages.error(request, FORM_INVALID, extra_tags="danger",)
else:
@ -255,13 +254,13 @@ def remove_view(request: HttpRequest, id: str):
user = request.user
if not in_group(user, ETS_GROUP):
messages.info(request, CANCEL_ACC_RECORDED_OR_DEDUCTED)
return redirect("compensation:acc:detail", id=id)
return redirect("compensation:acc-detail", id=id)
form = RemoveModalForm(request.POST or None, instance=acc, request=request)
return form.process_request(
request=request,
msg_success=_("Eco-account removed"),
redirect_url=reverse("compensation:acc:index"),
redirect_url=reverse("compensation:acc-index"),
)
@ -288,8 +287,7 @@ def deduction_remove_view(request: HttpRequest, id: str, deduction_id: str):
form = RemoveModalForm(request.POST or None, instance=eco_deduction, request=request)
return form.process_request(
request=request,
msg_success=DEDUCTION_REMOVED,
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
msg_success=_("Deduction removed")
)
@ -359,8 +357,7 @@ def state_new_view(request: HttpRequest, id: str):
form = NewStateModalForm(request.POST or None, instance=acc, request=request)
return form.process_request(
request,
msg_success=_("State added"),
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
msg_success=_("State added")
)
@ -381,8 +378,7 @@ def action_new_view(request: HttpRequest, id: str):
form = NewActionModalForm(request.POST or None, instance=acc, request=request)
return form.process_request(
request,
msg_success=_("Action added"),
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
msg_success=_("Action added")
)
@ -404,8 +400,7 @@ def state_remove_view(request: HttpRequest, id: str, state_id: str):
form = RemoveModalForm(request.POST or None, instance=state, request=request)
return form.process_request(
request,
msg_success=_("State removed"),
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
msg_success=_("State removed")
)
@ -427,31 +422,7 @@ def action_remove_view(request: HttpRequest, id: str, action_id: str):
form = RemoveModalForm(request.POST or None, instance=action, request=request)
return form.process_request(
request,
msg_success=_("Action removed"),
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
)
@login_required
@default_group_required
@shared_access_required(EcoAccount, "id")
def deadline_remove_view(request: HttpRequest, id: str, deadline_id: str):
""" Renders a form for removing deadlines from a compensation
Args:
request (HttpRequest): The incoming request
id (str): The compensation's id
deadline_id (str): The deadline's id
Returns:
"""
deadline = get_object_or_404(Deadline, id=deadline_id)
form = RemoveModalForm(request.POST or None, instance=deadline, request=request)
return form.process_request(
request,
msg_success=_("Deadline removed"),
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
msg_success=_("Action removed")
)
@ -472,8 +443,7 @@ def deadline_new_view(request: HttpRequest, id: str):
form = NewDeadlineModalForm(request.POST or None, instance=acc, request=request)
return form.process_request(
request,
msg_success=_("Deadline added"),
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
msg_success=_("Deadline added")
)
@ -493,8 +463,7 @@ def new_document_view(request: HttpRequest, id: str):
form = NewEcoAccountDocumentForm(request.POST or None, request.FILES or None, instance=acc, request=request)
return form.process_request(
request,
msg_success=_("Document added"),
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data",
msg_success=_("Document added")
)
@ -521,7 +490,7 @@ def get_document_view(request: HttpRequest, doc_id: str):
request,
DATA_UNSHARED
)
return redirect("compensation:acc:detail", id=instance.id)
return redirect("compensation:acc-detail", id=instance.id)
return get_document(doc)
@ -564,8 +533,7 @@ def new_deduction_view(request: HttpRequest, id: str):
form = NewDeductionModalForm(request.POST or None, instance=acc, request=request)
return form.process_request(
request,
msg_success=DEDUCTION_ADDED,
redirect_url=reverse("compensation:acc:detail", args=(id,)) + "#related_data"
msg_success=_("Deduction added")
)
@ -664,7 +632,7 @@ def share_view(request: HttpRequest, id: str, token: str):
_("{} has been shared with you").format(obj.identifier)
)
obj.share_with(user)
return redirect("compensation:acc:detail", id=id)
return redirect("compensation:acc-detail", id=id)
else:
messages.error(
request,

View File

@ -5,7 +5,6 @@ Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 09.08.21
"""
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.decorators import login_required
from django.http import HttpRequest
@ -16,7 +15,6 @@ from compensation.models import Payment
from intervention.models import Intervention
from konova.decorators import default_group_required
from konova.forms import RemoveModalForm
from konova.utils.message_templates import PAYMENT_ADDED, PAYMENT_REMOVED
@login_required
@ -35,8 +33,7 @@ def new_payment_view(request: HttpRequest, intervention_id: str):
form = NewPaymentForm(request.POST or None, instance=intervention, request=request)
return form.process_request(
request,
msg_success=PAYMENT_ADDED,
redirect_url=reverse("intervention:detail", args=(intervention_id,)) + "#related_data"
msg_success=_("Payment added")
)
@ -56,7 +53,6 @@ def payment_remove_view(request: HttpRequest, id: str):
form = RemoveModalForm(request.POST or None, instance=payment, request=request)
return form.process_request(
request=request,
msg_success=PAYMENT_REMOVED,
redirect_url=reverse("intervention:detail", args=(payment.intervention_id,)) + "#related_data"
msg_success=_("Payment removed"),
)

View File

@ -11,7 +11,6 @@ from django.contrib import messages
from django.db import models
from django.db.models import QuerySet
from django.http import HttpRequest
from django.urls import reverse
from compensation.models import AbstractCompensation
from ema.managers import EmaManager
@ -120,14 +119,6 @@ class Ema(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin):
is_ready = is_recorded
return is_ready
def get_share_link(self):
""" Returns the share url for the object
Returns:
"""
return reverse("ema:share", args=(self.id, self.access_token))
class EmaDocument(AbstractDocument):
"""

View File

@ -1,4 +1,4 @@
{% load i18n l10n fontawesome_5 humanize ksp_filters %}
{% load i18n l10n fontawesome_5 humanize %}
<div id="actions" class="card">
<div class="card-header rlp-r">
<div class="row">
@ -20,13 +20,16 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th class="w-25" scope="col">
{% trans 'Action type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Action type details' %}
</th>
<th scope="col">
{% trans 'Amount' context 'Compensation' %}
</th>
@ -34,33 +37,26 @@
{% trans 'Comment' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
<tbody>
{% for action in obj.actions.all %}
<tr>
<td class="">
<span>{{ action.action_type }}</span>
{% if action.action_type_details.count > 0 %}
<br>
{% for detail in action.action_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ action.action_type }}
</td>
<td class="">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
<td class="">
<div class="scroll-150">
{{ action.comment }}
</div>
<td class="align-middle">
{% for detail in action.action_type_details.all %}
<div class="mb-2" title="{{detail}}">{{detail.long_name}}</div>
{% endfor %}
</td>
<td class="">
<td class="align-middle">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
<td class="align-middle">{{ action.comment|default_if_none:"" }}</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'ema:action-remove' obj.id action.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove action' %}">
<button data-form-url="{% url 'ema:action-remove' obj.id action.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove action' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -34,9 +34,7 @@
{% trans 'Comment' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
@ -47,14 +45,10 @@
{% trans deadline.type_humanized %}
</td>
<td class="align-middle">{{ deadline.date|default_if_none:"---" }}</td>
<td class="align-middle">
<div class="scroll-150">
{{ deadline.comment }}
</div>
</td>
<td class="align-middle">
<td class="align-middle">{{ deadline.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'ema:deadline-remove' obj.id deadline.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove deadline' %}">
<button data-form-url="{% url 'deadline-remove' deadline.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove deadline' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -31,9 +31,7 @@
{% trans 'Comment' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
@ -45,14 +43,10 @@
{{ doc.title }}
</a>
</td>
<td class="align-middle">
<div class="scroll-150">
{{ doc.comment }}
</div>
</td>
<td class="align-middle">
<td class="align-middle">{{ doc.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'ema:remove-doc' doc.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove document' %}">
<button data-form-url="{% url 'ema:remove-doc' doc.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove document' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,44 +20,46 @@
</div>
</div>
</div>
{% if sum_before_states > sum_after_states %}
<div class="alert alert-danger mb-0">
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<div class="card-body scroll-300 p-2">
<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 class="w-50" scope="col">
<th class="w-25" scope="col">
{% trans 'Biotope type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col">
{% trans 'Surface' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
<tbody>
{% for state in after_states %}
<tr>
<td>
<span>{{ state.biotope_type }}</span>
{% if state.biotope_type_details.count > 0 %}
<br>
{% for detail in state.biotope_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ state.biotope_type }}
</td>
<td>{{ state.surface|floatformat:2 }} m²</td>
<td>
<td class="align-middle">
{% for biotope_extra in state.biotope_type_details.all %}
<div class="mb-2" title="{{ biotope_extra }}">
{{ biotope_extra.long_name }}
</div>
{% endfor %}
</td>
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'ema:state-remove' obj.id state.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove state' %}">
<button data-form-url="{% url 'ema:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,44 +20,46 @@
</div>
</div>
</div>
{% if sum_before_states < sum_after_states %}
<div class="alert alert-danger mb-0">
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
</div>
{% endif %}
<div class="card-body scroll-300 p-2">
<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 class="w-50" scope="col">
<th class="w-25" scope="col">
{% trans 'Biotope type' %}
</th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col">
{% trans 'Surface' %}
</th>
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
</tr>
</thead>
<tbody>
{% for state in before_states %}
<tr>
<td>
<span>{{ state.biotope_type }}</span>
{% if state.biotope_type_details.count > 0 %}
<br>
{% for detail in state.biotope_type_details.all %}
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
{% endfor %}
{% endif %}
<td class="align-middle">
{{ state.biotope_type }}
</td>
<td>{{ state.surface|floatformat:2 }} m²</td>
<td>
<td class="align-middle">
{% for biotope_extra in state.biotope_type_details.all %}
<div class="mb-2" title="{{ biotope_extra }}">
{{ biotope_extra.long_name }}
</div>
{% endfor %}
</td>
<td class="align-middle">{{ state.surface|floatformat:2 }} m²</td>
<td class="align-middle">
{% if is_default_member and has_access %}
<button data-form-url="{% url 'ema:state-remove' obj.id state.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove state' %}">
<button data-form-url="{% url 'ema:state-remove' obj.id state.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove state' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -95,27 +95,26 @@
</div>
</div>
<hr>
<div id="related_data">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/states-before.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/states-after.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/states-before.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/actions.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/deadlines.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/states-after.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/documents.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/actions.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/deadlines.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'ema/detail/includes/documents.html' %}
</div>
</div>

View File

@ -23,12 +23,12 @@ urlpatterns = [
path('<id>/action/new', action_new_view, name='new-action'),
path('<id>/state/<state_id>/remove', state_remove_view, name='state-remove'),
path('<id>/action/<action_id>/remove', action_remove_view, name='action-remove'),
path('<id>/deadline/<deadline_id>/remove', deadline_remove_view, name='deadline-remove'),
path('<id>/deadline/new', deadline_new_view, name="new-deadline"),
path('<id>/share/<token>', share_view, name='share'),
path('<id>/share', create_share_view, name='share-create'),
# Documents
# Document remove route can be found in konova/urls.py
path('<id>/document/new/', document_new_view, name='new-doc'),
path('document/<doc_id>', get_document_view, name='get-doc'),
path('document/<doc_id>/remove/', remove_document_view, name='remove-doc'),

View File

@ -15,7 +15,6 @@ from konova.contexts import BaseContext
from konova.decorators import conservation_office_group_required, shared_access_required
from ema.models import Ema, EmaDocument
from konova.forms import RemoveModalForm, SimpleGeomForm, RecordModalForm
from konova.models import Deadline
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.documents import get_document, remove_document
@ -291,8 +290,7 @@ def state_new_view(request: HttpRequest, id: str):
form = NewStateModalForm(request.POST or None, instance=ema, request=request)
return form.process_request(
request,
msg_success=_("State added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
msg_success=_("State added")
)
@ -313,8 +311,7 @@ def action_new_view(request: HttpRequest, id: str):
form = NewActionModalForm(request.POST or None, instance=ema, request=request)
return form.process_request(
request,
msg_success=_("Action added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
msg_success=_("Action added")
)
@ -335,8 +332,7 @@ def deadline_new_view(request: HttpRequest, id: str):
form = NewDeadlineModalForm(request.POST or None, instance=ema, request=request)
return form.process_request(
request,
msg_success=_("Deadline added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
msg_success=_("Deadline added")
)
@ -356,8 +352,7 @@ def document_new_view(request: HttpRequest, id: str):
form = NewEmaDocumentForm(request.POST or None, request.FILES or None, instance=ema, request=request)
return form.process_request(
request,
msg_success=_("Document added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
msg_success=_("Document added")
)
@ -427,8 +422,7 @@ def state_remove_view(request: HttpRequest, id: str, state_id: str):
form = RemoveModalForm(request.POST or None, instance=state, request=request)
return form.process_request(
request,
msg_success=_("State removed"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
msg_success=_("State removed")
)
@ -450,8 +444,7 @@ def action_remove_view(request: HttpRequest, id: str, action_id: str):
form = RemoveModalForm(request.POST or None, instance=action, request=request)
return form.process_request(
request,
msg_success=_("Action removed"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
msg_success=_("Action removed")
)
@ -571,27 +564,4 @@ def create_share_view(request: HttpRequest, id: str):
return form.process_request(
request,
msg_success=_("Share settings updated")
)
@login_required
@conservation_office_group_required
@shared_access_required(Ema, "id")
def deadline_remove_view(request: HttpRequest, id: str, deadline_id: str):
""" Renders a form for removing deadlines from a compensation
Args:
request (HttpRequest): The incoming request
id (str): The compensation's id
deadline_id (str): The deadline's id
Returns:
"""
deadline = get_object_or_404(Deadline, id=deadline_id)
form = RemoveModalForm(request.POST or None, instance=deadline, request=request)
return form.process_request(
request,
msg_success=_("Deadline removed"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
)

View File

@ -7,8 +7,6 @@ Created on: 02.12.20
"""
from dal import autocomplete
from django import forms
from konova.utils.message_templates import EDITED_GENERAL_DATA
from user.models import User
from django.db import transaction
from django.urls import reverse, reverse_lazy
@ -335,7 +333,7 @@ class EditInterventionForm(NewInterventionForm):
self.instance.responsible.conservation_file_number = conservation_file_number
self.instance.responsible.save()
user_action = self.instance.mark_as_edited(user, edit_comment=EDITED_GENERAL_DATA)
user_action = UserActionLogEntry.get_edited_action(user)
geometry = geom_form.save(user_action)
self.instance.geometry = geometry
@ -349,5 +347,8 @@ class EditInterventionForm(NewInterventionForm):
self.instance.modified = user_action
self.instance.save()
# Uncheck and unrecord intervention due to changed data
self.instance.mark_as_edited(user)
return self.instance

View File

@ -6,14 +6,13 @@ Created on: 27.09.21
"""
from dal import autocomplete
from konova.utils.message_templates import DEDUCTION_ADDED
from user.models import User, UserActionLogEntry
from user.models import User
from django.db import transaction
from django import forms
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from compensation.models import EcoAccount, EcoAccountDeduction
from compensation.models import EcoAccount
from intervention.inputs import TextToClipboardInput
from intervention.models import Intervention, InterventionDocument
from konova.forms import BaseModalForm, NewDocumentForm
@ -81,8 +80,10 @@ class ShareModalForm(BaseModalForm):
"""
# Initialize share_link field
share_link = self.instance.get_share_link()
self.share_link = self.request.build_absolute_uri(share_link)
url_name = f"{self.instance._meta.app_label}:share"
self.share_link = self.request.build_absolute_uri(
reverse(url_name, args=(self.instance.id, self.instance.access_token,))
)
self.initialize_form_field(
"url",
self.share_link
@ -367,26 +368,9 @@ class NewDeductionModalForm(BaseModalForm):
)
return is_valid_surface and super_result
def __create_deduction(self):
""" Creates the deduction
Returns:
"""
with transaction.atomic():
user_action_create = UserActionLogEntry.get_created_action(self.user)
deduction = EcoAccountDeduction.objects.create(
intervention=self.cleaned_data["intervention"],
account=self.cleaned_data["account"],
surface=self.cleaned_data["surface"],
created=user_action_create,
)
return deduction
def save(self):
deduction = self.__create_deduction()
self.cleaned_data["intervention"].mark_as_edited(self.user, edit_comment=DEDUCTION_ADDED)
self.cleaned_data["account"].mark_as_edited(self.user, edit_comment=DEDUCTION_ADDED, reset_recorded=False)
deduction = self.instance.add_deduction(self)
self.instance.mark_as_edited(self.user, self.request, reset_recorded=False)
return deduction

View File

@ -8,7 +8,6 @@ Created on: 15.11.21
import shutil
from django.contrib import messages
from django.urls import reverse
from django.utils import timezone
from user.models import User
@ -26,7 +25,7 @@ from konova.models import generate_document_file_upload_path, AbstractDocument,
ShareableObjectMixin, \
RecordableObjectMixin, CheckableObjectMixin, GeoReferencedMixin
from konova.settings import LANIS_LINK_TEMPLATE, LANIS_ZOOM_LUT, DEFAULT_SRID_RLP
from konova.utils.message_templates import DATA_UNSHARED_EXPLANATION, DEDUCTION_ADDED
from konova.utils.message_templates import DATA_UNSHARED_EXPLANATION
from user.models import UserActionLogEntry
@ -229,6 +228,28 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec
)
return revocation
def add_deduction(self, form):
""" Adds a new deduction to the intervention
Args:
form (NewDeductionModalForm): The form holding the data
Returns:
"""
form_data = form.cleaned_data
user = form.user
with transaction.atomic():
user_action_create = UserActionLogEntry.get_created_action(user)
deduction = EcoAccountDeduction.objects.create(
intervention=self,
account=form_data["account"],
surface=form_data["surface"],
created=user_action_create,
)
return deduction
def mark_as_edited(self, performing_user: User, request: HttpRequest = None, edit_comment: str = None, reset_recorded: bool = True):
""" In case the object or a related object changed, internal processes need to be started, such as
unrecord and uncheck
@ -242,10 +263,9 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec
Returns:
"""
action = super().mark_as_edited(performing_user, request, edit_comment, reset_recorded)
super().mark_as_edited(performing_user, request, edit_comment, reset_recorded)
if self.checked:
self.set_unchecked()
return action
def set_status_messages(self, request: HttpRequest):
""" Setter for different information that need to be rendered
@ -279,14 +299,6 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec
and is_free_of_revocations
return is_ready
def get_share_link(self):
""" Returns the share url for the object
Returns:
"""
return reverse("intervention:share", args=(self.id, self.access_token))
class InterventionDocument(AbstractDocument):
"""

View File

@ -26,10 +26,6 @@ class Revocation(BaseResource):
self.document.delete(*args, **kwargs)
super().delete()
@property
def intervention(self):
return self.legal.intervention
class RevocationDocument(AbstractDocument):
"""

View File

@ -22,11 +22,11 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th class="w-25" scope="col">
<th scope="col">
{% trans 'Identifier' %}
</th>
<th scope="col">
@ -34,9 +34,7 @@
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -52,7 +50,7 @@
<td class="align-middle">{{ comp.title }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:remove' comp.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove compensation' %}">
<button data-form-url="{% url 'compensation:remove' comp.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove compensation' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -11,7 +11,7 @@
<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 'intervention:new-deduction' obj.id %}" title="{% trans 'Add new deduction' %}">
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'intervention:acc-new-deduction' obj.id %}" title="{% trans 'Add new deduction' %}">
{% fa5_icon 'plus' %}
{% fa5_icon 'tree' %}
</button>
@ -20,11 +20,11 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th class="w-25" scope="col">
<th scope="col">
{% trans 'Account Identifier' %}
</th>
<th scope="col">
@ -35,9 +35,7 @@
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -46,7 +44,7 @@
{% for deduction in obj.deductions.all %}
<tr {% if deduction.account.deleted %}class="align-middle alert-danger" title="{% trans 'Eco-account deleted! Deduction invalid!' %}" {% elif not deduction.account.recorded %}class="align-middle alert-danger" title="{% trans 'Eco-account not recorded! Deduction invalid!' %}" {% endif %}>
<td class="align-middle">
<a href="{% url 'compensation:acc:detail' deduction.account.id %}">
<a href="{% url 'compensation:acc-detail' deduction.account.id %}">
{% if deduction.account.deleted or not deduction.account.recorded %}
{% fa5_icon 'exclamation-triangle' %}
{% endif %}
@ -57,7 +55,7 @@
<td class="align-middle">{{ deduction.created.timestamp|default_if_none:""|naturalday}}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'intervention:remove-deduction' obj.id deduction.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove Deduction' %}">
<button data-form-url="{% url 'compensation:acc-remove-deduction' deduction.account.id deduction.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove Deduction' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -20,21 +20,19 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">
{% trans 'Title' %}
</th>
<th class="w-50" scope="col">
<th scope="col">
{% trans 'Comment' %}
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -42,19 +40,15 @@
<tbody>
{% for doc in obj.documents.all %}
<tr>
<td>
<td class="align-middle">
<a href="{% url 'intervention:get-doc' doc.id %}">
{{ doc.title }}
</a>
</td>
<td>
<div class="scroll-150">
{{ doc.comment }}
</div>
</td>
<td class="align-middle">{{ doc.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'intervention:remove-doc' doc.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove document' %}">
<button data-form-url="{% url 'intervention:remove-doc' doc.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove document' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -11,7 +11,7 @@
<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:pay:new' obj.id %}" title="{% trans 'Add new payment' %}">
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:pay-new' obj.id %}" title="{% trans 'Add new payment' %}">
{% fa5_icon 'plus' %}
{% fa5_icon 'money-bill-wave' %}
</button>
@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -30,14 +30,12 @@
<th scope="col">
{% trans 'Due on' %}
</th>
<th class="w-50" scope="col">
<th scope="col">
{% trans 'Comment' %}
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -49,14 +47,10 @@
{{ pay.amount|floatformat:2 }} €
</td>
<td class="align-middle">{{ pay.due_on|default_if_none:"---" }}</td>
<td class="align-middle">
<div class="scroll-150">
{{ pay.comment }}
</div>
</td>
<td class="align-middle">
<td class="align-middle">{{ pay.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'compensation:pay:remove' pay.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove payment' %}">
<button data-form-url="{% url 'compensation:pay-remove' pay.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove payment' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -23,7 +23,7 @@
</div>
</div>
</div>
<div class="card-body scroll-300 p-2">
<div class="card-body scroll-300">
<table class="table table-hover">
<thead>
<tr>
@ -38,9 +38,7 @@
</th>
{% if is_default_member and has_access %}
<th scope="col">
<span class="float-right">
{% trans 'Action' %}
</span>
{% trans 'Action' %}
</th>
{% endif %}
</tr>
@ -58,14 +56,10 @@
</a>
{% endif %}
</td>
<td class="align-middle">
<div class="scroll-150">
{{ rev.comment }}
</div>
</td>
<td class="align-middle">
<td class="align-middle">{{ rev.comment }}</td>
<td>
{% if is_default_member and has_access %}
<button data-form-url="{% url 'intervention:remove-revocation' rev.id %}" class="btn btn-default btn-modal float-right" title="{% trans 'Remove revocation' %}">
<button data-form-url="{% url 'intervention:remove-revocation' rev.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove revocation' %}">
{% fa5_icon 'trash' %}
</button>
{% endif %}

View File

@ -136,29 +136,27 @@
</div>
<hr>
<div id="related_data">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/compensations.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/payments.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/compensations.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/deductions.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/revocation.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/payments.html' %}
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/documents.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/deductions.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/revocation.html' %}
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-6">
{% include 'intervention/detail/includes/documents.html' %}
</div>
<div class="col-sm-12 col-md-12 col-lg-6">
</div>
</div>

View File

@ -62,7 +62,7 @@
<th scope="row">{% trans 'Deductions of eco-accounts' %}</th>
<td class="align-middle">
{% for deduction in deductions %}
<a href="{% url 'compensation:acc:report' deduction.account.id %}">
<a href="{% url 'compensation:acc-report' deduction.account.id %}">
{{deduction.account.identifier}} - {{deduction.account.title}}
</a>
<br>

View File

@ -210,7 +210,7 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
# Attention: Despite the fact, this url refers to a compensation app route, we test it here for the interventions.
# Reason: A payment is some kind of compensation for an intervention. Therefore it lives inside the compensation app.
# BUT: Payments are added on the intervention detail page. Therefore it's part of a regular intervention workflow.
new_payment_url = reverse("compensation:pay:new", args=(self.intervention.id,))
new_payment_url = reverse("compensation:pay-new", args=(self.intervention.id,))
# Make sure there are no payments on the intervention, yet
self.assertEqual(0, self.intervention.payments.count())
@ -251,7 +251,7 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
"""
# Create removing url for the payment
remove_url = reverse("compensation:pay:remove", args=(payment.id,))
remove_url = reverse("compensation:pay-remove", args=(payment.id,))
post_data = {
"confirm": True,
}
@ -390,7 +390,7 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
"""
# Create the url for creating a new deduction
new_url = reverse("compensation:acc:new-deduction", args=(self.eco_account.id,))
new_url = reverse("compensation:acc-new-deduction", args=(self.eco_account.id,))
# Prepare the form data
test_surface = 100.00
@ -415,7 +415,7 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
"""
# Prepare url for deleting of this deduction
delete_url = reverse("compensation:acc:remove-deduction", args=(self.eco_account.id, deduction.id,))
delete_url = reverse("compensation:acc-remove-deduction", args=(self.eco_account.id, deduction.id,))
post_data = {
"confirm": True
}

View File

@ -9,8 +9,7 @@ from django.urls import path
from intervention.views import index_view, new_view, detail_view, edit_view, remove_view, new_document_view, share_view, \
create_share_view, remove_revocation_view, new_revocation_view, check_view, log_view, new_deduction_view, \
record_view, remove_document_view, get_document_view, get_revocation_view, new_id_view, report_view, \
remove_deduction_view
record_view, remove_document_view, get_document_view, get_revocation_view, new_id_view, report_view
app_name = "intervention"
urlpatterns = [
@ -33,8 +32,7 @@ urlpatterns = [
path('document/<doc_id>/remove/', remove_document_view, name='remove-doc'),
# Deductions
path('<id>/deduction/new', new_deduction_view, name='new-deduction'),
path('<id>/remove/<deduction_id>', remove_deduction_view, name='remove-deduction'),
path('<id>/deduction/new', new_deduction_view, name='acc-new-deduction'),
# Revocation routes
path('<id>/revocation/new', new_revocation_view, name='new-revocation'),

View File

@ -1,7 +1,6 @@
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import gettext_lazy as _
from django.http import HttpRequest, JsonResponse, Http404
from django.http import HttpRequest, JsonResponse
from django.shortcuts import render
from intervention.forms.forms import NewInterventionForm, EditInterventionForm
@ -16,7 +15,7 @@ from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.documents import remove_document, get_document
from konova.utils.generators import generate_qr_code
from konova.utils.message_templates import INTERVENTION_INVALID, FORM_INVALID, IDENTIFIER_REPLACED, \
CHECKED_RECORDED_RESET, DEDUCTION_REMOVED, DEDUCTION_ADDED
CHECKED_RECORDED_RESET
from konova.utils.user_checks import in_group
@ -130,8 +129,7 @@ def new_document_view(request: HttpRequest, id: str):
form = NewInterventionDocumentForm(request.POST or None, request.FILES or None, instance=intervention, request=request)
return form.process_request(
request,
msg_success=_("Document added"),
redirect_url=reverse("intervention:detail", args=(id,)) + "#related_data"
msg_success=_("Document added")
)
@ -350,12 +348,10 @@ def remove_revocation_view(request: HttpRequest, id: str):
"""
obj = Revocation.objects.get(id=id)
form = RemoveModalForm(request.POST or None, instance=obj, request=request)
return form.process_request(
request,
_("Revocation removed"),
redirect_url=reverse("intervention:detail", args=(obj.intervention.id,)) + "#related_data"
)
@ -459,8 +455,7 @@ def new_revocation_view(request: HttpRequest, id: str):
form = NewRevocationModalForm(request.POST or None, request.FILES or None, instance=intervention, request=request)
return form.process_request(
request,
msg_success=_("Revocation added"),
redirect_url=reverse("intervention:detail", args=(id,)) + "#related_data"
msg_success=_("Revocation added")
)
@ -507,36 +502,7 @@ def new_deduction_view(request: HttpRequest, id: str):
form = NewDeductionModalForm(request.POST or None, instance=intervention, request=request)
return form.process_request(
request,
msg_success=DEDUCTION_ADDED,
redirect_url=reverse("intervention:detail", args=(id,)) + "#related_data",
)
@login_required
@default_group_required
@shared_access_required(Intervention, "id")
def remove_deduction_view(request: HttpRequest, id: str, deduction_id: str):
""" Renders a modal view for removing deductions
Args:
request (HttpRequest): The incoming request
id (str): The intervention's id
deduction_id (str): The deduction's id
Returns:
"""
intervention = get_object_or_404(Intervention, id=id)
try:
eco_deduction = intervention.deductions.get(id=deduction_id)
except ObjectDoesNotExist:
raise Http404("Unknown deduction")
form = RemoveModalForm(request.POST or None, instance=eco_deduction, request=request)
return form.process_request(
request=request,
msg_success=DEDUCTION_REMOVED,
redirect_url=reverse("intervention:detail", args=(id,)) + "#related_data"
msg_success=_("Deduction added")
)

View File

@ -327,7 +327,7 @@ class RemoveModalForm(BaseModalForm):
self.instance.mark_as_deleted(self.user)
else:
# If the class does not provide restorable delete functionality, we must delete the entry finally
self.instance.delete(self.user)
self.instance.delete()
class NewDocumentForm(BaseModalForm):

View File

@ -275,9 +275,9 @@ class RecordableObjectMixin(models.Model):
Returns:
"""
edit_action = UserActionLogEntry.get_edited_action(performing_user, edit_comment)
self.modified = edit_action
self.log.add(edit_action)
action = UserActionLogEntry.get_edited_action(performing_user, edit_comment)
self.modified = action
self.log.add(action)
self.save()
if self.recorded and reset_recorded:
@ -288,7 +288,6 @@ class RecordableObjectMixin(models.Model):
request,
CHECKED_RECORDED_RESET
)
return edit_action
@abstractmethod
def is_ready_for_publish(self) -> bool:
@ -480,15 +479,6 @@ class ShareableObjectMixin(models.Model):
"""
return self.users.all()
@abstractmethod
def get_share_url(self):
""" Returns the share url for the object
Returns:
"""
raise NotImplementedError("Must be implemented in subclasses!")
class GeoReferencedMixin(models.Model):
geometry = models.ForeignKey("konova.Geometry", null=True, blank=True, on_delete=models.SET_NULL)

View File

@ -4,7 +4,7 @@
{% trans 'Eco-account' %}
</h4>
<div class="row">
<a class="text-decoration-none" href="{% url 'compensation:acc:index' %}">
<a class="text-decoration-none" href="{% url 'compensation:acc-index' %}">
<div class="col-sm-5">
<div class="qs-box d-flex justify-content-center align-items-center">
{% fa5_icon 'tree' %}
@ -26,12 +26,12 @@
<div class="col-sm-12 col-lg">
<div class="col-sm">
<div class="row my-1">
<a href="{% url 'compensation:acc:new' %}">
<a href="{% url 'compensation:acc-new' %}">
<button class="btn btn-default">{% fa5_icon 'plus' %} {% trans 'Create' %}</button>
</a>
</div>
<div class="row my-1">
<a href="{% url 'compensation:acc:index' %}">
<a href="{% url 'compensation:acc-index' %}">
<button class="btn btn-default">{% fa5_icon 'eye' %} {% trans 'Show' %}</button>
</a>
</div>

View File

@ -52,19 +52,3 @@ def default_if_zero(val1, val2):
"""
return val1 if val1 > 0 else val2
@register.filter("shorten")
def shorten(val, length):
""" Returns val shortened to the first number of length character
Args:
val (str): The value
length (int): The number of characters left
Returns:
"""
if val is not None and len(val) > length:
val = f"{val[:length]}..."
return val

View File

@ -23,7 +23,7 @@ from konova.autocompletes import EcoAccountAutocomplete, \
ShareUserAutocomplete, BiotopeExtraCodeAutocomplete, CompensationActionDetailCodeAutocomplete
from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG
from konova.sso.sso import KonovaSSOClient
from konova.views import logout_view, home_view
from konova.views import logout_view, home_view, remove_deadline_view
sso_client = KonovaSSOClient(SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY)
urlpatterns = [
@ -40,6 +40,9 @@ urlpatterns = [
path('analysis/', include("analysis.urls")),
path('api/', include("api.urls")),
# Generic deadline routes
path('deadline/<id>/remove', remove_deadline_view, name="deadline-remove"),
# Autocomplete paths for all apps
path("atcmplt/eco-accounts", EcoAccountAutocomplete.as_view(), name="accounts-autocomplete"),
path("atcmplt/interventions", InterventionAutocomplete.as_view(), name="interventions-autocomplete"),

View File

@ -21,14 +21,6 @@ CHECKED_RECORDED_RESET = _("Status of Checked and Recorded reseted")
# ECO ACCOUNT
CANCEL_ACC_RECORDED_OR_DEDUCTED = _("Action canceled. Eco account is recorded or deductions exist. Only conservation office member can perform this action.")
# DEDUCTIONS
DEDUCTION_ADDED = _("Deduction added")
DEDUCTION_REMOVED = _("Deduction removed")
# PAYMENTS
PAYMENT_ADDED = _("Payment added")
PAYMENT_REMOVED = _("Payment removed")
# Edited
EDITED_GENERAL_DATA = _("Edited general data")
ADDED_COMPENSATION_STATE = _("Added compensation state")

View File

@ -99,6 +99,25 @@ def home_view(request: HttpRequest):
return render(request, template, context)
@login_required
def remove_deadline_view(request: HttpRequest, id:str):
""" Renders a modal form for removing a deadline object
Args:
request (HttpRequest): The incoming request
id (str): The deadline id
Returns:
"""
deadline = get_object_or_404(Deadline, id=id)
form = RemoveModalForm(request.POST or None, instance=deadline, request=request)
return form.process_request(
request,
msg_success=_("Deadline removed")
)
def get_404_view(request: HttpRequest, exception=None):
""" Returns a 404 handling view

Binary file not shown.

View File

@ -5,10 +5,10 @@
#
#: compensation/filters.py:122 compensation/forms/modalForms.py:35
#: compensation/forms/modalForms.py:46 compensation/forms/modalForms.py:62
#: compensation/forms/modalForms.py:256 compensation/forms/modalForms.py:350
#: compensation/forms/modalForms.py:256 compensation/forms/modalForms.py:351
#: intervention/forms/forms.py:52 intervention/forms/forms.py:154
#: intervention/forms/forms.py:166 intervention/forms/modalForms.py:123
#: intervention/forms/modalForms.py:136 intervention/forms/modalForms.py:149
#: intervention/forms/forms.py:166 intervention/forms/modalForms.py:125
#: intervention/forms/modalForms.py:138 intervention/forms/modalForms.py:151
#: konova/filters/mixins.py:53 konova/filters/mixins.py:54
#: konova/filters/mixins.py:81 konova/filters/mixins.py:82
#: konova/filters/mixins.py:94 konova/filters/mixins.py:95
@ -26,7 +26,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-02-02 14:35+0100\n"
"POT-Creation-Date: 2022-01-31 12:41+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -140,7 +140,7 @@ msgstr "Zuständigkeitsbereich"
#: compensation/templates/compensation/detail/compensation/view.html:63
#: intervention/tables.py:33
#: intervention/templates/intervention/detail/view.html:68
#: user/models/user_action.py:20
#: user/models/user_action.py:18
msgid "Checked"
msgstr "Geprüft"
@ -159,7 +159,7 @@ msgstr "Geprüft"
#: ema/tables.py:38 ema/templates/ema/detail/view.html:35
#: intervention/tables.py:39
#: intervention/templates/intervention/detail/view.html:82
#: user/models/user_action.py:21
#: user/models/user_action.py:19
msgid "Recorded"
msgstr "Verzeichnet"
@ -214,13 +214,13 @@ msgstr "Abbuchungen"
#: analysis/templates/analysis/reports/includes/eco_account/deductions.html:9
#: analysis/templates/analysis/reports/includes/eco_account/deductions.html:11
#: compensation/forms/modalForms.py:151
#: compensation/templates/compensation/detail/compensation/includes/states-after.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
#: ema/templates/ema/detail/includes/states-after.html:36
#: ema/templates/ema/detail/includes/states-before.html:36
#: intervention/forms/modalForms.py:293
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:39
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:39
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:39
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:39
#: ema/templates/ema/detail/includes/states-after.html:39
#: ema/templates/ema/detail/includes/states-before.html:39
#: intervention/forms/modalForms.py:295
msgid "Surface"
msgstr "Fläche"
@ -284,7 +284,7 @@ msgid "Type"
msgstr "Typ"
#: analysis/templates/analysis/reports/includes/old_data/amount.html:24
#: intervention/forms/modalForms.py:304 intervention/forms/modalForms.py:311
#: intervention/forms/modalForms.py:306 intervention/forms/modalForms.py:313
#: intervention/tables.py:89
#: intervention/templates/intervention/detail/view.html:19
#: konova/templates/konova/includes/quickstart/interventions.html:4
@ -295,7 +295,7 @@ msgstr "Eingriff"
#: analysis/templates/analysis/reports/includes/old_data/amount.html:34
#: compensation/tables.py:226
#: compensation/templates/compensation/detail/eco_account/view.html:19
#: intervention/forms/modalForms.py:277 intervention/forms/modalForms.py:284
#: intervention/forms/modalForms.py:279 intervention/forms/modalForms.py:286
#: konova/templates/konova/includes/quickstart/ecoaccounts.html:4
#: templates/navbars/navbar.html:34
msgid "Eco-account"
@ -354,8 +354,8 @@ msgid "Compensation XY; Location ABC"
msgstr "Kompensation XY; Flur ABC"
#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:61
#: compensation/forms/modalForms.py:255 compensation/forms/modalForms.py:349
#: compensation/templates/compensation/detail/compensation/includes/actions.html:35
#: compensation/forms/modalForms.py:255 compensation/forms/modalForms.py:350
#: compensation/templates/compensation/detail/compensation/includes/actions.html:37
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34
#: compensation/templates/compensation/detail/compensation/includes/documents.html:31
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:34
@ -364,7 +364,7 @@ msgstr "Kompensation XY; Flur ABC"
#: ema/templates/ema/detail/includes/actions.html:34
#: ema/templates/ema/detail/includes/deadlines.html:34
#: ema/templates/ema/detail/includes/documents.html:31
#: intervention/forms/forms.py:178 intervention/forms/modalForms.py:148
#: intervention/forms/forms.py:178 intervention/forms/modalForms.py:150
#: intervention/templates/intervention/detail/includes/documents.html:31
#: intervention/templates/intervention/detail/includes/payments.html:34
#: intervention/templates/intervention/detail/includes/revocation.html:38
@ -372,8 +372,7 @@ msgstr "Kompensation XY; Flur ABC"
msgid "Comment"
msgstr "Kommentar"
#: compensation/forms/forms.py:59 compensation/forms/modalForms.py:351
#: intervention/forms/forms.py:180
#: compensation/forms/forms.py:59 intervention/forms/forms.py:180
msgid "Additional comment"
msgstr "Zusätzlicher Kommentar"
@ -432,7 +431,7 @@ msgstr "kompensiert Eingriff"
msgid "Select the intervention for which this compensation compensates"
msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist"
#: compensation/forms/forms.py:184 compensation/views/compensation.py:92
#: compensation/forms/forms.py:184 compensation/views/compensation.py:91
msgid "New compensation"
msgstr "Neue Kompensation"
@ -458,7 +457,7 @@ msgstr "Vereinbarungsdatum"
msgid "When did the parties agree on this?"
msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?"
#: compensation/forms/forms.py:340 compensation/views/eco_account.py:102
#: compensation/forms/forms.py:340 compensation/views/eco_account.py:101
msgid "New Eco-Account"
msgstr "Neues Ökokonto"
@ -484,7 +483,8 @@ msgid "Due on which date"
msgstr "Zahlung wird an diesem Datum erwartet"
#: compensation/forms/modalForms.py:63 compensation/forms/modalForms.py:257
#: intervention/forms/modalForms.py:150 konova/forms.py:375
#: compensation/forms/modalForms.py:352 intervention/forms/modalForms.py:152
#: konova/forms.py:375
msgid "Additional comment, maximum {} letters"
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
@ -505,6 +505,12 @@ msgid "Select the biotope type"
msgstr "Biotoptyp wählen"
#: compensation/forms/modalForms.py:132 compensation/forms/modalForms.py:144
#: compensation/templates/compensation/detail/compensation/includes/states-after.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
#: ema/templates/ema/detail/includes/states-after.html:36
#: ema/templates/ema/detail/includes/states-before.html:36
msgid "Biotope additional type"
msgstr "Zusatzbezeichnung"
@ -512,7 +518,7 @@ msgstr "Zusatzbezeichnung"
msgid "Select an additional biotope type"
msgstr "Zusatzbezeichnung wählen"
#: compensation/forms/modalForms.py:154 intervention/forms/modalForms.py:295
#: compensation/forms/modalForms.py:154 intervention/forms/modalForms.py:297
msgid "in m²"
msgstr ""
@ -540,7 +546,7 @@ msgstr "Fristart wählen"
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31
#: ema/templates/ema/detail/includes/deadlines.html:31
#: intervention/forms/modalForms.py:122
#: intervention/forms/modalForms.py:124
msgid "Date"
msgstr "Datum"
@ -565,27 +571,27 @@ msgid "Select the action type"
msgstr "Maßnahmentyp wählen"
#: compensation/forms/modalForms.py:300
#: compensation/templates/compensation/detail/compensation/includes/actions.html:40
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:39
#: compensation/templates/compensation/detail/compensation/includes/documents.html:36
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:41
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:41
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:39
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:38
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:41
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:35
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:41
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:41
#: ema/templates/ema/detail/includes/actions.html:38
#: ema/templates/ema/detail/includes/deadlines.html:38
#: ema/templates/ema/detail/includes/documents.html:35
#: ema/templates/ema/detail/includes/states-after.html:40
#: ema/templates/ema/detail/includes/states-before.html:40
#: intervention/templates/intervention/detail/includes/compensations.html:38
#: intervention/templates/intervention/detail/includes/deductions.html:39
#: intervention/templates/intervention/detail/includes/documents.html:36
#: intervention/templates/intervention/detail/includes/payments.html:39
#: intervention/templates/intervention/detail/includes/revocation.html:43
#: compensation/templates/compensation/detail/compensation/includes/actions.html:41
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:38
#: compensation/templates/compensation/detail/compensation/includes/documents.html:35
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:43
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:43
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:38
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:37
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:40
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:34
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:43
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:43
#: ema/templates/ema/detail/includes/actions.html:37
#: ema/templates/ema/detail/includes/deadlines.html:37
#: ema/templates/ema/detail/includes/documents.html:34
#: ema/templates/ema/detail/includes/states-after.html:42
#: ema/templates/ema/detail/includes/states-before.html:42
#: intervention/templates/intervention/detail/includes/compensations.html:37
#: intervention/templates/intervention/detail/includes/deductions.html:38
#: intervention/templates/intervention/detail/includes/documents.html:35
#: intervention/templates/intervention/detail/includes/payments.html:38
#: intervention/templates/intervention/detail/includes/revocation.html:42
#: templates/log.html:10
msgid "Action"
msgstr "Aktionen"
@ -610,11 +616,11 @@ msgstr "Einheit wählen"
msgid "Insert the amount"
msgstr "Menge eingeben"
#: compensation/forms/modalForms.py:362
#: compensation/forms/modalForms.py:363
msgid "New action"
msgstr "Neue Maßnahme"
#: compensation/forms/modalForms.py:363
#: compensation/forms/modalForms.py:364
msgid "Insert data for the new action"
msgstr "Geben Sie die Daten der neuen Maßnahme ein"
@ -646,14 +652,14 @@ msgstr "Stück"
msgid "Added deadline"
msgstr "Frist/Termin hinzugefügt"
#: compensation/models/eco_account.py:57
#: compensation/models/eco_account.py:55
msgid ""
"Deductable surface can not be larger than existing surfaces in after states"
msgstr ""
"Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht "
"überschreiten"
#: compensation/models/eco_account.py:64
#: compensation/models/eco_account.py:62
msgid ""
"Deductable surface can not be smaller than the sum of already existing "
"deductions. Please contact the responsible users for the deductions!"
@ -686,7 +692,7 @@ msgstr "Am {} von {} geprüft worden"
#: compensation/tables.py:130
#: compensation/templates/compensation/detail/compensation/view.html:80
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:58
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:56
#: compensation/templates/compensation/detail/eco_account/view.html:47
#: ema/tables.py:102 ema/templates/ema/detail/view.html:38
#: intervention/tables.py:132
@ -724,35 +730,39 @@ msgid "Not recorded yet. Can not be used for deductions, yet."
msgstr ""
"Noch nicht verzeichnet. Kann noch nicht für Abbuchungen genutzt werden."
#: compensation/templates/compensation/detail/compensation/includes/actions.html:9
#: compensation/templates/compensation/detail/compensation/includes/actions.html:8
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:8
#: ema/templates/ema/detail/includes/actions.html:8
msgctxt "Compensation"
msgid "Actions"
msgstr "Maßnahmen"
#: compensation/templates/compensation/detail/compensation/includes/actions.html:15
#: compensation/templates/compensation/detail/compensation/includes/actions.html:14
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:14
#: ema/templates/ema/detail/includes/actions.html:14
msgid "Add new action"
msgstr "Neue Maßnahme hinzufügen"
#: compensation/templates/compensation/detail/compensation/includes/actions.html:29
#: compensation/templates/compensation/detail/compensation/includes/actions.html:28
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:28
#: ema/templates/ema/detail/includes/actions.html:28
msgid "Action type"
msgstr "Maßnahmentyp"
#: compensation/templates/compensation/detail/compensation/includes/actions.html:32
#: compensation/templates/compensation/detail/compensation/includes/actions.html:31
msgid "Action type details"
msgstr "Zusatzmerkmale"
#: compensation/templates/compensation/detail/compensation/includes/actions.html:34
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:31
#: ema/templates/ema/detail/includes/actions.html:31
msgctxt "Compensation"
msgid "Amount"
msgstr "Menge"
#: compensation/templates/compensation/detail/compensation/includes/actions.html:66
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:65
#: ema/templates/ema/detail/includes/actions.html:63
#: compensation/templates/compensation/detail/compensation/includes/actions.html:61
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:53
#: ema/templates/ema/detail/includes/actions.html:51
msgid "Remove action"
msgstr "Maßnahme entfernen"
@ -804,9 +814,9 @@ msgstr "Termine und Fristen"
msgid "Add new deadline"
msgstr "Frist/Termin hinzufügen"
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:59
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:57
#: ema/templates/ema/detail/includes/deadlines.html:57
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:53
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:51
#: ema/templates/ema/detail/includes/deadlines.html:51
msgid "Remove deadline"
msgstr "Frist löschen"
@ -825,10 +835,10 @@ msgstr "Dokumente"
msgid "Add new document"
msgstr "Neues Dokument hinzufügen"
#: compensation/templates/compensation/detail/compensation/includes/documents.html:57
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:55
#: ema/templates/ema/detail/includes/documents.html:55
#: intervention/templates/intervention/detail/includes/documents.html:57
#: compensation/templates/compensation/detail/compensation/includes/documents.html:51
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:49
#: ema/templates/ema/detail/includes/documents.html:49
#: intervention/templates/intervention/detail/includes/documents.html:51
msgid "Remove document"
msgstr "Dokument löschen"
@ -845,9 +855,9 @@ msgstr "Zielzustand"
msgid "Add new state after"
msgstr "Neuen Zielzustand hinzufügen"
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:25
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:25
#: ema/templates/ema/detail/includes/states-after.html:25
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:26
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:26
#: ema/templates/ema/detail/includes/states-after.html:26
msgid "Missing surfaces according to states before: "
msgstr "Fehlende Flächenmengen laut Ausgangszustand: "
@ -860,12 +870,12 @@ msgstr "Fehlende Flächenmengen laut Ausgangszustand: "
msgid "Biotope type"
msgstr "Biotoptyp"
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:62
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:62
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:62
#: ema/templates/ema/detail/includes/states-after.html:60
#: ema/templates/ema/detail/includes/states-before.html:60
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:64
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:64
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:64
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:64
#: ema/templates/ema/detail/includes/states-after.html:62
#: ema/templates/ema/detail/includes/states-before.html:62
msgid "Remove state"
msgstr "Zustand entfernen"
@ -882,9 +892,9 @@ msgstr "Ausgangszustand"
msgid "Add new state before"
msgstr "Neuen Ausgangszustand hinzufügen"
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:25
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:25
#: ema/templates/ema/detail/includes/states-before.html:25
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:26
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:26
#: ema/templates/ema/detail/includes/states-before.html:26
msgid "Missing surfaces according to states after: "
msgstr "Fehlende Flächenmengen laut Zielzustand: "
@ -915,7 +925,7 @@ msgstr "Geprüft am "
#: compensation/templates/compensation/detail/compensation/view.html:70
#: compensation/templates/compensation/detail/compensation/view.html:84
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:56
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:54
#: compensation/templates/compensation/detail/eco_account/view.html:51
#: ema/templates/ema/detail/view.html:42
#: intervention/templates/intervention/detail/view.html:75
@ -983,16 +993,16 @@ msgstr "Eingriffskennung"
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:37
#: intervention/templates/intervention/detail/includes/deductions.html:34
#: user/models/user_action.py:23
#: user/models/user_action.py:21
msgid "Created"
msgstr "Erstellt"
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:56
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:54
msgid "Recorded on"
msgstr "Verzeichnet am"
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:65
#: intervention/templates/intervention/detail/includes/deductions.html:60
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:63
#: intervention/templates/intervention/detail/includes/deductions.html:58
msgid "Remove Deduction"
msgstr "Abbuchung entfernen"
@ -1076,135 +1086,130 @@ msgstr ""
msgid "Responsible data"
msgstr "Daten zu den verantwortlichen Stellen"
#: compensation/views/compensation.py:48
#: compensation/views/compensation.py:47
msgid "Compensations - Overview"
msgstr "Kompensationen - Übersicht"
#: compensation/views/compensation.py:82
#: compensation/views/compensation.py:81
msgid "Compensation {} added"
msgstr "Kompensation {} hinzugefügt"
#: compensation/views/compensation.py:147
#: compensation/views/compensation.py:146
msgid "Compensation {} edited"
msgstr "Kompensation {} bearbeitet"
#: compensation/views/compensation.py:157 compensation/views/eco_account.py:160
#: ema/views.py:227 intervention/views.py:310
#: compensation/views/compensation.py:156 compensation/views/eco_account.py:159
#: ema/views.py:226 intervention/views.py:309
msgid "Edit {}"
msgstr "Bearbeite {}"
#: compensation/views/compensation.py:236 compensation/views/eco_account.py:316
#: ema/views.py:188 intervention/views.py:486
#: compensation/views/compensation.py:235 compensation/views/eco_account.py:314
#: ema/views.py:187 intervention/views.py:482
msgid "Log"
msgstr "Log"
#: compensation/views/compensation.py:259
#: compensation/views/compensation.py:258
msgid "Compensation removed"
msgstr "Kompensation entfernt"
#: compensation/views/compensation.py:280 compensation/views/eco_account.py:496
#: ema/views.py:359 intervention/views.py:132
#: compensation/views/compensation.py:279 compensation/views/eco_account.py:466
#: ema/views.py:355 intervention/views.py:132
msgid "Document added"
msgstr "Dokument hinzugefügt"
#: compensation/views/compensation.py:350 compensation/views/eco_account.py:362
#: ema/views.py:294
#: compensation/views/compensation.py:348 compensation/views/eco_account.py:360
#: ema/views.py:293
msgid "State added"
msgstr "Zustand hinzugefügt"
#: compensation/views/compensation.py:372 compensation/views/eco_account.py:384
#: ema/views.py:316
#: compensation/views/compensation.py:369 compensation/views/eco_account.py:381
#: ema/views.py:314
msgid "Action added"
msgstr "Maßnahme hinzugefügt"
#: compensation/views/compensation.py:394 compensation/views/eco_account.py:475
#: ema/views.py:338
#: compensation/views/compensation.py:390 compensation/views/eco_account.py:446
#: ema/views.py:335
msgid "Deadline added"
msgstr "Frist/Termin hinzugefügt"
#: compensation/views/compensation.py:417 compensation/views/eco_account.py:453
#: ema/views.py:595
msgid "Deadline removed"
msgstr "Frist gelöscht"
#: compensation/views/compensation.py:440 compensation/views/eco_account.py:407
#: ema/views.py:430
#: compensation/views/compensation.py:412 compensation/views/eco_account.py:403
#: ema/views.py:425
msgid "State removed"
msgstr "Zustand gelöscht"
#: compensation/views/compensation.py:463 compensation/views/eco_account.py:430
#: ema/views.py:453
#: compensation/views/compensation.py:434 compensation/views/eco_account.py:425
#: ema/views.py:447
msgid "Action removed"
msgstr "Maßnahme entfernt"
#: compensation/views/compensation.py:482 compensation/views/eco_account.py:586
#: ema/views.py:472 intervention/views.py:551
#: compensation/views/compensation.py:452 compensation/views/eco_account.py:554
#: ema/views.py:465 intervention/views.py:546
msgid "Report {}"
msgstr "Bericht {}"
#: compensation/views/eco_account.py:59
#: compensation/views/eco_account.py:58
msgid "Eco-account - Overview"
msgstr "Ökokonten - Übersicht"
#: compensation/views/eco_account.py:92
#: compensation/views/eco_account.py:91
msgid "Eco-Account {} added"
msgstr "Ökokonto {} hinzugefügt"
#: compensation/views/eco_account.py:150
#: compensation/views/eco_account.py:149
msgid "Eco-Account {} edited"
msgstr "Ökokonto {} bearbeitet"
#: compensation/views/eco_account.py:263
#: compensation/views/eco_account.py:262
msgid "Eco-account removed"
msgstr "Ökokonto entfernt"
#: compensation/views/eco_account.py:291
#: compensation/views/eco_account.py:290
msgid "Deduction removed"
msgstr "Abbuchung entfernt"
#: compensation/views/eco_account.py:337 ema/views.py:269
#: intervention/views.py:529
#: compensation/views/eco_account.py:335 ema/views.py:268
#: intervention/views.py:524
msgid "{} unrecorded"
msgstr "{} entzeichnet"
#: compensation/views/eco_account.py:337 ema/views.py:269
#: intervention/views.py:529
#: compensation/views/eco_account.py:335 ema/views.py:268
#: intervention/views.py:524
msgid "{} recorded"
msgstr "{} verzeichnet"
#: compensation/views/eco_account.py:567 intervention/views.py:509
#: compensation/views/eco_account.py:536 intervention/views.py:505
msgid "Deduction added"
msgstr "Abbuchung hinzugefügt"
#: compensation/views/eco_account.py:659 ema/views.py:538
#: intervention/views.py:383
#: compensation/views/eco_account.py:627 ema/views.py:531
#: intervention/views.py:380
msgid "{} has already been shared with you"
msgstr "{} wurde bereits für Sie freigegeben"
#: compensation/views/eco_account.py:664 ema/views.py:543
#: intervention/views.py:388
#: compensation/views/eco_account.py:632 ema/views.py:536
#: intervention/views.py:385
msgid "{} has been shared with you"
msgstr "{} ist nun für Sie freigegeben"
#: compensation/views/eco_account.py:671 ema/views.py:550
#: intervention/views.py:395
#: compensation/views/eco_account.py:639 ema/views.py:543
#: intervention/views.py:392
msgid "Share link invalid"
msgstr "Freigabelink ungültig"
#: compensation/views/eco_account.py:694 ema/views.py:573
#: intervention/views.py:418
#: compensation/views/eco_account.py:662 ema/views.py:566
#: intervention/views.py:415
msgid "Share settings updated"
msgstr "Freigabe Einstellungen aktualisiert"
#: compensation/views/payment.py:37
#: compensation/views/payment.py:36
msgid "Payment added"
msgstr "Zahlung hinzugefügt"
#: compensation/views/payment.py:58
#: compensation/views/payment.py:56
msgid "Payment removed"
msgstr "Zahlung gelöscht"
#: ema/forms.py:40 ema/views.py:92
#: ema/forms.py:40 ema/views.py:91
msgid "New EMA"
msgstr "Neue EMA hinzufügen"
@ -1232,19 +1237,19 @@ msgstr ""
msgid "Payment funded compensation"
msgstr "Ersatzzahlungsmaßnahme"
#: ema/views.py:49
#: ema/views.py:48
msgid "EMAs - Overview"
msgstr "EMAs - Übersicht"
#: ema/views.py:82
#: ema/views.py:81
msgid "EMA {} added"
msgstr "EMA {} hinzugefügt"
#: ema/views.py:217
#: ema/views.py:216
msgid "EMA {} edited"
msgstr "EMA {} bearbeitet"
#: ema/views.py:250
#: ema/views.py:249
msgid "EMA removed"
msgstr "EMA entfernt"
@ -1313,10 +1318,6 @@ msgstr "Neuer Eingriff"
msgid "Edit intervention"
msgstr "Eingriff bearbeiten"
#: intervention/forms/forms.py:338
msgid "General data edited"
msgstr "Allgemeine Daten bearbeitet"
#: intervention/forms/modalForms.py:25
msgid "Share link"
msgstr "Freigabelink"
@ -1345,38 +1346,38 @@ msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen"
msgid "Share settings for {}"
msgstr "Freigabe Einstellungen für {}"
#: intervention/forms/modalForms.py:124
#: intervention/forms/modalForms.py:126
msgid "Date of revocation"
msgstr "Datum des Widerspruchs"
#: intervention/forms/modalForms.py:135
#: intervention/forms/modalForms.py:137
#: intervention/templates/intervention/detail/includes/revocation.html:35
msgid "Document"
msgstr "Dokument"
#: intervention/forms/modalForms.py:138
#: intervention/forms/modalForms.py:140
msgid "Must be smaller than 15 Mb"
msgstr "Muss kleiner als 15 Mb sein"
#: intervention/forms/modalForms.py:162
#: intervention/forms/modalForms.py:164
#: intervention/templates/intervention/detail/includes/revocation.html:18
msgid "Add revocation"
msgstr "Widerspruch hinzufügen"
#: intervention/forms/modalForms.py:179
#: intervention/forms/modalForms.py:181
msgid "Checked intervention data"
msgstr "Eingriffsdaten geprüft"
#: intervention/forms/modalForms.py:185
#: intervention/forms/modalForms.py:187
msgid "Checked compensations data and payments"
msgstr "Kompensationen und Zahlungen geprüft"
#: intervention/forms/modalForms.py:194
#: intervention/forms/modalForms.py:196
#: intervention/templates/intervention/detail/includes/controls.html:19
msgid "Run check"
msgstr "Prüfung vornehmen"
#: intervention/forms/modalForms.py:195 konova/forms.py:457
#: intervention/forms/modalForms.py:197 konova/forms.py:457
msgid ""
"I, {} {}, confirm that all necessary control steps have been performed by "
"myself."
@ -1384,23 +1385,23 @@ msgstr ""
"Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt "
"wurden:"
#: intervention/forms/modalForms.py:279
#: intervention/forms/modalForms.py:281
msgid "Only recorded accounts can be selected for deductions"
msgstr "Nur verzeichnete Ökokonten können für Abbuchungen verwendet werden."
#: intervention/forms/modalForms.py:306
#: intervention/forms/modalForms.py:308
msgid "Only shared interventions can be selected"
msgstr "Nur freigegebene Eingriffe können gewählt werden"
#: intervention/forms/modalForms.py:319
#: intervention/forms/modalForms.py:321
msgid "New Deduction"
msgstr "Neue Abbuchung"
#: intervention/forms/modalForms.py:320
#: intervention/forms/modalForms.py:322
msgid "Enter the information for a new deduction from a chosen eco-account"
msgstr "Geben Sie die Informationen für eine neue Abbuchung ein."
#: intervention/forms/modalForms.py:348
#: intervention/forms/modalForms.py:350
msgid ""
"Eco-account {} is not recorded yet. You can only deduct from recorded "
"accounts."
@ -1408,7 +1409,7 @@ msgstr ""
"Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von "
"verzeichneten Ökokonten erfolgen."
#: intervention/forms/modalForms.py:361
#: intervention/forms/modalForms.py:363
msgid ""
"The account {} has not enough surface for a deduction of {} m². There are "
"only {} m² left"
@ -1417,7 +1418,7 @@ msgstr ""
"Restfläche. Es stehen noch {} m² zur Verfügung."
#: intervention/tables.py:45
#: intervention/templates/intervention/detail/includes/revocation.html:58
#: intervention/templates/intervention/detail/includes/revocation.html:56
msgid "Revocation"
msgstr "Widerspruch"
@ -1433,7 +1434,7 @@ msgstr "Widerspruch vom {}, am {} von {} hinzugefügt"
msgid "Add new compensation"
msgstr "Neue Kompensation hinzufügen"
#: intervention/templates/intervention/detail/includes/compensations.html:55
#: intervention/templates/intervention/detail/includes/compensations.html:53
msgid "Remove compensation"
msgstr "Kompensation entfernen"
@ -1441,11 +1442,11 @@ msgstr "Kompensation entfernen"
msgid "Account Identifier"
msgstr "Ökokonto Kennung"
#: intervention/templates/intervention/detail/includes/deductions.html:47
#: intervention/templates/intervention/detail/includes/deductions.html:45
msgid "Eco-account deleted! Deduction invalid!"
msgstr "Ökokonto gelöscht! Abbuchung ungültig!"
#: intervention/templates/intervention/detail/includes/deductions.html:47
#: intervention/templates/intervention/detail/includes/deductions.html:45
msgid "Eco-account not recorded! Deduction invalid!"
msgstr "Ökokonto nicht verzeichnet! Abbuchung ungültig!"
@ -1463,7 +1464,7 @@ msgctxt "money"
msgid "Amount"
msgstr "Betrag"
#: intervention/templates/intervention/detail/includes/payments.html:59
#: intervention/templates/intervention/detail/includes/payments.html:53
msgid "Remove payment"
msgstr "Zahlung entfernen"
@ -1477,7 +1478,7 @@ msgctxt "Revocation"
msgid "From"
msgstr "Vom"
#: intervention/templates/intervention/detail/includes/revocation.html:69
#: intervention/templates/intervention/detail/includes/revocation.html:63
msgid "Remove revocation"
msgstr "Widerspruch entfernen"
@ -1519,31 +1520,31 @@ msgstr "Eingriffe - Übersicht"
msgid "Intervention {} added"
msgstr "Eingriff {} hinzugefügt"
#: intervention/views.py:249
#: intervention/views.py:248
msgid "This intervention has {} revocations"
msgstr "Dem Eingriff liegen {} Widersprüche vor"
#: intervention/views.py:298
#: intervention/views.py:297
msgid "Intervention {} edited"
msgstr "Eingriff {} bearbeitet"
#: intervention/views.py:334
#: intervention/views.py:333
msgid "{} removed"
msgstr "{} entfernt"
#: intervention/views.py:356
#: intervention/views.py:354
msgid "Revocation removed"
msgstr "Widerspruch entfernt"
#: intervention/views.py:439
#: intervention/views.py:436
msgid "Check performed"
msgstr "Prüfung durchgeführt"
#: intervention/views.py:461
#: intervention/views.py:458
msgid "Revocation added"
msgstr "Widerspruch hinzugefügt"
#: intervention/views.py:534
#: intervention/views.py:529
msgid "There are errors on this intervention:"
msgstr "Es liegen Fehler in diesem Eingriff vor:"
@ -1746,11 +1747,11 @@ msgstr "Kontrolle am"
msgid "Other"
msgstr "Sonstige"
#: konova/sub_settings/django_settings.py:159
#: konova/sub_settings/django_settings.py:155
msgid "German"
msgstr ""
#: konova/sub_settings/django_settings.py:160
#: konova/sub_settings/django_settings.py:156
msgid "English"
msgstr ""
@ -1812,31 +1813,31 @@ msgstr "In Zwischenablage kopiert"
msgid "Document '{}' deleted"
msgstr "Dokument '{}' gelöscht"
#: konova/utils/mailer.py:66
#: konova/utils/mailer.py:70
msgid "{} - Shared access removed"
msgstr "{} - Zugriff entzogen"
#: konova/utils/mailer.py:88
#: konova/utils/mailer.py:92
msgid "{} - Shared access given"
msgstr "{} - Zugriff freigegeben"
#: konova/utils/mailer.py:110
#: konova/utils/mailer.py:114
msgid "{} - Shared data recorded"
msgstr "{} - Freigegebene Daten verzeichnet"
#: konova/utils/mailer.py:132
#: konova/utils/mailer.py:136
msgid "{} - Shared data unrecorded"
msgstr "{} - Freigegebene Daten entzeichnet"
#: konova/utils/mailer.py:154
#: konova/utils/mailer.py:158
msgid "{} - Shared data deleted"
msgstr "{} - Freigegebene Daten gelöscht"
#: konova/utils/mailer.py:176
#: konova/utils/mailer.py:180
msgid "{} - Shared data checked"
msgstr "{} - Freigegebene Daten geprüft"
#: konova/utils/mailer.py:197 templates/email/api/verify_token.html:4
#: konova/utils/mailer.py:201 templates/email/api/verify_token.html:4
msgid "Request for new API token"
msgstr "Anfrage für neuen API Token"
@ -1926,15 +1927,19 @@ msgstr "fehlt"
msgid "Home"
msgstr "Home"
#: news/models.py:12
#: konova/views.py:117
msgid "Deadline removed"
msgstr "Frist gelöscht"
#: news/models.py:11
msgid "Default"
msgstr "Standard"
#: news/models.py:13
#: news/models.py:12
msgid "Info"
msgstr ""
#: news/models.py:14
#: news/models.py:13
msgid "Warning"
msgstr "Warnung"
@ -2222,10 +2227,6 @@ msgid "Timestamp"
msgstr "Zeitpunkt"
#: templates/log.html:13
msgid "Details"
msgstr ""
#: templates/log.html:16
msgid "User"
msgstr "Nutzer"
@ -2314,15 +2315,15 @@ msgstr "Neuen Token generieren"
msgid "A new token needs to be validated by an administrator!"
msgstr "Neue Tokens müssen durch Administratoren freigeschaltet werden!"
#: user/models/user_action.py:22
#: user/models/user_action.py:20
msgid "Unrecorded"
msgstr "Entzeichnet"
#: user/models/user_action.py:24
#: user/models/user_action.py:22
msgid "Edited"
msgstr "Bearbeitet"
#: user/models/user_action.py:25
#: user/models/user_action.py:23
msgid "Deleted"
msgstr "Gelöscht"
@ -3922,9 +3923,6 @@ msgstr ""
msgid "Unable to connect to qpid with SASL mechanism %s"
msgstr ""
#~ msgid "Action type details"
#~ msgstr "Zusatzmerkmale"
#~ msgid "On registered data edited"
#~ msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"

View File

@ -23,14 +23,15 @@
{% include 'navbars/navbar.html' %}
{% endblock %}
</header>
<div class="col">
<div class="container-fluid mt-3 px-5">
<div class="">
{% for message in messages %}
<div class="row alert alert-{{ message.tags }}">
{{ message }}
</div>
<div class="row alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
</div>
<div class="container-fluid mt-3">
</div>
{% comment %}
The modal wrapper, which can be used on every view can stay on the base.html template
{% endcomment %}

View File

@ -3,15 +3,12 @@
<table class="table table-hover">
<thead>
<tr>
<th scope="col" class="w-25">
<th scope="col">
{% trans 'Timestamp' %}
</th>
<th scope="col">
{% trans 'Action' %}
</th>
<th scope="col">
{% trans 'Details' %}
</th>
<th scope="col">
{% trans 'User' %}
</th>
@ -26,9 +23,6 @@
<td>
{{ entry.action_humanize}}
</td>
<td>
{{ entry.comment|default_if_none:"-" }}
</td>
<td>
{{entry.user}}
</td>

View File

@ -29,7 +29,7 @@
</a>
</li>
<li class=" menu-elem">
<a class="nav-btn nav-link" href="{% url 'compensation:acc:index' %}">
<a class="nav-btn nav-link" href="{% url 'compensation:acc-index' %}">
{% fa5_icon 'tree' %}
{% trans 'Eco-account' %}
</a>