Intervention check
* adds functionality for check button * adds highlighting of important data on detail view for intervention * adds deleting logic to BaseObject model and BaseResource model * adds RunCheckForm * adds check_validity() method to Intervention class * fixes wrong success msg for adding documents * adds/updates translations
This commit is contained in:
		
							parent
							
								
									685f425e29
								
							
						
					
					
						commit
						135f25d88b
					
				@ -17,7 +17,6 @@ from compensation.settings import COMPENSATION_IDENTIFIER_LENGTH, COMPENSATION_I
 | 
				
			|||||||
from intervention.models import Intervention, ResponsibilityData
 | 
					from intervention.models import Intervention, ResponsibilityData
 | 
				
			||||||
from konova.models import BaseObject, BaseResource, Geometry, UuidModel
 | 
					from konova.models import BaseObject, BaseResource, Geometry, UuidModel
 | 
				
			||||||
from konova.utils.generators import generate_random_string
 | 
					from konova.utils.generators import generate_random_string
 | 
				
			||||||
from organisation.models import Organisation
 | 
					 | 
				
			||||||
from user.models import UserActionLogEntry, UserAction
 | 
					from user.models import UserActionLogEntry, UserAction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -154,29 +153,6 @@ class Compensation(AbstractCompensation):
 | 
				
			|||||||
        _str = "{}{}{}".format(curr_month, curr_year, rand_str)
 | 
					        _str = "{}{}{}".format(curr_month, curr_year, rand_str)
 | 
				
			||||||
        return COMPENSATION_IDENTIFIER_TEMPLATE.format(_str)
 | 
					        return COMPENSATION_IDENTIFIER_TEMPLATE.format(_str)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def delete(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        """ Custom delete functionality
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Args:
 | 
					 | 
				
			||||||
            *args ():
 | 
					 | 
				
			||||||
            **kwargs ():
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Returns:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        _now = timezone.now()
 | 
					 | 
				
			||||||
        _user = kwargs.get("user", None)
 | 
					 | 
				
			||||||
        with transaction.atomic():
 | 
					 | 
				
			||||||
            action = UserActionLogEntry.objects.create(
 | 
					 | 
				
			||||||
                user=_user,
 | 
					 | 
				
			||||||
                timestamp=_now,
 | 
					 | 
				
			||||||
                action=UserAction.DELETED
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
            self.deleted = action
 | 
					 | 
				
			||||||
            self.save()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def save(self, *args, **kwargs):
 | 
					    def save(self, *args, **kwargs):
 | 
				
			||||||
        if self.identifier is None or len(self.identifier) == 0:
 | 
					        if self.identifier is None or len(self.identifier) == 0:
 | 
				
			||||||
            # Create new identifier
 | 
					            # Create new identifier
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ from intervention.models import Intervention, ResponsibilityData, LegalData, Rev
 | 
				
			|||||||
class InterventionAdmin(admin.ModelAdmin):
 | 
					class InterventionAdmin(admin.ModelAdmin):
 | 
				
			||||||
    list_display = [
 | 
					    list_display = [
 | 
				
			||||||
        "id",
 | 
					        "id",
 | 
				
			||||||
 | 
					        "identifier",
 | 
				
			||||||
        "title",
 | 
					        "title",
 | 
				
			||||||
        "created",
 | 
					        "created",
 | 
				
			||||||
        "deleted",
 | 
					        "deleted",
 | 
				
			||||||
 | 
				
			|||||||
@ -383,3 +383,42 @@ class NewRevocationForm(BaseModalForm):
 | 
				
			|||||||
            self.instance.legal.revocation = revocation
 | 
					            self.instance.legal.revocation = revocation
 | 
				
			||||||
            self.instance.legal.save()
 | 
					            self.instance.legal.save()
 | 
				
			||||||
        return revocation
 | 
					        return revocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class RunCheckForm(BaseModalForm):
 | 
				
			||||||
 | 
					    checked_intervention = forms.BooleanField(
 | 
				
			||||||
 | 
					        label=_("Checked intervention data"),
 | 
				
			||||||
 | 
					        label_suffix="",
 | 
				
			||||||
 | 
					        widget=forms.CheckboxInput(),
 | 
				
			||||||
 | 
					        required=True,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    checked_comps = forms.BooleanField(
 | 
				
			||||||
 | 
					        label=_("Checked compensations data and payments"),
 | 
				
			||||||
 | 
					        label_suffix="",
 | 
				
			||||||
 | 
					        widget=forms.CheckboxInput(),
 | 
				
			||||||
 | 
					        required=True
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        super().__init__(*args, **kwargs)
 | 
				
			||||||
 | 
					        self.form_title = _("Run check")
 | 
				
			||||||
 | 
					        self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def is_valid(self):
 | 
				
			||||||
 | 
					        super_result = super().is_valid()
 | 
				
			||||||
 | 
					        # Perform check
 | 
				
			||||||
 | 
					        result, msgs = self.instance.check_validity()
 | 
				
			||||||
 | 
					        self.errors.update(msgs)
 | 
				
			||||||
 | 
					        return result & super_result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def save(self):
 | 
				
			||||||
 | 
					        with transaction.atomic():
 | 
				
			||||||
 | 
					            user_action = UserActionLogEntry.objects.create(
 | 
				
			||||||
 | 
					                user=self.user,
 | 
				
			||||||
 | 
					                action=UserAction.CHECKED
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            # Replace old checked
 | 
				
			||||||
 | 
					            if self.instance.checked:
 | 
				
			||||||
 | 
					                self.instance.checked.delete()
 | 
				
			||||||
 | 
					            self.instance.checked = user_action
 | 
				
			||||||
 | 
					            self.instance.save()
 | 
				
			||||||
@ -9,6 +9,7 @@ from django.contrib.auth.models import User
 | 
				
			|||||||
from django.contrib.gis.db import models
 | 
					from django.contrib.gis.db import models
 | 
				
			||||||
from django.db import transaction
 | 
					from django.db import transaction
 | 
				
			||||||
from django.utils import timezone
 | 
					from django.utils import timezone
 | 
				
			||||||
 | 
					from django.utils.translation import gettext_lazy as _
 | 
				
			||||||
from django.utils.timezone import now
 | 
					from django.utils.timezone import now
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from intervention.settings import INTERVENTION_IDENTIFIER_LENGTH, INTERVENTION_IDENTIFIER_TEMPLATE
 | 
					from intervention.settings import INTERVENTION_IDENTIFIER_LENGTH, INTERVENTION_IDENTIFIER_TEMPLATE
 | 
				
			||||||
@ -133,36 +134,6 @@ class Intervention(BaseObject):
 | 
				
			|||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return "{} ({})".format(self.identifier, self.title)
 | 
					        return "{} ({})".format(self.identifier, self.title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def delete(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        """ Custom delete functionality
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Args:
 | 
					 | 
				
			||||||
            *args ():
 | 
					 | 
				
			||||||
            **kwargs ():
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Returns:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        _now = timezone.now()
 | 
					 | 
				
			||||||
        _user = kwargs.get("user", None)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        with transaction.atomic():
 | 
					 | 
				
			||||||
            # "Delete" related compensations as well
 | 
					 | 
				
			||||||
            coms = self.compensations.all()
 | 
					 | 
				
			||||||
            action = UserActionLogEntry.objects.create(
 | 
					 | 
				
			||||||
                user=_user,
 | 
					 | 
				
			||||||
                timestamp=_now,
 | 
					 | 
				
			||||||
                action=UserAction.DELETED
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
            for com in coms:
 | 
					 | 
				
			||||||
                com.deleted = action
 | 
					 | 
				
			||||||
                com.save()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            self.deleted = action
 | 
					 | 
				
			||||||
            self.save()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def _generate_new_identifier() -> str:
 | 
					    def _generate_new_identifier() -> str:
 | 
				
			||||||
        """ Generates a new identifier for the intervention object
 | 
					        """ Generates a new identifier for the intervention object
 | 
				
			||||||
@ -234,3 +205,37 @@ class Intervention(BaseObject):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        return self.users.filter(username=user.username).exists()
 | 
					        return self.users.filter(username=user.username).exists()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def check_validity(self) -> (bool, dict):
 | 
				
			||||||
 | 
					        """ Validity check
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Returns:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        ret_msgs = {}
 | 
				
			||||||
 | 
					        missing_str = _("Missing")
 | 
				
			||||||
 | 
					        not_missing_str = _("Exists")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Check responsible data
 | 
				
			||||||
 | 
					        if self.responsible:
 | 
				
			||||||
 | 
					            if self.responsible.registration_file_number is None or len(self.responsible.registration_file_number) == 0:
 | 
				
			||||||
 | 
					                ret_msgs["Registration office file number"] = missing_str
 | 
				
			||||||
 | 
					            if self.responsible.conservation_file_number is None or len(self.responsible.conservation_file_number) == 0:
 | 
				
			||||||
 | 
					                ret_msgs["Conversation office file number"] = missing_str
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            ret_msgs["responsible"] = missing_str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Check revocation
 | 
				
			||||||
 | 
					        if self.legal.revocation:
 | 
				
			||||||
 | 
					            ret_msgs["Revocation"] = not_missing_str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if self.legal:
 | 
				
			||||||
 | 
					            if self.legal.registration_date is None:
 | 
				
			||||||
 | 
					                ret_msgs["Registration date"] = missing_str
 | 
				
			||||||
 | 
					            if self.legal.binding_date is None:
 | 
				
			||||||
 | 
					                ret_msgs["Binding on"] = missing_str
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            ret_msgs["legal"] = missing_str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ret_result = len(ret_msgs) == 0
 | 
				
			||||||
 | 
					        return ret_result, ret_msgs
 | 
				
			||||||
@ -16,11 +16,9 @@
 | 
				
			|||||||
        {% fa5_icon 'share-alt' %}
 | 
					        {% fa5_icon 'share-alt' %}
 | 
				
			||||||
    </button>
 | 
					    </button>
 | 
				
			||||||
    {% if is_zb_member %}
 | 
					    {% if is_zb_member %}
 | 
				
			||||||
    <a href="{% url 'home' %}" class="mr-2">
 | 
					    <button class="btn btn-default btn-modal mr-2" title="{% trans 'Run check' %}" data-form-url="{% url 'intervention:run-check' intervention.id %}">
 | 
				
			||||||
        <button class="btn btn-default" title="{% trans 'Run check' %}">
 | 
					        {% fa5_icon 'star' %}
 | 
				
			||||||
            {% fa5_icon 'star' %}
 | 
					    </button>
 | 
				
			||||||
        </button>
 | 
					 | 
				
			||||||
    </a>
 | 
					 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
    {% if is_ets_member %}
 | 
					    {% if is_ets_member %}
 | 
				
			||||||
    <a href="{% url 'home' %}" class="mr-2">
 | 
					    <a href="{% url 'home' %}" class="mr-2">
 | 
				
			||||||
 | 
				
			|||||||
@ -20,15 +20,15 @@
 | 
				
			|||||||
        <div class="col-sm-12 col-md-12 col-lg-6">
 | 
					        <div class="col-sm-12 col-md-12 col-lg-6">
 | 
				
			||||||
            <div class="table-container">
 | 
					            <div class="table-container">
 | 
				
			||||||
                <table class="table table-hover">
 | 
					                <table class="table table-hover">
 | 
				
			||||||
                    <tr>
 | 
					                    <tr {% if not intervention.title %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th class="w-25" scope="row">{% trans 'Title' %}</th>
 | 
					                        <th class="w-25" scope="row">{% trans 'Title' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.title}}</td>
 | 
					                        <td class="align-middle">{{intervention.title|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr>
 | 
					                    <tr {% if not intervention.legal.process_type %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th scope="row">{% trans 'Process type' %}</th>
 | 
					                        <th scope="row">{% trans 'Process type' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.legal.process_type|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.legal.process_type|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr>
 | 
					                    <tr {% if not intervention.legal.law %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th scope="row">{% trans 'Law' %}</th>
 | 
					                        <th scope="row">{% trans 'Law' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.legal.law|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.legal.law|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
@ -36,7 +36,7 @@
 | 
				
			|||||||
                        <th scope="row">{% trans 'Registration office' %}</th>
 | 
					                        <th scope="row">{% trans 'Registration office' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.responsible.registration_office|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.responsible.registration_office|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr>
 | 
					                    <tr {% if not intervention.responsible.registration_file_number %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th scope="row">{% trans 'Registration office file number' %}</th>
 | 
					                        <th scope="row">{% trans 'Registration office file number' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.responsible.registration_file_number|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.responsible.registration_file_number|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
@ -44,11 +44,11 @@
 | 
				
			|||||||
                        <th scope="row">{% trans 'Conservation office' %}</th>
 | 
					                        <th scope="row">{% trans 'Conservation office' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.responsible.conservation_office|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.responsible.conservation_office|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr>
 | 
					                    <tr{% if not intervention.responsible.conservation_file_number %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th scope="row">{% trans 'Conversation office file number' %}</th>
 | 
					                        <th scope="row">{% trans 'Conversation office file number' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.responsible.conservation_file_number|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.responsible.conservation_file_number|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr>
 | 
					                    <tr {% if not intervention.responsible.handler %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th scope="row">{% trans 'Intervention handler' %}</th>
 | 
					                        <th scope="row">{% trans 'Intervention handler' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.responsible.handler|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.responsible.handler|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
@ -80,11 +80,11 @@
 | 
				
			|||||||
                            {% endif %}
 | 
					                            {% endif %}
 | 
				
			||||||
                        </td>
 | 
					                        </td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr>
 | 
					                    <tr {% if not intervention.legal.registration_date %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th scope="row">{% trans 'Registration date' %}</th>
 | 
					                        <th scope="row">{% trans 'Registration date' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.legal.registration_date|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.legal.registration_date|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr>
 | 
					                    <tr {% if not intervention.legal.binding_date %}class="alert alert-danger"{% endif %}>
 | 
				
			||||||
                        <th scope="row">{% trans 'Binding on' %}</th>
 | 
					                        <th scope="row">{% trans 'Binding on' %}</th>
 | 
				
			||||||
                        <td class="align-middle">{{intervention.legal.binding_date|default_if_none:""}}</td>
 | 
					                        <td class="align-middle">{{intervention.legal.binding_date|default_if_none:""}}</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ Created on: 30.11.20
 | 
				
			|||||||
from django.urls import path
 | 
					from django.urls import path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from intervention.views import index_view, new_view, open_view, edit_view, remove_view, new_document_view, share_view, \
 | 
					from intervention.views import index_view, new_view, open_view, edit_view, remove_view, new_document_view, share_view, \
 | 
				
			||||||
    create_share_view, remove_revocation_view, new_revocation_view
 | 
					    create_share_view, remove_revocation_view, new_revocation_view, run_check_view
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app_name = "intervention"
 | 
					app_name = "intervention"
 | 
				
			||||||
urlpatterns = [
 | 
					urlpatterns = [
 | 
				
			||||||
@ -20,6 +20,7 @@ urlpatterns = [
 | 
				
			|||||||
    path('<id>/remove', remove_view, name='remove'),
 | 
					    path('<id>/remove', remove_view, name='remove'),
 | 
				
			||||||
    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'),
 | 
				
			||||||
 | 
					    path('<id>/check', run_check_view, name='run-check'),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Revocation routes
 | 
					    # Revocation routes
 | 
				
			||||||
    path('<id>/revocation/new', new_revocation_view, name='revocation-new'),
 | 
					    path('<id>/revocation/new', new_revocation_view, name='revocation-new'),
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,8 @@ from django.utils.translation import gettext_lazy as _
 | 
				
			|||||||
from django.http import HttpRequest
 | 
					from django.http import HttpRequest
 | 
				
			||||||
from django.shortcuts import render, get_object_or_404
 | 
					from django.shortcuts import render, get_object_or_404
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from intervention.forms import NewInterventionForm, EditInterventionForm, ShareInterventionForm, NewRevocationForm
 | 
					from intervention.forms import NewInterventionForm, EditInterventionForm, ShareInterventionForm, NewRevocationForm, \
 | 
				
			||||||
 | 
					    RunCheckForm
 | 
				
			||||||
from intervention.models import Intervention, Revocation
 | 
					from intervention.models import Intervention, Revocation
 | 
				
			||||||
from intervention.tables import InterventionTable
 | 
					from intervention.tables import InterventionTable
 | 
				
			||||||
from konova.contexts import BaseContext
 | 
					from konova.contexts import BaseContext
 | 
				
			||||||
@ -90,7 +91,10 @@ def new_document_view(request: HttpRequest, id: str):
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    intervention = get_object_or_404(Intervention, id=id)
 | 
					    intervention = get_object_or_404(Intervention, id=id)
 | 
				
			||||||
    form = NewDocumentForm(request.POST or None, request.FILES or None, instance=intervention, user=request.user)
 | 
					    form = NewDocumentForm(request.POST or None, request.FILES or None, instance=intervention, user=request.user)
 | 
				
			||||||
    return form.process_request(request)
 | 
					    return form.process_request(
 | 
				
			||||||
 | 
					        request,
 | 
				
			||||||
 | 
					        msg_success=_("Document added")
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
@ -286,6 +290,49 @@ def create_share_view(request: HttpRequest, id: str):
 | 
				
			|||||||
        raise NotImplementedError
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@login_required
 | 
				
			||||||
 | 
					def run_check_view(request: HttpRequest, id: str):
 | 
				
			||||||
 | 
					    """ Renders check form for an intervention
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Args:
 | 
				
			||||||
 | 
					        request (HttpRequest): The incoming request
 | 
				
			||||||
 | 
					        id (str): Intervention's id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Returns:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    intervention = get_object_or_404(Intervention, id=id)
 | 
				
			||||||
 | 
					    form = RunCheckForm(request.POST or None, instance=intervention, user=request.user)
 | 
				
			||||||
 | 
					    if request.method == "POST":
 | 
				
			||||||
 | 
					        if form.is_valid():
 | 
				
			||||||
 | 
					            form.save()
 | 
				
			||||||
 | 
					            messages.info(
 | 
				
			||||||
 | 
					                request,
 | 
				
			||||||
 | 
					                _("Check performed")
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            messages.error(
 | 
				
			||||||
 | 
					                request,
 | 
				
			||||||
 | 
					                _("There has been errors on this intervention:"),
 | 
				
			||||||
 | 
					                extra_tags="danger"
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            for error_name, error_val in form.errors.items():
 | 
				
			||||||
 | 
					                messages.error(
 | 
				
			||||||
 | 
					                    request,
 | 
				
			||||||
 | 
					                    _("{}: {}").format(_(error_name), _(error_val)),
 | 
				
			||||||
 | 
					                    extra_tags="danger"
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					        return redirect(request.META.get("HTTP_REFERER", "home"))
 | 
				
			||||||
 | 
					    elif request.method == "GET":
 | 
				
			||||||
 | 
					        context = {
 | 
				
			||||||
 | 
					            "form": form,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        context = BaseContext(request, context).context
 | 
				
			||||||
 | 
					        return render(request, form.template, context)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
def new_revocation_view(request: HttpRequest, id: str):
 | 
					def new_revocation_view(request: HttpRequest, id: str):
 | 
				
			||||||
    """ Renders sharing form for an intervention
 | 
					    """ Renders sharing form for an intervention
 | 
				
			||||||
 | 
				
			|||||||
@ -313,7 +313,7 @@ class NewDocumentForm(BaseModalForm):
 | 
				
			|||||||
                created=action,
 | 
					                created=action,
 | 
				
			||||||
                title=self.cleaned_data["title"],
 | 
					                title=self.cleaned_data["title"],
 | 
				
			||||||
                comment=self.cleaned_data["comment"],
 | 
					                comment=self.cleaned_data["comment"],
 | 
				
			||||||
                document=self.cleaned_data["file"],
 | 
					                file=self.cleaned_data["file"],
 | 
				
			||||||
                date_of_creation=self.cleaned_data["creation_date"],
 | 
					                date_of_creation=self.cleaned_data["creation_date"],
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            self.instance.documents.add(doc)
 | 
					            self.instance.documents.add(doc)
 | 
				
			||||||
 | 
				
			|||||||
@ -10,9 +10,9 @@ import uuid
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from django.utils.translation import gettext_lazy as _
 | 
					from django.utils.translation import gettext_lazy as _
 | 
				
			||||||
from django.contrib.gis.db.models import MultiPolygonField
 | 
					from django.contrib.gis.db.models import MultiPolygonField
 | 
				
			||||||
from django.db import models
 | 
					from django.db import models, transaction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from user.models import UserActionLogEntry
 | 
					from user.models import UserActionLogEntry, UserAction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UuidModel(models.Model):
 | 
					class UuidModel(models.Model):
 | 
				
			||||||
@ -38,6 +38,11 @@ class BaseResource(UuidModel):
 | 
				
			|||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        abstract = True
 | 
					        abstract = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def delete(self, using=None, keep_parents=False):
 | 
				
			||||||
 | 
					        if self.created:
 | 
				
			||||||
 | 
					            self.created.delete()
 | 
				
			||||||
 | 
					        super().delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BaseObject(BaseResource):
 | 
					class BaseObject(BaseResource):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
@ -53,6 +58,31 @@ class BaseObject(BaseResource):
 | 
				
			|||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        abstract = True
 | 
					        abstract = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def delete(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        """ Custom delete functionality
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Args:
 | 
				
			||||||
 | 
					            *args ():
 | 
				
			||||||
 | 
					            **kwargs ():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Returns:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        if self.deleted:
 | 
				
			||||||
 | 
					            # Nothing to do here
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        _user = kwargs.get("user", None)
 | 
				
			||||||
 | 
					        with transaction.atomic():
 | 
				
			||||||
 | 
					            action = UserActionLogEntry.objects.create(
 | 
				
			||||||
 | 
					                user=_user,
 | 
				
			||||||
 | 
					                action=UserAction.DELETED
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            self.deleted = action
 | 
				
			||||||
 | 
					            self.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DeadlineType(models.TextChoices):
 | 
					class DeadlineType(models.TextChoices):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							@ -16,7 +16,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: 2021-08-04 13:27+0200\n"
 | 
					"POT-Creation-Date: 2021-08-04 15:12+0200\n"
 | 
				
			||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
					"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
				
			||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
					"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
				
			||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
					"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
				
			||||||
@ -160,27 +160,27 @@ msgstr "Neue Maßnahme"
 | 
				
			|||||||
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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/models.py:60
 | 
					#: compensation/models.py:59
 | 
				
			||||||
msgid "cm"
 | 
					msgid "cm"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/models.py:61
 | 
					#: compensation/models.py:60
 | 
				
			||||||
msgid "m"
 | 
					msgid "m"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/models.py:62
 | 
					#: compensation/models.py:61
 | 
				
			||||||
msgid "km"
 | 
					msgid "km"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/models.py:63
 | 
					#: compensation/models.py:62
 | 
				
			||||||
msgid "m²"
 | 
					msgid "m²"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/models.py:64
 | 
					#: compensation/models.py:63
 | 
				
			||||||
msgid "ha"
 | 
					msgid "ha"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/models.py:65
 | 
					#: compensation/models.py:64
 | 
				
			||||||
msgid "Pieces"
 | 
					msgid "Pieces"
 | 
				
			||||||
msgstr "Stück"
 | 
					msgstr "Stück"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -331,12 +331,12 @@ msgid "Public report"
 | 
				
			|||||||
msgstr "Öffentlicher Bericht"
 | 
					msgstr "Öffentlicher Bericht"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/templates/compensation/detail/includes/controls.html:17
 | 
					#: compensation/templates/compensation/detail/includes/controls.html:17
 | 
				
			||||||
#: intervention/templates/intervention/detail/includes/controls.html:34
 | 
					#: intervention/templates/intervention/detail/includes/controls.html:32
 | 
				
			||||||
msgid "Edit"
 | 
					msgid "Edit"
 | 
				
			||||||
msgstr "Bearbeiten"
 | 
					msgstr "Bearbeiten"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/templates/compensation/detail/includes/controls.html:21
 | 
					#: compensation/templates/compensation/detail/includes/controls.html:21
 | 
				
			||||||
#: intervention/templates/intervention/detail/includes/controls.html:38
 | 
					#: intervention/templates/intervention/detail/includes/controls.html:36
 | 
				
			||||||
#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
 | 
					#: venv/lib/python3.7/site-packages/django/forms/formsets.py:391
 | 
				
			||||||
msgid "Delete"
 | 
					msgid "Delete"
 | 
				
			||||||
msgstr "Löschen"
 | 
					msgstr "Löschen"
 | 
				
			||||||
@ -461,7 +461,7 @@ msgstr "Zahlung gelöscht"
 | 
				
			|||||||
msgid "Withdraw removed"
 | 
					msgid "Withdraw removed"
 | 
				
			||||||
msgstr "Abbuchung entfernt"
 | 
					msgstr "Abbuchung entfernt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: compensation/views.py:280
 | 
					#: compensation/views.py:280 intervention/views.py:96
 | 
				
			||||||
msgid "Document added"
 | 
					msgid "Document added"
 | 
				
			||||||
msgstr "Dokument hinzugefügt"
 | 
					msgstr "Dokument hinzugefügt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -606,6 +606,35 @@ msgstr "Muss kleiner als 15 Mb sein"
 | 
				
			|||||||
msgid "Add revocation"
 | 
					msgid "Add revocation"
 | 
				
			||||||
msgstr "Widerspruch hinzufügen"
 | 
					msgstr "Widerspruch hinzufügen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/forms.py:390
 | 
				
			||||||
 | 
					msgid "Checked intervention data"
 | 
				
			||||||
 | 
					msgstr "Eingriffsdaten geprüft"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/forms.py:396
 | 
				
			||||||
 | 
					msgid "Checked compensations data and payments"
 | 
				
			||||||
 | 
					msgstr "Kompensationen und Zahlungen geprüft"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/forms.py:404
 | 
				
			||||||
 | 
					#: intervention/templates/intervention/detail/includes/controls.html:19
 | 
				
			||||||
 | 
					msgid "Run check"
 | 
				
			||||||
 | 
					msgstr "Prüfung vornehmen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/forms.py:405
 | 
				
			||||||
 | 
					msgid ""
 | 
				
			||||||
 | 
					"I, {} {}, confirm that all necessary control steps have been performed by "
 | 
				
			||||||
 | 
					"myself."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					"Ich, {} {}, bestätige, dass die notwendigen Kontrollschritte durchgeführt "
 | 
				
			||||||
 | 
					"wurden:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/models.py:216
 | 
				
			||||||
 | 
					msgid "Missing"
 | 
				
			||||||
 | 
					msgstr "Fehlt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/models.py:217
 | 
				
			||||||
 | 
					msgid "Exists"
 | 
				
			||||||
 | 
					msgstr "Existiert"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/tables.py:70
 | 
					#: intervention/tables.py:70
 | 
				
			||||||
msgid "Interventions"
 | 
					msgid "Interventions"
 | 
				
			||||||
msgstr "Eingriffe"
 | 
					msgstr "Eingriffe"
 | 
				
			||||||
@ -624,11 +653,7 @@ msgstr "Neue Kompensation hinzufügen"
 | 
				
			|||||||
msgid "Remove compensation"
 | 
					msgid "Remove compensation"
 | 
				
			||||||
msgstr "Kompensation entfernen"
 | 
					msgstr "Kompensation entfernen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/templates/intervention/detail/includes/controls.html:20
 | 
					#: intervention/templates/intervention/detail/includes/controls.html:25
 | 
				
			||||||
msgid "Run check"
 | 
					 | 
				
			||||||
msgstr "Prüfung vornehmen"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#: intervention/templates/intervention/detail/includes/controls.html:27
 | 
					 | 
				
			||||||
msgid "Record"
 | 
					msgid "Record"
 | 
				
			||||||
msgstr "Verzeichnen"
 | 
					msgstr "Verzeichnen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -711,19 +736,19 @@ msgstr "Datum Zulassung bzw. Satzungsbeschluss"
 | 
				
			|||||||
msgid "Binding on"
 | 
					msgid "Binding on"
 | 
				
			||||||
msgstr "Datum Bestandskraft"
 | 
					msgstr "Datum Bestandskraft"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:67
 | 
					#: intervention/views.py:68
 | 
				
			||||||
msgid "Intervention {} added"
 | 
					msgid "Intervention {} added"
 | 
				
			||||||
msgstr "Eingriff {} hinzugefügt"
 | 
					msgstr "Eingriff {} hinzugefügt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:70 intervention/views.py:167
 | 
					#: intervention/views.py:71 intervention/views.py:171
 | 
				
			||||||
msgid "Invalid input"
 | 
					msgid "Invalid input"
 | 
				
			||||||
msgstr "Eingabe fehlerhaft"
 | 
					msgstr "Eingabe fehlerhaft"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:126
 | 
					#: intervention/views.py:130
 | 
				
			||||||
msgid "This intervention has a revocation from {}"
 | 
					msgid "This intervention has a revocation from {}"
 | 
				
			||||||
msgstr "Es existiert ein Widerspruch vom {}"
 | 
					msgstr "Es existiert ein Widerspruch vom {}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:141
 | 
					#: intervention/views.py:145
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"Remember: This data has not been shared with you, yet. This means you can "
 | 
					"Remember: This data has not been shared with you, yet. This means you can "
 | 
				
			||||||
"only read but can not edit or perform any actions like running a check or "
 | 
					"only read but can not edit or perform any actions like running a check or "
 | 
				
			||||||
@ -733,35 +758,47 @@ msgstr ""
 | 
				
			|||||||
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
 | 
					"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
 | 
				
			||||||
"noch Prüfungen durchführen oder verzeichnen können."
 | 
					"noch Prüfungen durchführen oder verzeichnen können."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:164
 | 
					#: intervention/views.py:168
 | 
				
			||||||
msgid "{} edited"
 | 
					msgid "{} edited"
 | 
				
			||||||
msgstr "{} bearbeitet"
 | 
					msgstr "{} bearbeitet"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:193
 | 
					#: intervention/views.py:197
 | 
				
			||||||
msgid "{} removed"
 | 
					msgid "{} removed"
 | 
				
			||||||
msgstr "{} entfernt"
 | 
					msgstr "{} entfernt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:214
 | 
					#: intervention/views.py:218
 | 
				
			||||||
msgid "Revocation removed"
 | 
					msgid "Revocation removed"
 | 
				
			||||||
msgstr "Widerspruch entfernt"
 | 
					msgstr "Widerspruch entfernt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:240
 | 
					#: intervention/views.py:244
 | 
				
			||||||
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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:245
 | 
					#: intervention/views.py:249
 | 
				
			||||||
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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:252
 | 
					#: intervention/views.py:256
 | 
				
			||||||
msgid "Share link invalid"
 | 
					msgid "Share link invalid"
 | 
				
			||||||
msgstr "Freigabelink ungültig"
 | 
					msgstr "Freigabelink ungültig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:276
 | 
					#: intervention/views.py:280
 | 
				
			||||||
msgid "Share settings updated"
 | 
					msgid "Share settings updated"
 | 
				
			||||||
msgstr "Freigabe Einstellungen aktualisiert"
 | 
					msgstr "Freigabe Einstellungen aktualisiert"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: intervention/views.py:307
 | 
					#: intervention/views.py:311
 | 
				
			||||||
 | 
					msgid "Check performed"
 | 
				
			||||||
 | 
					msgstr "Prüfung durchgeführt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/views.py:316
 | 
				
			||||||
 | 
					msgid "There has been errors on this intervention:"
 | 
				
			||||||
 | 
					msgstr "Es liegen Fehler in diesem Eingriff vor:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/views.py:322
 | 
				
			||||||
 | 
					msgid "{}: {}"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: intervention/views.py:354
 | 
				
			||||||
msgid "Revocation added"
 | 
					msgid "Revocation added"
 | 
				
			||||||
msgstr "Widerspruch hinzugefügt"
 | 
					msgstr "Widerspruch hinzugefügt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -839,19 +876,19 @@ msgstr "Wenn meine freigegebenen Daten gelöscht wurden"
 | 
				
			|||||||
msgid "On registered data edited"
 | 
					msgid "On registered data edited"
 | 
				
			||||||
msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
 | 
					msgstr "Wenn meine freigegebenen Daten bearbeitet wurden"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: konova/models.py:61
 | 
					#: konova/models.py:92
 | 
				
			||||||
msgid "Finished"
 | 
					msgid "Finished"
 | 
				
			||||||
msgstr "Umgesetzt bis"
 | 
					msgstr "Umgesetzt bis"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: konova/models.py:62
 | 
					#: konova/models.py:93
 | 
				
			||||||
msgid "Maintain"
 | 
					msgid "Maintain"
 | 
				
			||||||
msgstr "Unterhaltung bis"
 | 
					msgstr "Unterhaltung bis"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: konova/models.py:63
 | 
					#: konova/models.py:94
 | 
				
			||||||
msgid "Control"
 | 
					msgid "Control"
 | 
				
			||||||
msgstr "Kontrolle am"
 | 
					msgstr "Kontrolle am"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: konova/models.py:64
 | 
					#: konova/models.py:95
 | 
				
			||||||
msgid "Other"
 | 
					msgid "Other"
 | 
				
			||||||
msgstr "Sonstige"
 | 
					msgstr "Sonstige"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2365,9 +2402,6 @@ msgstr ""
 | 
				
			|||||||
#~ msgid "Show intervention"
 | 
					#~ msgid "Show intervention"
 | 
				
			||||||
#~ msgstr "Zeige Eingriffe"
 | 
					#~ msgstr "Zeige Eingriffe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#~ msgid "Compensation management"
 | 
					 | 
				
			||||||
#~ msgstr "Kompensationsverwaltung"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#~ msgid "Show compensation"
 | 
					#~ msgid "Show compensation"
 | 
				
			||||||
#~ msgstr "Zeige Kompensationen"
 | 
					#~ msgstr "Zeige Kompensationen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user