diff options
| -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: | 
