summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/forms.py30
-rw-r--r--archaeological_finds/models_finds.py10
-rw-r--r--archaeological_finds/urls.py8
-rw-r--r--archaeological_finds/views.py6
4 files changed, 53 insertions, 1 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 727657fc2..fdb44d0ac 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -92,6 +92,10 @@ from ishtar_common.forms import (
GeoItemSelect,
)
from ishtar_common.forms_common import get_town_field
+from archaeological_operations.forms import (
+ RecordRelationsForm,
+ RecordRelationsFormSetBase,
+)
from archaeological_context_records.forms import DatingSelect
from ishtar_common.models import (
@@ -925,6 +929,32 @@ class ResultingFindsForm(CustomForm, ManageOldType):
return self.cleaned_data
+class FindRecordRelationsForm(RecordRelationsForm):
+ current_model = models.FindRelationType
+ current_related_model = models.Find
+ associated_models = {
+ "right_record": models.Find,
+ "relation_type": models.FindRelationType,
+ }
+ ERROR_MISSING = _("You should select a find and a relation type.")
+ ERROR_SAME = _("A find cannot be related to himself.")
+
+ right_record = forms.IntegerField(
+ label=_("Find"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-find'),
+ associated_model=models.Find),
+ validators=[valid_id(models.Find)], required=False)
+
+
+FindRecordRelationsFormSet = formset_factory(
+ FindRecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase
+)
+FindRecordRelationsFormSet.form_label = _("Find - Relations")
+FindRecordRelationsFormSet.form_admin_name = _("Find - Relations")
+FindRecordRelationsFormSet.form_slug = "find-recordrelations"
+
+
class QAFindFormMulti(MuseumForm, QAForm):
form_admin_name = _("Find - Quick action - Modify")
form_slug = "find-quickaction-modify"
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 99ad1b1ea..57f7a4f79 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -2924,7 +2924,7 @@ class Find(
# no particular rights: if you can view an item you can add it to your
# own basket
- actions = super(Find, self).get_extra_actions(request)
+ actions = super().get_extra_actions(request)
is_locked = hasattr(self, "is_locked") and self.is_locked(request.user)
profile = get_current_profile()
@@ -2932,6 +2932,14 @@ class Find(
if can_edit_find and not is_locked:
actions += [
(
+ reverse("find-relations-modify", args=[self.pk]),
+ _("Modify finds relations"),
+ "fa fa-retweet",
+ _("finds"),
+ "",
+ True,
+ ),
+ (
reverse("find-dating-add", args=[self.pk]),
_("Add dating"),
"fa fa-plus",
diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py
index d1520d4ba..b9cbb58f7 100644
--- a/archaeological_finds/urls.py
+++ b/archaeological_finds/urls.py
@@ -99,6 +99,14 @@ urlpatterns = [
),
name="find-dating-delete",
),
+ path(
+ "find-relations-modify/<int:pk>)/",
+ check_permissions(
+ ["archaeological_finds.change_find",
+ "archaeological_finds.change_own_find"]
+ )(views.find_modify_relations),
+ name="find-relations-modify",
+ ),
re_path(r"get-findbasket/$", views.get_find_basket, name="get-findbasket"),
re_path(
r"get-findbasket-write/$",
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index d11e820fa..541d1fc4e 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -63,6 +63,7 @@ from ishtar_common.views_item import (
get_autocomplete_queries,
get_autocomplete_query
)
+from archaeological_operations.views import get_relation_modify
from archaeological_operations.wizards import AdministrativeActDeletionWizard
from archaeological_finds import wizards
@@ -546,6 +547,11 @@ autocomplete_functionalarea = get_autocomplete_generic(models.FunctionalArea)
autocomplete_technicalarea = get_autocomplete_generic(models.TechnicalAreaType)
autocomplete_technicalprocess = get_autocomplete_generic(models.TechnicalProcessType)
+find_modify_relations = get_relation_modify(
+ models.Find, models.FindRecordRelations,
+ forms.FindRecordRelationsFormSet, "find-relations-modify"
+)
+
class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView):
template_name = "ishtar/form.html"