Browse Source

carte des antennes

Élie Bouttier 7 years ago
parent
commit
76d28a8400

+ 1 - 0
djadhere/settings.py

@@ -42,6 +42,7 @@ INSTALLED_APPS = [
     'djadhere',
 
     'bootstrap3',
+    'leaflet',
 
     'django.contrib.admin',
     'django.contrib.auth',

+ 2 - 0
requirements.txt

@@ -1,3 +1,5 @@
 django<1.12
 django-bootstrap3
+django-leaflet
+django-geojson
 ipaddress

+ 25 - 0
services/admin.py

@@ -7,6 +7,10 @@ from django.utils import timezone
 from django.core.urlresolvers import reverse
 from django.utils.html import format_html
 from django.core.mail import mail_managers
+from django.conf.urls import url
+from django.template.response import TemplateResponse
+from django.core.serializers import serialize
+from django.http import HttpResponse
 
 from adhesions.models import Adhesion
 from .models import Service, ServiceType, IPPrefix, IPResource, Route, ServiceAllocation, Antenna, AntennaAllocation, Allocation
@@ -235,6 +239,27 @@ class AntennaAdmin(geo_admin.OSMGeoAdmin):
         AntennaPrefixFilter,
     )
 
+    def view_on_site(self, obj):
+        return '/admin/services/antenna/map.html'
+
+    def get_urls(self):
+        urls = super().get_urls()
+        from djgeojson.views import GeoJSONLayerView
+        my_urls = [
+            url(r'^map/$', self.admin_site.admin_view(self.map_view, cacheable=True), name='antenna-map'),
+            url(r'^map/data.json$', self.admin_site.admin_view(GeoJSONLayerView.as_view(model=Antenna, geometry_field='position')), name='antenna-map-data'),
+        ]
+        return my_urls + urls
+
+    def map_view(self, request):
+        return TemplateResponse(request, 'services/antenna_map.html', {
+            'json_url': reverse('admin:antenna-map-data'),
+        })
+
+    def map_data_view(self, request):
+        geojson = serialize('geojson', Antenna.objects.all(), geometry_field='point', fields=('position',))
+        return HttpResponse(geojson, content_type='application/json')
+
 
 admin.site.register(ServiceType, ServiceTypeAdmin)
 admin.site.register(Service, ServiceAdmin)

+ 0 - 9
services/static/js/deallocate_modal.js

@@ -1,9 +0,0 @@
-$('#confirm-deallocate').on('show.bs.modal', function(e) {
-    var action = $(e.relatedTarget).data('action');
-    var ip = $(e.relatedTarget).data('ip');
-    var service = $(e.relatedTarget).data('service');
-
-    $('#confirm-deallocate-form').attr('action', action);
-    $('.confirm-deallocate-ip').html(ip);
-    $('.confirm-deallocate-service').html(service);
-});

+ 8 - 0
services/templates/admin/services/antenna/change_list.html

@@ -0,0 +1,8 @@
+{% extends "admin/change_list.html" %}
+{% load i18n admin_urls %}
+{% block object-tools-items %}
+        <li>
+            <a href="{% url 'admin:antenna-map' %}">Voir la carte</a>
+        </li>
+{{ block.super }}
+{% endblock %}

+ 35 - 0
services/templates/services/antenna_map.html

@@ -0,0 +1,35 @@
+{% extends "admin/base_site.html" %}
+
+{% load staticfiles leaflet_tags %}
+
+{% block extrahead %}
+{{ block.super }}
+<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>
+{% leaflet_js %}
+{% leaflet_css %}
+<style>
+
+    .leaflet-container {  /* all maps */
+        width:  100%;
+        height: 600px;
+    }
+
+</style>
+{% endblock %}
+
+{% block content %}
+
+{{ media }}
+
+{% leaflet_map "antennamap" callback="window.init_map" %}
+
+<script type="text/javascript">
+function init_map (map, options) {
+    var layer = L.geoJson().addTo(map);
+    $.getJSON("{{ json_url }}", function (data) {
+        layer.addData(data);
+    });
+}
+</script>
+
+{% endblock %}