Parcourir la source

carte des antennes

Élie Bouttier il y a 7 ans
Parent
commit
76d28a8400

+ 1 - 0
djadhere/settings.py

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

+ 2 - 0
requirements.txt

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

+ 25 - 0
services/admin.py

@@ -7,6 +7,10 @@ from django.utils import timezone
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.utils.html import format_html
 from django.utils.html import format_html
 from django.core.mail import mail_managers
 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 adhesions.models import Adhesion
 from .models import Service, ServiceType, IPPrefix, IPResource, Route, ServiceAllocation, Antenna, AntennaAllocation, Allocation
 from .models import Service, ServiceType, IPPrefix, IPResource, Route, ServiceAllocation, Antenna, AntennaAllocation, Allocation
@@ -235,6 +239,27 @@ class AntennaAdmin(geo_admin.OSMGeoAdmin):
         AntennaPrefixFilter,
         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(ServiceType, ServiceTypeAdmin)
 admin.site.register(Service, ServiceAdmin)
 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 %}