12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from django.contrib import admin
- from polymorphic.admin import PolymorphicChildModelAdmin
- from coin.configuration.admin import ConfigurationAdminFormMixin
- from coin.utils import delete_selected
- from .models import VPSConfiguration, FingerPrint, Console
- class ConsoleInline(admin.TabularInline):
- model = Console
- extra = 0
- class FingerPrintInline(admin.TabularInline):
- model = FingerPrint
- extra = 0
- class VPSConfigurationInline(admin.StackedInline):
- model = VPSConfiguration
- # fk_name = 'offersubscription'
- readonly_fields = ['configuration_ptr']
- class VPSConfigurationAdmin(ConfigurationAdminFormMixin, PolymorphicChildModelAdmin):
- base_model = VPSConfiguration
- list_display = ('offersubscription', 'activated',
- 'ipv4_endpoint', 'ipv6_endpoint', 'comment')
- list_filter = ('activated',)
- search_fields = ('comment',
- # TODO: searching on member directly doesn't work
- 'offersubscription__member__first_name',
- 'offersubscription__member__last_name',
- 'offersubscription__member__email')
- actions = (delete_selected, "generate_endpoints", "generate_endpoints_v4",
- "generate_endpoints_v6", "activate", "deactivate")
- inline = VPSConfigurationInline
- def get_readonly_fields(self, request, obj=None):
- if obj:
- return []
- else:
- return []
- def set_activation(self, request, queryset, value):
- count = 0
- # We must update each object individually, because we want to run
- # the save() method to update the backend.
- for vps in queryset:
- if vps.activated != value:
- vps.activated = value
- vps.full_clean()
- vps.save()
- count += 1
- action = "activated" if value else "deactivated"
- msg = "{} VPS subscription(s) {}.".format(count, action)
- self.message_user(request, msg)
- def activate(self, request, queryset):
- self.set_activation(request, queryset, True)
- activate.short_description = "Activate selected VPSs"
- def deactivate(self, request, queryset):
- self.set_activation(request, queryset, False)
- deactivate.short_description = "Deactivate selected VPSs"
- def generate_endpoints_generic(self, request, queryset, v4=True, v6=True):
- count = 0
- for vps in queryset:
- if vps.generate_endpoints(v4, v6):
- vps.full_clean()
- vps.save()
- count += 1
- msg = "{} VPS subscription(s) updated.".format(count)
- self.message_user(request, msg)
- def generate_endpoints(self, request, queryset):
- self.generate_endpoints_generic(request, queryset)
- generate_endpoints.short_description = "Generate IPv4 and IPv6 endpoints"
- def generate_endpoints_v4(self, request, queryset):
- self.generate_endpoints_generic(request, queryset, v6=False)
- generate_endpoints_v4.short_description = "Generate IPv4 endpoints"
- def generate_endpoints_v6(self, request, queryset):
- self.generate_endpoints_generic(request, queryset, v4=False)
- generate_endpoints_v6.short_description = "Generate IPv6 endpoints"
- VPSConfigurationAdmin.inlines = VPSConfigurationAdmin.inlines + (FingerPrintInline, ConsoleInline )
- admin.site.register(VPSConfiguration, VPSConfigurationAdmin)
|