Browse Source

Closes #756: Added contact details to site model

Jeremy Stretch 8 years ago
parent
commit
e7b08f8f2f

+ 3 - 2
netbox/dcim/api/serializers.py

@@ -20,8 +20,9 @@ class SiteSerializer(CustomFieldSerializer, serializers.ModelSerializer):
 
     class Meta:
         model = Site
-        fields = ['id', 'name', 'slug', 'tenant', 'facility', 'asn', 'physical_address', 'shipping_address', 'comments',
-                  'custom_fields', 'count_prefixes', 'count_vlans', 'count_racks', 'count_devices', 'count_circuits']
+        fields = ['id', 'name', 'slug', 'tenant', 'facility', 'asn', 'physical_address', 'shipping_address',
+                  'contact_name', 'contact_phone', 'contact_email', 'comments', 'custom_fields', 'count_prefixes',
+                  'count_vlans', 'count_racks', 'count_devices', 'count_circuits']
 
 
 class SiteNestedSerializer(SiteSerializer):

+ 3 - 2
netbox/dcim/forms.py

@@ -62,7 +62,8 @@ class SiteForm(BootstrapMixin, CustomFieldForm):
 
     class Meta:
         model = Site
-        fields = ['name', 'slug', 'tenant', 'facility', 'asn', 'physical_address', 'shipping_address', 'comments']
+        fields = ['name', 'slug', 'tenant', 'facility', 'asn', 'physical_address', 'shipping_address', 'contact_name',
+                  'contact_phone', 'contact_email', 'comments']
         widgets = {
             'physical_address': SmallTextarea(attrs={'rows': 3}),
             'shipping_address': SmallTextarea(attrs={'rows': 3}),
@@ -82,7 +83,7 @@ class SiteFromCSVForm(forms.ModelForm):
 
     class Meta:
         model = Site
-        fields = ['name', 'slug', 'tenant', 'facility', 'asn']
+        fields = ['name', 'slug', 'tenant', 'facility', 'asn', 'contact_name', 'contact_phone', 'contact_email']
 
 
 class SiteImportForm(BootstrapMixin, BulkImportForm):

+ 30 - 0
netbox/dcim/migrations/0024_site_add_contact_fields.py

@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.4 on 2016-12-29 16:23
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('dcim', '0023_devicetype_comments'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='site',
+            name='contact_email',
+            field=models.EmailField(blank=True, max_length=254, verbose_name=b'Contact E-mail'),
+        ),
+        migrations.AddField(
+            model_name='site',
+            name='contact_name',
+            field=models.CharField(blank=True, max_length=50),
+        ),
+        migrations.AddField(
+            model_name='site',
+            name='contact_phone',
+            field=models.CharField(blank=True, max_length=20),
+        ),
+    ]

+ 6 - 0
netbox/dcim/models.py

@@ -245,6 +245,9 @@ class Site(CreatedUpdatedModel, CustomFieldModel):
     asn = ASNField(blank=True, null=True, verbose_name='ASN')
     physical_address = models.CharField(max_length=200, blank=True)
     shipping_address = models.CharField(max_length=200, blank=True)
+    contact_name = models.CharField(max_length=50, blank=True)
+    contact_phone = models.CharField(max_length=20, blank=True)
+    contact_email = models.EmailField(blank=True, verbose_name="Contact E-mail")
     comments = models.TextField(blank=True)
     custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
 
@@ -266,6 +269,9 @@ class Site(CreatedUpdatedModel, CustomFieldModel):
             self.tenant.name if self.tenant else '',
             self.facility,
             str(self.asn) if self.asn else '',
+            self.contact_name,
+            self.contact_phone,
+            self.contact_email,
         ])
 
     @property

+ 3 - 0
netbox/dcim/tests/test_apis.py

@@ -22,6 +22,9 @@ class SiteTest(APITestCase):
         'asn',
         'physical_address',
         'shipping_address',
+        'contact_name',
+        'contact_phone',
+        'contact_email',
         'comments',
         'custom_fields',
         'count_prefixes',

+ 30 - 0
netbox/templates/dcim/site.html

@@ -110,6 +110,36 @@
                         {% endif %}
                     </td>
                 </tr>
+                <tr>
+                    <td>Contact Name</td>
+                    <td>
+                        {% if site.contact_name %}
+                            <span>{{ site.contact_name }}</span>
+                        {% else %}
+                            <span class="text-muted">N/A</span>
+                        {% endif %}
+                    </td>
+                </tr>
+                <tr>
+                    <td>Contact Phone</td>
+                    <td>
+                        {% if site.contact_phone %}
+                            <a href="tel:{{ site.contact_phone }}">{{ site.contact_phone }}</a>
+                        {% else %}
+                            <span class="text-muted">N/A</span>
+                        {% endif %}
+                    </td>
+                </tr>
+                <tr>
+                    <td>Contact E-Mail</td>
+                    <td>
+                        {% if site.contact_email %}
+                            <a href="mailto:{{ site.contact_email }}">{{ site.contact_email }}</a>
+                        {% else %}
+                            <span class="text-muted">N/A</span>
+                        {% endif %}
+                    </td>
+                </tr>
             </table>
         </div>
         {% with site.get_custom_fields as custom_fields %}

+ 3 - 0
netbox/templates/dcim/site_edit.html

@@ -12,6 +12,9 @@
             {% render_field form.asn %}
             {% render_field form.physical_address %}
             {% render_field form.shipping_address %}
+            {% render_field form.contact_name %}
+            {% render_field form.contact_phone %}
+            {% render_field form.contact_email %}
         </div>
     </div>
     {% if form.custom_fields %}

+ 16 - 1
netbox/templates/dcim/site_import.html

@@ -53,10 +53,25 @@
 					<td>Autonomous system number (optional)</td>
 					<td>65000</td>
 				</tr>
+				<tr>
+					<td>Contact Name</td>
+					<td>Name of administrative contact (optional)</td>
+					<td>Hank Hill</td>
+				</tr>
+				<tr>
+					<td>Contact Phone</td>
+					<td>Phone number (optional)</td>
+					<td>+1-214-555-1234</td>
+				</tr>
+				<tr>
+					<td>Contact E-mail</td>
+					<td>E-mail address (optional)</td>
+					<td>hhill@example.com</td>
+				</tr>
 			</tbody>
 		</table>
 		<h4>Example</h4>
-		<pre>ASH-4 South,ash4-south,Pied Piper,Equinix DC6,65000</pre>
+		<pre>ASH-4 South,ash4-south,Pied Piper,Equinix DC6,65000,Hank Hill,+1-214-555-1234,hhill@example.com</pre>
 	</div>
 </div>
 {% endblock %}