From dfda4645ceb031852d3d24ba74e4b4061bfd9f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Wed, 1 Mar 2023 23:59:36 +0100 Subject: [PATCH] finish implementing AO requirements - separate approvals, autofill dates + notices, ares error handling --- contracts/admin.py | 24 ++++++++++++++--- contracts/models.py | 15 +++++++++-- static_src/admin/contract_form.js | 43 +++++++++++++++++++++++++++++++ static_src/admin/signee_form.js | 15 +++++++++++ 4 files changed, 92 insertions(+), 5 deletions(-) diff --git a/contracts/admin.py b/contracts/admin.py index 1e7ecc2..d117abe 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -130,9 +130,14 @@ class ContractAdmin(MarkdownxGuardedModelAdmin): ] if request.user.is_superuser or request.user.has_perm("approve", self): - fieldsets[0][1]["fields"].insert( - fieldsets[0][1]["fields"].index("primary_contract"), - "approval_state", + fieldsets.insert( + 0, + ( + "Schválení", + { + "fields": ["approval_state"] + } + ), ) return fieldsets @@ -141,6 +146,19 @@ class ContractAdmin(MarkdownxGuardedModelAdmin): if obj.created_by is None: obj.created_by = request.user + if obj.valid_start_date is None: + last_signature_date = None + + for signature_set in ( + obj.contractee_signatures.all(), + obj.signee_signatures.all() + ): + for signature in signature_set: + if last_signature_date is None or last_signature_date < signature.date: + last_signature_date = signature.date + + obj.valid_start_date = last_signature_date + super().save_model(request, obj, form, change) diff --git a/contracts/models.py b/contracts/models.py index 33601ce..55cfefb 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -330,7 +330,7 @@ class Contract(models.Model): verbose_name="Stav schválení", help_text=( "Může měnit jen schvalovatel. Pokud je smlouva " - "veřejná, se stavem \"Přijatá\" se vypustí ven." + "veřejná, se stavem \"Schválená\" se vypustí ven." ), ) @@ -493,7 +493,18 @@ class Contract(models.Model): ).all() def __str__(self) -> str: - return self.name + result = "" + + if self.public_state == Contract.PublicStates.YES: + result += "SCHVÁLENÁ - " + elif self.public_state == Contract.PublicStates.NO: + result += "NESCHVÁLENÁ - " + else: + result += "KE ZPRACOVÁNÍ - " + + result += self.name + + return result class ContractFile(NameStrMixin, models.Model): diff --git a/static_src/admin/contract_form.js b/static_src/admin/contract_form.js index edfdaf9..0cbcbf7 100644 --- a/static_src/admin/contract_form.js +++ b/static_src/admin/contract_form.js @@ -1,7 +1,13 @@ import $ from "jquery"; +import alertify from "alertifyjs"; +import "alertifyjs/build/css/alertify.min.css"; + $(window).ready( () => { + let startDateWarningDismissed = false; + let endDateWarningDismissed = false; + $(".field-publishing_rejection_comment"). css( "display", @@ -24,5 +30,42 @@ $(window).ready( ); } ); + + $( + "#contract_form .submit-row input[name=\"_save\"]," + + "#contract_form .submit-row input[name=\"_addanother\"]," + + "#contract_form .submit-row input[name=\"_continue\"]" + ).on( + "click", + event => { + if (!startDateWarningDismissed && $("#id_valid_start_date").val() === "") { + event.preventDefault(); + + alertify.alert( + "Začátek platnosti není zadán", + `Začátek platnosti nebyl uveden. Pokud ho necháš tak, jak je, +bude automaticky vyplněn podle posledního data +podpisu smluvních stran. Pokud podpisy neexistují, +pole zůstane prázdné.`, + () => { + startDateWarningDismissed = true; + } + ); + } + + if (!endDateWarningDismissed && $("#id_valid_end_date").val() === "") { + event.preventDefault(); + + alertify.alert( + "Konec platnosti není zadán", + `Konec platnosti nebyl uveden. Pokud ho necháš tak, jak je, +smlouva bude evidována jako na dobu neurčitou.`, + () => { + endDateWarningDismissed = true; + } + ); + } + } + ) } ); diff --git a/static_src/admin/signee_form.js b/static_src/admin/signee_form.js index e8302df..4d0acae 100644 --- a/static_src/admin/signee_form.js +++ b/static_src/admin/signee_form.js @@ -1,5 +1,7 @@ import $ from "jquery"; + import alertify from "alertifyjs"; +import "alertifyjs/build/css/alertify.min.css"; const fieldDepartmentValues = new Set([ "legal_entity", @@ -105,6 +107,19 @@ $(window).ready( "text/xml" ); + const errors = formattedAresData.getElementsByTagName("are:Error"); + + if (errors.length !== 0) { + alertify.error("Chyba při načítní dat z ARES. Je IČO zadáno správně?"); + + console.warn( + "Error(s) loading ARES data: ", + errors + ); + + return; + } + let streetResult = ""; const streetElements = formattedAresData.getElementsByTagName("dtt:Nazev_ulice"); -- GitLab