From 258373f1a1b09097655790f32ffd2455db956a05 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 21 Jun 2018 14:55:10 -0400 Subject: [PATCH] Closes #2118: Added latitude and longitude fields to Site --- netbox/dcim/api/serializers.py | 8 +++--- netbox/dcim/forms.py | 8 +++--- .../0060_site_latitude_longitude.py | 25 +++++++++++++++++++ netbox/dcim/models.py | 16 +++++++++++- netbox/templates/dcim/site.html | 10 ++++++++ netbox/templates/dcim/site_edit.html | 2 ++ 6 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 netbox/dcim/migrations/0060_site_latitude_longitude.py diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 8a8824138..d0e134b71 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -1,7 +1,5 @@ from __future__ import unicode_literals -from collections import OrderedDict - from rest_framework import serializers from rest_framework.validators import UniqueTogetherValidator from taggit.models import Tag @@ -63,9 +61,9 @@ class SiteSerializer(CustomFieldModelSerializer): model = Site fields = [ 'id', 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'description', - 'physical_address', 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', - 'tags', 'custom_fields', 'created', 'last_updated', 'count_prefixes', 'count_vlans', 'count_racks', - 'count_devices', 'count_circuits', + 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name', 'contact_phone', + 'contact_email', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'count_prefixes', + 'count_vlans', 'count_racks', 'count_devices', 'count_circuits', ] diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 6460d5d2c..807caa5ce 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -115,8 +115,8 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldForm): model = Site fields = [ 'name', 'slug', 'status', 'region', 'tenant_group', 'tenant', 'facility', 'asn', 'time_zone', 'description', - 'physical_address', 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', - 'tags', + 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name', 'contact_phone', + 'contact_email', 'comments', 'tags', ] widgets = { 'physical_address': SmallTextarea(attrs={'rows': 3}), @@ -129,7 +129,9 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldForm): 'time_zone': "Local time zone", 'description': "Short description (will appear in sites list)", 'physical_address': "Physical location of the building (e.g. for GPS)", - 'shipping_address': "If different from the physical address" + 'shipping_address': "If different from the physical address", + 'latitude': "Latitude in decimal format (xx.yyyyyy)", + 'longitude': "Longitude in decimal format (xx.yyyyyy)" } diff --git a/netbox/dcim/migrations/0060_site_latitude_longitude.py b/netbox/dcim/migrations/0060_site_latitude_longitude.py new file mode 100644 index 000000000..750a0f10b --- /dev/null +++ b/netbox/dcim/migrations/0060_site_latitude_longitude.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-06-21 18:45 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0059_devicetype_add_created_updated_times'), + ] + + operations = [ + migrations.AddField( + model_name='site', + name='latitude', + field=models.DecimalField(blank=True, decimal_places=6, max_digits=8, null=True), + ), + migrations.AddField( + model_name='site', + name='longitude', + field=models.DecimalField(blank=True, decimal_places=6, max_digits=9, null=True), + ), + ] diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 1209153bc..9a0587485 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -135,6 +135,18 @@ class Site(CreatedUpdatedModel, CustomFieldModel): max_length=200, blank=True ) + latitude = models.DecimalField( + max_digits=8, + decimal_places=6, + blank=True, + null=True + ) + longitude = models.DecimalField( + max_digits=9, + decimal_places=6, + blank=True, + null=True + ) contact_name = models.CharField( max_length=50, blank=True @@ -164,7 +176,7 @@ class Site(CreatedUpdatedModel, CustomFieldModel): csv_headers = [ 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'description', 'physical_address', - 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', + 'shipping_address', 'latitude', 'longitude', 'contact_name', 'contact_phone', 'contact_email', 'comments', ] serializer = 'dcim.api.serializers.SiteSerializer' @@ -191,6 +203,8 @@ class Site(CreatedUpdatedModel, CustomFieldModel): self.description, self.physical_address, self.shipping_address, + self.latitude, + self.longitude, self.contact_name, self.contact_phone, self.contact_email, diff --git a/netbox/templates/dcim/site.html b/netbox/templates/dcim/site.html index a882d77c8..6e53f6716 100644 --- a/netbox/templates/dcim/site.html +++ b/netbox/templates/dcim/site.html @@ -175,6 +175,16 @@ {% endif %} + + GPS Coordinates + + {% if site.latitude and site.longitude %} + {{ site.latitude }}, {{ site.longitude }} + {% else %} + N/A + {% endif %} + + Contact Name diff --git a/netbox/templates/dcim/site_edit.html b/netbox/templates/dcim/site_edit.html index ad7932642..a8d14aca7 100644 --- a/netbox/templates/dcim/site_edit.html +++ b/netbox/templates/dcim/site_edit.html @@ -27,6 +27,8 @@
{% render_field form.physical_address %} {% render_field form.shipping_address %} + {% render_field form.latitude %} + {% render_field form.longitude %} {% render_field form.contact_name %} {% render_field form.contact_phone %} {% render_field form.contact_email %}