summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-02-19 15:58:49 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-04-16 16:42:32 +0200
commit9268bb26e86b9b44ce6520bb1a9120796cfc32d6 (patch)
tree22a7f9f892477fdf46d2064f7d2daa666bd9808f /ishtar_common/forms_common.py
parentf3ad0273186a61f5ca73a7845467f52c732f8d23 (diff)
downloadIshtar-9268bb26e86b9b44ce6520bb1a9120796cfc32d6.tar.bz2
Ishtar-9268bb26e86b9b44ce6520bb1a9120796cfc32d6.zip
✨ Quick edit form for biographical notes
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py71
1 files changed, 66 insertions, 5 deletions
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")