remove intermediate levels

This commit is contained in:
Laura Klünder 2017-05-05 14:20:32 +02:00
parent 0d2663ca89
commit baecf08aea
9 changed files with 146 additions and 51 deletions

View file

@ -85,8 +85,7 @@ class MapitemFormMixin(ModelForm):
def create_editor_form(mapitemtype):
possible_fields = ['name', 'public', 'altitude', 'level', 'intermediate', 'levels', 'geometry', 'direction',
'elevator', 'button', 'crop_to_level', 'width', 'groups', 'override_altitude', 'color',
possible_fields = ['name', 'public', 'altitude', 'level', 'levels', 'geometry', 'width', 'groups', 'color',
'location_type', 'can_search', 'can_describe', 'routing_inclusion', 'compiled_room', 'bssids',
'category', 'layer']
existing_fields = [field.name for field in mapitemtype._meta.get_fields() if field.name in possible_fields]

View file

@ -1,15 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2017-05-05 11:33
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0049_auto_20170505_1125'),
]
operations = [
]

View file

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2017-05-05 11:33
from __future__ import unicode_literals
from django.db import migrations
def categorize_intermediate_areas(apps, schema_editor):
Level = apps.get_model('mapdata', 'Level')
for level in Level.objects.filter(intermediate=True):
for area in level.areas.filter(category=''):
area.category = 'escalator' if area.escalators.count() else 'stairs'
area.save()
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0049_auto_20170505_1125'),
]
operations = [
migrations.RunPython(categorize_intermediate_areas),
]

View file

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2017-05-05 11:46
from __future__ import unicode_literals
from django.db import migrations
def move_intermediate_areas(apps, schema_editor):
Level = apps.get_model('mapdata', 'Level')
for level in Level.objects.filter(intermediate=True):
lower_level = Level.objects.filter(altitude__lt=level.altitude).order_by('-altitude').first()
upper_level = Level.objects.filter(altitude__gt=level.altitude).order_by('altitude').first()
for area in level.areas.all():
area.level = lower_level
area.layer = 'upper'
area.save()
areaitems = []
for c in ('escalators', 'obstacles', 'lineobstacles', 'stairs', 'stuffedareas'):
areaitems.extend(getattr(area, c).all())
print(areaitems)
area.pk = None
area.name += '_'
area.level = upper_level
area.layer = 'lower'
area.save()
for areaitem in areaitems:
areaitem.pk = None
areaitem.name += '-_'
areaitem.area = area
areaitem.save()
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0050_categorize_intermediate_areas'),
]
operations = [
migrations.RunPython(move_intermediate_areas),
]

View file

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2017-05-05 12:09
from __future__ import unicode_literals
from django.db import migrations
def delete_intermediate_levels(apps, schema_editor):
Level = apps.get_model('mapdata', 'Level')
print(Level.objects.filter(intermediate=True).count())
Level.objects.filter(intermediate=True).delete()
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0051_move_intermediate_areas'),
]
operations = [
migrations.RunPython(delete_intermediate_levels),
migrations.RemoveField(
model_name='level',
name='intermediate',
),
]

View file

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2017-05-05 12:12
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0052_remove_level_intermediate'),
]
operations = [
migrations.RemoveField(
model_name='escalator',
name='area',
),
migrations.DeleteModel(
name='Escalator',
),
]

View file

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2017-05-05 12:16
from __future__ import unicode_literals
from django.db import migrations
def delete_crop_to_level_obstacles(apps, schema_editor):
Obstacle = apps.get_model('mapdata', 'Obstacle')
Obstacle.objects.filter(crop_to_level__isnull=False).delete()
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0053_auto_20170505_1212'),
]
operations = [
migrations.RunPython(delete_crop_to_level_obstacles),
migrations.RemoveField(
model_name='obstacle',
name='crop_to_level',
),
]

View file

@ -79,6 +79,8 @@ class Area(LevelFeature):
def get_geojson_properties(self):
result = super().get_geojson_properties()
result['category'] = self.category
result['layer'] = self.layer
result['public'] = self.public
return result
@ -95,29 +97,6 @@ class StuffedArea(AreaFeature):
default_related_name = 'stuffedareas'
class Escalator(AreaFeature):
"""
An escalator area
"""
DIRECTIONS = (
(True, _('up')),
(False, _('down')),
)
direction = models.BooleanField(verbose_name=_('direction'), choices=DIRECTIONS)
geomtype = 'polygon'
class Meta:
verbose_name = _('Escalator')
verbose_name_plural = _('Escalators')
default_related_name = 'escalators'
def get_geojson_properties(self):
result = super().get_geojson_properties()
result['direction'] = 'up' if self.direction else 'down'
return result
class Stair(AreaFeature):
"""
A stair
@ -146,7 +125,7 @@ class Stair(AreaFeature):
('type', 'shadow'),
('original_type', self.__class__.__name__.lower()),
('original_name', self.name),
('level', self.level.name),
('area', self.area.name),
))),
('geometry', format_geojson(mapping(shadow), round=False)),
))
@ -156,9 +135,6 @@ class Obstacle(AreaFeature):
"""
An obstacle
"""
crop_to_level = models.ForeignKey('mapdata.Level', on_delete=models.CASCADE, null=True, blank=True,
verbose_name=_('crop to other level'), related_name='crops_obstacles')
geomtype = 'polygon'
class Meta:
@ -166,12 +142,6 @@ class Obstacle(AreaFeature):
verbose_name_plural = _('Obstacles')
default_related_name = 'obstacles'
def get_geojson_properties(self):
result = super().get_geojson_properties()
if self.crop_to_level is not None:
result['crop_to_level'] = self.crop_to_level.name
return result
class LineObstacle(AreaFeature):
"""

View file

@ -15,7 +15,6 @@ class Level(Feature):
name = models.SlugField(_('level name'), unique=True, max_length=50,
help_text=_('Usually just an integer (e.g. -1, 0, 1, 2)'))
altitude = models.DecimalField(_('level altitude'), null=False, unique=True, max_digits=6, decimal_places=2)
intermediate = models.BooleanField(_('intermediate level'))
class Meta:
verbose_name = _('Level')