add ElevatorLevel.override_altitude
This commit is contained in:
parent
8a1f8bb290
commit
1952479a49
6 changed files with 46 additions and 5 deletions
|
@ -3,6 +3,7 @@ import time
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db.models import Field
|
||||||
from django.forms import CharField, ModelForm, ValidationError
|
from django.forms import CharField, ModelForm, ValidationError
|
||||||
from django.forms.models import ModelChoiceField
|
from django.forms.models import ModelChoiceField
|
||||||
from django.forms.widgets import HiddenInput
|
from django.forms.widgets import HiddenInput
|
||||||
|
@ -108,8 +109,8 @@ class MapitemFormMixin(ModelForm):
|
||||||
|
|
||||||
def create_editor_form(mapitemtype):
|
def create_editor_form(mapitemtype):
|
||||||
possible_fields = ['name', 'package', 'altitude', 'level', 'intermediate', 'levels', 'geometry',
|
possible_fields = ['name', 'package', 'altitude', 'level', 'intermediate', 'levels', 'geometry',
|
||||||
'elevator', 'button', 'crop_to_level', 'width', 'groups']
|
'elevator', 'button', 'crop_to_level', 'width', 'groups', 'override_altitude']
|
||||||
existing_fields = [field for field in possible_fields if hasattr(mapitemtype, field)]
|
existing_fields = [field for field in possible_fields if isinstance(getattr(mapitemtype, field, None), Field)]
|
||||||
|
|
||||||
class EditorForm(MapitemFormMixin, ModelForm):
|
class EditorForm(MapitemFormMixin, ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -13,10 +13,11 @@
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr data-name="{{ item.name }}">
|
<tr data-name="{{ item.name }}">
|
||||||
|
|
||||||
<td>{% if item.title != item.name %}{{ item.title }} <small>{{ item.name }}</small>{% else %}{{ item.name }}{% endif %}</td>
|
<td>{% if item.title != item.name %}{{ item.title }} <small>{{ item.name }}</small>{% else %}{{ item.name }}{% endif %}</td>
|
||||||
{% if has_elevator %}
|
{% if has_elevator %}
|
||||||
<td><a href="{% url 'editor.mapitems.edit' mapitem_type='elevator' name=item.elevator.name %}">{{ item.elevator }}</a></td>
|
<td><a href="{% url 'editor.mapitems.edit' mapitem_type='elevator' name=item.elevator.name %}">{{ item.elevator }}</a></td>
|
||||||
|
<td>{{ item.button }}</td>
|
||||||
|
<td>{% if item.override_altitude %}{{ item.override_altitude }} m{% endif %}</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if has_levels %}
|
{% if has_levels %}
|
||||||
<td>{% for level in item.levels.all %}{% if not forloop.first %}, {% endif %}<a href="" data-level-link="{{ level.name }}">{{ level.name }}</a>{% endfor %}</td>
|
<td>{% for level in item.levels.all %}{% if not forloop.first %}, {% endif %}<a href="" data-level-link="{{ level.name }}">{{ level.name }}</a>{% endfor %}</td>
|
||||||
|
|
26
src/c3nav/mapdata/migrations/0021_auto_20161217_2333.py
Normal file
26
src/c3nav/mapdata/migrations/0021_auto_20161217_2333.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.4 on 2016-12-17 23:33
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('mapdata', '0020_auto_20161216_0934'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='elevatorlevel',
|
||||||
|
name='override_altitude',
|
||||||
|
field=models.DecimalField(decimal_places=2, max_digits=6, null=True, verbose_name='override level altitude'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='level',
|
||||||
|
name='altitude',
|
||||||
|
field=models.DecimalField(decimal_places=2, default=0, max_digits=6, unique=True, verbose_name='level altitude'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,6 +1,7 @@
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from shapely.geometry import CAP_STYLE, JOIN_STYLE
|
from shapely.geometry import CAP_STYLE, JOIN_STYLE
|
||||||
from shapely.geometry.geo import mapping, shape
|
from shapely.geometry.geo import mapping, shape
|
||||||
|
@ -321,6 +322,7 @@ class ElevatorLevel(GeometryMapItemWithLevel):
|
||||||
"""
|
"""
|
||||||
elevator = models.ForeignKey(Elevator, on_delete=models.PROTECT)
|
elevator = models.ForeignKey(Elevator, on_delete=models.PROTECT)
|
||||||
button = models.SlugField(_('Button label'), max_length=10)
|
button = models.SlugField(_('Button label'), max_length=10)
|
||||||
|
override_altitude = models.DecimalField(_('override level altitude'), null=True, max_digits=6, decimal_places=2)
|
||||||
|
|
||||||
geomtype = 'polygon'
|
geomtype = 'polygon'
|
||||||
|
|
||||||
|
@ -347,10 +349,21 @@ class ElevatorLevel(GeometryMapItemWithLevel):
|
||||||
raise ValueError('missing button.')
|
raise ValueError('missing button.')
|
||||||
kwargs['button'] = data['button']
|
kwargs['button'] = data['button']
|
||||||
|
|
||||||
|
if 'override_altitude' in data:
|
||||||
|
kwargs['override_altitude'] = data['override_altitude']
|
||||||
|
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
def tofile(self):
|
def tofile(self):
|
||||||
result = super().tofile()
|
result = super().tofile()
|
||||||
result['elevator'] = self.elevator.name
|
result['elevator'] = self.elevator.name
|
||||||
result['button'] = self.button
|
result['button'] = self.button
|
||||||
|
if self.override_altitude is not None:
|
||||||
|
result['override_altitude'] = float(self.override_altitude)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def altitude(self):
|
||||||
|
if self.override_altitude is not None:
|
||||||
|
return self.override_altitude
|
||||||
|
return self.level.altitude
|
||||||
|
|
|
@ -14,7 +14,7 @@ class Level(MapItem):
|
||||||
"""
|
"""
|
||||||
name = models.SlugField(_('level name'), unique=True, max_length=50,
|
name = models.SlugField(_('level name'), unique=True, max_length=50,
|
||||||
help_text=_('Usually just an integer (e.g. -1, 0, 1, 2)'))
|
help_text=_('Usually just an integer (e.g. -1, 0, 1, 2)'))
|
||||||
altitude = models.DecimalField(_('level altitude'), null=True, max_digits=6, decimal_places=2)
|
altitude = models.DecimalField(_('level altitude'), null=False, unique=True, max_digits=6, decimal_places=2)
|
||||||
intermediate = models.BooleanField(_('intermediate level'))
|
intermediate = models.BooleanField(_('intermediate level'))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -132,7 +132,7 @@ class Graph:
|
||||||
room.level._built_room_transfer_points.append(center_point)
|
room.level._built_room_transfer_points.append(center_point)
|
||||||
room.level._built_points.append(center_point)
|
room.level._built_points.append(center_point)
|
||||||
|
|
||||||
direction_up = level2.level.altitude > level1.level.altitude
|
direction_up = level2.altitude > level1.altitude
|
||||||
|
|
||||||
point1.connect_to(center_point, ctype=('elevator_up' if direction_up else 'elevator_down'))
|
point1.connect_to(center_point, ctype=('elevator_up' if direction_up else 'elevator_down'))
|
||||||
center_point.connect_to(point2, ctype=('elevator_up' if direction_up else 'elevator_down'))
|
center_point.connect_to(point2, ctype=('elevator_up' if direction_up else 'elevator_down'))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue