summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-02-18 11:22:38 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:21:00 +0100
commit4f6e9022857a08c5fae4e43124e40b6e9d1ab260 (patch)
treeb27058946fc758238a9d31e1e14227eb167bb72f /ishtar_common
parent1205622c9acfef772a73c15352a4fa812ca7e358 (diff)
downloadIshtar-4f6e9022857a08c5fae4e43124e40b6e9d1ab260.tar.bz2
Ishtar-4f6e9022857a08c5fae4e43124e40b6e9d1ab260.zip
Geodata redesign: operation migrations (2/2)
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/management/commands/migrate_to_geo_v4.py97
-rw-r--r--ishtar_common/migrations/0220_auto_20220218_1049.py (renamed from ishtar_common/migrations/0220_auto_20220214_1920.py)8
-rw-r--r--ishtar_common/models_common.py2
-rw-r--r--ishtar_common/utils.py4
4 files changed, 75 insertions, 36 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:
diff --git a/ishtar_common/migrations/0220_auto_20220214_1920.py b/ishtar_common/migrations/0220_auto_20220218_1049.py
index 2f40eab00..2c64c3e29 100644
--- a/ishtar_common/migrations/0220_auto_20220214_1920.py
+++ b/ishtar_common/migrations/0220_auto_20220218_1049.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.2.24 on 2022-02-14 19:20
+# Generated by Django 2.2.24 on 2022-02-18 10:49
import django.contrib.gis.db.models.fields
import django.core.validators
@@ -71,6 +71,10 @@ class Migration(migrations.Migration):
bases=(ishtar_common.models_common.Cached, models.Model),
),
migrations.AlterModelOptions(
+ name='area',
+ options={'ordering': ('label',), 'verbose_name': 'Town - Area', 'verbose_name_plural': 'Town - Areas'},
+ ),
+ migrations.AlterModelOptions(
name='person',
options={'ordering': ['name', 'surname'], 'permissions': (('view_own_person', 'Can view own Person'), ('add_own_person', 'Can add own Person'), ('change_own_person', 'Can change own Person'), ('delete_own_person', 'Can delete own Person')), 'verbose_name': 'Person', 'verbose_name_plural': 'Persons'},
),
@@ -82,7 +86,7 @@ class Migration(migrations.Migration):
name='GeoVectorData',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(default='Default', max_length=200, verbose_name='Name')),
+ ('name', models.TextField(default='Default', verbose_name='Name')),
('source_id', models.PositiveIntegerField()),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('x', models.FloatField(blank=True, help_text='User input', null=True, verbose_name='X')),
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 95ceee948..9aae922cc 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -2063,7 +2063,7 @@ class GeoProviderType(HierarchicalType):
class GeoVectorData(models.Model):
- name = models.CharField(_("Name"), default=_("Default"), max_length=200)
+ name = models.TextField(_("Name"), default=_("Default"))
source_content_type = models.ForeignKey(
ContentType, related_name="content_type_geovectordata", on_delete=models.CASCADE
)
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 02eeff93c..53727b6d3 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -774,6 +774,7 @@ def _post_save_geodata(sender, **kwargs):
modified = True
# managed cached coordinates
+ # TODO
cached_x, cached_y, cached_z = None, None, None
coords = instance.display_coordinates(rounded=False, dim=3)
@@ -845,6 +846,9 @@ def _post_save_geo(sender, **kwargs):
if not instance:
return
+ return
+ # TODO to delete
+
kls_name = instance.__class__.__name__
if not profile.locate_warehouses and (