110_Biotope_codelists #117
@ -65,6 +65,26 @@ class KonovaCode(models.Model):
|
||||
ret_val += ", " + self.parent.long_name
|
||||
return ret_val
|
||||
|
||||
def add_children(self):
|
||||
""" Adds all children (resurcively until leaf) as .children to the KonovaCode
|
||||
|
||||
Returns:
|
||||
code (KonovaCode): The manipulated KonovaCode instance
|
||||
"""
|
||||
if self.is_leaf:
|
||||
return None
|
||||
|
||||
children = KonovaCode.objects.filter(
|
||||
code_lists__in=self.code_lists.all(),
|
||||
parent=self
|
||||
).order_by(
|
||||
"long_name"
|
||||
)
|
||||
self.children = children
|
||||
for child in children:
|
||||
child.add_children()
|
||||
return self
|
||||
|
||||
|
||||
class KonovaCodeList(models.Model):
|
||||
"""
|
||||
|
@ -17,10 +17,11 @@ from codelist.models import KonovaCode
|
||||
from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION_ID, CODELIST_BIOTOPES_EXTRA_CODES_ID, \
|
||||
CODELIST_COMPENSATION_ACTION_DETAIL_ID
|
||||
from compensation.models import CompensationDocument, EcoAccountDocument
|
||||
from intervention.inputs import CompensationActionTreeCheckboxSelectMultiple
|
||||
from konova.contexts import BaseContext
|
||||
from konova.forms import BaseModalForm, NewDocumentModalForm, RemoveModalForm
|
||||
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_COMPENSATION_ACTION, PAYMENT_EDITED, COMPENSATION_STATE_EDITED, COMPENSATION_ACTION_EDITED, DEADLINE_EDITED
|
||||
|
||||
|
||||
@ -405,22 +406,13 @@ class NewActionModalForm(BaseModalForm):
|
||||
|
||||
"""
|
||||
from compensation.models import UnitChoices
|
||||
action_type = forms.ModelChoiceField(
|
||||
action_type = forms.MultipleChoiceField(
|
||||
label=_("Action Type"),
|
||||
label_suffix="",
|
||||
required=True,
|
||||
help_text=_("Select the action type"),
|
||||
queryset=KonovaCode.objects.filter(
|
||||
is_archived=False,
|
||||
is_leaf=True,
|
||||
code_lists__in=[CODELIST_COMPENSATION_ACTION_ID],
|
||||
),
|
||||
widget=autocomplete.ModelSelect2(
|
||||
url="codes-compensation-action-autocomplete",
|
||||
attrs={
|
||||
"data-placeholder": _("Action"),
|
||||
}
|
||||
),
|
||||
help_text=_("An action can consist of multiple different action types. All the selected action types are expected to be performed according to the amount and unit below on this form."),
|
||||
choices=[],
|
||||
widget=CompensationActionTreeCheckboxSelectMultiple(),
|
||||
)
|
||||
action_type_details = forms.ModelMultipleChoiceField(
|
||||
label=_("Action Type detail"),
|
||||
@ -482,6 +474,16 @@ class NewActionModalForm(BaseModalForm):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.form_title = _("New action")
|
||||
self.form_caption = _("Insert data for the new action")
|
||||
choices =KonovaCode.objects.filter(
|
||||
code_lists__in=[CODELIST_COMPENSATION_ACTION_ID],
|
||||
is_archived=False,
|
||||
is_leaf=True,
|
||||
).values_list("id", flat=True)
|
||||
choices = [
|
||||
(choice, choice)
|
||||
for choice in choices
|
||||
]
|
||||
self.fields["action_type"].choices = choices
|
||||
|
||||
def save(self):
|
||||
action = self.instance.add_action(self)
|
||||
@ -496,7 +498,7 @@ class EditCompensationActionModalForm(NewActionModalForm):
|
||||
self.action = kwargs.pop("action", None)
|
||||
super().__init__(*args, **kwargs)
|
||||
form_data = {
|
||||
"action_type": self.action.action_type,
|
||||
"action_type": list(self.action.action_type.values_list("id", flat=True)),
|
||||
"action_type_details": self.action.action_type_details.all(),
|
||||
"amount": self.action.amount,
|
||||
"unit": self.action.unit,
|
||||
@ -506,7 +508,7 @@ class EditCompensationActionModalForm(NewActionModalForm):
|
||||
|
||||
def save(self):
|
||||
action = self.action
|
||||
action.action_type = self.cleaned_data.get("action_type", None)
|
||||
action.action_type.set(self.cleaned_data.get("action_type", []))
|
||||
action.action_type_details.set(self.cleaned_data.get("action_type_details", []))
|
||||
action.amount = self.cleaned_data.get("amount", None)
|
||||
action.unit = self.cleaned_data.get("unit", None)
|
||||
|
@ -8,17 +8,6 @@ Created on: 14.10.21
|
||||
from django.db import models
|
||||
|
||||
|
||||
class CompensationActionManager(models.Manager):
|
||||
""" Holds default db fetch setting for this model type
|
||||
|
||||
"""
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().select_related(
|
||||
"action_type",
|
||||
"action_type__parent"
|
||||
)
|
||||
|
||||
|
||||
class CompensationStateManager(models.Manager):
|
||||
""" Holds default db fetch setting for this model type
|
||||
|
||||
|
42
compensation/migrations/0004_auto_20220210_1402.py
Normal file
42
compensation/migrations/0004_auto_20220210_1402.py
Normal file
@ -0,0 +1,42 @@
|
||||
# Generated by Django 3.1.3 on 2022-02-10 13:02
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
def migrate_actions(apps, schema_editor):
|
||||
CompensationAction = apps.get_model('compensation', 'CompensationAction')
|
||||
actions = CompensationAction.objects.all()
|
||||
|
||||
for action in actions:
|
||||
action_type = action.action_type or []
|
||||
action.action_type_tmp.set([action_type])
|
||||
action.save()
|
||||
|
||||
if not action.action_type_tmp.count() > 0:
|
||||
raise ValueError("Migration of actions did not work! Stoped before data loss!")
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('codelist', '0001_initial'),
|
||||
('compensation', '0003_auto_20220202_0846'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='compensationaction',
|
||||
name='action_type_tmp',
|
||||
field=models.ManyToManyField(blank=True, limit_choices_to={'code_lists__in': [1026], 'is_archived': False, 'is_selectable': True}, related_name='_compensationaction_action_type_+', to='codelist.KonovaCode'),
|
||||
),
|
||||
migrations.RunPython(migrate_actions),
|
||||
migrations.RemoveField(
|
||||
model_name='compensationaction',
|
||||
name='action_type',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='compensationaction',
|
||||
old_name='action_type_tmp',
|
||||
new_name='action_type',
|
||||
)
|
||||
]
|
@ -10,9 +10,7 @@ from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from codelist.models import KonovaCode
|
||||
from codelist.settings import CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_DETAIL_ID
|
||||
from compensation.managers import CompensationActionManager
|
||||
from konova.models import BaseResource
|
||||
from konova.utils.message_templates import COMPENSATION_ACTION_REMOVED
|
||||
|
||||
|
||||
class UnitChoices(models.TextChoices):
|
||||
@ -31,10 +29,8 @@ class CompensationAction(BaseResource):
|
||||
"""
|
||||
Compensations include actions like planting trees, refreshing rivers and so on.
|
||||
"""
|
||||
action_type = models.ForeignKey(
|
||||
action_type = models.ManyToManyField(
|
||||
KonovaCode,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
limit_choices_to={
|
||||
"code_lists__in": [CODELIST_COMPENSATION_ACTION_ID],
|
||||
@ -57,10 +53,8 @@ class CompensationAction(BaseResource):
|
||||
unit = models.CharField(max_length=100, null=True, blank=True, choices=UnitChoices.choices)
|
||||
comment = models.TextField(blank=True, null=True, help_text="Additional comment")
|
||||
|
||||
objects = CompensationActionManager()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.action_type} | {self.amount} {self.unit}"
|
||||
return f"{self.action_type.all()} | {self.amount} {self.unit}"
|
||||
|
||||
@property
|
||||
def unit_humanize(self):
|
||||
|
@ -104,12 +104,12 @@ class AbstractCompensation(BaseObject, GeoReferencedMixin):
|
||||
with transaction.atomic():
|
||||
user_action = UserActionLogEntry.get_created_action(user)
|
||||
comp_action = CompensationAction.objects.create(
|
||||
action_type=form_data["action_type"],
|
||||
amount=form_data["amount"],
|
||||
unit=form_data["unit"],
|
||||
comment=form_data["comment"],
|
||||
created=user_action,
|
||||
)
|
||||
comp_action.action_type.set(form_data.get("action_type", []))
|
||||
comp_action_details = form_data["action_type_details"]
|
||||
comp_action.action_type_details.set(comp_action_details)
|
||||
self.actions.add(comp_action)
|
||||
|
@ -47,13 +47,15 @@
|
||||
{% for action in actions %}
|
||||
<tr>
|
||||
<td class="">
|
||||
<span>{{ action.action_type }}</span>
|
||||
{% if action.action_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in action.action_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% for type in action.action_type.all %}
|
||||
<div> {{type.parent.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.long_name}} </div>
|
||||
<hr>
|
||||
{% endfor %}
|
||||
{% for detail in action.action_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No action type details' %}">{% trans 'No action type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
|
||||
<td class="">
|
||||
|
@ -48,13 +48,13 @@
|
||||
{% for state in after_states %}
|
||||
<tr>
|
||||
<td>
|
||||
<span>{{ state.biotope_type }}</span>
|
||||
{% if state.biotope_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<span>{{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}})</span>
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No biotope type details' %}">{% trans 'No biotope type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td class="align-middle float-right">
|
||||
|
@ -48,13 +48,13 @@
|
||||
{% for state in before_states %}
|
||||
<tr>
|
||||
<td>
|
||||
<span>{{ state.biotope_type }}</span>
|
||||
{% if state.biotope_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<span>{{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}})</span>
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No biotope type details' %}">{% trans 'No biotope type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td class="align-middle float-right">
|
||||
|
@ -2,6 +2,7 @@
|
||||
{% load i18n l10n static fontawesome_5 humanize ksp_filters %}
|
||||
|
||||
{% block head %}
|
||||
|
||||
{% comment %}
|
||||
dal documentation (django-autocomplete-light) states using form.media for adding needed scripts.
|
||||
This does not work properly with modal forms, as the scripts are not loaded properly inside the modal.
|
||||
|
@ -46,13 +46,15 @@
|
||||
{% for action in actions %}
|
||||
<tr>
|
||||
<td class="">
|
||||
<span>{{ action.action_type }}</span>
|
||||
{% if action.action_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in action.action_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% for type in action.action_type.all %}
|
||||
<div> {{type.parent.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.long_name}} </div>
|
||||
<hr>
|
||||
{% endfor %}
|
||||
{% for detail in action.action_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No action type details' %}">{% trans 'No action type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
|
||||
<td class="">
|
||||
|
@ -48,13 +48,13 @@
|
||||
{% for state in after_states %}
|
||||
<tr>
|
||||
<td>
|
||||
<span>{{ state.biotope_type }}</span>
|
||||
{% if state.biotope_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<span>{{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}})</span>
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No biotope type details' %}">{% trans 'No biotope type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td class="align-middle float-right">
|
||||
|
@ -48,13 +48,13 @@
|
||||
{% for state in before_states %}
|
||||
<tr>
|
||||
<td>
|
||||
<span>{{ state.biotope_type }}</span>
|
||||
{% if state.biotope_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<span>{{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}})</span>
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No biotope type details' %}">{% trans 'No biotope type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td class="align-middle float-right">
|
||||
|
@ -2,6 +2,7 @@
|
||||
{% load i18n l10n static fontawesome_5 humanize %}
|
||||
|
||||
{% block head %}
|
||||
|
||||
{% comment %}
|
||||
dal documentation (django-autocomplete-light) states using form.media for adding needed scripts.
|
||||
This does not work properly with modal forms, as the scripts are not loaded properly inside the modal.
|
||||
|
@ -44,13 +44,15 @@
|
||||
{% for action in obj.actions.all %}
|
||||
<tr>
|
||||
<td class="">
|
||||
<span>{{ action.action_type }}</span>
|
||||
{% if action.action_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in action.action_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% for type in action.action_type.all %}
|
||||
<div> {{type.parent.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.parent.long_name}} {% fa5_icon 'angle-right' %} {{type.long_name}} </div>
|
||||
<hr>
|
||||
{% endfor %}
|
||||
{% for detail in action.action_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No action type details' %}">{% trans 'No action type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="">{{ action.amount|floatformat:2|intcomma }} {{ action.unit_humanize }}</td>
|
||||
<td class="">
|
||||
|
@ -46,13 +46,13 @@
|
||||
{% for state in after_states %}
|
||||
<tr>
|
||||
<td>
|
||||
<span>{{ state.biotope_type }}</span>
|
||||
{% if state.biotope_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<span>{{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}})</span>
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No biotope type details' %}">{% trans 'No biotope type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td class="align-middle float-right">
|
||||
|
@ -46,13 +46,13 @@
|
||||
{% for state in before_states %}
|
||||
<tr>
|
||||
<td>
|
||||
<span>{{ state.biotope_type }}</span>
|
||||
{% if state.biotope_type_details.count > 0 %}
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<span>{{ state.biotope_type.parent.long_name }} {% fa5_icon 'angle-right' %} {{ state.biotope_type.long_name }} ({{state.biotope_type.short_name}})</span>
|
||||
<br>
|
||||
{% for detail in state.biotope_type_details.all %}
|
||||
<span class="badge badge-pill rlp-r" title="{{detail}}">{{detail.long_name}}</span>
|
||||
{% empty %}
|
||||
<span class="badge badge-pill rlp-r-outline" title="{% trans 'No biotope type details' %}">{% trans 'No biotope type details' %}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ state.surface|floatformat:2 }} m²</td>
|
||||
<td class="align-middle float-right">
|
||||
|
@ -1,4 +1,6 @@
|
||||
from django import forms
|
||||
from codelist.models import KonovaCode
|
||||
from codelist.settings import CODELIST_COMPENSATION_ACTION_ID
|
||||
|
||||
|
||||
class DummyFilterInput(forms.HiddenInput):
|
||||
@ -30,3 +32,51 @@ class GenerateInput(forms.TextInput):
|
||||
|
||||
"""
|
||||
template_name = "konova/widgets/generate-content-input.html"
|
||||
|
||||
|
||||
class TreeCheckboxSelectMultiple(forms.CheckboxSelectMultiple):
|
||||
""" Provides multiple selection of parent-child data
|
||||
|
||||
"""
|
||||
template_name = "konova/widgets/checkbox-tree-select.html"
|
||||
|
||||
class meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class KonovaCodeTreeCheckboxSelectMultiple(TreeCheckboxSelectMultiple):
|
||||
""" Provides multiple selection of KonovaCodes
|
||||
|
||||
"""
|
||||
filter = None
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.code_list = kwargs.pop("code_list", None)
|
||||
self.filter = kwargs.pop("filter", {})
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def get_context(self, name, value, attrs):
|
||||
context = super().get_context(name, value, attrs)
|
||||
codes = KonovaCode.objects.filter(
|
||||
**self.filter,
|
||||
)
|
||||
codes = [
|
||||
parent_code.add_children()
|
||||
for parent_code in codes
|
||||
]
|
||||
context["codes"] = codes
|
||||
return context
|
||||
|
||||
|
||||
class CompensationActionTreeCheckboxSelectMultiple(KonovaCodeTreeCheckboxSelectMultiple):
|
||||
""" Provides multiple selection of CompensationActions
|
||||
|
||||
"""
|
||||
filter = None
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.filter = {
|
||||
"code_lists__in": [CODELIST_COMPENSATION_ACTION_ID],
|
||||
"parent": None,
|
||||
}
|
@ -5,7 +5,12 @@ Contact: michel.peltriaux@sgdnord.rlp.de
|
||||
Created on: 07.12.20
|
||||
|
||||
"""
|
||||
import collections
|
||||
|
||||
from dal_select2.views import Select2QuerySetView, Select2GroupQuerySetView
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
||||
from konova.utils.message_templates import UNGROUPED
|
||||
from user.models import User
|
||||
from django.db.models import Q
|
||||
|
||||
@ -139,6 +144,8 @@ class KonovaCodeAutocomplete(Select2GroupQuerySetView):
|
||||
q_or |= Q(short_name__icontains=keyword)
|
||||
q_or |= Q(parent__long_name__icontains=keyword)
|
||||
q_or |= Q(parent__short_name__icontains=keyword)
|
||||
q_or |= Q(parent__parent__long_name__icontains=keyword)
|
||||
q_or |= Q(parent__parent__short_name__icontains=keyword)
|
||||
_filter.add(q_or, Q.AND)
|
||||
qs = qs.filter(_filter).distinct()
|
||||
return qs
|
||||
@ -181,7 +188,7 @@ class CompensationActionDetailCodeAutocomplete(KonovaCodeAutocomplete):
|
||||
|
||||
def order_by(self, qs):
|
||||
return qs.order_by(
|
||||
"parent__long_name"
|
||||
"long_name"
|
||||
)
|
||||
|
||||
|
||||
@ -214,6 +221,41 @@ class BiotopeCodeAutocomplete(KonovaCodeAutocomplete):
|
||||
def get_result_label(self, result):
|
||||
return f"{result.long_name} ({result.short_name})"
|
||||
|
||||
def get_results(self, context):
|
||||
"""Return the options grouped by a common related model.
|
||||
|
||||
Raises ImproperlyConfigured if self.group_by_name is not configured
|
||||
"""
|
||||
if not self.group_by_related:
|
||||
raise ImproperlyConfigured("Missing group_by_related.")
|
||||
|
||||
super_groups = collections.OrderedDict()
|
||||
|
||||
object_list = context['object_list']
|
||||
|
||||
for result in object_list:
|
||||
group = result.parent if result.parent else None
|
||||
group_name = f"{group.long_name} ({group.short_name})" if group else UNGROUPED
|
||||
super_group = result.parent.parent if result.parent else None
|
||||
super_group_name = f"{super_group.long_name} ({super_group.short_name})" if super_group else UNGROUPED
|
||||
super_groups.setdefault(super_group_name, {})
|
||||
super_groups[super_group_name].setdefault(group_name, [])
|
||||
super_groups[super_group_name][group_name].append(result)
|
||||
|
||||
return [{
|
||||
'id': None,
|
||||
'text': super_group,
|
||||
'children': [{
|
||||
"id": None,
|
||||
"text": group,
|
||||
"children": [{
|
||||
'id': self.get_result_value(result),
|
||||
'text': self.get_result_label(result),
|
||||
'selected_text': self.get_selected_result_label(result),
|
||||
} for result in results]
|
||||
} for group, results in groups.items()]
|
||||
} for super_group, groups in super_groups.items()]
|
||||
|
||||
|
||||
class BiotopeExtraCodeAutocomplete(KonovaCodeAutocomplete):
|
||||
"""
|
||||
@ -239,7 +281,7 @@ class BiotopeExtraCodeAutocomplete(KonovaCodeAutocomplete):
|
||||
qs (QuerySet): The ordered queryset
|
||||
"""
|
||||
return qs.order_by(
|
||||
"parent__long_name",
|
||||
"long_name",
|
||||
)
|
||||
|
||||
def get_result_label(self, result):
|
||||
@ -284,6 +326,11 @@ class RegistrationOfficeCodeAutocomplete(KonovaCodeAutocomplete):
|
||||
self.c = CODELIST_REGISTRATION_OFFICE_ID
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def order_by(self, qs):
|
||||
return qs.order_by(
|
||||
"parent__long_name"
|
||||
)
|
||||
|
||||
|
||||
class ConservationOfficeCodeAutocomplete(KonovaCodeAutocomplete):
|
||||
"""
|
||||
@ -297,4 +344,4 @@ class ConservationOfficeCodeAutocomplete(KonovaCodeAutocomplete):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def get_result_label(self, result):
|
||||
return f"{result.long_name} ({result.short_name})"
|
||||
return f"{result.long_name} ({result.short_name})"
|
||||
|
@ -242,15 +242,24 @@ Similar to bootstraps 'shadow-lg'
|
||||
.select2-results__option--highlighted{
|
||||
background-color: var(--rlp-red) !important;
|
||||
}
|
||||
/*
|
||||
.select2-container--default .select2-results__group{
|
||||
background-color: var(--rlp-gray-light);
|
||||
}
|
||||
.select2-container--default .select2-results__option .select2-results__option{
|
||||
padding-left: 2em !important;
|
||||
padding-left: 1em !important;
|
||||
}
|
||||
|
||||
*/
|
||||
.select2-results__options--nested{
|
||||
padding-left: 1em !important;
|
||||
}
|
||||
.select2-container--default .select2-results > .select2-results__options{
|
||||
max-height: 500px !important;
|
||||
}
|
||||
/*
|
||||
.select2-container--default .select2-results__option .select2-results__option{
|
||||
padding-left: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
@ -0,0 +1,21 @@
|
||||
{% load l10n fontawesome_5 %}
|
||||
|
||||
{% for code in codes %}
|
||||
<div class="ml-4 tree-element">
|
||||
<label class="tree-label" role="{% if not code.is_leaf%}button{% endif %}" for="input_{{code.pk|unlocalize}}" id="{{code.pk|unlocalize}}" data-toggle="collapse" data-target="#children_{{code.pk|unlocalize}}" aria-expanded="true" aria-controls="children_{{code.pk|unlocalize}}">
|
||||
{% if code.is_leaf%}
|
||||
<input class="tree-input" id="input_{{code.pk|unlocalize}}" name="{{ widget.name }}" type="checkbox" value="{{code.pk|unlocalize}}" {% if code.pk|unlocalize in widget.value %}checked{% endif %}/>
|
||||
{% else %}
|
||||
{% fa5_icon 'angle-right' %}
|
||||
{% endif %}
|
||||
{{code.long_name}}
|
||||
</label>
|
||||
{% if not code.is_leaf %}
|
||||
<div id="children_{{code.pk|unlocalize}}" data-toggle="collapse" class="collapse tree-element-children">
|
||||
{% with code.children as codes %}
|
||||
{% include 'konova/widgets/checkbox-tree-select-content.html' %}
|
||||
{% endwith %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
68
konova/templates/konova/widgets/checkbox-tree-select.html
Normal file
68
konova/templates/konova/widgets/checkbox-tree-select.html
Normal file
@ -0,0 +1,68 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div class="ml-4 mb-4">
|
||||
<input id="tree-search-input" class="form-control" type="text" placeholder="{% trans 'Search' %}"/>
|
||||
</div>
|
||||
|
||||
<div id="tree-root">
|
||||
{% include 'konova/widgets/checkbox-tree-select-content.html' %}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleSelectedCssClass(element){
|
||||
element = $(element);
|
||||
var cssClass = "badge rlp-r"
|
||||
|
||||
var directParent = element.closest(".tree-element-children")
|
||||
var root = element.parents(".tree-element-children")
|
||||
|
||||
var otherCheckedInputsOfParent = directParent.find('.tree-input:checked');
|
||||
var otherCheckedInputsOfRoot = root.find('.tree-input:checked');
|
||||
|
||||
if(otherCheckedInputsOfParent.length == 0){
|
||||
var parentLabel = directParent.siblings(".tree-label");
|
||||
parentLabel.removeClass(cssClass)
|
||||
if(otherCheckedInputsOfRoot.length == 0){
|
||||
var rootLabel = root.siblings(".tree-label")
|
||||
rootLabel.removeClass(cssClass)
|
||||
}
|
||||
}else{
|
||||
var rootAndParentLabel = root.siblings(".tree-label");
|
||||
rootAndParentLabel.addClass(cssClass);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function changeHandler(event){
|
||||
toggleSelectedCssClass(this);
|
||||
}
|
||||
|
||||
function searchInputHandler(event){
|
||||
var elem = $(this);
|
||||
var val = elem.val()
|
||||
var allTreeElements = $(".tree-element")
|
||||
var allTreeElementsContain = $(".tree-element").filter(function(){
|
||||
var reg = new RegExp(val, "i");
|
||||
return reg.test($(this).text());
|
||||
}
|
||||
);
|
||||
if(val.length > 0){
|
||||
allTreeElements.hide()
|
||||
allTreeElementsContain.show()
|
||||
}else{
|
||||
allTreeElements.show()
|
||||
}
|
||||
}
|
||||
|
||||
// Add event listener on search input
|
||||
$("#tree-search-input").keyup(searchInputHandler)
|
||||
|
||||
// Add event listener on changed checkboxes
|
||||
$(".tree-input").change(changeHandler);
|
||||
|
||||
// initialize all pre-checked checkboxes (e.g. on an edit form)
|
||||
var preCheckedElements = $(".tree-input:checked");
|
||||
preCheckedElements.each(function (index, element){
|
||||
toggleSelectedCssClass(element);
|
||||
})
|
||||
</script>
|
@ -7,7 +7,7 @@ Created on: 02.08.21
|
||||
"""
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
UNGROUPED = _("Ungrouped")
|
||||
FORM_INVALID = _("There was an error on this form.")
|
||||
PARAMS_INVALID = _("Invalid parameters")
|
||||
INTERVENTION_INVALID = _("There are errors in this intervention.")
|
||||
|
@ -9,9 +9,12 @@ from django.contrib.auth import logout
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpRequest, FileResponse
|
||||
from django.shortcuts import redirect, render, get_object_or_404
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from codelist.models import KonovaCode
|
||||
from codelist.settings import CODELIST_COMPENSATION_ACTION_ID
|
||||
from compensation.models import Compensation, EcoAccount
|
||||
from intervention.models import Intervention
|
||||
from konova.contexts import BaseContext
|
||||
|
Binary file not shown.
@ -3,9 +3,9 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#: compensation/filters.py:122 compensation/forms/modalForms.py:35
|
||||
#: compensation/forms/modalForms.py:46 compensation/forms/modalForms.py:62
|
||||
#: compensation/forms/modalForms.py:355 compensation/forms/modalForms.py:471
|
||||
#: compensation/filters.py:122 compensation/forms/modalForms.py:36
|
||||
#: compensation/forms/modalForms.py:47 compensation/forms/modalForms.py:63
|
||||
#: compensation/forms/modalForms.py:356 compensation/forms/modalForms.py:463
|
||||
#: intervention/forms/forms.py:54 intervention/forms/forms.py:156
|
||||
#: intervention/forms/forms.py:168 intervention/forms/modalForms.py:127
|
||||
#: intervention/forms/modalForms.py:140 intervention/forms/modalForms.py:153
|
||||
@ -26,7 +26,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-02-10 13:31+0100\n"
|
||||
"POT-Creation-Date: 2022-02-15 15:29+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -45,7 +45,7 @@ msgid "To"
|
||||
msgstr "Bis"
|
||||
|
||||
#: analysis/forms.py:47 compensation/forms/forms.py:77
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:58
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:59
|
||||
#: compensation/templates/compensation/report/eco_account/report.html:16
|
||||
#: compensation/utils/quality.py:100 ema/templates/ema/detail/view.html:49
|
||||
#: ema/templates/ema/report/report.html:16 ema/utils/quality.py:26
|
||||
@ -95,7 +95,7 @@ msgstr ""
|
||||
#: analysis/templates/analysis/reports/includes/eco_account/amount.html:3
|
||||
#: analysis/templates/analysis/reports/includes/intervention/amount.html:3
|
||||
#: analysis/templates/analysis/reports/includes/old_data/amount.html:3
|
||||
#: compensation/forms/modalForms.py:455
|
||||
#: compensation/forms/modalForms.py:447
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:34
|
||||
#: intervention/templates/intervention/detail/includes/deductions.html:31
|
||||
msgid "Amount"
|
||||
@ -137,7 +137,7 @@ msgstr "Zuständigkeitsbereich"
|
||||
#: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:8
|
||||
#: analysis/templates/analysis/reports/includes/intervention/laws.html:17
|
||||
#: compensation/tables.py:40
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:63
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:64
|
||||
#: intervention/tables.py:39
|
||||
#: intervention/templates/intervention/detail/view.html:68
|
||||
#: user/models/user_action.py:20
|
||||
@ -153,9 +153,9 @@ msgstr "Geprüft"
|
||||
#: analysis/templates/analysis/reports/includes/intervention/laws.html:20
|
||||
#: analysis/templates/analysis/reports/includes/old_data/amount.html:18
|
||||
#: compensation/tables.py:46 compensation/tables.py:222
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:77
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:78
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:31
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:44
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:45
|
||||
#: ema/tables.py:44 ema/templates/ema/detail/view.html:35
|
||||
#: intervention/tables.py:45
|
||||
#: intervention/templates/intervention/detail/view.html:82
|
||||
@ -213,7 +213,7 @@ msgstr "Abbuchungen"
|
||||
|
||||
#: analysis/templates/analysis/reports/includes/eco_account/deductions.html:9
|
||||
#: analysis/templates/analysis/reports/includes/eco_account/deductions.html:11
|
||||
#: compensation/forms/modalForms.py:193
|
||||
#: compensation/forms/modalForms.py:194
|
||||
#: 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
|
||||
@ -239,14 +239,14 @@ msgstr "Kompensationsart"
|
||||
|
||||
#: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:15
|
||||
#: analysis/templates/analysis/reports/includes/old_data/amount.html:29
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:19
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:20
|
||||
#: konova/templates/konova/includes/quickstart/compensations.html:4
|
||||
#: templates/navbars/navbar.html:28
|
||||
msgid "Compensation"
|
||||
msgstr "Kompensation"
|
||||
|
||||
#: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:21
|
||||
#: compensation/forms/modalForms.py:75
|
||||
#: compensation/forms/modalForms.py:76
|
||||
msgid "Payment"
|
||||
msgstr "Zahlung"
|
||||
|
||||
@ -293,7 +293,7 @@ msgstr "Eingriff"
|
||||
|
||||
#: analysis/templates/analysis/reports/includes/old_data/amount.html:34
|
||||
#: compensation/tables.py:266
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:19
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:20
|
||||
#: intervention/forms/modalForms.py:322 intervention/forms/modalForms.py:329
|
||||
#: konova/templates/konova/includes/quickstart/ecoaccounts.html:4
|
||||
#: templates/navbars/navbar.html:34
|
||||
@ -327,9 +327,9 @@ msgstr "Automatisch generiert"
|
||||
#: compensation/forms/forms.py:44 compensation/tables.py:30
|
||||
#: compensation/tables.py:202
|
||||
#: compensation/templates/compensation/detail/compensation/includes/documents.html:28
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:31
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:32
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:28
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:31
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:32
|
||||
#: compensation/templates/compensation/report/compensation/report.html:12
|
||||
#: compensation/templates/compensation/report/eco_account/report.html:12
|
||||
#: ema/tables.py:34 ema/templates/ema/detail/includes/documents.html:28
|
||||
@ -352,8 +352,8 @@ msgstr "Aussagekräftiger Titel"
|
||||
msgid "Compensation XY; Location ABC"
|
||||
msgstr "Kompensation XY; Flur ABC"
|
||||
|
||||
#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:61
|
||||
#: compensation/forms/modalForms.py:354 compensation/forms/modalForms.py:470
|
||||
#: compensation/forms/forms.py:57 compensation/forms/modalForms.py:62
|
||||
#: compensation/forms/modalForms.py:355 compensation/forms/modalForms.py:462
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:35
|
||||
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:34
|
||||
#: compensation/templates/compensation/detail/compensation/includes/documents.html:34
|
||||
@ -371,13 +371,13 @@ msgstr "Kompensation XY; Flur ABC"
|
||||
msgid "Comment"
|
||||
msgstr "Kommentar"
|
||||
|
||||
#: compensation/forms/forms.py:59 compensation/forms/modalForms.py:472
|
||||
#: compensation/forms/forms.py:59 compensation/forms/modalForms.py:464
|
||||
#: intervention/forms/forms.py:182
|
||||
msgid "Additional comment"
|
||||
msgstr "Zusätzlicher Kommentar"
|
||||
|
||||
#: compensation/forms/forms.py:93
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:62
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:63
|
||||
#: compensation/templates/compensation/report/eco_account/report.html:20
|
||||
#: compensation/utils/quality.py:102 ema/templates/ema/detail/view.html:53
|
||||
#: ema/templates/ema/report/report.html:20 ema/utils/quality.py:28
|
||||
@ -422,7 +422,7 @@ msgid ""
|
||||
msgstr "Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?"
|
||||
|
||||
#: compensation/forms/forms.py:156
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:35
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:36
|
||||
#: compensation/templates/compensation/report/compensation/report.html:16
|
||||
msgid "compensates intervention"
|
||||
msgstr "kompensiert Eingriff"
|
||||
@ -448,7 +448,7 @@ msgid "The amount that can be used for deductions"
|
||||
msgstr "Die für Abbuchungen zur Verfügung stehende Menge"
|
||||
|
||||
#: compensation/forms/forms.py:328
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:66
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:67
|
||||
#: compensation/utils/quality.py:72
|
||||
msgid "Agreement date"
|
||||
msgstr "Vereinbarungsdatum"
|
||||
@ -469,73 +469,73 @@ msgstr "Ökokonto XY; Flur ABC"
|
||||
msgid "Edit Eco-Account"
|
||||
msgstr "Ökokonto bearbeiten"
|
||||
|
||||
#: compensation/forms/modalForms.py:36
|
||||
#: compensation/forms/modalForms.py:37
|
||||
msgid "in Euro"
|
||||
msgstr "in Euro"
|
||||
|
||||
#: compensation/forms/modalForms.py:45
|
||||
#: compensation/forms/modalForms.py:46
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:31
|
||||
msgid "Due on"
|
||||
msgstr "Fällig am"
|
||||
|
||||
#: compensation/forms/modalForms.py:48
|
||||
#: compensation/forms/modalForms.py:49
|
||||
msgid "Due on which date"
|
||||
msgstr "Zahlung wird an diesem Datum erwartet"
|
||||
|
||||
#: compensation/forms/modalForms.py:63 compensation/forms/modalForms.py:356
|
||||
#: compensation/forms/modalForms.py:64 compensation/forms/modalForms.py:357
|
||||
#: intervention/forms/modalForms.py:154 konova/forms.py:395
|
||||
msgid "Additional comment, maximum {} letters"
|
||||
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
|
||||
|
||||
#: compensation/forms/modalForms.py:76
|
||||
#: compensation/forms/modalForms.py:77
|
||||
msgid "Add a payment for intervention '{}'"
|
||||
msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen"
|
||||
|
||||
#: compensation/forms/modalForms.py:96
|
||||
#: compensation/forms/modalForms.py:97
|
||||
msgid "If there is no date you can enter, please explain why."
|
||||
msgstr "Falls Sie kein Datum angeben können, erklären Sie bitte weshalb."
|
||||
|
||||
#: compensation/forms/modalForms.py:157 compensation/forms/modalForms.py:169
|
||||
#: compensation/forms/modalForms.py:158 compensation/forms/modalForms.py:170
|
||||
msgid "Biotope Type"
|
||||
msgstr "Biotoptyp"
|
||||
|
||||
#: compensation/forms/modalForms.py:160
|
||||
#: compensation/forms/modalForms.py:161
|
||||
msgid "Select the biotope type"
|
||||
msgstr "Biotoptyp wählen"
|
||||
|
||||
#: compensation/forms/modalForms.py:174 compensation/forms/modalForms.py:186
|
||||
#: compensation/forms/modalForms.py:175 compensation/forms/modalForms.py:187
|
||||
msgid "Biotope additional type"
|
||||
msgstr "Zusatzbezeichnung"
|
||||
|
||||
#: compensation/forms/modalForms.py:177
|
||||
#: compensation/forms/modalForms.py:178
|
||||
msgid "Select an additional biotope type"
|
||||
msgstr "Zusatzbezeichnung wählen"
|
||||
|
||||
#: compensation/forms/modalForms.py:196 intervention/forms/modalForms.py:340
|
||||
#: compensation/forms/modalForms.py:197 intervention/forms/modalForms.py:340
|
||||
msgid "in m²"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/forms/modalForms.py:207
|
||||
#: compensation/forms/modalForms.py:208
|
||||
msgid "New state"
|
||||
msgstr "Neuer Zustand"
|
||||
|
||||
#: compensation/forms/modalForms.py:208
|
||||
#: compensation/forms/modalForms.py:209
|
||||
msgid "Insert data for the new state"
|
||||
msgstr "Geben Sie die Daten des neuen Zustandes ein"
|
||||
|
||||
#: compensation/forms/modalForms.py:215 konova/forms.py:193
|
||||
#: compensation/forms/modalForms.py:216 konova/forms.py:193
|
||||
msgid "Object removed"
|
||||
msgstr "Objekt entfernt"
|
||||
|
||||
#: compensation/forms/modalForms.py:326
|
||||
#: compensation/forms/modalForms.py:327
|
||||
msgid "Deadline Type"
|
||||
msgstr "Fristart"
|
||||
|
||||
#: compensation/forms/modalForms.py:329
|
||||
#: compensation/forms/modalForms.py:330
|
||||
msgid "Select the deadline type"
|
||||
msgstr "Fristart wählen"
|
||||
|
||||
#: compensation/forms/modalForms.py:338
|
||||
#: compensation/forms/modalForms.py:339
|
||||
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:31
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:31
|
||||
#: ema/templates/ema/detail/includes/deadlines.html:31
|
||||
@ -543,101 +543,81 @@ msgstr "Fristart wählen"
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#: compensation/forms/modalForms.py:341
|
||||
#: compensation/forms/modalForms.py:342
|
||||
msgid "Select date"
|
||||
msgstr "Datum wählen"
|
||||
|
||||
#: compensation/forms/modalForms.py:368
|
||||
#: compensation/forms/modalForms.py:369
|
||||
msgid "New deadline"
|
||||
msgstr "Neue Frist"
|
||||
|
||||
#: compensation/forms/modalForms.py:369
|
||||
#: compensation/forms/modalForms.py:370
|
||||
msgid "Insert data for the new deadline"
|
||||
msgstr "Geben Sie die Daten der neuen Frist ein"
|
||||
|
||||
#: compensation/forms/modalForms.py:409
|
||||
#: compensation/forms/modalForms.py:410
|
||||
msgid "Action Type"
|
||||
msgstr "Maßnahmentyp"
|
||||
|
||||
#: compensation/forms/modalForms.py:412
|
||||
msgid "Select the action type"
|
||||
msgstr "Maßnahmentyp wählen"
|
||||
#: compensation/forms/modalForms.py:413
|
||||
msgid ""
|
||||
"An action can consist of multiple different action types. All the selected "
|
||||
"action types are expected to be performed according to the amount and unit "
|
||||
"below on this form."
|
||||
msgstr ""
|
||||
"Eine Maßnahme kann aus mehreren verschiedenen Maßnahmentypen bestehen. Alle "
|
||||
"hier gewählten Einträge sollen mit der weiter unten angegebenen Einheit und "
|
||||
"Menge umgesetzt werden. "
|
||||
|
||||
#: compensation/forms/modalForms.py:421
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:40
|
||||
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:39
|
||||
#: compensation/templates/compensation/detail/compensation/includes/documents.html:39
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:41
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:41
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:39
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:38
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:41
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:38
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:41
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:41
|
||||
#: ema/templates/ema/detail/includes/actions.html:38
|
||||
#: ema/templates/ema/detail/includes/deadlines.html:38
|
||||
#: ema/templates/ema/detail/includes/documents.html:38
|
||||
#: ema/templates/ema/detail/includes/states-after.html:40
|
||||
#: ema/templates/ema/detail/includes/states-before.html:40
|
||||
#: intervention/templates/intervention/detail/includes/compensations.html:38
|
||||
#: intervention/templates/intervention/detail/includes/deductions.html:39
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:39
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:39
|
||||
#: intervention/templates/intervention/detail/includes/revocation.html:43
|
||||
#: templates/log.html:10
|
||||
msgid "Action"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#: compensation/forms/modalForms.py:426 compensation/forms/modalForms.py:438
|
||||
#: compensation/forms/modalForms.py:418 compensation/forms/modalForms.py:430
|
||||
msgid "Action Type detail"
|
||||
msgstr "Zusatzmerkmal"
|
||||
|
||||
#: compensation/forms/modalForms.py:429
|
||||
#: compensation/forms/modalForms.py:421
|
||||
msgid "Select the action type detail"
|
||||
msgstr "Zusatzmerkmal wählen"
|
||||
|
||||
#: compensation/forms/modalForms.py:443
|
||||
#: compensation/forms/modalForms.py:435
|
||||
msgid "Unit"
|
||||
msgstr "Einheit"
|
||||
|
||||
#: compensation/forms/modalForms.py:446
|
||||
#: compensation/forms/modalForms.py:438
|
||||
msgid "Select the unit"
|
||||
msgstr "Einheit wählen"
|
||||
|
||||
#: compensation/forms/modalForms.py:458
|
||||
#: compensation/forms/modalForms.py:450
|
||||
msgid "Insert the amount"
|
||||
msgstr "Menge eingeben"
|
||||
|
||||
#: compensation/forms/modalForms.py:483
|
||||
#: compensation/forms/modalForms.py:475
|
||||
msgid "New action"
|
||||
msgstr "Neue Maßnahme"
|
||||
|
||||
#: compensation/forms/modalForms.py:484
|
||||
#: compensation/forms/modalForms.py:476
|
||||
msgid "Insert data for the new action"
|
||||
msgstr "Geben Sie die Daten der neuen Maßnahme ein"
|
||||
|
||||
#: compensation/models/action.py:22
|
||||
#: compensation/models/action.py:20
|
||||
msgid "cm"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/models/action.py:23
|
||||
#: compensation/models/action.py:21
|
||||
msgid "m"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/models/action.py:24
|
||||
#: compensation/models/action.py:22
|
||||
msgid "km"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/models/action.py:25
|
||||
#: compensation/models/action.py:23
|
||||
msgid "m²"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/models/action.py:26
|
||||
#: compensation/models/action.py:24
|
||||
msgid "ha"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/models/action.py:27
|
||||
#: compensation/models/action.py:25
|
||||
msgid "Pieces"
|
||||
msgstr "Stück"
|
||||
|
||||
@ -685,9 +665,9 @@ msgid "Checked on {} by {}"
|
||||
msgstr "Am {} von {} geprüft worden"
|
||||
|
||||
#: compensation/tables.py:160
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:80
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:81
|
||||
#: 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:48
|
||||
#: ema/tables.py:131 ema/templates/ema/detail/view.html:38
|
||||
#: intervention/tables.py:157
|
||||
#: intervention/templates/intervention/detail/view.html:85
|
||||
@ -710,7 +690,7 @@ msgid "Access not granted"
|
||||
msgstr "Nicht freigegeben - Datensatz nur lesbar"
|
||||
|
||||
#: compensation/tables.py:212
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:35
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:36
|
||||
#: konova/templates/konova/widgets/progressbar.html:3
|
||||
msgid "Available"
|
||||
msgstr "Verfügbar"
|
||||
@ -750,15 +730,46 @@ msgctxt "Compensation"
|
||||
msgid "Amount"
|
||||
msgstr "Menge"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:66
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:65
|
||||
#: ema/templates/ema/detail/includes/actions.html:63
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:40
|
||||
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:39
|
||||
#: compensation/templates/compensation/detail/compensation/includes/documents.html:39
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:41
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:41
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:39
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:38
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:41
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:38
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:41
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:41
|
||||
#: ema/templates/ema/detail/includes/actions.html:38
|
||||
#: ema/templates/ema/detail/includes/deadlines.html:38
|
||||
#: ema/templates/ema/detail/includes/documents.html:38
|
||||
#: ema/templates/ema/detail/includes/states-after.html:40
|
||||
#: ema/templates/ema/detail/includes/states-before.html:40
|
||||
#: intervention/templates/intervention/detail/includes/compensations.html:38
|
||||
#: intervention/templates/intervention/detail/includes/deductions.html:39
|
||||
#: intervention/templates/intervention/detail/includes/documents.html:39
|
||||
#: intervention/templates/intervention/detail/includes/payments.html:39
|
||||
#: intervention/templates/intervention/detail/includes/revocation.html:43
|
||||
#: templates/log.html:10
|
||||
msgid "Action"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:57
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:56
|
||||
#: ema/templates/ema/detail/includes/actions.html:54
|
||||
msgid "No action type details"
|
||||
msgstr "Keine Zusatzmerkmale"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:68
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:67
|
||||
#: ema/templates/ema/detail/includes/actions.html:65
|
||||
msgid "Edit action"
|
||||
msgstr "Maßnahme bearbeiten"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:69
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:68
|
||||
#: ema/templates/ema/detail/includes/actions.html:66
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:71
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:70
|
||||
#: ema/templates/ema/detail/includes/actions.html:68
|
||||
msgid "Remove action"
|
||||
msgstr "Maßnahme entfernen"
|
||||
|
||||
@ -887,6 +898,15 @@ msgstr "Fehlende Flächenmengen laut Ausgangszustand: "
|
||||
msgid "Biotope type"
|
||||
msgstr "Biotoptyp"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:56
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:56
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:56
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:56
|
||||
#: ema/templates/ema/detail/includes/states-after.html:54
|
||||
#: ema/templates/ema/detail/includes/states-before.html:54
|
||||
msgid "No biotope type details"
|
||||
msgstr "Keine Zusatzbezeichnungen"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-after.html:62
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:62
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62
|
||||
@ -924,50 +944,50 @@ msgstr "Neuen Ausgangszustand hinzufügen"
|
||||
msgid "Missing surfaces according to states after: "
|
||||
msgstr "Fehlende Flächenmengen laut Zielzustand: "
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:43
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:44
|
||||
msgid "Is CEF compensation"
|
||||
msgstr "Ist CEF Maßnahme"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:46
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:56
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:47
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:57
|
||||
#: venv/lib/python3.7/site-packages/django/forms/widgets.py:710
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:48
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:58
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:49
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:59
|
||||
#: venv/lib/python3.7/site-packages/django/forms/widgets.py:711
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:53
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:54
|
||||
msgid "Is Coherence keeping compensation"
|
||||
msgstr "Ist Kohärenzsicherungsmaßnahme"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:70
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:71
|
||||
#: intervention/templates/intervention/detail/view.html:75
|
||||
msgid "Checked on "
|
||||
msgstr "Geprüft am "
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:70
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:84
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:71
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:85
|
||||
#: 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:52
|
||||
#: ema/templates/ema/detail/view.html:42
|
||||
#: intervention/templates/intervention/detail/view.html:75
|
||||
#: intervention/templates/intervention/detail/view.html:89
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:84
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:51
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:85
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:52
|
||||
#: ema/templates/ema/detail/view.html:42
|
||||
#: intervention/templates/intervention/detail/view.html:89
|
||||
msgid "Recorded on "
|
||||
msgstr "Verzeichnet am"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:91
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:74
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:92
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:75
|
||||
#: compensation/templates/compensation/report/compensation/report.html:24
|
||||
#: compensation/templates/compensation/report/eco_account/report.html:41
|
||||
#: ema/templates/ema/detail/view.html:61
|
||||
@ -977,8 +997,8 @@ msgstr "Verzeichnet am"
|
||||
msgid "Last modified"
|
||||
msgstr "Zuletzt bearbeitet"
|
||||
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:99
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:82
|
||||
#: compensation/templates/compensation/detail/compensation/view.html:100
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:83
|
||||
#: ema/templates/ema/detail/view.html:76 intervention/forms/modalForms.py:56
|
||||
#: intervention/templates/intervention/detail/view.html:116
|
||||
msgid "Shared with"
|
||||
@ -1037,14 +1057,14 @@ msgstr "Abbuchung bearbeiten"
|
||||
msgid "Remove Deduction"
|
||||
msgstr "Abbuchung entfernen"
|
||||
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:34
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:35
|
||||
msgid "No surface deductable"
|
||||
msgstr "Keine Flächenmenge für Abbuchungen eingegeben. Bitte bearbeiten."
|
||||
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:57
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:61
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:65
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:69
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:58
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:62
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:66
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:70
|
||||
#: ema/templates/ema/detail/view.html:48 ema/templates/ema/detail/view.html:52
|
||||
#: ema/templates/ema/detail/view.html:56
|
||||
#: intervention/templates/intervention/detail/view.html:30
|
||||
@ -1060,7 +1080,7 @@ msgstr "Keine Flächenmenge für Abbuchungen eingegeben. Bitte bearbeiten."
|
||||
msgid "Missing"
|
||||
msgstr "fehlt"
|
||||
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:70
|
||||
#: compensation/templates/compensation/detail/eco_account/view.html:71
|
||||
#: compensation/templates/compensation/report/eco_account/report.html:24
|
||||
#: ema/templates/ema/detail/view.html:57
|
||||
#: ema/templates/ema/report/report.html:24
|
||||
@ -1746,6 +1766,11 @@ msgstr "Neu"
|
||||
msgid "Show"
|
||||
msgstr "Anzeigen"
|
||||
|
||||
#: konova/templates/konova/widgets/checkbox-tree-select.html:4
|
||||
#: templates/generic_index.html:56
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: konova/templates/konova/widgets/generate-content-input.html:6
|
||||
msgid "Generate new"
|
||||
msgstr "Neu generieren"
|
||||
@ -1786,6 +1811,10 @@ msgstr "{} - Freigegebene Daten geprüft"
|
||||
msgid "Request for new API token"
|
||||
msgstr "Anfrage für neuen API Token"
|
||||
|
||||
#: konova/utils/message_templates.py:10
|
||||
msgid "Ungrouped"
|
||||
msgstr "Ohne Zuordnung"
|
||||
|
||||
#: konova/utils/message_templates.py:11
|
||||
msgid "There was an error on this form."
|
||||
msgstr "Es gab einen Fehler im Formular."
|
||||
@ -1976,7 +2005,7 @@ msgstr "{} wurde erfolgreich vom Nutzer {} geprüft! {}"
|
||||
msgid "missing"
|
||||
msgstr "fehlt"
|
||||
|
||||
#: konova/views.py:96 templates/navbars/navbar.html:16
|
||||
#: konova/views.py:99 templates/navbars/navbar.html:16
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
@ -2251,10 +2280,6 @@ msgstr "Neu"
|
||||
msgid "Search for keywords"
|
||||
msgstr "Nach Schlagwörtern suchen"
|
||||
|
||||
#: templates/generic_index.html:56
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: templates/generic_index.html:57
|
||||
msgid "Start search"
|
||||
msgstr "Starte Suche"
|
||||
@ -3984,6 +4009,9 @@ msgstr ""
|
||||
msgid "Unable to connect to qpid with SASL mechanism %s"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Select the action type"
|
||||
#~ msgstr "Maßnahmentyp wählen"
|
||||
|
||||
#~ msgid "No revocation"
|
||||
#~ msgstr "Kein Widerspruch"
|
||||
|
||||
@ -3993,9 +4021,6 @@ msgstr ""
|
||||
#~ msgid "General data edited"
|
||||
#~ msgstr "Allgemeine Daten bearbeitet"
|
||||
|
||||
#~ msgid "Action type details"
|
||||
#~ msgstr "Zusatzmerkmale"
|
||||
|
||||
#~ msgid "On registered data edited"
|
||||
#~ msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user