diff options
Diffstat (limited to 'ishtar_common/utils.py')
| -rw-r--r-- | ishtar_common/utils.py | 96 | 
1 files changed, 54 insertions, 42 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 83627cafc..7a51936b1 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -497,8 +497,45 @@ def post_save_geo(sender, **kwargs):      current_source = "default"      if hasattr(instance.__class__, "_meta"):          current_source = unicode(instance.__class__._meta.verbose_name) -    if instance.point_source_item and \ -            instance.point_source_item != current_source:  # refetch + +    profile = get_current_profile() +    modified = False + +    if hasattr(instance, 'multi_polygon'): +        if instance.multi_polygon_source_item and \ +                instance.multi_polygon_source_item != current_source:  # refetch +            instance.multi_polygon = None +            instance.multi_polygon_source = None + +        if instance.multi_polygon and not instance.multi_polygon_source: +            # should be a db source +            instance.multi_polygon_source = 'P' +            instance.multi_polygon_source_item = current_source +            modified = True +        elif instance.multi_polygon_source != 'P': +            precise_poly = instance.get_precise_polygons() +            if precise_poly: +                poly, source_item = precise_poly +                instance.multi_polygon = poly +                instance.multi_polygon_source = 'P' +                instance.multi_polygon_source_item = source_item +                modified = True +            elif profile.use_town_for_geo: +                poly = instance.get_town_polygons() +                if poly: +                    poly, poly_source = poly +                    if poly != instance.multi_polygon: +                        instance.multi_polygon_source_item = poly_source +                        instance.multi_polygon_source = 'T'  # town +                        try: +                            instance.multi_polygon = poly +                            modified = True +                        except TypeError: +                            print(instance, instance.pk) + +    if (instance.point_source_item and +        instance.point_source_item != current_source) or ( +            instance.point_source == 'M' and modified):  # refetch          csrs = instance.spatial_reference_system          if instance.x and instance.y: @@ -512,8 +549,6 @@ def post_save_geo(sender, **kwargs):      point = instance.point      point_2d = instance.point_2d -    profile = get_current_profile() -    modified = False      if (point or point_2d) and instance.x is None and not \              instance.point_source:  # db source @@ -579,13 +614,22 @@ def post_save_geo(sender, **kwargs):              srs = get_srid_obj_from_point(point_2d)              instance.spatial_reference_system = srs              modified = True - -        elif profile.use_town_for_geo:  # try to get from parent -            centroid = instance.get_town_centroid() -            if centroid and centroid[0]: -                instance.point_2d, instance.point_source_item = centroid +        else: +            centroid, source, point_source = None, None, None +            if instance.multi_polygon and instance.multi_polygon_source == 'P': +                source = current_source +                centroid = instance.multi_polygon.centroid +                point_source = 'M' +            if not centroid and profile.use_town_for_geo:  # try to get from +                # parent +                town_centroid = instance.get_town_centroid() +                if town_centroid: +                    centroid, source = town_centroid +                    point_source = 'T' +            if centroid: +                instance.point_2d, instance.point_source_item = centroid, source                  instance.point = None -                instance.point_source = 'T' +                instance.point_source = point_source                  instance.x = instance.point_2d.x                  instance.y = instance.point_2d.y                  srs = get_srid_obj_from_point(instance.point_2d) @@ -597,38 +641,6 @@ def post_save_geo(sender, **kwargs):                  instance.point_source = None                  modified = True -    if hasattr(instance, 'multi_polygon'): -        if instance.multi_polygon_source_item and \ -                instance.multi_polygon_source_item != current_source:  # refetch -            instance.multi_polygon = None -            instance.multi_polygon_source = None - -        if instance.multi_polygon and not instance.multi_polygon_source: -            # should be a db source -            instance.multi_polygon_source = 'P' -            instance.multi_polygon_source_item = current_source -            modified = True -        elif instance.multi_polygon_source != 'P': -            precise_poly = instance.get_precise_polygons() -            if precise_poly: -                poly, source_item = precise_poly -                instance.multi_polygon = poly -                instance.multi_polygon_source = 'P' -                instance.multi_polygon_source_item = source_item -                modified = True -            elif profile.use_town_for_geo: -                poly = instance.get_town_polygons() -                if poly: -                    poly, poly_source = poly -                    if poly != instance.multi_polygon: -                        instance.multi_polygon_source_item = poly_source -                        instance.multi_polygon_source = 'T'  # town -                        try: -                            instance.multi_polygon = poly -                            modified = True -                        except TypeError: -                            print(instance, instance.pk) -      if modified:          instance.skip_history_when_saving = True          instance._post_saved_geo = True  | 
