summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-09-29 18:05:08 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:23:18 +0100
commit8475c8d481208f1fa501de46e35f5a43fcddce4c (patch)
treec47ea21f2c4be849406d1d1ae40b34b560424504 /ishtar_common/views.py
parentd2907db96fdb4b5cf3c26272923fbb755ca1d970 (diff)
downloadIshtar-8475c8d481208f1fa501de46e35f5a43fcddce4c.tar.bz2
Ishtar-8475c8d481208f1fa501de46e35f5a43fcddce4c.zip
Geodata: delete action
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py70
1 files changed, 70 insertions, 0 deletions
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")