diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-10-12 11:38:13 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:23:18 +0100 |
commit | 5bc393a2138befe7ad7e17565979ae571d632f45 (patch) | |
tree | dc91a1f0efc1a475345acacfa6aba384629da16c | |
parent | e9193d8d29e9b18e0d553302f3e94053021fc622 (diff) | |
download | Ishtar-5bc393a2138befe7ad7e17565979ae571d632f45.tar.bz2 Ishtar-5bc393a2138befe7ad7e17565979ae571d632f45.zip |
Geo: clean old methods - fix geodata post treatments on geo form - quick add geo action
-rw-r--r-- | archaeological_operations/models.py | 4 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 64 | ||||
-rw-r--r-- | ishtar_common/views.py | 10 |
3 files changed, 36 insertions, 42 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 045b20fed..0b21df533 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -1813,6 +1813,10 @@ class Operation( True, ), ] + actions + + can_add_geo = self.can_do(request, "add_geovectordata") + if can_add_geo: + actions.append(self.get_add_geo_action()) can_add_cr = self.can_do(request, "add_contextrecord") if can_add_cr and not is_locked: start = actions diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index a7dc8464e..1818c79f6 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -2470,12 +2470,6 @@ class GeoVectorData(Imported, OwnPerms): return [round(x, rounded), round(y, rounded)] return [x, y] - def most_precise_geo(self): - if self.multi_polygon: - return "multi_polygon" - if self.point_2d: - return "point" - def _geojson_serialize(self, geom_attr): if not hasattr(self, geom_attr): return "{}" @@ -2659,10 +2653,17 @@ def geodata_attached_changed(sender, **kwargs): instance = kwargs.get("instance", None) model = kwargs.get("model", None) pk_set = kwargs.get("pk_set", None) + action = kwargs.get("action", None) if not instance or not model: return + if model != GeoVectorData: # reverse post attributes + instance_pk = instance.pk + instance = model.objects.get(pk=list(pk_set)[0]) + model = GeoVectorData + pk_set = set([instance_pk]) + if action == "post_add": geodata_attached_post_add(model, instance, pk_set) elif action == "post_remove": @@ -2690,6 +2691,20 @@ class GeographicItem(models.Model): class Meta: abstract = True + def get_add_geo_action(self): + return ( + reverse("create-pre-geo", args=[ + self.__class__._meta.app_label, + self.__class__._meta.model_name, + self.pk + ]), + _("Add geographic item"), + "fa fa-plus", + _("geo."), + "", + False + ) + def geodata_child_item_queries(self): """ :return: list of queries associated geographically with this item. When @@ -3642,9 +3657,9 @@ class DynamicRequest: class GeoItem(GeographicItem): + # gis - to be removed GEO_SOURCE = (("T", _("Town")), ("P", _("Precise")), ("M", _("Polygon"))) - # gis x = models.FloatField(_("X"), blank=True, null=True) y = models.FloatField(_("Y"), blank=True, null=True) z = models.FloatField(_("Z"), blank=True, null=True) @@ -3756,41 +3771,6 @@ class GeoItem(GeographicItem): return [round(x, 5), round(y, 5)] return [x, y] - def most_precise_geo(self): - if self.point_source == "M": - return "multi_polygon" - current_source = str(self.__class__._meta.verbose_name) - if self.multi_polygon_source_item == current_source and ( - self.multi_polygon_source == "P" - or (self.point_source_item != current_source and self.point_source != "P") - ): - return "multi_polygon" - if self.point_source_item == current_source and self.point_source == "P": - return "point" - if self.multi_polygon_source == "P": - return "multi_polygon" - if self.point_source == "P": - return "point" - if self.multi_polygon: - return "multi_polygon" - if self.point_2d: - return "point" - - def geo_point_source(self): - if not self.point_source: - return "" - return "{} - {}".format( - dict(self.GEO_SOURCE)[self.point_source], self.point_source_item - ) - - def geo_polygon_source(self): - if not self.multi_polygon_source: - return "" - return "{} - {}".format( - dict(self.GEO_SOURCE)[self.multi_polygon_source], - self.multi_polygon_source_item, - ) - def _geojson_serialize(self, geom_attr): if not hasattr(self, geom_attr): return "" diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 8c443a378..f7963c929 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -2786,6 +2786,16 @@ class GeoFormMixin(IshtarMixin, LoginRequiredMixin): def get_success_url(self): if not self.back_url: + for rel_model_key in models.GeoVectorData.RELATED_MODELS: + # should in a logic order from largest to close + # town before operation, operation before context record... + rel = getattr(self.object, rel_model_key) + if rel.count(): + rel_item = rel.all()[0] + if not hasattr(rel_item, "SLUG"): + continue + return reverse("display-item", kwargs={"item_type": rel_item.SLUG, + "pk": rel_item.pk}) return reverse("edit-geo", kwargs={"pk": self.object.pk}) back_url = self.back_url if self.find_id: |