|
@@ -1,5 +1,4 @@
|
|
|
from django.contrib import admin
|
|
|
-from django.contrib.gis import admin as geo_admin
|
|
|
from django.db import models
|
|
|
from django.db.models import Q
|
|
|
from django.forms import ModelForm, BaseInlineFormSet
|
|
@@ -15,7 +14,6 @@ from django.db.models.functions import Cast
|
|
|
from django.contrib.postgres.aggregates import StringAgg
|
|
|
from django.db import connection
|
|
|
from django.core.cache import cache
|
|
|
-from django.contrib.admin.filters import AllValuesFieldListFilter
|
|
|
from urllib.parse import urlencode
|
|
|
|
|
|
from djgeojson.views import GeoJSONLayerView
|
|
@@ -26,6 +24,7 @@ from djadhere.utils import get_active_filter
|
|
|
from adhesions.models import Adhesion
|
|
|
from .models import Service, ServiceType, IPPrefix, IPResource, Route, Tunnel, ServiceAllocation, Antenna, AntennaAllocation, Allocation
|
|
|
from .utils import notify_allocation
|
|
|
+from .forms import AntennaForm
|
|
|
|
|
|
|
|
|
### Filters
|
|
@@ -86,6 +85,25 @@ class AntennaPrefixFilter(admin.SimpleListFilter):
|
|
|
return queryset
|
|
|
|
|
|
|
|
|
+class AntennaPositionFilter(admin.SimpleListFilter):
|
|
|
+ title = 'géolocalisation'
|
|
|
+ parameter_name = 'position'
|
|
|
+
|
|
|
+ def lookups(self, request, model_admin):
|
|
|
+ return (
|
|
|
+ ('1', 'Connue'),
|
|
|
+ ('0', 'Inconnue'),
|
|
|
+ )
|
|
|
+
|
|
|
+ def queryset(self, request, queryset):
|
|
|
+ query = Q(position__isnull=True)
|
|
|
+ if self.value() == '0':
|
|
|
+ return queryset.filter(query)
|
|
|
+ if self.value() == '1':
|
|
|
+ return queryset.exclude(query)
|
|
|
+ return queryset
|
|
|
+
|
|
|
+
|
|
|
class ActiveTunnelFilter(admin.SimpleListFilter):
|
|
|
title = 'status'
|
|
|
parameter_name = 'active'
|
|
@@ -378,16 +396,18 @@ class ServiceTypeAdmin(admin.ModelAdmin):
|
|
|
return False
|
|
|
|
|
|
|
|
|
-class AntennaAdmin(geo_admin.OSMGeoAdmin):
|
|
|
+class AntennaAdmin(admin.ModelAdmin):
|
|
|
inlines = (AntennaAllocationInline,)
|
|
|
list_filter = (
|
|
|
AntennaPrefixFilter,
|
|
|
+ AntennaPositionFilter,
|
|
|
'mode',
|
|
|
- ('ssid', AllValuesFieldListFilter),
|
|
|
+ 'ssid',
|
|
|
)
|
|
|
list_display_links = ('id', 'label')
|
|
|
search_fields = ('=id', 'label', 'notes', 'ssid')
|
|
|
raw_id_fields = ('contact',)
|
|
|
+ form = AntennaForm
|
|
|
|
|
|
def get_queryset(self, request):
|
|
|
qs = super().get_queryset(request)
|
|
@@ -412,7 +432,12 @@ class AntennaAdmin(geo_admin.OSMGeoAdmin):
|
|
|
# ssid_display needs request to access query string and preserve filters
|
|
|
ssid_display = partial(self.ssid_display, request=request)
|
|
|
update_wrapper(ssid_display, self.ssid_display)
|
|
|
- return ('id', 'label', 'mode', ssid_display, 'ip_display')
|
|
|
+ return ('id', 'label', 'mode', ssid_display, 'position_display', 'ip_display')
|
|
|
+
|
|
|
+ def position_display(self, obj):
|
|
|
+ return obj.position is not None
|
|
|
+ position_display.short_description = 'Géolocalisé'
|
|
|
+ position_display.boolean = True
|
|
|
|
|
|
def ip_display(self, obj):
|
|
|
if connection.vendor == 'postgresql':
|
|
@@ -465,4 +490,4 @@ admin.site.register(IPPrefix, IPPrefixAdmin)
|
|
|
admin.site.register(IPResource, IPResourceAdmin)
|
|
|
admin.site.register(Route, RouteAdmin)
|
|
|
admin.site.register(Tunnel, TunnelAdmin)
|
|
|
-geo_admin.site.register(Antenna, AntennaAdmin)
|
|
|
+admin.site.register(Antenna, AntennaAdmin)
|