From 4ab3725af5ba8f12d69cbc1702baa13e9773880e Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 29 Sep 2022 18:05:08 +0200 Subject: Geodata: delete action --- .../templates/ishtar/blocks/sheet_geographic.html | 12 ++- .../templates/ishtar/forms/geo_delete_form.html | 118 +++++++++++++++++++++ ishtar_common/urls.py | 7 ++ ishtar_common/views.py | 70 ++++++++++++ 4 files changed, 204 insertions(+), 3 deletions(-) create mode 100644 ishtar_common/templates/ishtar/forms/geo_delete_form.html diff --git a/ishtar_common/templates/ishtar/blocks/sheet_geographic.html b/ishtar_common/templates/ishtar/blocks/sheet_geographic.html index 295c7ef46..8b6255f26 100644 --- a/ishtar_common/templates/ishtar/blocks/sheet_geographic.html +++ b/ishtar_common/templates/ishtar/blocks/sheet_geographic.html @@ -11,12 +11,13 @@ {% trans "Origin" %} {% trans "Provider" %} {% trans "Comment" %} + {% if permission_change_geo %} {% endif %} {% for geo in geo_item.geodata.all %} - {% if permission_change_geo %} - {% if geo|can_edit_item:request %}{% else %}–{% endif %} - {% endif %} + {% if permission_change_geo %} + {% if geo|can_edit_item:request %}{% else %}–{% endif %} + {% endif %} {% if geo.id == geo_item.main_geodata_id %}{% else %}–{% endif %} {% if geo.data_type %}{{ geo.data_type }}{% else %}-{% endif %} {{ geo.source_label }} @@ -25,6 +26,11 @@ {% if geo.origin %}{{ geo.origin }}{% else %}-{% endif %} {% if geo.provider %}{{ geo.provider }}{% else %}-{% endif %} {% if geo.comment %}{{ geo.comment }}{% else %}-{% endif %} + {% if permission_change_geo %} + + {% if geo|can_edit_item:request %}{% else %}–{% endif %} + {% endif %} {% endfor %} diff --git a/ishtar_common/templates/ishtar/forms/geo_delete_form.html b/ishtar_common/templates/ishtar/forms/geo_delete_form.html new file mode 100644 index 000000000..643e4d211 --- /dev/null +++ b/ishtar_common/templates/ishtar/forms/geo_delete_form.html @@ -0,0 +1,118 @@ +{% extends "base.html" %} +{% load i18n inline_formset verbose_names %} +{% block content %} +

{{page_name}}

+
{% csrf_token %} + +
+ {% block "warning_message" %} +
+
  + {% trans "Are you sure to want to delete this geographic item?" %} +

{% trans "No rollback is possible." %}

+
+
+ {% endblock %} + +
+
+ {{ object }} +
+
+ + + + + + + + + + + + + + + + + + + + {% if object.related_items_ishtar_common_town.count %} + + + + + {% endif %} + {% if object.related_items_archaeological_operations_operation.count %} + + + + + {% endif %} + {% if object.related_items_archaeological_operations_archaeologicalsite.count %} + + + + + {% endif %} + {% if object.related_items_archaeological_context_records_contextrecord.count %} + + + + + {% endif %} + {% if object.related_items_archaeological_finds_basefind.count %} + + + + + {% endif %} + {% if object.related_items_archaeological_warehouse_container.count %} + + + + + {% endif %} + {% if object.related_items_archaeological_warehouse_warehouse.count %} + + + + + {% endif %} +
{% trans "Name" %}{{object.name|default:'-'}}
{% trans "Source" %}{{object.source_label|default:'-'}}
{% trans "Origin" %}{{object.origin|default:'-'}}
{% trans "Data type" %}{{object.data_type|default:'-'}}
{% trans "Provider" %}{{object.provider|default:'-'}}
{% trans "Comment" %}{{object.comment|default:'-'}}
{% trans "Geographic item for these towns" %}
    + {% for item in object.related_items_ishtar_common_town.all %} +
  • {{item}}
  • {% endfor %} +
{% trans "Geographic item for these operations" %}
    + {% for item in object.related_items_archaeological_operations_operation.all %} +
  • {{item}}
  • {% endfor %} +
{% trans "Geographic item for these sites" %}
    + {% for item in object.related_items_archaeological_operations_archaeologicalsite.all %} +
  • {{item}}
  • {% endfor %} +
{% trans "Geographic item for these context records" %}
    + {% for item in object.related_items_archaeological_context_records_contextrecord.all %} +
  • {{item}}
  • {% endfor %} +
{% trans "Geographic item for these base finds" %}
    + {% for item in object.related_items_archaeological_finds_basefind.all %} +
  • {{item}}
  • {% endfor %} +
{% trans "Geographic item for these containers" %}
    + {% for item in object.related_items_archaeological_warehouse_container.all %} +
  • {{item}}
  • {% endfor %} +
{% trans "Geographic item for these operations" %}
    + {% for item in object.related_items_archaeological_warehouse_warehouse.all %} +
  • {{item}}
  • {% endfor %} +
+
+
+ +
+ {% block "footer" %} + + {% endblock %} + +
+{% endblock %} diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index b6ac71a9e..b7e5f46d1 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -595,6 +595,13 @@ urlpatterns += [ ), name="edit-geo", ), + url( + r"geo/delete/(?P\d+)/$", + check_rights(["change_geovectordata", "change_own_geovectordata"])( + views.GeoDeleteView.as_view() + ), + name="delete-geo", + ), url( r"^qa-not-available(?:/(?P[0-9a-z-]+))?/$", views.QANotAvailable.as_view(), diff --git a/ishtar_common/views.py b/ishtar_common/views.py index db05c74a1..8c443a378 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -2892,3 +2892,73 @@ class GeoCreateView(GeoFormMixin, CreateView): kwargs["geom_type"] = self.kwargs.get("geom_type") kwargs["user"] = self.request.user return kwargs + + +class GeoEditView(GeoFormMixin, UpdateView): + page_name = _("Geo item modification") + + def get_form_kwargs(self): + kwargs = super(GeoEditView, self).get_form_kwargs() + try: + geo = models.GeoVectorData.objects.get(pk=self.kwargs.get("pk")) + assert check_permission(self.request, "geo/edit", geo.pk) + except (AssertionError, models.GeoVectorData.DoesNotExist): + raise Http404() + initial = {} + + for k in ( + list(self.form_class.base_fields.keys()) + + models.GeoVectorData.RELATED_MODELS + ): + value = getattr(geo, k) + if hasattr(value, "all"): + value = ",".join([str(v.pk) for v in value.all().order_by("pk")]) + if hasattr(value, "pk"): + value = value.pk + initial[k] = value + + kwargs["main_items_fields"] = {} + kwargs["too_many"] = {} + LIMIT = 10 + for k in models.GeoVectorData.RELATED_MODELS: + kwargs["main_items_fields"][k] = [] + values = [] + for idx, related_item in enumerate(getattr(geo, k).all()): + if idx >= LIMIT: + if k not in kwargs["too_many"]: + kwargs["too_many"][k] = [] + kwargs["too_many"][k].append(related_item.pk) + continue + pk = str(related_item.pk) + values.append(pk) + key = "{}_{}_main_item".format(k, pk) + kwargs["main_items_fields"][k].append( + (key, "{} - {}".format(_("Main geo item for"), related_item)) + ) + if related_item.main_geodata == geo: + initial[key] = True + initial[k] = ",".join(values) + kwargs["initial"] = initial + kwargs["user"] = self.request.user + return kwargs + + +class GeoDeleteView(IshtarMixin, LoginRequiredMixin, DeleteView): + template_name = "ishtar/forms/geo_delete_form.html" + model = models.GeoVectorData + page_name = _("Delete geographic item") + + def get(self, request, *args, **kwargs): + self.back_url = request.GET.get("back_url", None) + return super().get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context_data = super().get_context_data(**kwargs) + if self.back_url: + context_data["back_url"] = self.back_url + return context_data + + def get_success_url(self): + if self.request.POST.get("back_url", None): + return self.request.POST.get("back_url", None) + return reverse("start") -- cgit v1.2.3