|
@@ -283,10 +283,23 @@ class IPResourceAdmin(admin.ModelAdmin):
|
|
|
('prefixes', admin.RelatedOnlyFieldListFilter),
|
|
|
RouteFilter,
|
|
|
)
|
|
|
- fields = ('ip', 'reserved', 'last_use', 'last_time_up', 'last_check', 'notes')
|
|
|
- readonly_fields = ('ip', 'reserved', 'last_use', 'last_time_up', 'last_check',)
|
|
|
search_fields = ('=ip', 'notes',)
|
|
|
|
|
|
+ def get_fields(self, request, obj=None):
|
|
|
+ return self.get_readonly_fields(request, obj) + ['notes']
|
|
|
+
|
|
|
+ def get_readonly_fields(self, request, obj=None):
|
|
|
+ fields = ['ip']
|
|
|
+ if obj and obj.reserved:
|
|
|
+ fields += ['reserved']
|
|
|
+ if obj and not obj.in_use:
|
|
|
+ fields += ['last_use']
|
|
|
+ if obj and obj.last_time_up and obj.last_check:
|
|
|
+ fields += ['last_time_up', 'last_check']
|
|
|
+ if obj and obj.checkmk_label:
|
|
|
+ fields += ['checkmk']
|
|
|
+ return fields
|
|
|
+
|
|
|
def get_inline_instances(self, request, obj=None):
|
|
|
if obj:
|
|
|
if obj.category == 0:
|
|
@@ -302,6 +315,7 @@ class IPResourceAdmin(admin.ModelAdmin):
|
|
|
qs = qs.annotate(last_use=models.Case(
|
|
|
models.When(category=0, then=models.Max('service_allocation__end')),
|
|
|
models.When(category=1, then=models.Max('antenna_allocation__end')),
|
|
|
+ default=None,
|
|
|
))
|
|
|
qs = qs.annotate(downtime=Cast(
|
|
|
models.Case(
|
|
@@ -319,20 +333,31 @@ class IPResourceAdmin(admin.ModelAdmin):
|
|
|
available_display.boolean = True
|
|
|
|
|
|
def last_use(self, obj):
|
|
|
- return naturaltime(obj.last_use)
|
|
|
+ if obj.last_use:
|
|
|
+ return naturaltime(obj.last_use)
|
|
|
+ else:
|
|
|
+ return '-'
|
|
|
last_use.short_description = 'Dernière utilisation'
|
|
|
last_use.admin_order_field = 'last_use'
|
|
|
|
|
|
def ping(self, obj):
|
|
|
if obj.downtime:
|
|
|
- return 'down depuis >' + str(obj.downtime)
|
|
|
+ label = 'down depuis >' + str(obj.downtime)
|
|
|
elif obj.downtime == timedelta(days=0):
|
|
|
- return 'UP'
|
|
|
+ label = 'UP'
|
|
|
else:
|
|
|
return None
|
|
|
+ if obj.checkmk_url:
|
|
|
+ return format_html('<a href="{}">{}</a>', obj.checkmk_url, label)
|
|
|
+ else:
|
|
|
+ return label
|
|
|
ping.short_description = 'ping'
|
|
|
ping.admin_order_field = 'downtime'
|
|
|
|
|
|
+ def checkmk(self, obj):
|
|
|
+ return format_html('<a href="{}">{}</a>', obj.checkmk_url, 'voir')
|
|
|
+ checkmk.short_description = 'CheckMK'
|
|
|
+
|
|
|
def get_actions(self, request):
|
|
|
actions = super().get_actions(request)
|
|
|
if 'delete_selected' in actions:
|