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 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:

View file

@ -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>

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 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

View file

@ -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:

View file

@ -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'))