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

AO requirement implementations - frontend

parent 26c8fa72
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ import djhacker
import dal.autocomplete
from django import forms
from django.core.exceptions import ValidationError
from webpack_loader.loader import WebpackLoader
from .models import Contract, ContracteeSignature, SigneeSignature
......@@ -45,31 +46,70 @@ class SigneeAdminForm(forms.ModelForm):
"shared/admin_signee_form.js",
)
def clean(self):
cleaned_data = super().clean()
if cleaned_data.get("entity_type") == "natural_person":
if cleaned_data.get("ico_number") is not None:
raise ValidationError({"ico_number": "IČO nesmí být pro fyzické osoby definováno."})
if cleaned_data.get("department") is not None:
raise ValidationError({"department": "Organizační složka nesmí být pro fyzické osoby definována."})
if cleaned_data.get("date_of_birth") is None:
raise ValidationError({"date_of_birth": "Datum narození musí pro fyzické osoby být definováno."})
if cleaned_data.get("entity_type") == "business_natural_person":
if cleaned_data.get("ico_number") is None:
raise ValidationError({"ico_number": "IČO musí být pro podnikající fyzické osoby definováno."})
if cleaned_data.get("department") is not None:
raise ValidationError({"department": "Organizační složka nesmí být pro podnikající fyzické osoby definována."})
if cleaned_data.get("date_of_birth") is not None:
raise ValidationError({"date_of_birth": "Datum narození nesmí pro podnikající fyzické osoby být definováno."})
if cleaned_data.get("entity_type") == "legal_entity":
if cleaned_data.get("ico_number") is None:
raise ValidationError({"ico_number": "IČO musí být pro právnické osoby definováno."})
if cleaned_data.get("date_of_birth") is not None:
raise ValidationError({"date_of_birth": "Datum narození nesmí pro právnické osoby být definováno."})
return cleaned_data
# BEGIN Autocompleted Contract fields
for foreign_key_field in (
Contract.filing_area,
Contract.primary_contract,
):
djhacker.formfield(
foreign_key_field,
Contract.primary_contract,
forms.ModelChoiceField,
widget=dal.autocomplete.ModelSelect2(
url="contracts:select2_djhacker_contract_autocomplete"
)
)
djhacker.formfield(
Contract.filing_area,
forms.ModelChoiceField,
widget=dal.autocomplete.ModelSelect2(
url="contracts:select2_djhacker_contract_filing_area_autocomplete"
)
)
for many_to_many_field in (
Contract.types,
djhacker.formfield(
Contract.issues,
):
forms.ModelMultipleChoiceField,
widget=dal.autocomplete.ModelSelect2Multiple(
url="contracts:select2_djhacker_contract_issue_autocomplete"
)
)
djhacker.formfield(
many_to_many_field,
Contract.types,
forms.ModelMultipleChoiceField,
widget=dal.autocomplete.ModelSelect2Multiple(
url="contracts:select2_djhacker_contract_autocomplete"
url="contracts:select2_djhacker_contract_type_autocomplete"
)
)
......
......@@ -289,9 +289,9 @@ class Contract(models.Model):
created_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name="uploaded_contracts",
verbose_name="Vytvořena uživatelem",
help_text="Informace není veřejně přístupná. Pokud vytváříš novou smlouvu, budeš to ty.",
......
......@@ -45,8 +45,13 @@
<td class="w-4/5 !p-2.5">{{ contract.summary }}</td>
</tr>
<tr>
<td class="w-1/5 !p-2.5">Právní stav</td>
<td class="w-4/5 !p-2.5">{{ contract.get_legal_state_display }}</td>
<td class="w-1/5 !p-2.5">Je platná</td>
<td class="w-4/5 !p-2.5">
<i
class="{% if contract.legal_state == contract.LegalStates.VALID %}ico--checkmark{% else %}ico--cross{% endif %} __tooltipped"
aria-label="{{ contract.get_legal_state_display }}"
></i>
</td>
</tr>
<tr>
<td class="w-1/5 !p-2.5">Soubory</td>
......@@ -310,12 +315,12 @@
<div class="mb-1">
{{ signature.signee.get_entity_type_display }}
{% if signature.signee.entity_type == signature.signee.EntityTypes.NATURAL_PERSON %}
{% if signature.signee.entity_type == signature.signee.EntityTypes.NATURAL_PERSON or signature.signee.entity_type == signature.signee.EntityTypes.BUSINESS_NATURAL_PERSON %}
<span class="text-gray-300">(zobrazujeme pouze obec)</span>
{% endif %}
</div>
{% if signature.signee.entity_type == signature.signee.EntityTypes.NATURAL_PERSON %}
{% if signature.signee.entity_type == signature.signee.EntityTypes.LEGAL_ENTITY or signature.signee.entity_type == signature.signee.EntityTypes.OTHER %}
{{ signature.signee.address_street_with_number }}<br>
{{ signature.signee.address_zip }} {{ signature.signee.address_district }}<br>
{{ signature.signee.get_address_country_display }}<br>
......
......@@ -13,6 +13,21 @@ urlpatterns = [
dal.autocomplete.Select2QuerySetView.as_view(model=models.Contract),
name="select2_djhacker_contract_autocomplete",
),
path(
"contracts/issues/autocomplete",
dal.autocomplete.Select2QuerySetView.as_view(model=models.ContractIssue),
name="select2_djhacker_contract_issue_autocomplete",
),
path(
"contracts/filing-areas/autocomplete",
dal.autocomplete.Select2QuerySetView.as_view(model=models.ContractFilingArea),
name="select2_djhacker_contract_filing_area_autocomplete",
),
path(
"contracts/types/autocomplete",
dal.autocomplete.Select2QuerySetView.as_view(model=models.ContractType),
name="select2_djhacker_contract_type_autocomplete",
),
path(
"contracts/signees/signatures/autocomplete",
dal.autocomplete.Select2QuerySetView.as_view(model=models.SigneeSignature),
......
......@@ -7,22 +7,23 @@ const fieldDepartmentValues = new Set([
$(window).ready(
() => {
let isPhysicalPerson = ($("#id_entity_type").find(":selected").val() === "natural_person");
let isNaturalPerson = ($("#id_entity_type").find(":selected").val() === "natural_person");
let isEmpty = ($("#id_entity_type").find(":selected").val() === "");
$(".field-date_of_birth").
css(
"display",
(
(!isEmpty && isPhysicalPerson) ?
(isNaturalPerson) ?
"block" : "none"
)
);
$(".field-ico_number").
css(
"display",
(
(!isEmpty && !isPhysicalPerson) ?
(!isEmpty && !isNaturalPerson) ?
"block" : "none"
)
);
......@@ -36,17 +37,21 @@ $(window).ready(
)
);
if (!isNaturalPerson && !isEmpty) $("#id_date_of_birth").val("");
if (isNaturalPerson) $("#id_ico_number").val("");
if (!fieldDepartmentValues.has($("#id_entity_type").find(":selected").val()) && !isEmpty) $("#id_department").val("");
$("#id_entity_type").on(
"change",
event => {
isEmpty = ($(event.target).val() === "");
isPhysicalPerson = ($(event.target).val() === "natural_person");
isNaturalPerson = ($(event.target).val() === "natural_person");
$(".field-date_of_birth").
css(
"display",
(
(!isEmpty && isPhysicalPerson) ?
(!isEmpty && isNaturalPerson) ?
"block" : "none"
)
);
......@@ -54,7 +59,7 @@ $(window).ready(
css(
"display",
(
(!isEmpty && !isPhysicalPerson) ?
(!isEmpty && !isNaturalPerson) ?
"block" : "none"
)
);
......@@ -67,6 +72,10 @@ $(window).ready(
"block" : "none"
)
);
if (!isNaturalPerson && !isEmpty) $("#id_date_of_birth").val("");
if (isNaturalPerson) $("#id_ico_number").val("");
if (!fieldDepartmentValues.has($(event.target).val()) && !isEmpty) $("#id_department").val("");
}
);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment