From 8475c8d481208f1fa501de46e35f5a43fcddce4c Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 29 Sep 2022 18:05:08 +0200 Subject: Geodata: delete action --- ishtar_common/views.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'ishtar_common/views.py') 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