From f6fe888087f9a11e42460dd7a6025bf2ea9c7119 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 2 Apr 2026 12:44:59 +0200 Subject: ✨ sites - relations between sites: forms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- archaeological_operations/admin.py | 1 + archaeological_operations/forms.py | 27 +++++++++++++++++++++++++++ archaeological_operations/models.py | 10 ++++++++++ archaeological_operations/urls.py | 8 ++++++++ archaeological_operations/views.py | 6 ++++++ 5 files changed, 52 insertions(+) diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index 913ed74ea..8d08696ea 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -150,6 +150,7 @@ class RelationTypeAdmin(GeneralTypeAdmin): admin_site.register(models.RelationType, RelationTypeAdmin) +admin_site.register(models.SiteRelationType, RelationTypeAdmin) class RecordQualityTypeAdmin(GeneralTypeAdmin): diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 79e265e93..bb62ad8d1 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -432,6 +432,33 @@ RecordRelationsFormSet.form_admin_name = _("Operation - Relations") RecordRelationsFormSet.form_slug = "operation-relations" +class SiteRecordRelationsForm(RecordRelationsForm): + current_model = models.SiteRelationType + current_related_model = models.ArchaeologicalSite + associated_models = { + "right_record": models.ArchaeologicalSite, + "relation_type": models.SiteRelationType, + } + ERROR_MISSING = _("You should select an archaeological site and a relation type.") + ERROR_SAME = _("An archaeological site cannot be related to himself.") + + right_record = forms.IntegerField( + label=_("Archaeological site"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-archaeologicalsite'), + associated_model=models.ArchaeologicalSite), + validators=[valid_id(models.ArchaeologicalSite)], required=False) + + + +SiteRecordRelationsFormSet = formset_factory( + SiteRecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase +) +SiteRecordRelationsFormSet.form_label = _("Archaeological site - Relations") +RecordRelationsFormSet.form_admin_name = _("Archaeological site - Relations") +RecordRelationsFormSet.form_slug = "archaeologicalsite-recordrelations" + + class OpeSiteRelationsForm(ManageOldType): associated_models = {'right_record': models.ArchaeologicalSite} diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 1912bc964..a3fe2ea3f 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -954,6 +954,16 @@ class ArchaeologicalSite( True, ), ] + actions += [ + ( + reverse("site-relations-modify", args=[self.pk]), + _("Modify sites relations"), + "fa fa-retweet", + _("sites"), + "", + True, + ), + ] actions += [ ( reverse("site-operation-relations-modify", args=[self.pk, window_id]), diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py index 2af502f9f..31930fbd9 100644 --- a/archaeological_operations/urls.py +++ b/archaeological_operations/urls.py @@ -351,6 +351,14 @@ urlpatterns = [ )(views.operation_site_modify_relations), name="operation-site-relations-modify", ), + path( + "site-relations-modify/)/", + check_permissions( + ["archaeological_operations.change_archaeologicalsite", + "archaeological_operations.change_own_archaeologicalsite"] + )(views.site_modify_relations), + name="site-relations-modify", + ), path( "site-operation-relations-modify//", check_permissions( diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 3449290e0..f2117c747 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -593,6 +593,12 @@ operation_modify_relations = get_relation_modify( ) +site_modify_relations = get_relation_modify( + models.ArchaeologicalSite, models.SiteRecordRelations, + forms.SiteRecordRelationsFormSet, "site-relations-modify" +) + + RELATION_LIMIT = 50 -- cgit v1.2.3