From 9268bb26e86b9b44ce6520bb1a9120796cfc32d6 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 19 Feb 2024 15:58:49 +0100 Subject: ✨ Quick edit form for biographical notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/forms_common.py | 71 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 5 deletions(-) (limited to 'ishtar_common/forms_common.py') diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 872571aad..81097ff2f 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -43,7 +43,7 @@ from django.contrib.auth.forms import ( from django.core import validators from django.core.exceptions import ObjectDoesNotExist from django.core.files import File -from django.core.validators import MaxValueValidator, MinValueValidator +from django.core.validators import MinValueValidator from django.forms.formsets import formset_factory from django.forms.models import BaseModelFormSet, BaseFormSet from django.shortcuts import reverse @@ -80,6 +80,7 @@ from ishtar_common.utils import ( is_downloadable, clean_session_cache, max_size_help, + max_value_current_year, reverse_coordinates, ) @@ -1388,6 +1389,70 @@ class PersonTypeForm(ManageOldType, forms.Form): self.fields["person_type"].help_text = models.PersonType.get_help() +class BiographicalNoteForm(ManageOldType, NewItemForm): + extra_form_modals = ["organization", "person"] + form_label = _("Identity") + associated_models = { + "organization": models.Organization, + "person": models.Person, + } + denomination = forms.CharField(label=_("Denomination"), max_length=300) + biography = forms.CharField(label=_("Biography"), max_length=300, required=False, widget=forms.Textarea) + last_name = forms.CharField(label=_("Last name"), max_length=300, required=False) + first_name = forms.CharField(label=_("First name"), max_length=300, required=False) + birth_year = forms.IntegerField( + label=_("Birth year"), + validators=[MinValueValidator(100), max_value_current_year], + required=False, + ) + death_year = forms.IntegerField( + label=_("Death year"), + validators=[MinValueValidator(100), max_value_current_year], + required=False, + ) + person = forms.IntegerField( + label=_("Person"), + widget=widgets.JQueryAutoComplete( + reverse_lazy("autocomplete-person"), + associated_model=models.Person, + new=True, + ), + validators=[models.valid_id(models.Person)], + required=False, + ) + organization = forms.IntegerField( + label=_("Organization"), + widget=widgets.JQueryAutoComplete( + reverse_lazy("autocomplete-organization"), + associated_model=models.Organization, + new=True, + ), + validators=[models.valid_id(models.Organization)], + required=False, + ) + + def save(self, user, item=None): + dct = self.cleaned_data + dct["history_modifier"] = user + for key in self.associated_models.keys(): + if key in dct: + if not dct[key]: + dct.pop(key) + else: + model = self.associated_models[key] + try: + dct[key] = model.objects.get(pk=dct[key]) + except model.DoesNotExist: + dct.pop(key) + if not item: + item = models.BiographicalNote.objects.create(**dct) + else: + for k in dct: + setattr(item, k, dct[k]) + item.save() + return item + + class AccountForm(IshtarForm): form_label = _("Account") associated_models = {"pk": models.Person} @@ -1901,10 +1966,6 @@ class AddDocumentTagForm(AddGenericForm): form_label = _("Document tag") -def max_value_current_year(value): - return MaxValueValidator(datetime.date.today().year)(value) - - class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): form_label = _("Documentation") form_admin_name = _("Document - 010 - General") -- cgit v1.2.3