diff options
-rw-r--r-- | archaeological_finds/forms.py | 15 | ||||
-rw-r--r-- | ishtar_common/urls.py | 5 | ||||
-rw-r--r-- | ishtar_common/views.py | 22 |
3 files changed, 40 insertions, 2 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 27c306e30..72dc6bfd2 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -95,6 +95,7 @@ from archaeological_context_records.forms import PeriodSelect from ishtar_common.models import ( Area, + BiographicalNote, get_current_profile, IshtarUser, OperationType, @@ -217,6 +218,7 @@ class BasicFindForm(CustomForm, ManageOldType): "functional_area", "technical_area", "technical_processe", + "museum_former_collection", ] associated_models = { "material_type": models.MaterialType, @@ -235,6 +237,8 @@ class BasicFindForm(CustomForm, ManageOldType): "museum_collection": models.MuseumCollection, "museum_inventory_conformity": models.InventoryConformity, "museum_original_repro": models.OriginalReproduction, + "museum_donor": BiographicalNote, + "museum_former_collection": BiographicalNote, #'collection': Warehouse, } field_order = [ @@ -383,11 +387,18 @@ class BasicFindForm(CustomForm, ManageOldType): label=_("Museum entry date (end)"), widget=DatePicker, required=False ) museum_entry_date_comment = forms.CharField(label=_("Comment on museum entry date"), required=False) - #museum_donor = + museum_donor = forms.IntegerField( + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-biographicalnote'), + associated_model=BiographicalNote), + label=_("Donor, testator or vendor"), + required=False + ) museum_collection = forms.ChoiceField( label=_("Collection"), required=False, choices=[] ) - # museum_former_collection = + museum_former_collection = widgets.Select2MultipleField( + model=BiographicalNote, label=_("Former collections"), required=False, remote=True) museum_inventory_entry_year = forms.IntegerField( label=_("Inventory entry year"), required=False, min_value=0, max_value=2100 ) diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 85d56aeb7..86d10969d 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -475,6 +475,11 @@ urlpatterns += [ views.autocomplete_organization, name="autocomplete-organization", ), + url( + r"autocomplete-biographical-note/$", + views.autocomplete_biographical_note, + name="autocomplete-biographicalnote" + ), url(r"changelog/(?:(?P<page>\d+)/)?", views.ChangelogView.as_view(), name="changelog"), url(r"person-merge/(?:(?P<page>\d+)/)?$", views.person_merge, name="person_merge"), url( diff --git a/ishtar_common/views.py b/ishtar_common/views.py index d5b2f369f..bee4d6628 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1093,6 +1093,28 @@ def autocomplete_author(request): return HttpResponse(data, content_type="text/plain") +def autocomplete_biographical_note(request): + if not request.user.has_perm("ishtar_common.view_person", models.Person): + return HttpResponse("[]", content_type="text/plain") + q = request.GET.get("term", "") + limit = request.GET.get("limit", 20) + try: + limit = int(limit) + except ValueError: + return HttpResponseBadRequest() + query = Q() + for q in q.split(" "): + qu = ( + Q(last_name__unaccent__icontains=q) + | Q(first_name__unaccent__icontains=q) + | Q(denomination__unaccent__icontains=q) + ) + query = query & qu + users = models.BiographicalNote.objects.filter(query).distinct()[:limit] + data = json.dumps([{"id": user.pk, "value": str(user)} for user in users]) + return HttpResponse(data, content_type="text/plain") + + new_person = new_qa_item(models.Person, forms.PersonForm, page_name=_("New person"), callback=get_person_gdpr_log) modify_person = modify_qa_item(models.Person, forms.PersonForm, callback=get_person_gdpr_log) |