Skip to content
Snippets Groups Projects
Commit 954380ee authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

fix signee validation

parent 08b85d70
No related branches found
No related tags found
No related merge requests found
Pipeline #16749 passed
......@@ -18,10 +18,10 @@ from rangefilter.filters import DateRangeFilter
from shared.admin import FieldsetInlineOrder, MarkdownxGuardedModelAdmin
from .forms import (
AtLeastOneRequiredInlineFormSet,
ContractAdminForm,
ContractFileAdminForm,
SigneeAdminForm,
SingnatureRepresentativeFormSet,
)
from .models import (
Contract,
......@@ -124,7 +124,13 @@ class ContractFileAdmin(
class ContracteeSignatureRepresentativeInline(NestedStackedInline):
model = ContracteeSignatureRepresentative
extra = 1
formset = AtLeastOneRequiredInlineFormSet
formset = SingnatureRepresentativeFormSet
def get_formset(self, request, obj=None, **kwargs):
formset = super().get_formset(request, obj, **kwargs)
formset.request = request
return formset
class ContracteeSignatureInline(NestedStackedInline):
......
......@@ -6,7 +6,13 @@ from webpack_loader.loader import WebpackLoader
from .models import Contract, ContracteeSignature, SigneeSignature
class AtLeastOneRequiredInlineFormSet(BaseInlineFormSet):
class SingnatureRepresentativeFormSet(BaseInlineFormSet):
def _construct_form(self, i, **kwargs):
form = super()._construct_form(i, **kwargs)
form.request = self.request
return form
def clean(self):
"""Check that at least one item has been entered."""
......@@ -15,9 +21,45 @@ class AtLeastOneRequiredInlineFormSet(BaseInlineFormSet):
if any(self.errors):
return
signature_position = None
signature_id = None
excluded_from_check = False
for form in self.forms:
for key, value in form.request.POST.items():
attempted_signature_position = key.replace(
"contractee_signatures-", ""
).replace("-id", "")
if (
attempted_signature_position.isnumeric()
and key.startswith("contractee_signatures-")
and key.endswith("-id")
):
signature_position = int(attempted_signature_position)
signature_id = int(value)
if signature_id is None or signature_id is None:
break
signature = form.cleaned_data.get("signature")
if signature is not None:
if (
signature.id == signature_id
and form.request.POST.get(
f"contractee_signatures-{signature_position}-DELETE"
)
== "on"
):
excluded_from_check = True
if excluded_from_check:
return
if not any(
cleaned_data and not cleaned_data.get("DELETE", False)
for cleaned_data in self.cleaned_data
form.cleaned_data and not form.cleaned_data.get("DELETE", False)
for form in self.forms
):
raise forms.ValidationError("Vyžadován aspoň jeden záznam.")
......
......@@ -10,9 +10,8 @@ from django.conf import settings
from django.core.files import File
from django.core.management.base import BaseCommand
from django.db import models
from postal.parser import parse_address
from git import Repo
from postal.parser import parse_address
from ...models import (
Contract,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment