diff --git a/src/c3nav/mapdata/migrations/0061_space_based_route_descriptions.py b/src/c3nav/mapdata/migrations/0061_space_based_route_descriptions.py new file mode 100644 index 00000000..def74fd9 --- /dev/null +++ b/src/c3nav/mapdata/migrations/0061_space_based_route_descriptions.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.7 on 2017-12-18 14:30 +from __future__ import unicode_literals + +import c3nav.mapdata.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0060_access_permission_id'), + ] + + operations = [ + migrations.CreateModel( + name='CrossDecription', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', c3nav.mapdata.fields.I18nField(verbose_name='description')), + ('origin_space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='leave_cross_descriptions', to='mapdata.Space', verbose_name='origin space')), + ('space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cross_descriptions', to='mapdata.Space', verbose_name='space')), + ('target_space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cross_enter_descriptions', to='mapdata.Space', verbose_name='target space')), + ], + options={ + 'verbose_name': 'Cross description', + 'verbose_name_plural': 'Cross descriptions', + 'default_related_name': 'cross_descriptions', + }, + ), + migrations.CreateModel( + name='LeaveDecription', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', c3nav.mapdata.fields.I18nField(verbose_name='description')), + ('space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='leave_descriptions', to='mapdata.Space', verbose_name='space')), + ('target_space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enter_descriptions', to='mapdata.Space', verbose_name='target space')), + ], + options={ + 'verbose_name': 'Leave description', + 'verbose_name_plural': 'Leave descriptions', + 'default_related_name': 'leave_descriptions', + }, + ), + ] diff --git a/src/c3nav/mapdata/models/geometry/space.py b/src/c3nav/mapdata/models/geometry/space.py index dfd82c24..6742a294 100644 --- a/src/c3nav/mapdata/models/geometry/space.py +++ b/src/c3nav/mapdata/models/geometry/space.py @@ -9,7 +9,7 @@ from django.utils.text import format_lazy from django.utils.translation import ugettext_lazy as _ from shapely.geometry import CAP_STYLE, JOIN_STYLE, mapping -from c3nav.mapdata.fields import GeometryField, JSONField, I18nField +from c3nav.mapdata.fields import GeometryField, I18nField, JSONField from c3nav.mapdata.models.geometry.base import GeometryMixin from c3nav.mapdata.models.locations import SpecificLocation from c3nav.mapdata.utils.cache.changes import changed_geometries @@ -243,6 +243,38 @@ class AltitudeMarker(SpaceGeometryMixin, models.Model): return '%s (%sm)' % (super().title, self.altitude) +class LeaveDecription(SpaceGeometryMixin, models.Model): + """ + A description for leaving a space to another space + """ + space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('space')) + target_space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('target space'), + related_name='enter_descriptions') + description = I18nField(_('description')) + + class Meta: + verbose_name = _('Leave description') + verbose_name_plural = _('Leave descriptions') + default_related_name = 'leave_descriptions' + + +class CrossDecription(SpaceGeometryMixin, models.Model): + """ + A description for crossing a space from one space to another space + """ + space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('space')) + origin_space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('origin space'), + related_name='leave_cross_descriptions') + target_space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('target space'), + related_name='cross_enter_descriptions') + description = I18nField(_('description')) + + class Meta: + verbose_name = _('Cross description') + verbose_name_plural = _('Cross descriptions') + default_related_name = 'cross_descriptions' + + class WifiMeasurement(SpaceGeometryMixin, models.Model): """ A Wi-Fi measurement