Compare commits

...

7 Commits

Author SHA1 Message Date
b17b0b5144 # 86 Proper log detail
* adds support for payment adding/deleting to intervention log
* adds support for deduction adding/deleting to intervention/ecoaccount log
* improves code snippets
* drops add_deduction() methods for ecoaccount and intervention in favor of simpler creation in NewDeductionModalForm
* adds messages
* adds/updates translations
2022-02-02 15:16:25 +01:00
4563c222e9 # 86 HTML simplification
* simplifies rendering of detail attributes for CompensationState and CompensationAction -> takes up less space
2022-02-02 14:26:39 +01:00
4bff5f2548 # 86 Visual improvements
* moves message rendering directly below navigation menu for a more closed look
* reworks message rendering on before_states and after_states for all compensation related datatypes
* reworks layout of action column on all related data card tables
* resizes certain attribute layouts on related data card tables
* reworks layout of details on CompensationState and CompensationAction rendering from own column into subgrouped placement of main type info
* drops align-middle placement for all related data card table contents
2022-02-02 14:18:44 +01:00
edad33e662 # 86 Comment field length
* removes comment field length limit
* adds improvements for rendering large comments
2022-02-02 12:54:45 +01:00
1eecc5fa48 # 86 Viewport jump EcoAccount/EMA
* adds direct jump of viewport on related-data action (create/delete)
2022-02-02 11:26:02 +01:00
0248075479 # 86 Viewport jump Compensation
* adds direct jump of viewport on related-data action (create/delete)
* adds comment field to log.html as 'details'
2022-02-02 10:17:59 +01:00
6dbf87a8de # 86 Viewport jump Intervention
* adds direct jump of viewport on related-data action (create/delete)
2022-02-02 09:32:34 +01:00
64 changed files with 953 additions and 722 deletions

View File

