add ElevatorLevel.override_altitude

This commit is contained in:
Laura Klünder 2016-12-18 00:40:10 +01:00
parent 8a1f8bb290
commit 1952479a49
6 changed files with 46 additions and 5 deletions

View file

@ -3,6 +3,7 @@ import time
from collections import OrderedDict
from django.conf import settings
from django.db.models import Field
from django.forms import CharField, ModelForm, ValidationError
from django.forms.models import ModelChoiceField
from django.forms.widgets import HiddenInput
@ -108,8 +109,8 @@ class MapitemFormMixin(ModelForm):
def create_editor_form(mapitemtype):
possible_fields = ['name', 'package', 'altitude', 'level', 'intermediate', 'levels', 'geometry',
'elevator', 'button', 'crop_to_level', 'width', 'groups']
existing_fields = [field for field in possible_fields if hasattr(mapitemtype, field)]
'elevator', 'button', 'crop_to_level', 'width', 'groups', 'override_altitude']
existing_fields = [field for field in possible_fields if isinstance(getattr(mapitemtype, field, None), Field)]
class EditorForm(MapitemFormMixin, ModelForm):
class Meta:

View file

@ -13,10 +13,11 @@
</tr>
{% endif %}
<tr data-name="{{ item.name }}">
<td>{% if item.title != item.name %}{{ item.title }} <small>{{ item.name }}</small>{% else %}{{ item.name }}{% endif %}</td>
{% if has_elevator %}
<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 %}
{% 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>

View 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,
),
]

View file

@ -1,6 +1,7 @@
from collections import OrderedDict
from django.db import models
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
from shapely.geometry import CAP_STYLE, JOIN_STYLE
from shapely.geometry.geo import mapping, shape
@ -321,6 +322,7 @@ class ElevatorLevel(GeometryMapItemWithLevel):
"""
elevator = models.ForeignKey(Elevator, on_delete=models.PROTECT)
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'
@ -347,10 +349,21 @@ class ElevatorLevel(GeometryMapItemWithLevel):
raise ValueError('missing button.')
kwargs['button'] = data['button']
if 'override_altitude' in data:
kwargs['override_altitude'] = data['override_altitude']
return kwargs
def tofile(self):
result = super().tofile()
result['elevator'] = self.elevator.name
result['button'] = self.button
if self.override_altitude is not None:
result['override_altitude'] = float(self.override_altitude)
return result
@cached_property
def altitude(self):
if self.override_altitude is not None:
return self.override_altitude
return self.level.altitude

View file

@ -14,7 +14,7 @@ class Level(MapItem):
"""
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=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'))
class Meta:

View file

@ -132,7 +132,7 @@ class Graph:
room.level._built_room_transfer_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'))
center_point.connect_to(point2, ctype=('elevator_up' if direction_up else 'elevator_down'))