Merge pull request '140_Improve_check-record_reset' (#152) from 140_Improve_check-record_reset into master
Reviewed-on: SGD-Nord/konova#152
This commit is contained in:
		
						commit
						1ea4cb7297
					
				@ -418,6 +418,18 @@ class Compensation(AbstractCompensation, CEFMixin, CoherenceMixin):
 | 
			
		||||
        super().set_status_messages(request)
 | 
			
		||||
        return request
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def is_recorded(self):
 | 
			
		||||
        """ Getter for record status as property
 | 
			
		||||
 | 
			
		||||
        Since compensations inherit their record status from their intervention, the intervention's status is being
 | 
			
		||||
        returned
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        return self.intervention.is_recorded
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CompensationDocument(AbstractDocument):
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
@ -60,8 +60,9 @@ class CompensationWorkflowTestCase(BaseWorkflowTestCase):
 | 
			
		||||
 | 
			
		||||
        # Preserve the current number of intervention's compensations
 | 
			
		||||
        num_compensations = self.intervention.compensations.count()
 | 
			
		||||
        self.client_user.post(new_url, post_data)
 | 
			
		||||
        response = self.client_user.post(new_url, post_data)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(302, response.status_code)
 | 
			
		||||
        self.intervention.refresh_from_db()
 | 
			
		||||
        self.assertEqual(num_compensations + 1, self.intervention.compensations.count())
 | 
			
		||||
        new_compensation = self.intervention.compensations.get(identifier=test_id)
 | 
			
		||||
@ -261,3 +262,26 @@ class CompensationWorkflowTestCase(BaseWorkflowTestCase):
 | 
			
		||||
        self.assertIn(recorded, self.compensation.log.all())
 | 
			
		||||
        self.assertEqual(pre_record_log_count + 1, self.compensation.log.count())
 | 
			
		||||
 | 
			
		||||
    def test_non_editable_after_recording(self):
 | 
			
		||||
        """ Tests that the compensation can not be edited after being recorded
 | 
			
		||||
 | 
			
		||||
        User must be redirected to another page
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        self.assertIsNotNone(self.compensation)
 | 
			
		||||
        self.assertFalse(self.compensation.is_recorded)
 | 
			
		||||
        edit_url = reverse("compensation:edit", args=(self.compensation.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertFalse(has_redirect)
 | 
			
		||||
 | 
			
		||||
        self.compensation.intervention.set_recorded(self.user)
 | 
			
		||||
        self.assertTrue(self.compensation.is_recorded)
 | 
			
		||||
 | 
			
		||||
        edit_url = reverse("compensation:edit", args=(self.compensation.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertTrue(has_redirect)
 | 
			
		||||
        self.compensation.intervention.set_unrecorded(self.user)
 | 
			
		||||
 | 
			
		||||
@ -302,3 +302,27 @@ class EcoAccountWorkflowTestCase(BaseWorkflowTestCase):
 | 
			
		||||
        self.assertEqual(pre_edit_account_log_count + 1, account.log.count())
 | 
			
		||||
        self.assertEqual(intervention.log.first().action, UserAction.EDITED)
 | 
			
		||||
        self.assertEqual(account.log.first().action, UserAction.EDITED)
 | 
			
		||||
 | 
			
		||||
    def test_non_editable_after_recording(self):
 | 
			
		||||
        """ Tests that the eco_account can not be edited after being recorded
 | 
			
		||||
 | 
			
		||||
        User must be redirected to another page
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        self.assertIsNotNone(self.eco_account)
 | 
			
		||||
        self.assertFalse(self.eco_account.is_recorded)
 | 
			
		||||
        edit_url = reverse("compensation:acc:edit", args=(self.eco_account.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertFalse(has_redirect)
 | 
			
		||||
 | 
			
		||||
        self.eco_account.set_recorded(self.user)
 | 
			
		||||
        self.assertTrue(self.eco_account.is_recorded)
 | 
			
		||||
 | 
			
		||||
        edit_url = reverse("compensation:acc:edit", args=(self.eco_account.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertTrue(has_redirect)
 | 
			
		||||
        self.eco_account.set_unrecorded(self.user)
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
from django.contrib.auth.decorators import login_required
 | 
			
		||||
from django.core.exceptions import ObjectDoesNotExist
 | 
			
		||||
from django.db.models import Sum
 | 
			
		||||
from django.http import HttpRequest, JsonResponse
 | 
			
		||||
from django.shortcuts import render
 | 
			
		||||
@ -22,7 +23,7 @@ from konova.utils.message_templates import FORM_INVALID, IDENTIFIER_REPLACED, DA
 | 
			
		||||
    CHECKED_RECORDED_RESET, COMPENSATION_ADDED_TEMPLATE, COMPENSATION_REMOVED_TEMPLATE, DOCUMENT_ADDED, \
 | 
			
		||||
    COMPENSATION_STATE_REMOVED, COMPENSATION_STATE_ADDED, COMPENSATION_ACTION_REMOVED, COMPENSATION_ACTION_ADDED, \
 | 
			
		||||
    DEADLINE_ADDED, DEADLINE_REMOVED, DOCUMENT_EDITED, COMPENSATION_STATE_EDITED, COMPENSATION_ACTION_EDITED, \
 | 
			
		||||
    DEADLINE_EDITED
 | 
			
		||||
    DEADLINE_EDITED, RECORDED_BLOCKS_EDIT, PARAMS_INVALID
 | 
			
		||||
from konova.utils.user_checks import in_group
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -69,6 +70,19 @@ def new_view(request: HttpRequest, intervention_id: str = None):
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    template = "compensation/form/view.html"
 | 
			
		||||
    if intervention_id is not None:
 | 
			
		||||
        try:
 | 
			
		||||
            intervention = Intervention.objects.get(id=intervention_id)
 | 
			
		||||
        except ObjectDoesNotExist:
 | 
			
		||||
            messages.error(request, PARAMS_INVALID)
 | 
			
		||||
            return redirect("home")
 | 
			
		||||
        if intervention.is_recorded:
 | 
			
		||||
            messages.info(
 | 
			
		||||
                request,
 | 
			
		||||
                RECORDED_BLOCKS_EDIT
 | 
			
		||||
            )
 | 
			
		||||
            return redirect("intervention:detail", id=intervention_id)
 | 
			
		||||
 | 
			
		||||
    data_form = NewCompensationForm(request.POST or None, intervention_id=intervention_id)
 | 
			
		||||
    geom_form = SimpleGeomForm(request.POST or None, read_only=False)
 | 
			
		||||
    if request.method == "POST":
 | 
			
		||||
@ -134,6 +148,13 @@ def edit_view(request: HttpRequest, id: str):
 | 
			
		||||
    template = "compensation/form/view.html"
 | 
			
		||||
    # Get object from db
 | 
			
		||||
    comp = get_object_or_404(Compensation, id=id)
 | 
			
		||||
    if comp.is_recorded:
 | 
			
		||||
        messages.info(
 | 
			
		||||
            request,
 | 
			
		||||
            RECORDED_BLOCKS_EDIT
 | 
			
		||||
        )
 | 
			
		||||
        return redirect("compensation:detail", id=id)
 | 
			
		||||
 | 
			
		||||
    # Create forms, initialize with values from db/from POST request
 | 
			
		||||
    data_form = EditCompensationForm(request.POST or None, instance=comp)
 | 
			
		||||
    geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=comp)
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,8 @@ from konova.utils.generators import generate_qr_code
 | 
			
		||||
from konova.utils.message_templates import IDENTIFIER_REPLACED, FORM_INVALID, DATA_UNSHARED, DATA_UNSHARED_EXPLANATION, \
 | 
			
		||||
    CANCEL_ACC_RECORDED_OR_DEDUCTED, DEDUCTION_REMOVED, DEDUCTION_ADDED, DOCUMENT_ADDED, COMPENSATION_STATE_REMOVED, \
 | 
			
		||||
    COMPENSATION_STATE_ADDED, COMPENSATION_ACTION_REMOVED, COMPENSATION_ACTION_ADDED, DEADLINE_ADDED, DEADLINE_REMOVED, \
 | 
			
		||||
    DEDUCTION_EDITED, DOCUMENT_EDITED, COMPENSATION_STATE_EDITED, COMPENSATION_ACTION_EDITED, DEADLINE_EDITED
 | 
			
		||||
    DEDUCTION_EDITED, DOCUMENT_EDITED, COMPENSATION_STATE_EDITED, COMPENSATION_ACTION_EDITED, DEADLINE_EDITED, \
 | 
			
		||||
    RECORDED_BLOCKS_EDIT
 | 
			
		||||
from konova.utils.user_checks import in_group
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -145,6 +146,13 @@ def edit_view(request: HttpRequest, id: str):
 | 
			
		||||
    template = "compensation/form/view.html"
 | 
			
		||||
    # Get object from db
 | 
			
		||||
    acc = get_object_or_404(EcoAccount, id=id)
 | 
			
		||||
    if acc.is_recorded:
 | 
			
		||||
        messages.info(
 | 
			
		||||
            request,
 | 
			
		||||
            RECORDED_BLOCKS_EDIT
 | 
			
		||||
        )
 | 
			
		||||
        return redirect("compensation:acc:detail", id=id)
 | 
			
		||||
 | 
			
		||||
    # Create forms, initialize with values from db/from POST request
 | 
			
		||||
    data_form = EditEcoAccountForm(request.POST or None, instance=acc)
 | 
			
		||||
    geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=acc)
 | 
			
		||||
 | 
			
		||||
@ -117,6 +117,32 @@ class EmaWorkflowTestCase(BaseWorkflowTestCase):
 | 
			
		||||
        self.assertEqual(pre_edit_log_count + 1, self.ema.log.count())
 | 
			
		||||
        self.assertEqual(self.ema.log.first().action, UserAction.EDITED)
 | 
			
		||||
 | 
			
		||||
    def test_non_editable_after_recording(self):
 | 
			
		||||
        """ Tests that the EMA can not be edited after being recorded
 | 
			
		||||
 | 
			
		||||
        User must be redirected to another page
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        self.superuser.groups.add(self.groups.get(name=ETS_GROUP))
 | 
			
		||||
        self.assertIsNotNone(self.ema)
 | 
			
		||||
        self.ema.share_with_user(self.superuser)
 | 
			
		||||
        self.assertFalse(self.ema.is_recorded)
 | 
			
		||||
        edit_url = reverse("ema:edit", args=(self.ema.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertFalse(has_redirect)
 | 
			
		||||
 | 
			
		||||
        self.ema.set_recorded(self.superuser)
 | 
			
		||||
        self.assertTrue(self.ema.is_recorded)
 | 
			
		||||
 | 
			
		||||
        edit_url = reverse("ema:edit", args=(self.ema.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertTrue(has_redirect)
 | 
			
		||||
        self.ema.set_unrecorded(self.superuser)
 | 
			
		||||
        
 | 
			
		||||
    def test_recordability(self):
 | 
			
		||||
        """
 | 
			
		||||
        This tests if the recordability of the Ema is triggered by the quality of it's data (e.g. not all fields filled)
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ from konova.utils.generators import generate_qr_code
 | 
			
		||||
from konova.utils.message_templates import IDENTIFIER_REPLACED, FORM_INVALID, DATA_UNSHARED, DATA_UNSHARED_EXPLANATION, \
 | 
			
		||||
    DOCUMENT_ADDED, COMPENSATION_STATE_REMOVED, COMPENSATION_STATE_ADDED, COMPENSATION_ACTION_REMOVED, \
 | 
			
		||||
    COMPENSATION_ACTION_ADDED, DEADLINE_ADDED, DEADLINE_REMOVED, DOCUMENT_EDITED, COMPENSATION_STATE_EDITED, \
 | 
			
		||||
    COMPENSATION_ACTION_EDITED, DEADLINE_EDITED
 | 
			
		||||
    COMPENSATION_ACTION_EDITED, DEADLINE_EDITED, RECORDED_BLOCKS_EDIT
 | 
			
		||||
from konova.utils.user_checks import in_group
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -213,6 +213,13 @@ def edit_view(request: HttpRequest, id: str):
 | 
			
		||||
    template = "compensation/form/view.html"
 | 
			
		||||
    # Get object from db
 | 
			
		||||
    ema = get_object_or_404(Ema, id=id)
 | 
			
		||||
    if ema.is_recorded:
 | 
			
		||||
        messages.info(
 | 
			
		||||
            request,
 | 
			
		||||
            RECORDED_BLOCKS_EDIT
 | 
			
		||||
        )
 | 
			
		||||
        return redirect("ema:detail", id=id)
 | 
			
		||||
 | 
			
		||||
    # Create forms, initialize with values from db/from POST request
 | 
			
		||||
    data_form = EditEmaForm(request.POST or None, instance=ema)
 | 
			
		||||
    geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=ema)
 | 
			
		||||
 | 
			
		||||
@ -427,13 +427,22 @@ class NewDeductionModalForm(BaseModalForm):
 | 
			
		||||
        """
 | 
			
		||||
        super_result = super().is_valid()
 | 
			
		||||
        acc = self.cleaned_data["account"]
 | 
			
		||||
        intervention = self.cleaned_data["intervention"]
 | 
			
		||||
        objects_valid = True
 | 
			
		||||
 | 
			
		||||
        if not acc.recorded:
 | 
			
		||||
            self.add_error(
 | 
			
		||||
                "account",
 | 
			
		||||
                _("Eco-account {} is not recorded yet. You can only deduct from recorded accounts.").format(acc.identifier)
 | 
			
		||||
            )
 | 
			
		||||
            return False
 | 
			
		||||
            objects_valid = False
 | 
			
		||||
 | 
			
		||||
        if intervention.is_recorded:
 | 
			
		||||
            self.add_error(
 | 
			
		||||
                "intervention",
 | 
			
		||||
                _("Intervention {} is currently recorded. To change any data on it, the entry must be unrecorded.").format(intervention.identifier)
 | 
			
		||||
            )
 | 
			
		||||
            objects_valid = False
 | 
			
		||||
 | 
			
		||||
        rest_surface = self._get_available_surface(acc)
 | 
			
		||||
        form_surface = float(self.cleaned_data["surface"])
 | 
			
		||||
@ -447,7 +456,7 @@ class NewDeductionModalForm(BaseModalForm):
 | 
			
		||||
                    format_german_float(rest_surface),
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
        return is_valid_surface and super_result
 | 
			
		||||
        return is_valid_surface and objects_valid and super_result
 | 
			
		||||
 | 
			
		||||
    def __create_deduction(self):
 | 
			
		||||
        """ Creates the deduction
 | 
			
		||||
 | 
			
		||||
@ -89,6 +89,30 @@ class InterventionWorkflowTestCase(BaseWorkflowTestCase):
 | 
			
		||||
        self.assertIn(self.superuser, obj.users.all())
 | 
			
		||||
        self.assertEqual(1, obj.users.count())
 | 
			
		||||
 | 
			
		||||
    def test_non_editable_after_recording(self):
 | 
			
		||||
        """ Tests that the intervention can not be edited after being recorded
 | 
			
		||||
 | 
			
		||||
        User must be redirected to another page
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        self.assertIsNotNone(self.intervention)
 | 
			
		||||
        self.assertFalse(self.intervention.is_recorded)
 | 
			
		||||
        edit_url = reverse("intervention:edit", args=(self.intervention.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertFalse(has_redirect)
 | 
			
		||||
 | 
			
		||||
        self.intervention.set_recorded(self.user)
 | 
			
		||||
        self.assertTrue(self.intervention.is_recorded)
 | 
			
		||||
 | 
			
		||||
        edit_url = reverse("intervention:edit", args=(self.intervention.id,))
 | 
			
		||||
        response = self.client_user.get(edit_url)
 | 
			
		||||
        has_redirect = response.status_code == 302
 | 
			
		||||
        self.assertTrue(has_redirect)
 | 
			
		||||
        self.intervention.set_unrecorded(self.user)
 | 
			
		||||
 | 
			
		||||
    def test_checkability(self):
 | 
			
		||||
        """ Tests that the intervention can only be checked if all required data has been added
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,8 @@ from konova.utils.documents import remove_document, get_document
 | 
			
		||||
from konova.utils.generators import generate_qr_code
 | 
			
		||||
from konova.utils.message_templates import INTERVENTION_INVALID, FORM_INVALID, IDENTIFIER_REPLACED, \
 | 
			
		||||
    CHECKED_RECORDED_RESET, DEDUCTION_REMOVED, DEDUCTION_ADDED, REVOCATION_ADDED, REVOCATION_REMOVED, \
 | 
			
		||||
    COMPENSATION_REMOVED_TEMPLATE, DOCUMENT_ADDED, DEDUCTION_EDITED, REVOCATION_EDITED, DOCUMENT_EDITED
 | 
			
		||||
    COMPENSATION_REMOVED_TEMPLATE, DOCUMENT_ADDED, DEDUCTION_EDITED, REVOCATION_EDITED, DOCUMENT_EDITED, \
 | 
			
		||||
    RECORDED_BLOCKS_EDIT
 | 
			
		||||
from konova.utils.user_checks import in_group
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -302,6 +303,13 @@ def edit_view(request: HttpRequest, id: str):
 | 
			
		||||
    template = "intervention/form/view.html"
 | 
			
		||||
    # Get object from db
 | 
			
		||||
    intervention = get_object_or_404(Intervention, id=id)
 | 
			
		||||
    if intervention.is_recorded:
 | 
			
		||||
        messages.info(
 | 
			
		||||
            request,
 | 
			
		||||
            RECORDED_BLOCKS_EDIT
 | 
			
		||||
        )
 | 
			
		||||
        return redirect("intervention:detail", id=id)
 | 
			
		||||
 | 
			
		||||
    # Create forms, initialize with values from db/from POST request
 | 
			
		||||
    data_form = EditInterventionForm(request.POST or None, instance=intervention)
 | 
			
		||||
    geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=intervention)
 | 
			
		||||
 | 
			
		||||
@ -52,14 +52,16 @@ class InterventionAutocomplete(Select2QuerySetView):
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    def get_queryset(self):
 | 
			
		||||
        if self.request.user.is_anonymous:
 | 
			
		||||
        user = self.request.user
 | 
			
		||||
        if user.is_anonymous:
 | 
			
		||||
            return Intervention.objects.none()
 | 
			
		||||
        qs = Intervention.objects.filter(
 | 
			
		||||
            deleted=None,
 | 
			
		||||
            users__in=[self.request.user],
 | 
			
		||||
            Q(deleted=None) &
 | 
			
		||||
            Q(users__in=[user]) |
 | 
			
		||||
            Q(teams__in=user.teams.all())
 | 
			
		||||
        ).order_by(
 | 
			
		||||
            "identifier"
 | 
			
		||||
        )
 | 
			
		||||
        ).distinct()
 | 
			
		||||
        if self.q:
 | 
			
		||||
            qs = qs.filter(
 | 
			
		||||
                Q(identifier__icontains=self.q) |
 | 
			
		||||
 | 
			
		||||
@ -57,6 +57,8 @@ class BaseForm(forms.Form):
 | 
			
		||||
                self.has_required_fields = True
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
        self.check_for_recorded_instance()
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def save(self):
 | 
			
		||||
        # To be implemented in subclasses!
 | 
			
		||||
@ -136,6 +138,38 @@ class BaseForm(forms.Form):
 | 
			
		||||
        set_class = set_class.replace(cls, "")
 | 
			
		||||
        self.fields[field].widget.attrs["class"] = set_class
 | 
			
		||||
 | 
			
		||||
    def check_for_recorded_instance(self):
 | 
			
		||||
        """ Checks if the instance is recorded and runs some special logic if yes
 | 
			
		||||
 | 
			
		||||
        If the instance is recorded, the form shall not display any possibility to
 | 
			
		||||
        edit any data. Instead, the users should get some information about why they can not edit anything.
 | 
			
		||||
 | 
			
		||||
        There are situations where the form should be rendered regularly,
 | 
			
		||||
        e.g deduction forms for (recorded) eco accounts.
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        from intervention.forms.modalForms import NewDeductionModalForm, EditEcoAccountDeductionModalForm, \
 | 
			
		||||
            RemoveEcoAccountDeductionModalForm
 | 
			
		||||
        is_none = self.instance is None
 | 
			
		||||
        is_other_data_type = not isinstance(self.instance, BaseObject)
 | 
			
		||||
        is_deduction_form = isinstance(
 | 
			
		||||
            self,
 | 
			
		||||
            (
 | 
			
		||||
                NewDeductionModalForm,
 | 
			
		||||
                EditEcoAccountDeductionModalForm,
 | 
			
		||||
                RemoveEcoAccountDeductionModalForm,
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if is_none or is_other_data_type or is_deduction_form:
 | 
			
		||||
            # Do nothing
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        if self.instance.is_recorded:
 | 
			
		||||
            self.template = "form/recorded_no_edit.html"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RemoveForm(BaseForm):
 | 
			
		||||
    check = forms.BooleanField(
 | 
			
		||||
@ -410,7 +444,6 @@ class NewDocumentModalForm(BaseModalForm):
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
        self.form_title = _("Add new document")
 | 
			
		||||
        self.form_caption = _("")
 | 
			
		||||
        self.template = "modal/modal_form.html"
 | 
			
		||||
        self.form_attrs = {
 | 
			
		||||
            "enctype": "multipart/form-data",  # important for file upload
 | 
			
		||||
        }
 | 
			
		||||
@ -597,4 +630,12 @@ class RecordModalForm(BaseModalForm):
 | 
			
		||||
                    self.instance.set_unrecorded(self.user)
 | 
			
		||||
                else:
 | 
			
		||||
                    self.instance.set_recorded(self.user)
 | 
			
		||||
        return self.instance
 | 
			
		||||
        return self.instance
 | 
			
		||||
 | 
			
		||||
    def check_for_recorded_instance(self):
 | 
			
		||||
        """ Overwrite the check method for doing nothing on the RecordModalForm
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
@ -337,6 +337,15 @@ class RecordableObjectMixin(models.Model):
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError("Implement this in the subclass!")
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def is_recorded(self):
 | 
			
		||||
        """ Getter for record status as property
 | 
			
		||||
 | 
			
		||||
        Returns:
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        return self.recorded is not None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CheckableObjectMixin(models.Model):
 | 
			
		||||
    # Checks - Refers to "Genehmigen" but optional
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@ IDENTIFIER_REPLACED = _("The identifier '{}' had to be changed to '{}' since ano
 | 
			
		||||
ENTRY_REMOVE_MISSING_PERMISSION = _("Only conservation or registration office users are allowed to remove entries.")
 | 
			
		||||
MISSING_GROUP_PERMISSION = _("You need to be part of another user group.")
 | 
			
		||||
CHECKED_RECORDED_RESET = _("Status of Checked and Recorded reseted")
 | 
			
		||||
RECORDED_BLOCKS_EDIT = _("Entry is recorded. To edit data, the entry first needs to be unrecorded.")
 | 
			
		||||
 | 
			
		||||
# SHARE
 | 
			
		||||
DATA_UNSHARED = _("This data is not shared with you")
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -18,15 +18,15 @@
 | 
			
		||||
#: konova/filters/mixins.py:277 konova/filters/mixins.py:323
 | 
			
		||||
#: konova/filters/mixins.py:361 konova/filters/mixins.py:362
 | 
			
		||||
#: konova/filters/mixins.py:393 konova/filters/mixins.py:394
 | 
			
		||||
#: konova/forms.py:143 konova/forms.py:244 konova/forms.py:315
 | 
			
		||||
#: konova/forms.py:359 konova/forms.py:369 konova/forms.py:382
 | 
			
		||||
#: konova/forms.py:394 konova/forms.py:412 user/forms.py:42
 | 
			
		||||
#: konova/forms.py:177 konova/forms.py:278 konova/forms.py:349
 | 
			
		||||
#: konova/forms.py:393 konova/forms.py:403 konova/forms.py:416
 | 
			
		||||
#: konova/forms.py:428 konova/forms.py:446 user/forms.py:42
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2022-04-13 15:13+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2022-04-19 13:28+0200\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"
 | 
			
		||||
@ -77,7 +77,7 @@ msgstr "Bericht generieren"
 | 
			
		||||
msgid "Select a timespan and the desired conservation office"
 | 
			
		||||
msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle"
 | 
			
		||||
 | 
			
		||||
#: analysis/forms.py:69 konova/forms.py:191
 | 
			
		||||
#: analysis/forms.py:69 konova/forms.py:225
 | 
			
		||||
msgid "Continue"
 | 
			
		||||
msgstr "Weiter"
 | 
			
		||||
 | 
			
		||||
@ -342,7 +342,7 @@ msgstr "Automatisch generiert"
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/documents.html:28
 | 
			
		||||
#: intervention/templates/intervention/detail/view.html:31
 | 
			
		||||
#: intervention/templates/intervention/report/report.html:12
 | 
			
		||||
#: konova/forms.py:358
 | 
			
		||||
#: konova/forms.py:392
 | 
			
		||||
msgid "Title"
 | 
			
		||||
msgstr "Bezeichnung"
 | 
			
		||||
 | 
			
		||||
@ -369,7 +369,7 @@ msgstr "Kompensation XY; Flur ABC"
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/documents.html:34
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/payments.html:34
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/revocation.html:38
 | 
			
		||||
#: konova/forms.py:393 konova/templates/konova/includes/comment_card.html:16
 | 
			
		||||
#: konova/forms.py:427 konova/templates/konova/includes/comment_card.html:16
 | 
			
		||||
msgid "Comment"
 | 
			
		||||
msgstr "Kommentar"
 | 
			
		||||
 | 
			
		||||
@ -441,7 +441,7 @@ msgstr "kompensiert Eingriff"
 | 
			
		||||
msgid "Select the intervention for which this compensation compensates"
 | 
			
		||||
msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist"
 | 
			
		||||
 | 
			
		||||
#: compensation/forms/forms.py:202 compensation/views/compensation.py:96
 | 
			
		||||
#: compensation/forms/forms.py:202 compensation/views/compensation.py:110
 | 
			
		||||
msgid "New compensation"
 | 
			
		||||
msgstr "Neue Kompensation"
 | 
			
		||||
 | 
			
		||||
@ -467,7 +467,7 @@ msgstr "Vereinbarungsdatum"
 | 
			
		||||
msgid "When did the parties agree on this?"
 | 
			
		||||
msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?"
 | 
			
		||||
 | 
			
		||||
#: compensation/forms/forms.py:373 compensation/views/eco_account.py:107
 | 
			
		||||
#: compensation/forms/forms.py:373 compensation/views/eco_account.py:108
 | 
			
		||||
msgid "New Eco-Account"
 | 
			
		||||
msgstr "Neues Ökokonto"
 | 
			
		||||
 | 
			
		||||
@ -493,7 +493,7 @@ msgid "Due on which date"
 | 
			
		||||
msgstr "Zahlung wird an diesem Datum erwartet"
 | 
			
		||||
 | 
			
		||||
#: compensation/forms/modalForms.py:64 compensation/forms/modalForms.py:359
 | 
			
		||||
#: intervention/forms/modalForms.py:177 konova/forms.py:395
 | 
			
		||||
#: intervention/forms/modalForms.py:177 konova/forms.py:429
 | 
			
		||||
msgid "Additional comment, maximum {} letters"
 | 
			
		||||
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
 | 
			
		||||
 | 
			
		||||
@ -538,7 +538,7 @@ msgstr "Neuer Zustand"
 | 
			
		||||
msgid "Insert data for the new state"
 | 
			
		||||
msgstr "Geben Sie die Daten des neuen Zustandes ein"
 | 
			
		||||
 | 
			
		||||
#: compensation/forms/modalForms.py:217 konova/forms.py:193
 | 
			
		||||
#: compensation/forms/modalForms.py:217 konova/forms.py:227
 | 
			
		||||
msgid "Object removed"
 | 
			
		||||
msgstr "Objekt entfernt"
 | 
			
		||||
 | 
			
		||||
@ -871,7 +871,7 @@ msgstr "Dokumente"
 | 
			
		||||
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:14
 | 
			
		||||
#: ema/templates/ema/detail/includes/documents.html:14
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/documents.html:14
 | 
			
		||||
#: konova/forms.py:411
 | 
			
		||||
#: konova/forms.py:445
 | 
			
		||||
msgid "Add new document"
 | 
			
		||||
msgstr "Neues Dokument hinzufügen"
 | 
			
		||||
 | 
			
		||||
@ -879,7 +879,7 @@ msgstr "Neues Dokument hinzufügen"
 | 
			
		||||
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:31
 | 
			
		||||
#: ema/templates/ema/detail/includes/documents.html:31
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/documents.html:31
 | 
			
		||||
#: konova/forms.py:368
 | 
			
		||||
#: konova/forms.py:402
 | 
			
		||||
msgid "Created on"
 | 
			
		||||
msgstr "Erstellt"
 | 
			
		||||
 | 
			
		||||
@ -887,7 +887,7 @@ msgstr "Erstellt"
 | 
			
		||||
#: compensation/templates/compensation/detail/eco_account/includes/documents.html:61
 | 
			
		||||
#: ema/templates/ema/detail/includes/documents.html:61
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/documents.html:65
 | 
			
		||||
#: konova/forms.py:474
 | 
			
		||||
#: konova/forms.py:507
 | 
			
		||||
msgid "Edit document"
 | 
			
		||||
msgstr "Dokument bearbeiten"
 | 
			
		||||
 | 
			
		||||
@ -1067,7 +1067,7 @@ msgid "Recorded on"
 | 
			
		||||
msgstr "Verzeichnet am"
 | 
			
		||||
 | 
			
		||||
#: compensation/templates/compensation/detail/eco_account/includes/deductions.html:65
 | 
			
		||||
#: intervention/forms/modalForms.py:481
 | 
			
		||||
#: intervention/forms/modalForms.py:490
 | 
			
		||||
#: intervention/templates/intervention/detail/includes/deductions.html:60
 | 
			
		||||
msgid "Edit Deduction"
 | 
			
		||||
msgstr "Abbuchung bearbeiten"
 | 
			
		||||
@ -1141,72 +1141,72 @@ msgstr ""
 | 
			
		||||
msgid "Responsible data"
 | 
			
		||||
msgstr "Daten zu den verantwortlichen Stellen"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/compensation.py:52
 | 
			
		||||
#: compensation/views/compensation.py:53
 | 
			
		||||
msgid "Compensations - Overview"
 | 
			
		||||
msgstr "Kompensationen - Übersicht"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/compensation.py:151 konova/utils/message_templates.py:35
 | 
			
		||||
#: compensation/views/compensation.py:172 konova/utils/message_templates.py:36
 | 
			
		||||
msgid "Compensation {} edited"
 | 
			
		||||
msgstr "Kompensation {} bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/compensation.py:161 compensation/views/eco_account.py:165
 | 
			
		||||
#: ema/views.py:233 intervention/views.py:327
 | 
			
		||||
#: compensation/views/compensation.py:182 compensation/views/eco_account.py:173
 | 
			
		||||
#: ema/views.py:240 intervention/views.py:335
 | 
			
		||||
msgid "Edit {}"
 | 
			
		||||
msgstr "Bearbeite {}"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/compensation.py:240 compensation/views/eco_account.py:351
 | 
			
		||||
#: ema/views.py:194 intervention/views.py:531
 | 
			
		||||
#: compensation/views/compensation.py:261 compensation/views/eco_account.py:359
 | 
			
		||||
#: ema/views.py:194 intervention/views.py:539
 | 
			
		||||
msgid "Log"
 | 
			
		||||
msgstr "Log"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/compensation.py:584 compensation/views/eco_account.py:719
 | 
			
		||||
#: ema/views.py:551 intervention/views.py:677
 | 
			
		||||
#: compensation/views/compensation.py:605 compensation/views/eco_account.py:727
 | 
			
		||||
#: ema/views.py:558 intervention/views.py:685
 | 
			
		||||
msgid "Report {}"
 | 
			
		||||
msgstr "Bericht {}"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:64
 | 
			
		||||
#: compensation/views/eco_account.py:65
 | 
			
		||||
msgid "Eco-account - Overview"
 | 
			
		||||
msgstr "Ökokonten - Übersicht"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:97
 | 
			
		||||
#: compensation/views/eco_account.py:98
 | 
			
		||||
msgid "Eco-Account {} added"
 | 
			
		||||
msgstr "Ökokonto {} hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:155
 | 
			
		||||
#: compensation/views/eco_account.py:163
 | 
			
		||||
msgid "Eco-Account {} edited"
 | 
			
		||||
msgstr "Ökokonto {} bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:268
 | 
			
		||||
#: compensation/views/eco_account.py:276
 | 
			
		||||
msgid "Eco-account removed"
 | 
			
		||||
msgstr "Ökokonto entfernt"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:372 ema/views.py:275
 | 
			
		||||
#: intervention/views.py:630
 | 
			
		||||
#: compensation/views/eco_account.py:380 ema/views.py:282
 | 
			
		||||
#: intervention/views.py:638
 | 
			
		||||
msgid "{} unrecorded"
 | 
			
		||||
msgstr "{} entzeichnet"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:372 ema/views.py:275
 | 
			
		||||
#: intervention/views.py:630
 | 
			
		||||
#: compensation/views/eco_account.py:380 ema/views.py:282
 | 
			
		||||
#: intervention/views.py:638
 | 
			
		||||
msgid "{} recorded"
 | 
			
		||||
msgstr "{} verzeichnet"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:796 ema/views.py:621
 | 
			
		||||
#: intervention/views.py:428
 | 
			
		||||
#: compensation/views/eco_account.py:804 ema/views.py:628
 | 
			
		||||
#: intervention/views.py:436
 | 
			
		||||
msgid "{} has already been shared with you"
 | 
			
		||||
msgstr "{} wurde bereits für Sie freigegeben"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:801 ema/views.py:626
 | 
			
		||||
#: intervention/views.py:433
 | 
			
		||||
#: compensation/views/eco_account.py:809 ema/views.py:633
 | 
			
		||||
#: intervention/views.py:441
 | 
			
		||||
msgid "{} has been shared with you"
 | 
			
		||||
msgstr "{} ist nun für Sie freigegeben"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:808 ema/views.py:633
 | 
			
		||||
#: intervention/views.py:440
 | 
			
		||||
#: compensation/views/eco_account.py:816 ema/views.py:640
 | 
			
		||||
#: intervention/views.py:448
 | 
			
		||||
msgid "Share link invalid"
 | 
			
		||||
msgstr "Freigabelink ungültig"
 | 
			
		||||
 | 
			
		||||
#: compensation/views/eco_account.py:831 ema/views.py:656
 | 
			
		||||
#: intervention/views.py:463
 | 
			
		||||
#: compensation/views/eco_account.py:839 ema/views.py:663
 | 
			
		||||
#: intervention/views.py:471
 | 
			
		||||
msgid "Share settings updated"
 | 
			
		||||
msgstr "Freigabe Einstellungen aktualisiert"
 | 
			
		||||
 | 
			
		||||
@ -1246,11 +1246,11 @@ msgstr "EMAs - Übersicht"
 | 
			
		||||
msgid "EMA {} added"
 | 
			
		||||
msgstr "EMA {} hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: ema/views.py:223
 | 
			
		||||
#: ema/views.py:230
 | 
			
		||||
msgid "EMA {} edited"
 | 
			
		||||
msgstr "EMA {} bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: ema/views.py:256
 | 
			
		||||
#: ema/views.py:263
 | 
			
		||||
msgid "EMA removed"
 | 
			
		||||
msgstr "EMA entfernt"
 | 
			
		||||
 | 
			
		||||
@ -1312,7 +1312,7 @@ msgstr "Datum Zulassung bzw. Satzungsbeschluss"
 | 
			
		||||
msgid "Binding on"
 | 
			
		||||
msgstr "Datum Bestandskraft"
 | 
			
		||||
 | 
			
		||||
#: intervention/forms/forms.py:211 intervention/views.py:94
 | 
			
		||||
#: intervention/forms/forms.py:211 intervention/views.py:95
 | 
			
		||||
msgid "New intervention"
 | 
			
		||||
msgstr "Neuer Eingriff"
 | 
			
		||||
 | 
			
		||||
@ -1392,7 +1392,7 @@ msgstr "Kompensationen und Zahlungen geprüft"
 | 
			
		||||
msgid "Run check"
 | 
			
		||||
msgstr "Prüfung vornehmen"
 | 
			
		||||
 | 
			
		||||
#: intervention/forms/modalForms.py:264 konova/forms.py:515
 | 
			
		||||
#: intervention/forms/modalForms.py:264 konova/forms.py:548
 | 
			
		||||
msgid ""
 | 
			
		||||
"I, {} {}, confirm that all necessary control steps have been performed by "
 | 
			
		||||
"myself."
 | 
			
		||||
@ -1416,7 +1416,7 @@ msgstr "Neue Abbuchung"
 | 
			
		||||
msgid "Enter the information for a new deduction from a chosen eco-account"
 | 
			
		||||
msgstr "Geben Sie die Informationen für eine neue Abbuchung ein."
 | 
			
		||||
 | 
			
		||||
#: intervention/forms/modalForms.py:434
 | 
			
		||||
#: intervention/forms/modalForms.py:436
 | 
			
		||||
msgid ""
 | 
			
		||||
"Eco-account {} is not recorded yet. You can only deduct from recorded "
 | 
			
		||||
"accounts."
 | 
			
		||||
@ -1424,7 +1424,15 @@ msgstr ""
 | 
			
		||||
"Ökokonto {} ist noch nicht verzeichnet. Abbuchungen können nur von "
 | 
			
		||||
"verzeichneten Ökokonten erfolgen."
 | 
			
		||||
 | 
			
		||||
#: intervention/forms/modalForms.py:444
 | 
			
		||||
#: intervention/forms/modalForms.py:443
 | 
			
		||||
msgid ""
 | 
			
		||||
"Intervention {} is currently recorded. To change any data on it, the entry "
 | 
			
		||||
"must be unrecorded."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Eingriff {} ist verzeichnet. Der Eintrag muss erst entzeichnet werden um "
 | 
			
		||||
"fortfahren zu können."
 | 
			
		||||
 | 
			
		||||
#: intervention/forms/modalForms.py:453
 | 
			
		||||
msgid ""
 | 
			
		||||
"The account {} has not enough surface for a deduction of {} m². There are "
 | 
			
		||||
"only {} m² left"
 | 
			
		||||
@ -1524,27 +1532,27 @@ msgstr ""
 | 
			
		||||
"Kein Ausgleich jeglicher Art gefunden (Kompensation, Ersatzzahlung, "
 | 
			
		||||
"Abbuchung)"
 | 
			
		||||
 | 
			
		||||
#: intervention/views.py:51
 | 
			
		||||
#: intervention/views.py:52
 | 
			
		||||
msgid "Interventions - Overview"
 | 
			
		||||
msgstr "Eingriffe - Übersicht"
 | 
			
		||||
 | 
			
		||||
#: intervention/views.py:84
 | 
			
		||||
#: intervention/views.py:85
 | 
			
		||||
msgid "Intervention {} added"
 | 
			
		||||
msgstr "Eingriff {} hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: intervention/views.py:315
 | 
			
		||||
#: intervention/views.py:323
 | 
			
		||||
msgid "Intervention {} edited"
 | 
			
		||||
msgstr "Eingriff {} bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: intervention/views.py:351
 | 
			
		||||
#: intervention/views.py:359
 | 
			
		||||
msgid "{} removed"
 | 
			
		||||
msgstr "{} entfernt"
 | 
			
		||||
 | 
			
		||||
#: intervention/views.py:484
 | 
			
		||||
#: intervention/views.py:492
 | 
			
		||||
msgid "Check performed"
 | 
			
		||||
msgstr "Prüfung durchgeführt"
 | 
			
		||||
 | 
			
		||||
#: intervention/views.py:635
 | 
			
		||||
#: intervention/views.py:643
 | 
			
		||||
msgid "There are errors on this intervention:"
 | 
			
		||||
msgstr "Es liegen Fehler in diesem Eingriff vor:"
 | 
			
		||||
 | 
			
		||||
@ -1633,65 +1641,65 @@ msgstr "Nch Eintragungsstelle suchen"
 | 
			
		||||
msgid "Save"
 | 
			
		||||
msgstr "Speichern"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:71
 | 
			
		||||
#: konova/forms.py:73
 | 
			
		||||
msgid "Not editable"
 | 
			
		||||
msgstr "Nicht editierbar"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:142 konova/forms.py:314
 | 
			
		||||
#: konova/forms.py:176 konova/forms.py:348
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Bestätige"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:154 konova/forms.py:323
 | 
			
		||||
#: konova/forms.py:188 konova/forms.py:357
 | 
			
		||||
msgid "Remove"
 | 
			
		||||
msgstr "Löschen"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:156
 | 
			
		||||
#: konova/forms.py:190
 | 
			
		||||
msgid "You are about to remove {} {}"
 | 
			
		||||
msgstr "Sie sind dabei {} {} zu löschen"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:243 konova/utils/quality.py:44 konova/utils/quality.py:46
 | 
			
		||||
#: konova/forms.py:277 konova/utils/quality.py:44 konova/utils/quality.py:46
 | 
			
		||||
#: templates/form/collapsable/form.html:45
 | 
			
		||||
msgid "Geometry"
 | 
			
		||||
msgstr "Geometrie"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:324
 | 
			
		||||
#: konova/forms.py:358
 | 
			
		||||
msgid "Are you sure?"
 | 
			
		||||
msgstr "Sind Sie sicher?"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:370
 | 
			
		||||
#: konova/forms.py:404
 | 
			
		||||
msgid "When has this file been created? Important for photos."
 | 
			
		||||
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:381
 | 
			
		||||
#: konova/forms.py:415
 | 
			
		||||
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
 | 
			
		||||
msgid "File"
 | 
			
		||||
msgstr "Datei"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:383
 | 
			
		||||
#: konova/forms.py:417
 | 
			
		||||
msgid "Allowed formats: pdf, jpg, png. Max size 15 MB."
 | 
			
		||||
msgstr "Formate: pdf, jpg, png. Maximal 15 MB."
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:449
 | 
			
		||||
#: konova/forms.py:482
 | 
			
		||||
msgid "Added document"
 | 
			
		||||
msgstr "Dokument hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:506
 | 
			
		||||
#: konova/forms.py:539
 | 
			
		||||
msgid "Confirm record"
 | 
			
		||||
msgstr "Verzeichnen bestätigen"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:514
 | 
			
		||||
#: konova/forms.py:547
 | 
			
		||||
msgid "Record data"
 | 
			
		||||
msgstr "Daten verzeichnen"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:521
 | 
			
		||||
#: konova/forms.py:554
 | 
			
		||||
msgid "Confirm unrecord"
 | 
			
		||||
msgstr "Entzeichnen bestätigen"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:522
 | 
			
		||||
#: konova/forms.py:555
 | 
			
		||||
msgid "Unrecord data"
 | 
			
		||||
msgstr "Daten entzeichnen"
 | 
			
		||||
 | 
			
		||||
#: konova/forms.py:523
 | 
			
		||||
#: konova/forms.py:556
 | 
			
		||||
msgid "I, {} {}, confirm that this data must be unrecorded."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen."
 | 
			
		||||
@ -1889,11 +1897,18 @@ msgstr "Hierfür müssen Sie einer anderen Nutzergruppe angehören!"
 | 
			
		||||
msgid "Status of Checked and Recorded reseted"
 | 
			
		||||
msgstr "'Geprüft'/'Verzeichnet' wurde zurückgesetzt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:22
 | 
			
		||||
#: konova/utils/message_templates.py:20
 | 
			
		||||
msgid ""
 | 
			
		||||
"Entry is recorded. To edit data, the entry first needs to be unrecorded."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Eintrag ist verzeichnet. Um Daten zu bearbeiten, muss der Eintrag erst "
 | 
			
		||||
"entzeichnet werden."
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:23
 | 
			
		||||
msgid "This data is not shared with you"
 | 
			
		||||
msgstr "Diese Daten sind für Sie nicht freigegeben"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:23
 | 
			
		||||
#: konova/utils/message_templates.py:24
 | 
			
		||||
msgid ""
 | 
			
		||||
"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 "
 | 
			
		||||
@ -1903,15 +1918,15 @@ msgstr ""
 | 
			
		||||
"bedeutet, dass Sie nur lesenden Zugriff hierauf haben und weder bearbeiten, "
 | 
			
		||||
"noch Prüfungen durchführen oder verzeichnen können."
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:26
 | 
			
		||||
#: konova/utils/message_templates.py:27
 | 
			
		||||
msgid "Unsupported file type"
 | 
			
		||||
msgstr "Dateiformat nicht unterstützt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:27
 | 
			
		||||
#: konova/utils/message_templates.py:28
 | 
			
		||||
msgid "File too large"
 | 
			
		||||
msgstr "Datei zu groß"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:30
 | 
			
		||||
#: konova/utils/message_templates.py:31
 | 
			
		||||
msgid ""
 | 
			
		||||
"Action canceled. Eco account is recorded or deductions exist. Only "
 | 
			
		||||
"conservation office member can perform this action."
 | 
			
		||||
@ -1919,119 +1934,119 @@ msgstr ""
 | 
			
		||||
"Aktion abgebrochen. Ökokonto ist bereits verzeichnet oder Abbuchungen liegen "
 | 
			
		||||
"vor. Nur Eintragungsstellennutzer können diese Aktion jetzt durchführen."
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:33
 | 
			
		||||
#: konova/utils/message_templates.py:34
 | 
			
		||||
msgid "Compensation {} added"
 | 
			
		||||
msgstr "Kompensation {} hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:34
 | 
			
		||||
#: konova/utils/message_templates.py:35
 | 
			
		||||
msgid "Compensation {} removed"
 | 
			
		||||
msgstr "Kompensation {} entfernt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:36
 | 
			
		||||
#: konova/utils/message_templates.py:37
 | 
			
		||||
msgid "Added compensation action"
 | 
			
		||||
msgstr "Maßnahme hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:37
 | 
			
		||||
#: konova/utils/message_templates.py:38
 | 
			
		||||
msgid "Added compensation state"
 | 
			
		||||
msgstr "Zustand hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:40
 | 
			
		||||
#: konova/utils/message_templates.py:41
 | 
			
		||||
msgid "State removed"
 | 
			
		||||
msgstr "Zustand gelöscht"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:41
 | 
			
		||||
#: konova/utils/message_templates.py:42
 | 
			
		||||
msgid "State edited"
 | 
			
		||||
msgstr "Zustand bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:42
 | 
			
		||||
#: konova/utils/message_templates.py:43
 | 
			
		||||
msgid "State added"
 | 
			
		||||
msgstr "Zustand hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:45
 | 
			
		||||
#: konova/utils/message_templates.py:46
 | 
			
		||||
msgid "Action added"
 | 
			
		||||
msgstr "Maßnahme hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:46
 | 
			
		||||
#: konova/utils/message_templates.py:47
 | 
			
		||||
msgid "Action edited"
 | 
			
		||||
msgstr "Maßnahme bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:47
 | 
			
		||||
#: konova/utils/message_templates.py:48
 | 
			
		||||
msgid "Action removed"
 | 
			
		||||
msgstr "Maßnahme entfernt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:50
 | 
			
		||||
#: konova/utils/message_templates.py:51
 | 
			
		||||
msgid "Deduction added"
 | 
			
		||||
msgstr "Abbuchung hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:51
 | 
			
		||||
#: konova/utils/message_templates.py:52
 | 
			
		||||
msgid "Deduction edited"
 | 
			
		||||
msgstr "Abbuchung bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:52
 | 
			
		||||
#: konova/utils/message_templates.py:53
 | 
			
		||||
msgid "Deduction removed"
 | 
			
		||||
msgstr "Abbuchung entfernt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:55
 | 
			
		||||
#: konova/utils/message_templates.py:56
 | 
			
		||||
msgid "Deadline added"
 | 
			
		||||
msgstr "Frist/Termin hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:56
 | 
			
		||||
#: konova/utils/message_templates.py:57
 | 
			
		||||
msgid "Deadline edited"
 | 
			
		||||
msgstr "Frist/Termin bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:57
 | 
			
		||||
#: konova/utils/message_templates.py:58
 | 
			
		||||
msgid "Deadline removed"
 | 
			
		||||
msgstr "Frist/Termin gelöscht"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:60
 | 
			
		||||
#: konova/utils/message_templates.py:61
 | 
			
		||||
msgid "Payment added"
 | 
			
		||||
msgstr "Zahlung hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:61
 | 
			
		||||
#: konova/utils/message_templates.py:62
 | 
			
		||||
msgid "Payment edited"
 | 
			
		||||
msgstr "Zahlung bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:62
 | 
			
		||||
#: konova/utils/message_templates.py:63
 | 
			
		||||
msgid "Payment removed"
 | 
			
		||||
msgstr "Zahlung gelöscht"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:65
 | 
			
		||||
#: konova/utils/message_templates.py:66
 | 
			
		||||
msgid "Revocation added"
 | 
			
		||||
msgstr "Widerspruch hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:66
 | 
			
		||||
#: konova/utils/message_templates.py:67
 | 
			
		||||
msgid "Revocation edited"
 | 
			
		||||
msgstr "Widerspruch bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:67
 | 
			
		||||
#: konova/utils/message_templates.py:68
 | 
			
		||||
msgid "Revocation removed"
 | 
			
		||||
msgstr "Widerspruch entfernt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:70
 | 
			
		||||
#: konova/utils/message_templates.py:71
 | 
			
		||||
msgid "Document '{}' deleted"
 | 
			
		||||
msgstr "Dokument '{}' gelöscht"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:71
 | 
			
		||||
#: konova/utils/message_templates.py:72
 | 
			
		||||
msgid "Document added"
 | 
			
		||||
msgstr "Dokument hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:72
 | 
			
		||||
#: konova/utils/message_templates.py:73
 | 
			
		||||
msgid "Document edited"
 | 
			
		||||
msgstr "Dokument bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:75
 | 
			
		||||
#: konova/utils/message_templates.py:76
 | 
			
		||||
msgid "Edited general data"
 | 
			
		||||
msgstr "Allgemeine Daten bearbeitet"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:76
 | 
			
		||||
#: konova/utils/message_templates.py:77
 | 
			
		||||
msgid "Added deadline"
 | 
			
		||||
msgstr "Frist/Termin hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:79
 | 
			
		||||
#: konova/utils/message_templates.py:80
 | 
			
		||||
msgid "Geometry conflict detected with {}"
 | 
			
		||||
msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}"
 | 
			
		||||
 | 
			
		||||
#: konova/utils/message_templates.py:82
 | 
			
		||||
#: konova/utils/message_templates.py:83
 | 
			
		||||
msgid "This intervention has {} revocations"
 | 
			
		||||
msgstr "Dem Eingriff liegen {} Widersprüche vor"
 | 
			
		||||
 | 
			
		||||
@ -2358,6 +2373,25 @@ msgstr "Allgemeine Daten"
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Abbrechen"
 | 
			
		||||
 | 
			
		||||
#: templates/form/recorded_no_edit.html:9
 | 
			
		||||
msgid "This data is recorded"
 | 
			
		||||
msgstr "Daten sind verzeichnet"
 | 
			
		||||
 | 
			
		||||
#: templates/form/recorded_no_edit.html:14
 | 
			
		||||
msgid ""
 | 
			
		||||
"\n"
 | 
			
		||||
"        Whilst recorded the data is published publicly. If you wish to edit "
 | 
			
		||||
"any information on this data, the data needs\n"
 | 
			
		||||
"        to be unrecorded first. Do not forget to record it afterwards, "
 | 
			
		||||
"again.\n"
 | 
			
		||||
"        "
 | 
			
		||||
msgstr ""
 | 
			
		||||
"\n"
 | 
			
		||||
"Verzeichnete Daten sind öffentlich einsehbar. Wenn Sie Informationen "
 | 
			
		||||
"überarbeiten möchten muss dieser Datensatz zunächst entzeichnet werden. "
 | 
			
		||||
"Vergessen Sie nicht ihn anschließend wieder zu verzeichnen.\n"
 | 
			
		||||
" "
 | 
			
		||||
 | 
			
		||||
#: templates/form/table/generic_table_form_body.html:24
 | 
			
		||||
msgid "Fields with * are required."
 | 
			
		||||
msgstr "* sind Pflichtfelder."
 | 
			
		||||
@ -2546,11 +2580,11 @@ msgstr "Administratoren verwalten die Teamdaten und Mitglieder"
 | 
			
		||||
msgid "Selected admin ({}) needs to be a member of this team."
 | 
			
		||||
msgstr "Gewählter Administrator ({}) muss ein Mitglied des Teams sein."
 | 
			
		||||
 | 
			
		||||
#: user/forms.py:291 user/templates/user/team/index.html:51
 | 
			
		||||
#: user/forms.py:291 user/templates/user/team/index.html:54
 | 
			
		||||
msgid "Edit team"
 | 
			
		||||
msgstr "Team bearbeiten"
 | 
			
		||||
 | 
			
		||||
#: user/forms.py:323 user/templates/user/team/index.html:58
 | 
			
		||||
#: user/forms.py:323 user/templates/user/team/index.html:50
 | 
			
		||||
msgid "Leave team"
 | 
			
		||||
msgstr "Team verlassen"
 | 
			
		||||
 | 
			
		||||
@ -2640,7 +2674,7 @@ msgstr "Neues Team hinzufügen"
 | 
			
		||||
msgid "Members"
 | 
			
		||||
msgstr "Mitglieder"
 | 
			
		||||
 | 
			
		||||
#: user/templates/user/team/index.html:54
 | 
			
		||||
#: user/templates/user/team/index.html:57
 | 
			
		||||
msgid "Remove team"
 | 
			
		||||
msgstr "Team entfernen"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								templates/form/recorded_no_edit.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								templates/form/recorded_no_edit.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
{% load i18n fontawesome_5 %}
 | 
			
		||||
 | 
			
		||||
<div class="p-5 col-sm-12">
 | 
			
		||||
    <h4>
 | 
			
		||||
        <span class="registered-bookmark">
 | 
			
		||||
            {% fa5_icon 'bookmark' %}
 | 
			
		||||
        </span>
 | 
			
		||||
        <span>
 | 
			
		||||
            {% trans 'This data is recorded' %}
 | 
			
		||||
        </span>
 | 
			
		||||
    </h4>
 | 
			
		||||
    <hr>
 | 
			
		||||
    <article>
 | 
			
		||||
        {% blocktrans %}
 | 
			
		||||
        Whilst recorded the data is published publicly. If you wish to edit any information on this data, the data needs
 | 
			
		||||
        to be unrecorded first. Do not forget to record it afterwards, again.
 | 
			
		||||
        {% endblocktrans %}
 | 
			
		||||
    </article>
 | 
			
		||||
</div>
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user