@ -339,13 +339,13 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.form_title = _("New Eco-Account") self.form_title = _("New Eco-Account")
self.action_url = reverse("compensation:acc-new") self.action_url = reverse("compensation:acc:new")
self.cancel_redirect = reverse("compensation:acc-index") self.cancel_redirect = reverse("compensation:acc:index")
tmp = EcoAccount() tmp = EcoAccount()
identifier = tmp.generate_new_identifier() identifier = tmp.generate_new_identifier()
self.initialize_form_field("identifier", 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") self.fields["title"].widget.attrs["placeholder"] = _("Eco-Account XY; Location ABC")
def save(self, user: User, geom_form: SimpleGeomForm): def save(self, user: User, geom_form: SimpleGeomForm):
@ -402,8 +402,8 @@ class EditEcoAccountForm(NewEcoAccountForm):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.form_title = _("Edit Eco-Account") self.form_title = _("Edit Eco-Account")
self.action_url = reverse("compensation:acc-edit", 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,)) self.cancel_redirect = reverse("compensation:acc:detail", args=(self.instance.id,))
# Initialize form data # Initialize form data
reg_date = self.instance.legal.registration_date 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.forms import BaseModalForm, NewDocumentForm
from konova.models import DeadlineType from konova.models import DeadlineType
from konova.utils.message_templates import FORM_INVALID, ADDED_COMPENSATION_STATE, ADDED_DEADLINE, \ from konova.utils.message_templates import FORM_INVALID, ADDED_COMPENSATION_STATE, ADDED_DEADLINE, \
ADDED_COMPENSATION_ACTION ADDED_COMPENSATION_ACTION, PAYMENT_ADDED
class NewPaymentForm(BaseModalForm): class NewPaymentForm(BaseModalForm):
@ -100,7 +100,7 @@ class NewPaymentForm(BaseModalForm):
def save(self): def save(self):
pay = self.instance.add_payment(self) pay = self.instance.add_payment(self)
self.instance.mark_as_edited(self.user, self.request) self.instance.mark_as_edited(self.user, self.request, edit_comment=PAYMENT_ADDED)
return pay return pay
@ -346,10 +346,9 @@ class NewActionModalForm(BaseModalForm):
) )
comment = forms.CharField( comment = forms.CharField(
required=False, required=False,
max_length=200,
label=_("Comment"), label=_("Comment"),
label_suffix=_(""), label_suffix=_(""),
help_text=_("Additional comment, maximum {} letters").format(200), help_text=_("Additional comment"),
widget=forms.Textarea( widget=forms.Textarea(
attrs={ attrs={
"rows": 5, "rows": 5,

View File

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

View File

@ -7,10 +7,12 @@ Created on: 16.11.21
""" """
import shutil import shutil
from user.models import User from django.urls import reverse
from konova.utils.message_templates import DEDUCTION_REMOVED
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator from django.core.validators import MinValueValidator
from django.db import models, transaction from django.db import models
from django.db.models import Sum, QuerySet from django.db.models import Sum, QuerySet
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -20,7 +22,6 @@ from compensation.utils.quality import EcoAccountQualityChecker
from konova.models import ShareableObjectMixin, RecordableObjectMixin, AbstractDocument, BaseResource, \ from konova.models import ShareableObjectMixin, RecordableObjectMixin, AbstractDocument, BaseResource, \
generate_document_file_upload_path generate_document_file_upload_path
from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE
from user.models import UserActionLogEntry
class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin): class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin):
@ -165,34 +166,6 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
) )
return docs 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: def is_ready_for_publish(self) -> bool:
""" Checks whether the data passes all constraints for being publishable """ Checks whether the data passes all constraints for being publishable
@ -203,6 +176,14 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
is_ready = is_recorded is_ready = is_recorded
return is_ready 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): class EcoAccountDocument(AbstractDocument):
""" """
@ -285,3 +266,9 @@ class EcoAccountDeduction(BaseResource):
def __str__(self): def __str__(self):
return "{} of {}".format(self.surface, self.account) 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,6 +10,8 @@ from django.db import models
from intervention.models import Intervention from intervention.models import Intervention
from konova.models import BaseResource from konova.models import BaseResource
from konova.utils.message_templates import PAYMENT_REMOVED
from user.models import UserActionLogEntry
class Payment(BaseResource): class Payment(BaseResource):
@ -35,3 +37,8 @@ class Payment(BaseResource):
ordering = [ ordering = [
"-amount", "-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): def __init__(self, request: HttpRequest, *args, **kwargs):
self.title = _("Eco Accounts") self.title = _("Eco Accounts")
self.add_new_url = reverse("compensation:acc-new") self.add_new_url = reverse("compensation:acc:new")
qs = kwargs.get("queryset", None) qs = kwargs.get("queryset", None)
self.filter = EcoAccountTableFilter( self.filter = EcoAccountTableFilter(
user=request.user, user=request.user,
@ -224,7 +224,7 @@ class EcoAccountTable(BaseTable, TableRenderMixin):
html = "" html = ""
html += self.render_link( html += self.render_link(
tooltip=_("Open {}").format(_("Eco-account")), tooltip=_("Open {}").format(_("Eco-account")),
href=reverse("compensation:acc-detail", args=(record.id,)), href=reverse("compensation:acc:detail", args=(record.id,)),
txt=value, txt=value,
new_tab=False, new_tab=False,
) )

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -11,7 +11,7 @@
<div class="col-sm-6"> <div class="col-sm-6">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
{% if is_default_member and has_access %} {% if is_default_member and has_access %}
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation: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 'plus' %}
{% fa5_icon 'layer-group' %} {% fa5_icon 'layer-group' %}
</button> </button>
@ -20,27 +20,26 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body scroll-300"> {% if sum_before_states > sum_after_states %}
{% if sum_before_states > sum_after_states %} <div class="alert alert-danger mb-0">
<div class="row alert alert-danger"> {% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m²
{% trans 'Missing surfaces according to states before: ' %}{{ diff_states|floatformat:2 }} m² </div>
</div> {% endif %}
{% endif %} <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th class="w-25" scope="col"> <th class="w-50" scope="col">
{% trans 'Biotope type' %} {% trans 'Biotope type' %}
</th> </th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col"> <th scope="col">
{% trans 'Surface' %} {% trans 'Surface' %}
</th> </th>
{% if is_default_member and has_access %} {% if is_default_member and has_access %}
<th scope="col"> <th scope="col">
{% trans 'Action' %} <span class="float-right">
{% trans 'Action' %}
</span>
</th> </th>
{% endif %} {% endif %}
</tr> </tr>
@ -48,20 +47,19 @@
<tbody> <tbody>
{% for state in after_states %} {% for state in after_states %}
<tr> <tr>
<td class="align-middle"> <td>
{{ state.biotope_type }} <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> </td>
<td class="align-middle"> <td>{{ state.surface|floatformat:2 }} m²</td>
{% for biotope_extra in state.biotope_type_details.all %} <td>
<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 %} {% 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" title="{% trans 'Remove state' %}"> <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' %}">
{% fa5_icon 'trash' %} {% fa5_icon 'trash' %}
</button> </button>
{% endif %} {% endif %}

View File

@ -11,7 +11,7 @@
<div class="col-sm-6"> <div class="col-sm-6">
<div class="d-flex justify-content-end"> <div class="d-flex justify-content-end">
{% if is_default_member and has_access %} {% if is_default_member and has_access %}
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation: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 'plus' %}
{% fa5_icon 'layer-group' %} {% fa5_icon 'layer-group' %}
</button> </button>
@ -20,27 +20,26 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-body scroll-300"> {% if sum_before_states < sum_after_states %}
{% if sum_before_states < sum_after_states %} <div class="alert alert-danger mb-0">
<div class="row alert alert-danger"> {% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m²
{% trans 'Missing surfaces according to states after: ' %}{{ diff_states|floatformat:2 }} m² </div>
</div> {% endif %}
{% endif %} <div class="card-body scroll-300 p-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th class="w-25" scope="col"> <th class="w-50" scope="col">
{% trans 'Biotope type' %} {% trans 'Biotope type' %}
</th> </th>
<th class="w-25" scope="col">
{% trans 'Biotope additional type' %}
</th>
<th scope="col"> <th scope="col">
{% trans 'Surface' %} {% trans 'Surface' %}
</th> </th>
{% if is_default_member and has_access %} {% if is_default_member and has_access %}
<th scope="col"> <th scope="col">
{% trans 'Action' %} <span class="float-right">
{% trans 'Action' %}
</span>
</th> </th>
{% endif %} {% endif %}
</tr> </tr>
@ -48,20 +47,19 @@
<tbody> <tbody>
{% for state in before_states %} {% for state in before_states %}
<tr> <tr>
<td class="align-middle"> <td>
{{ state.biotope_type }} <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> </td>
<td class="align-middle"> <td>{{ state.surface|floatformat:2 }} m²</td>
{% for biotope_extra in state.biotope_type_details.all %} <td>
<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 %} {% 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" title="{% trans 'Remove state' %}"> <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' %}">
{% fa5_icon 'trash' %} {% fa5_icon 'trash' %}
</button> </button>
{% endif %} {% endif %}

View File

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

View File

@ -245,20 +245,20 @@ class EcoAccountViewTestCase(CompensationViewTestCase):
cls.eco_account.actions.set([action]) cls.eco_account.actions.set([action])
# Prepare urls # Prepare urls
cls.index_url = reverse("compensation:acc-index", args=()) cls.index_url = reverse("compensation:acc:index", args=())
cls.new_url = reverse("compensation:acc-new", args=()) cls.new_url = reverse("compensation:acc:new", args=())
cls.new_id_url = reverse("compensation:acc-new-id", args=()) cls.new_id_url = reverse("compensation:acc:new-id", args=())
cls.detail_url = reverse("compensation:acc-detail", args=(cls.eco_account.id,)) 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.log_url = reverse("compensation:acc:log", args=(cls.eco_account.id,))
cls.edit_url = reverse("compensation:acc-edit", 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.remove_url = reverse("compensation:acc:remove", args=(cls.eco_account.id,))
cls.report_url = reverse("compensation:acc-report", 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.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.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.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.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.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.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): def test_logged_in_no_groups_shared(self):
""" Check correct status code for all requests """ Check correct status code for all requests

View File

@ -258,7 +258,7 @@ class EcoAccountWorkflowTestCase(BaseWorkflowTestCase):
self.intervention.share_with(self.superuser) self.intervention.share_with(self.superuser)
# Prepare data for deduction creation # 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 test_surface = 10.00
post_data = { post_data = {
"surface": test_surface, "surface": test_surface,

View File

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

View File

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

View File

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

View File

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

View File

@ -13,6 +13,7 @@ from intervention.models import Intervention
from konova.contexts import BaseContext from konova.contexts import BaseContext
from konova.decorators import * from konova.decorators import *
from konova.forms import RemoveModalForm, SimpleGeomForm from konova.forms import RemoveModalForm, SimpleGeomForm
from konova.models import Deadline
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.documents import get_document, remove_document from konova.utils.documents import get_document, remove_document
from konova.utils.generators import generate_qr_code from konova.utils.generators import generate_qr_code
@ -276,7 +277,8 @@ def new_document_view(request: HttpRequest, id: str):
form = NewCompensationDocumentForm(request.POST or None, request.FILES or None, instance=comp, request=request) form = NewCompensationDocumentForm(request.POST or None, request.FILES or None, instance=comp, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Document added") msg_success=_("Document added"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
) )
@ -345,7 +347,8 @@ def state_new_view(request: HttpRequest, id: str):
form = NewStateModalForm(request.POST or None, instance=comp, request=request) form = NewStateModalForm(request.POST or None, instance=comp, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("State added") msg_success=_("State added"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
) )
@ -366,7 +369,8 @@ def action_new_view(request: HttpRequest, id: str):
form = NewActionModalForm(request.POST or None, instance=comp, request=request) form = NewActionModalForm(request.POST or None, instance=comp, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Action added") msg_success=_("Action added"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
) )
@ -387,7 +391,31 @@ def deadline_new_view(request: HttpRequest, id: str):
form = NewDeadlineModalForm(request.POST or None, instance=comp, request=request) form = NewDeadlineModalForm(request.POST or None, instance=comp, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Deadline added") 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"
) )
@ -409,7 +437,8 @@ def state_remove_view(request: HttpRequest, id: str, state_id: str):
form = RemoveModalForm(request.POST or None, instance=state, request=request) form = RemoveModalForm(request.POST or None, instance=state, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("State removed") msg_success=_("State removed"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
) )
@ -431,7 +460,8 @@ def action_remove_view(request: HttpRequest, id: str, action_id: str):
form = RemoveModalForm(request.POST or None, instance=action, request=request) form = RemoveModalForm(request.POST or None, instance=action, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Action removed") msg_success=_("Action removed"),
redirect_url=reverse("compensation:detail", args=(id,)) + "#related_data"
) )

View File

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

View File

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

View File

@ -11,6 +11,7 @@ from django.contrib import messages
from django.db import models from django.db import models
from django.db.models import QuerySet from django.db.models import QuerySet
from django.http import HttpRequest from django.http import HttpRequest
from django.urls import reverse
from compensation.models import AbstractCompensation from compensation.models import AbstractCompensation
from ema.managers import EmaManager from ema.managers import EmaManager
@ -119,6 +120,14 @@ class Ema(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin):
is_ready = is_recorded is_ready = is_recorded
return is_ready 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): class EmaDocument(AbstractDocument):
""" """

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -15,6 +15,7 @@ from konova.contexts import BaseContext
from konova.decorators import conservation_office_group_required, shared_access_required from konova.decorators import conservation_office_group_required, shared_access_required
from ema.models import Ema, EmaDocument from ema.models import Ema, EmaDocument
from konova.forms import RemoveModalForm, SimpleGeomForm, RecordModalForm from konova.forms import RemoveModalForm, SimpleGeomForm, RecordModalForm
from konova.models import Deadline
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.documents import get_document, remove_document from konova.utils.documents import get_document, remove_document
@ -290,7 +291,8 @@ def state_new_view(request: HttpRequest, id: str):
form = NewStateModalForm(request.POST or None, instance=ema, request=request) form = NewStateModalForm(request.POST or None, instance=ema, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("State added") msg_success=_("State added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
) )
@ -311,7 +313,8 @@ def action_new_view(request: HttpRequest, id: str):
form = NewActionModalForm(request.POST or None, instance=ema, request=request) form = NewActionModalForm(request.POST or None, instance=ema, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Action added") msg_success=_("Action added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
) )
@ -332,7 +335,8 @@ def deadline_new_view(request: HttpRequest, id: str):
form = NewDeadlineModalForm(request.POST or None, instance=ema, request=request) form = NewDeadlineModalForm(request.POST or None, instance=ema, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Deadline added") msg_success=_("Deadline added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
) )
@ -352,7 +356,8 @@ def document_new_view(request: HttpRequest, id: str):
form = NewEmaDocumentForm(request.POST or None, request.FILES or None, instance=ema, request=request) form = NewEmaDocumentForm(request.POST or None, request.FILES or None, instance=ema, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Document added") msg_success=_("Document added"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
) )
@ -422,7 +427,8 @@ def state_remove_view(request: HttpRequest, id: str, state_id: str):
form = RemoveModalForm(request.POST or None, instance=state, request=request) form = RemoveModalForm(request.POST or None, instance=state, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("State removed") msg_success=_("State removed"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
) )
@ -444,7 +450,8 @@ def action_remove_view(request: HttpRequest, id: str, action_id: str):
form = RemoveModalForm(request.POST or None, instance=action, request=request) form = RemoveModalForm(request.POST or None, instance=action, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Action removed") msg_success=_("Action removed"),
redirect_url=reverse("ema:detail", args=(id,)) + "#related_data"
) )
@ -564,4 +571,27 @@ def create_share_view(request: HttpRequest, id: str):
return form.process_request( return form.process_request(
request, request,
msg_success=_("Share settings updated") 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,6 +7,8 @@ Created on: 02.12.20
""" """
from dal import autocomplete from dal import autocomplete
from django import forms from django import forms
from konova.utils.message_templates import EDITED_GENERAL_DATA
from user.models import User from user.models import User
from django.db import transaction from django.db import transaction
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
@ -333,7 +335,7 @@ class EditInterventionForm(NewInterventionForm):
self.instance.responsible.conservation_file_number = conservation_file_number self.instance.responsible.conservation_file_number = conservation_file_number
self.instance.responsible.save() self.instance.responsible.save()
user_action = UserActionLogEntry.get_edited_action(user) user_action = self.instance.mark_as_edited(user, edit_comment=EDITED_GENERAL_DATA)
geometry = geom_form.save(user_action) geometry = geom_form.save(user_action)
self.instance.geometry = geometry self.instance.geometry = geometry
@ -347,8 +349,5 @@ class EditInterventionForm(NewInterventionForm):
self.instance.modified = user_action self.instance.modified = user_action
self.instance.save() self.instance.save()
# Uncheck and unrecord intervention due to changed data
self.instance.mark_as_edited(user)
return self.instance return self.instance

View File

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

View File

@ -8,6 +8,7 @@ Created on: 15.11.21
import shutil import shutil
from django.contrib import messages from django.contrib import messages
from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from user.models import User from user.models import User
@ -25,7 +26,7 @@ from konova.models import generate_document_file_upload_path, AbstractDocument,
ShareableObjectMixin, \ ShareableObjectMixin, \
RecordableObjectMixin, CheckableObjectMixin, GeoReferencedMixin RecordableObjectMixin, CheckableObjectMixin, GeoReferencedMixin
from konova.settings import LANIS_LINK_TEMPLATE, LANIS_ZOOM_LUT, DEFAULT_SRID_RLP from konova.settings import LANIS_LINK_TEMPLATE, LANIS_ZOOM_LUT, DEFAULT_SRID_RLP
from konova.utils.message_templates import DATA_UNSHARED_EXPLANATION from konova.utils.message_templates import DATA_UNSHARED_EXPLANATION, DEDUCTION_ADDED
from user.models import UserActionLogEntry from user.models import UserActionLogEntry
@ -228,28 +229,6 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec
) )
return revocation 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): 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 """ In case the object or a related object changed, internal processes need to be started, such as
unrecord and uncheck unrecord and uncheck
@ -263,9 +242,10 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec
Returns: Returns:
""" """
super().mark_as_edited(performing_user, request, edit_comment, reset_recorded) action = super().mark_as_edited(performing_user, request, edit_comment, reset_recorded)
if self.checked: if self.checked:
self.set_unchecked() self.set_unchecked()
return action
def set_status_messages(self, request: HttpRequest): def set_status_messages(self, request: HttpRequest):
""" Setter for different information that need to be rendered """ Setter for different information that need to be rendered
@ -299,6 +279,14 @@ class Intervention(BaseObject, ShareableObjectMixin, RecordableObjectMixin, Chec
and is_free_of_revocations and is_free_of_revocations
return is_ready 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): class InterventionDocument(AbstractDocument):
""" """

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -62,7 +62,7 @@
<th scope="row">{% trans 'Deductions of eco-accounts' %}</th> <th scope="row">{% trans 'Deductions of eco-accounts' %}</th>
<td class="align-middle"> <td class="align-middle">
{% for deduction in deductions %} {% 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}} {{deduction.account.identifier}} - {{deduction.account.title}}
</a> </a>
<br> <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. # 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. # 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. # 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 # Make sure there are no payments on the intervention, yet
self.assertEqual(0, self.intervention.payments.count()) self.assertEqual(0, self.intervention.payments.count())
@ -251,7 +251,7 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
""" """
# Create removing url for the payment # 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 = { post_data = {
"confirm": True, "confirm": True,
} }
@ -390,7 +390,7 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
""" """
# Create the url for creating a new deduction # 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 # Prepare the form data
test_surface = 100.00 test_surface = 100.00
@ -415,7 +415,7 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
""" """
# Prepare url for deleting of this deduction # 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 = { post_data = {
"confirm": True "confirm": True
} }

View File

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

View File

@ -1,6 +1,7 @@
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.http import HttpRequest, JsonResponse from django.http import HttpRequest, JsonResponse, Http404
from django.shortcuts import render from django.shortcuts import render
from intervention.forms.forms import NewInterventionForm, EditInterventionForm from intervention.forms.forms import NewInterventionForm, EditInterventionForm
@ -15,7 +16,7 @@ from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.documents import remove_document, get_document from konova.utils.documents import remove_document, get_document
from konova.utils.generators import generate_qr_code from konova.utils.generators import generate_qr_code
from konova.utils.message_templates import INTERVENTION_INVALID, FORM_INVALID, IDENTIFIER_REPLACED, \ from konova.utils.message_templates import INTERVENTION_INVALID, FORM_INVALID, IDENTIFIER_REPLACED, \
CHECKED_RECORDED_RESET CHECKED_RECORDED_RESET, DEDUCTION_REMOVED, DEDUCTION_ADDED
from konova.utils.user_checks import in_group from konova.utils.user_checks import in_group
@ -129,7 +130,8 @@ def new_document_view(request: HttpRequest, id: str):
form = NewInterventionDocumentForm(request.POST or None, request.FILES or None, instance=intervention, request=request) form = NewInterventionDocumentForm(request.POST or None, request.FILES or None, instance=intervention, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Document added") msg_success=_("Document added"),
redirect_url=reverse("intervention:detail", args=(id,)) + "#related_data"
) )
@ -348,10 +350,12 @@ def remove_revocation_view(request: HttpRequest, id: str):
""" """
obj = Revocation.objects.get(id=id) obj = Revocation.objects.get(id=id)
form = RemoveModalForm(request.POST or None, instance=obj, request=request) form = RemoveModalForm(request.POST or None, instance=obj, request=request)
return form.process_request( return form.process_request(
request, request,
_("Revocation removed"), _("Revocation removed"),
redirect_url=reverse("intervention:detail", args=(obj.intervention.id,)) + "#related_data"
) )
@ -455,7 +459,8 @@ def new_revocation_view(request: HttpRequest, id: str):
form = NewRevocationModalForm(request.POST or None, request.FILES or None, instance=intervention, request=request) form = NewRevocationModalForm(request.POST or None, request.FILES or None, instance=intervention, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Revocation added") msg_success=_("Revocation added"),
redirect_url=reverse("intervention:detail", args=(id,)) + "#related_data"
) )
@ -502,7 +507,36 @@ def new_deduction_view(request: HttpRequest, id: str):
form = NewDeductionModalForm(request.POST or None, instance=intervention, request=request) form = NewDeductionModalForm(request.POST or None, instance=intervention, request=request)
return form.process_request( return form.process_request(
request, request,
msg_success=_("Deduction added") 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"
) )

View File

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

View File

@ -275,9 +275,9 @@ class RecordableObjectMixin(models.Model):
Returns: Returns:
""" """
action = UserActionLogEntry.get_edited_action(performing_user, edit_comment) edit_action = UserActionLogEntry.get_edited_action(performing_user, edit_comment)
self.modified = action self.modified = edit_action
self.log.add(action) self.log.add(edit_action)
self.save() self.save()
if self.recorded and reset_recorded: if self.recorded and reset_recorded:
@ -288,6 +288,7 @@ class RecordableObjectMixin(models.Model):
request, request,
CHECKED_RECORDED_RESET CHECKED_RECORDED_RESET
) )
return edit_action
@abstractmethod @abstractmethod
def is_ready_for_publish(self) -> bool: def is_ready_for_publish(self) -> bool:
@ -479,6 +480,15 @@ class ShareableObjectMixin(models.Model):
""" """
return self.users.all() 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): class GeoReferencedMixin(models.Model):
geometry = models.ForeignKey("konova.Geometry", null=True, blank=True, on_delete=models.SET_NULL) geometry = models.ForeignKey("konova.Geometry", null=True, blank=True, on_delete=models.SET_NULL)

View File

@ -4,7 +4,7 @@
{% trans 'Eco-account' %} {% trans 'Eco-account' %}
</h4> </h4>
<div class="row"> <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="col-sm-5">
<div class="qs-box d-flex justify-content-center align-items-center"> <div class="qs-box d-flex justify-content-center align-items-center">
{% fa5_icon 'tree' %} {% fa5_icon 'tree' %}
@ -26,12 +26,12 @@
<div class="col-sm-12 col-lg"> <div class="col-sm-12 col-lg">
<div class="col-sm"> <div class="col-sm">
<div class="row my-1"> <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> <button class="btn btn-default">{% fa5_icon 'plus' %} {% trans 'Create' %}</button>
</a> </a>
</div> </div>
<div class="row my-1"> <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> <button class="btn btn-default">{% fa5_icon 'eye' %} {% trans 'Show' %}</button>
</a> </a>
</div> </div>

View File

@ -52,3 +52,19 @@ def default_if_zero(val1, val2):
""" """
return val1 if val1 > 0 else 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 ShareUserAutocomplete, BiotopeExtraCodeAutocomplete, CompensationActionDetailCodeAutocomplete
from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG
from konova.sso.sso import KonovaSSOClient from konova.sso.sso import KonovaSSOClient
from konova.views import logout_view, home_view, remove_deadline_view from konova.views import logout_view, home_view
sso_client = KonovaSSOClient(SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY) sso_client = KonovaSSOClient(SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY)
urlpatterns = [ urlpatterns = [
@ -40,9 +40,6 @@ urlpatterns = [
path('analysis/', include("analysis.urls")), path('analysis/', include("analysis.urls")),
path('api/', include("api.urls")), path('api/', include("api.urls")),
# Generic deadline routes
path('deadline/<id>/remove', remove_deadline_view, name="deadline-remove"),
# Autocomplete paths for all apps # Autocomplete paths for all apps
path("atcmplt/eco-accounts", EcoAccountAutocomplete.as_view(), name="accounts-autocomplete"), path("atcmplt/eco-accounts", EcoAccountAutocomplete.as_view(), name="accounts-autocomplete"),
path("atcmplt/interventions", InterventionAutocomplete.as_view(), name="interventions-autocomplete"), path("atcmplt/interventions", InterventionAutocomplete.as_view(), name="interventions-autocomplete"),

View File

@ -21,6 +21,14 @@ CHECKED_RECORDED_RESET = _("Status of Checked and Recorded reseted")
# ECO ACCOUNT # ECO ACCOUNT
CANCEL_ACC_RECORDED_OR_DEDUCTED = _("Action canceled. Eco account is recorded or deductions exist. Only conservation office member can perform this action.") 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
EDITED_GENERAL_DATA = _("Edited general data") EDITED_GENERAL_DATA = _("Edited general data")
ADDED_COMPENSATION_STATE = _("Added compensation state") ADDED_COMPENSATION_STATE = _("Added compensation state")

View File

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

View File

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

View File

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

View File

@ -29,7 +29,7 @@
</a> </a>
</li> </li>
<li class=" menu-elem"> <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' %} {% fa5_icon 'tree' %}
{% trans 'Eco-account' %} {% trans 'Eco-account' %}
</a> </a>