summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/forms.py10
-rw-r--r--ishtar_common/forms_common.py71
-rw-r--r--ishtar_common/urls.py5
-rw-r--r--ishtar_common/utils.py6
-rw-r--r--ishtar_common/views.py3
5 files changed, 87 insertions, 8 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index a40278c87..b201cf888 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -308,6 +308,11 @@ class BasicFindForm(CustomForm, ManageOldType):
"checked_type",
"check_date",
]
+ extra_form_modals = [
+ "biographicalnote",
+ "person",
+ "organization",
+ ]
PROFILE_FILTER = {
"museum": [
"museum_id_prefix",
@@ -385,7 +390,8 @@ class BasicFindForm(CustomForm, ManageOldType):
museum_donor = forms.IntegerField(
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-biographicalnote'),
- associated_model=BiographicalNote),
+ associated_model=BiographicalNote,
+ new=True),
label=_("Donor, testator or vendor"),
required=False
)
@@ -393,7 +399,7 @@ class BasicFindForm(CustomForm, ManageOldType):
label=_("Collection"), required=False, choices=[]
)
museum_former_collection = widgets.Select2MultipleField(
- model=BiographicalNote, label=_("Former collections"), required=False, remote=True)
+ model=BiographicalNote, label=_("Former collections"), required=False, remote=True, new=True)
museum_inventory_entry_year = forms.IntegerField(
label=_("Inventory entry year"), required=False, min_value=0, max_value=2100
)
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")
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 5ce9861d1..955563875 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -410,6 +410,11 @@ urlpatterns += [
name="show-biographicalnote",
),
url(
+ r"new-biographicalnote/(?:(?P<parent_name>[^/]+)/)?(?:(?P<limits>[^/]+)/)?$",
+ views.new_biographical_note,
+ name="new-biographicalnote",
+ ),
+ url(
r"department-by-state/(?P<state_id>.+)?$",
views.department_by_state,
name="department-by-state",
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 4043e48cf..d41e07e97 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -62,7 +62,7 @@ from django.core.exceptions import SuspiciousOperation, ObjectDoesNotExist, \
ValidationError
from django.core.files import File
from django.core.files.storage import FileSystemStorage
-from django.core.validators import EMPTY_VALUES
+from django.core.validators import EMPTY_VALUES, MaxValueValidator
from django.db import models
from django.db.models import Q
from django.http import HttpResponseRedirect
@@ -1268,6 +1268,10 @@ def format_int_float(values):
return new_values
+def max_value_current_year(value):
+ return MaxValueValidator(datetime.date.today().year)(value)
+
+
def create_slug(model, name, slug_attr="slug", max_length=100):
base_slug = slugify(name)
slug = base_slug[:max_length]
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 5ad14695f..84d038440 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1137,6 +1137,9 @@ get_person = get_item(models.Person, "get_person", "person",
callback=get_person_gdpr_log)
show_biographical_note = show_item(models.BiographicalNote, "biographicalnote")
+new_biographical_note = new_qa_item(
+ models.BiographicalNote, forms.BiographicalNoteForm, page_name=_("New biographical note")
+)
get_person_for_account = get_item(
models.Person,