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 |