diff options
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 70 | 
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") | 
