diff options
Diffstat (limited to 'ishtar_common/management')
-rw-r--r-- | ishtar_common/management/commands/migrate_to_geo_v4.py | 97 |
1 files changed, 64 insertions, 33 deletions
diff --git a/ishtar_common/management/commands/migrate_to_geo_v4.py b/ishtar_common/management/commands/migrate_to_geo_v4.py index df275bd85..64ab25c16 100644 --- a/ishtar_common/management/commands/migrate_to_geo_v4.py +++ b/ishtar_common/management/commands/migrate_to_geo_v4.py @@ -62,43 +62,74 @@ def migrate(quiet=False, log=True): ) q = Operation.objects.exclude(main_geodata__isnull=False) nb = q.count() + data_type_area, __ = models_common.GeoDataType.objects.get_or_create( + txt_idx="operation-area", defaults={"label": "Emprise de l'opération"} + ) + data_type_center, __ = models_common.GeoDataType.objects.get_or_create( + txt_idx="operation-center", defaults={"label": "Centre de l'opération"} + ) for idx, operation in enumerate(q.all()): - if operation.multi_polygon_source == "T": - operation._no_move = True - operation.skip_history_when_saving = True - operation.save() # auto managed - elif operation.multi_polygon_source == "P": - # TODO - - """ - q = operation.towns.filter(limit__isnull=False) - nb = q.count - if not nb: - break - elif nb == 1: - town = q.all()[0] - geo = models_common.GeoVectorData.objects.get( - source_content_type=town_content_type, - source_id=town.pk - ) - else: + if not quiet: + sys.stdout.write(f"\r[{percent(idx, nb)}] Migrate operations {idx + 1}/{nb}") + sys.stdout.flush() + operation._no_move = True + operation.skip_history_when_saving = True + operation.save() # auto manage geo town association + q_towns = operation.towns.filter(main_geodata__multi_polygon__isnull=False) + if q_towns.count() > 1: + changed.append( + ["operation", str(operation), operation.pk, + "Association géo de zone communale"]) + elif q_towns.count() == 1: + changed.append( + ["operation", str(operation), operation.pk, + "Association géo de commune"]) + if operation.multi_polygon_source == "P" and operation.multi_polygon: + attrs = { + "name": f"{_('Operation')}{_(':')} {str(operation)}", + "source_content_type": operation_content_type, + "source_id": operation.pk, + "multi_polygon": operation.multi_polygon, + "data_type": data_type_area, + } + data = models_common.GeoVectorData.objects.create(**attrs) + operation.main_geodata = data + operation.save() + changed.append( + ["geovectordata", data.name, data.pk, "Multi-polygone opération"]) + if operation.point_source == "P" and operation.point_2d: + if operation.x and operation.y: attrs = { - "name": name, - "source_content_type": town_content_type, - "source_id": town.pk, - "data_type": data_type, - "provider": provider, - "multi_polygon": poly, + "name": f"{_('Operation')}{_(':')} {str(operation)}", + "source_content_type": operation_content_type, + "source_id": operation.pk, + "data_type": data_type_center, + "x": operation.x, + "y": operation.y, + "z": operation.z, } - geo, created = models_common.GeoVectorData.objects.get_or_create( - **attrs) - - operation.main_geodata = geo - operation.skip_history_when_saving = True - operation._no_move = True - operation.save() - """ + data = models_common.GeoVectorData.objects.create(**attrs) + operation.main_geodata = data + operation.save() + changed.append( + ["geovectordata", data.name, data.pk, "Coordonnées opération"]) + elif operation.point_2d: + attrs = { + "name": f"{_('Operation')}{_(':')} {str(operation)}", + "source_content_type": operation_content_type, + "source_id": operation.pk, + "data_type": data_type_center, + } + if operation.point: + attrs["point_3d"] = operation.point + else: + attrs["point_2d"] = operation.point_2d + data = models_common.GeoVectorData.objects.create(**attrs) + operation.main_geodata = data + operation.save() + changed.append( + ["geovectordata", data.name, data.pk, "Point opération"]) if log and changed: |