blob: 76b505c12179d621f7311ba27948616b1648c35a [file] [log] [blame]
Scott Bakerbb2a2a22015-04-21 16:59:04 -07001from django.contrib import admin
2
Scott Baker98f51552015-12-31 10:18:28 -08003from services.cord.models import *
Scott Bakerbb2a2a22015-04-21 16:59:04 -07004from django import forms
5from django.utils.safestring import mark_safe
6from django.contrib.auth.admin import UserAdmin
7from django.contrib.admin.widgets import FilteredSelectMultiple
8from django.contrib.auth.forms import ReadOnlyPasswordHashField
9from django.contrib.auth.signals import user_logged_in
10from django.utils import timezone
11from django.contrib.contenttypes import generic
12from suit.widgets import LinkedSelect
Scott Baker6dddd2f2015-07-23 12:06:26 -070013from core.admin import ServiceAppAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, XOSTabularInline, ServicePrivilegeInline, TenantRootTenantInline, TenantRootPrivilegeInline
Scott Bakerd145efe2015-09-10 16:01:58 -070014from core.middleware import get_request
Scott Bakerbb2a2a22015-04-21 16:59:04 -070015
16from functools import update_wrapper
17from django.contrib.admin.views.main import ChangeList
18from django.core.urlresolvers import reverse
19from django.contrib.admin.utils import quote
20
Scott Baker27b768d2015-04-21 17:15:18 -070021#-----------------------------------------------------------------------------
22# vOLT
23#-----------------------------------------------------------------------------
Scott Bakerbb2a2a22015-04-21 16:59:04 -070024
25class VOLTServiceAdmin(ReadOnlyAwareAdmin):
26 model = VOLTService
27 verbose_name = "vOLT Service"
28 verbose_name_plural = "vOLT Service"
29 list_display = ("backend_status_icon", "name", "enabled")
30 list_display_links = ('backend_status_icon', 'name', )
Scott Baker27b768d2015-04-21 17:15:18 -070031 fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description',"view_url","icon_url" ], 'classes':['suit-tab suit-tab-general']})]
Scott Bakerbb2a2a22015-04-21 16:59:04 -070032 readonly_fields = ('backend_status_text', )
Scott Baker9da53042015-05-15 09:08:19 -070033 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
Scott Bakerbb2a2a22015-04-21 16:59:04 -070034
35 extracontext_registered_admins = True
36
37 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
38
39 suit_form_tabs =(('general', 'vOLT Service Details'),
40 ('administration', 'Administration'),
41 #('tools', 'Tools'),
42 ('slices','Slices'),
43 ('serviceattrs','Additional Attributes'),
Scott Baker9da53042015-05-15 09:08:19 -070044 ('serviceprivileges','Privileges'),
Scott Bakerbb2a2a22015-04-21 16:59:04 -070045 )
46
47 suit_form_includes = (('voltadmin.html', 'top', 'administration'),
48 ) #('hpctools.html', 'top', 'tools') )
49
50 def queryset(self, request):
Scott Baker27de6012015-07-24 15:36:02 -070051 return VOLTService.get_service_objects_by_user(request.user)
Scott Bakerbb2a2a22015-04-21 16:59:04 -070052
53class VOLTTenantForm(forms.ModelForm):
Scott Bakerf1527cd2015-11-09 20:25:21 -080054 s_tag = forms.CharField()
55 c_tag = forms.CharField()
Scott Bakereefe65c2015-07-13 13:08:07 -070056 creator = forms.ModelChoiceField(queryset=User.objects.all())
57
Sapan Bhatia16be1432016-01-14 11:41:38 -050058 def __init__(self,*args,**kwargs):
59 super (VOLTTenantForm,self ).__init__(*args,**kwargs)
60 self.fields['kind'].widget.attrs['readonly'] = True
61 self.fields['provider_service'].queryset = VOLTService.get_service_objects().all()
62 if self.instance:
63 # fields for the attributes
64 self.fields['c_tag'].initial = self.instance.c_tag
65 self.fields['s_tag'].initial = self.instance.s_tag
66 self.fields['creator'].initial = self.instance.creator
67 if (not self.instance) or (not self.instance.pk):
68 # default fields for an 'add' form
69 self.fields['kind'].initial = VOLT_KIND
70 self.fields['creator'].initial = get_request().user
71 if VOLTService.get_service_objects().exists():
72 self.fields["provider_service"].initial = VOLTService.get_service_objects().all()[0]
73
74 def save(self, commit=True):
75 self.instance.s_tag = self.cleaned_data.get("s_tag")
76 self.instance.c_tag = self.cleaned_data.get("c_tag")
77 self.instance.creator = self.cleaned_data.get("creator")
78 return super(VOLTTenantForm, self).save(commit=commit)
79
80 class Meta:
Scott Bakerbb2a2a22015-04-21 16:59:04 -070081 model = VOLTTenant
82
83class VOLTTenantAdmin(ReadOnlyAwareAdmin):
Scott Bakerf1527cd2015-11-09 20:25:21 -080084 list_display = ('backend_status_icon', 'id', 'service_specific_id', 's_tag', 'c_tag', 'subscriber_root' )
Scott Baker27b768d2015-04-21 17:15:18 -070085 list_display_links = ('backend_status_icon', 'id')
Scott Baker80a39292015-07-21 18:18:25 -070086 fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_root', 'service_specific_id', # 'service_specific_attribute',
Scott Bakerf1527cd2015-11-09 20:25:21 -080087 's_tag', 'c_tag', 'creator'],
Scott Baker80a39292015-07-21 18:18:25 -070088 'classes':['suit-tab suit-tab-general']})]
Scott Bakereefe65c2015-07-13 13:08:07 -070089 readonly_fields = ('backend_status_text', 'service_specific_attribute')
Scott Bakerbb2a2a22015-04-21 16:59:04 -070090 form = VOLTTenantForm
91
92 suit_form_tabs = (('general','Details'),)
93
94 def queryset(self, request):
Scott Baker27de6012015-07-24 15:36:02 -070095 return VOLTTenant.get_tenant_objects_by_user(request.user)
Scott Bakerbb2a2a22015-04-21 16:59:04 -070096
Scott Baker27b768d2015-04-21 17:15:18 -070097#-----------------------------------------------------------------------------
98# vCPE
99#-----------------------------------------------------------------------------
100
Scott Bakerf91e6152016-02-11 12:07:10 -0800101class VSGServiceForm(forms.ModelForm):
Scott Baker2b56cf42015-07-15 18:08:06 -0700102 bbs_api_hostname = forms.CharField(required=False)
103 bbs_api_port = forms.IntegerField(required=False)
Scott Baker80157da2015-07-15 17:42:43 -0700104 bbs_server = forms.CharField(required=False)
105 backend_network_label = forms.CharField(required=False)
106 bbs_slice = forms.ModelChoiceField(queryset=Slice.objects.all(), required=False)
Scott Bakercf6eb992016-02-18 06:43:02 -0800107 wan_container_gateway_ip = forms.CharField(required=False)
108 wan_container_gateway_mac = forms.CharField(required=False)
109 wan_container_netbits = forms.CharField(required=False)
Scott Bakerae6187c2016-02-23 14:58:49 -0800110 dns_servers = forms.CharField(required=False)
Scott Baker62312972015-07-13 14:30:25 -0700111
Sapan Bhatia16be1432016-01-14 11:41:38 -0500112 def __init__(self,*args,**kwargs):
Scott Bakerf91e6152016-02-11 12:07:10 -0800113 super (VSGServiceForm,self ).__init__(*args,**kwargs)
Sapan Bhatia16be1432016-01-14 11:41:38 -0500114 if self.instance:
115 self.fields['bbs_api_hostname'].initial = self.instance.bbs_api_hostname
116 self.fields['bbs_api_port'].initial = self.instance.bbs_api_port
117 self.fields['bbs_server'].initial = self.instance.bbs_server
118 self.fields['backend_network_label'].initial = self.instance.backend_network_label
119 self.fields['bbs_slice'].initial = self.instance.bbs_slice
Scott Bakercf6eb992016-02-18 06:43:02 -0800120 self.fields['wan_container_gateway_ip'].initial = self.instance.wan_container_gateway_ip
121 self.fields['wan_container_gateway_mac'].initial = self.instance.wan_container_gateway_mac
122 self.fields['wan_container_netbits'].initial = self.instance.wan_container_netbits
Scott Bakerae6187c2016-02-23 14:58:49 -0800123 self.fields['dns_servers'].initial = self.instance.dns_servers
Sapan Bhatia16be1432016-01-14 11:41:38 -0500124
125 def save(self, commit=True):
126 self.instance.bbs_api_hostname = self.cleaned_data.get("bbs_api_hostname")
127 self.instance.bbs_api_port = self.cleaned_data.get("bbs_api_port")
128 self.instance.bbs_server = self.cleaned_data.get("bbs_server")
129 self.instance.backend_network_label = self.cleaned_data.get("backend_network_label")
130 self.instance.bbs_slice = self.cleaned_data.get("bbs_slice")
Scott Bakercf6eb992016-02-18 06:43:02 -0800131 self.instance.wan_container_gateway_ip = self.cleaned_data.get("wan_container_gateway_ip")
132 self.instance.wan_container_gateway_mac = self.cleaned_data.get("wan_container_gateway_mac")
133 self.instance.wan_container_netbits = self.cleaned_data.get("wan_container_netbits")
Scott Bakerae6187c2016-02-23 14:58:49 -0800134 self.instance.dns_servers = self.cleaned_data.get("dns_servers")
Scott Bakerf91e6152016-02-11 12:07:10 -0800135 return super(VSGServiceForm, self).save(commit=commit)
Sapan Bhatia16be1432016-01-14 11:41:38 -0500136
137 class Meta:
Scott Bakerf91e6152016-02-11 12:07:10 -0800138 model = VSGService
Scott Baker62312972015-07-13 14:30:25 -0700139
Scott Bakerf91e6152016-02-11 12:07:10 -0800140class VSGServiceAdmin(ReadOnlyAwareAdmin):
141 model = VSGService
Scott Bakerae6187c2016-02-23 14:58:49 -0800142 verbose_name = "vSG Service"
143 verbose_name_plural = "vSG Service"
Scott Baker27b768d2015-04-21 17:15:18 -0700144 list_display = ("backend_status_icon", "name", "enabled")
145 list_display_links = ('backend_status_icon', 'name', )
Scott Baker80157da2015-07-15 17:42:43 -0700146 fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description', "view_url", "icon_url", "service_specific_attribute",],
147 'classes':['suit-tab suit-tab-general']}),
Scott Bakerae6187c2016-02-23 14:58:49 -0800148 ("backend config", {'fields': [ "backend_network_label", "bbs_api_hostname", "bbs_api_port", "bbs_server", "bbs_slice"],
149 'classes':['suit-tab suit-tab-backend']}),
150 ("vSG config", {'fields': [ "wan_container_gateway_ip", "wan_container_gateway_mac", "wan_container_netbits", "dns_servers"],
151 'classes':['suit-tab suit-tab-vsg']}) ]
Scott Baker62312972015-07-13 14:30:25 -0700152 readonly_fields = ('backend_status_text', "service_specific_attribute")
Scott Baker9da53042015-05-15 09:08:19 -0700153 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
Scott Bakerf91e6152016-02-11 12:07:10 -0800154 form = VSGServiceForm
Scott Baker27b768d2015-04-21 17:15:18 -0700155
156 extracontext_registered_admins = True
157
158 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
159
Scott Baker80157da2015-07-15 17:42:43 -0700160 suit_form_tabs =(('general', 'Service Details'),
161 ('backend', 'Backend Config'),
Scott Bakerae6187c2016-02-23 14:58:49 -0800162 ('vsg', 'vSG Config'),
Scott Baker27b768d2015-04-21 17:15:18 -0700163 ('administration', 'Administration'),
164 #('tools', 'Tools'),
165 ('slices','Slices'),
166 ('serviceattrs','Additional Attributes'),
Scott Baker9da53042015-05-15 09:08:19 -0700167 ('serviceprivileges','Privileges') ,
Scott Baker27b768d2015-04-21 17:15:18 -0700168 )
169
170 suit_form_includes = (('vcpeadmin.html', 'top', 'administration'),
171 ) #('hpctools.html', 'top', 'tools') )
172
173 def queryset(self, request):
Scott Bakerf91e6152016-02-11 12:07:10 -0800174 return VSGService.get_service_objects_by_user(request.user)
Scott Baker27b768d2015-04-21 17:15:18 -0700175
Scott Baker4c052b22016-02-11 11:08:42 -0800176class VSGTenantForm(forms.ModelForm):
Scott Baker80a39292015-07-21 18:18:25 -0700177 bbs_account = forms.CharField(required=False)
178 creator = forms.ModelChoiceField(queryset=User.objects.all())
Tony Mackd8515472015-08-19 11:58:18 -0400179 instance = forms.ModelChoiceField(queryset=Instance.objects.all(),required=False)
Scott Baker80a39292015-07-21 18:18:25 -0700180 last_ansible_hash = forms.CharField(required=False)
Scott Bakere6780e92016-02-13 14:38:43 -0800181 wan_container_ip = forms.CharField(required=False)
Scott Bakercf6eb992016-02-18 06:43:02 -0800182 wan_container_mac = forms.CharField(required=False)
Scott Baker80a39292015-07-21 18:18:25 -0700183
Sapan Bhatia16be1432016-01-14 11:41:38 -0500184 def __init__(self,*args,**kwargs):
Scott Baker4c052b22016-02-11 11:08:42 -0800185 super (VSGTenantForm,self ).__init__(*args,**kwargs)
Sapan Bhatia16be1432016-01-14 11:41:38 -0500186 self.fields['kind'].widget.attrs['readonly'] = True
Scott Bakerf91e6152016-02-11 12:07:10 -0800187 self.fields['provider_service'].queryset = VSGService.get_service_objects().all()
Sapan Bhatia16be1432016-01-14 11:41:38 -0500188 if self.instance:
189 # fields for the attributes
190 self.fields['bbs_account'].initial = self.instance.bbs_account
191 self.fields['creator'].initial = self.instance.creator
192 self.fields['instance'].initial = self.instance.instance
193 self.fields['last_ansible_hash'].initial = self.instance.last_ansible_hash
Scott Bakere6780e92016-02-13 14:38:43 -0800194 self.fields['wan_container_ip'].initial = self.instance.wan_container_ip
Scott Bakercf6eb992016-02-18 06:43:02 -0800195 self.fields['wan_container_mac'].initial = self.instance.wan_container_mac
Sapan Bhatia16be1432016-01-14 11:41:38 -0500196 if (not self.instance) or (not self.instance.pk):
197 # default fields for an 'add' form
198 self.fields['kind'].initial = VCPE_KIND
199 self.fields['creator'].initial = get_request().user
Scott Bakerf91e6152016-02-11 12:07:10 -0800200 if VSGService.get_service_objects().exists():
201 self.fields["provider_service"].initial = VSGService.get_service_objects().all()[0]
Sapan Bhatia16be1432016-01-14 11:41:38 -0500202
203 def save(self, commit=True):
204 self.instance.creator = self.cleaned_data.get("creator")
205 self.instance.instance = self.cleaned_data.get("instance")
206 self.instance.last_ansible_hash = self.cleaned_data.get("last_ansible_hash")
Scott Baker4c052b22016-02-11 11:08:42 -0800207 return super(VSGTenantForm, self).save(commit=commit)
Sapan Bhatia16be1432016-01-14 11:41:38 -0500208
209 class Meta:
Scott Baker4c052b22016-02-11 11:08:42 -0800210 model = VSGTenant
Scott Baker27b768d2015-04-21 17:15:18 -0700211
Scott Baker4c052b22016-02-11 11:08:42 -0800212class VSGTenantAdmin(ReadOnlyAwareAdmin):
Scott Bakerb3cf9212015-07-06 14:40:20 -0700213 list_display = ('backend_status_icon', 'id', 'subscriber_tenant' )
Scott Baker27b768d2015-04-21 17:15:18 -0700214 list_display_links = ('backend_status_icon', 'id')
Scott Baker80a39292015-07-21 18:18:25 -0700215 fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_tenant', 'service_specific_id', # 'service_specific_attribute',
Scott Bakercf6eb992016-02-18 06:43:02 -0800216 'wan_container_ip', 'wan_container_mac', 'bbs_account', 'creator', 'instance', 'last_ansible_hash'],
Scott Baker80a39292015-07-21 18:18:25 -0700217 'classes':['suit-tab suit-tab-general']})]
Scott Bakercf6eb992016-02-18 06:43:02 -0800218 readonly_fields = ('backend_status_text', 'service_specific_attribute', 'bbs_account', 'wan_container_ip', 'wan_container_mac')
Scott Baker4c052b22016-02-11 11:08:42 -0800219 form = VSGTenantForm
Scott Baker27b768d2015-04-21 17:15:18 -0700220
221 suit_form_tabs = (('general','Details'),)
222
223 def queryset(self, request):
Scott Baker4c052b22016-02-11 11:08:42 -0800224 return VSGTenant.get_tenant_objects_by_user(request.user)
Scott Baker27b768d2015-04-21 17:15:18 -0700225
226#-----------------------------------------------------------------------------
227# vBNG
228#-----------------------------------------------------------------------------
229
Scott Baker21d18932015-07-21 18:24:21 -0700230class VBNGServiceForm(forms.ModelForm):
231 vbng_url = forms.CharField(required=False)
232
Sapan Bhatia16be1432016-01-14 11:41:38 -0500233 def __init__(self,*args,**kwargs):
234 super (VBNGServiceForm,self ).__init__(*args,**kwargs)
235 if self.instance:
236 self.fields['vbng_url'].initial = self.instance.vbng_url
237
238 def save(self, commit=True):
239 self.instance.vbng_url = self.cleaned_data.get("vbng_url")
240 return super(VBNGServiceForm, self).save(commit=commit)
241
242 class Meta:
Scott Baker21d18932015-07-21 18:24:21 -0700243 model = VBNGService
244
Scott Baker27b768d2015-04-21 17:15:18 -0700245class VBNGServiceAdmin(ReadOnlyAwareAdmin):
246 model = VBNGService
247 verbose_name = "vBNG Service"
248 verbose_name_plural = "vBNG Service"
249 list_display = ("backend_status_icon", "name", "enabled")
250 list_display_links = ('backend_status_icon', 'name', )
Scott Baker21d18932015-07-21 18:24:21 -0700251 fieldsets = [(None, {'fields': ['backend_status_text', 'name','enabled','versionNumber', 'description', "view_url", "icon_url",
252 'vbng_url' ],
253 'classes':['suit-tab suit-tab-general']})]
Scott Baker27b768d2015-04-21 17:15:18 -0700254 readonly_fields = ('backend_status_text', )
Scott Baker9da53042015-05-15 09:08:19 -0700255 inlines = [SliceInline,ServiceAttrAsTabInline,ServicePrivilegeInline]
Scott Baker21d18932015-07-21 18:24:21 -0700256 form = VBNGServiceForm
Scott Baker27b768d2015-04-21 17:15:18 -0700257
258 extracontext_registered_admins = True
259
260 user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
261
262 suit_form_tabs =(('general', 'vBNG Service Details'),
263 ('administration', 'Administration'),
264 #('tools', 'Tools'),
265 ('slices','Slices'),
266 ('serviceattrs','Additional Attributes'),
Scott Baker9da53042015-05-15 09:08:19 -0700267 ('serviceprivileges','Privileges'),
Scott Baker27b768d2015-04-21 17:15:18 -0700268 )
269
270 suit_form_includes = (('vbngadmin.html', 'top', 'administration'),
271 ) #('hpctools.html', 'top', 'tools') )
272
273 def queryset(self, request):
Scott Baker27de6012015-07-24 15:36:02 -0700274 return VBNGService.get_service_objects_by_user(request.user)
Scott Baker27b768d2015-04-21 17:15:18 -0700275
276class VBNGTenantForm(forms.ModelForm):
Scott Baker80a39292015-07-21 18:18:25 -0700277 routeable_subnet = forms.CharField(required=False)
278 mapped_hostname = forms.CharField(required=False)
279 mapped_ip = forms.CharField(required=False)
280 mapped_mac = forms.CharField(required=False)
281
Sapan Bhatia16be1432016-01-14 11:41:38 -0500282 def __init__(self,*args,**kwargs):
283 super (VBNGTenantForm,self ).__init__(*args,**kwargs)
284 self.fields['kind'].widget.attrs['readonly'] = True
285 self.fields['provider_service'].queryset = VBNGService.get_service_objects().all()
286 if self.instance:
287 # fields for the attributes
288 self.fields['routeable_subnet'].initial = self.instance.routeable_subnet
289 self.fields['mapped_hostname'].initial = self.instance.mapped_hostname
290 self.fields['mapped_ip'].initial = self.instance.mapped_ip
291 self.fields['mapped_mac'].initial = self.instance.mapped_mac
292 if (not self.instance) or (not self.instance.pk):
293 # default fields for an 'add' form
294 self.fields['kind'].initial = VBNG_KIND
295 if VBNGService.get_service_objects().exists():
296 self.fields["provider_service"].initial = VBNGService.get_service_objects().all()[0]
297
298 def save(self, commit=True):
299 self.instance.routeable_subnet = self.cleaned_data.get("routeable_subnet")
300 self.instance.mapped_hostname = self.cleaned_data.get("mapped_hostname")
301 self.instance.mapped_ip = self.cleaned_data.get("mapped_ip")
302 self.instance.mapped_mac = self.cleaned_data.get("mapped_mac")
303 return super(VBNGTenantForm, self).save(commit=commit)
304
305 class Meta:
Scott Baker27b768d2015-04-21 17:15:18 -0700306 model = VBNGTenant
307
308class VBNGTenantAdmin(ReadOnlyAwareAdmin):
Scott Bakerb3cf9212015-07-06 14:40:20 -0700309 list_display = ('backend_status_icon', 'id', 'subscriber_tenant' )
Scott Baker27b768d2015-04-21 17:15:18 -0700310 list_display_links = ('backend_status_icon', 'id')
Scott Baker80a39292015-07-21 18:18:25 -0700311 fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'provider_service', 'subscriber_tenant', 'service_specific_id', # 'service_specific_attribute',
312 'routeable_subnet', 'mapped_hostname', 'mapped_ip', 'mapped_mac'],
313 'classes':['suit-tab suit-tab-general']})]
314 readonly_fields = ('backend_status_text', 'service_specific_attribute')
Scott Baker27b768d2015-04-21 17:15:18 -0700315 form = VBNGTenantForm
316
317 suit_form_tabs = (('general','Details'),)
318
319 def queryset(self, request):
Scott Baker27de6012015-07-24 15:36:02 -0700320 return VBNGTenant.get_tenant_objects_by_user(request.user)
Scott Baker27b768d2015-04-21 17:15:18 -0700321
Scott Baker6dddd2f2015-07-23 12:06:26 -0700322#-----------------------------------------------------------------------------
323# CordSubscriberRoot
324#-----------------------------------------------------------------------------
325
Scott Baker4124e962015-07-24 10:15:01 -0700326class VOLTTenantInline(XOSTabularInline):
327 model = VOLTTenant
328 fields = ['provider_service', 'subscriber_root', 'service_specific_id']
329 readonly_fields = ['provider_service', 'subscriber_root', 'service_specific_id']
330 extra = 0
331 max_num = 0
332 suit_classes = 'suit-tab suit-tab-volttenants'
333 fk_name = 'subscriber_root'
334 verbose_name = 'subscribed tenant'
335 verbose_name_plural = 'subscribed tenants'
336
337 @property
338 def selflink_reverse_path(self):
339 return "admin:cord_volttenant_change"
340
341 def queryset(self, request):
342 qs = super(VOLTTenantInline, self).queryset(request)
343 return qs.filter(kind=VOLT_KIND)
344
Scott Baker6dddd2f2015-07-23 12:06:26 -0700345class CordSubscriberRootForm(forms.ModelForm):
346 url_filter_level = forms.CharField(required = False)
347
Sapan Bhatia16be1432016-01-14 11:41:38 -0500348 def __init__(self,*args,**kwargs):
349 super (CordSubscriberRootForm,self ).__init__(*args,**kwargs)
350 self.fields['kind'].widget.attrs['readonly'] = True
351 if self.instance:
352 self.fields['url_filter_level'].initial = self.instance.url_filter_level
353 if (not self.instance) or (not self.instance.pk):
354 # default fields for an 'add' form
355 self.fields['kind'].initial = CORD_SUBSCRIBER_KIND
356
357 def save(self, commit=True):
358 self.instance.url_filter_level = self.cleaned_data.get("url_filter_level")
359 return super(CordSubscriberRootForm, self).save(commit=commit)
360
361 class Meta:
Scott Baker6dddd2f2015-07-23 12:06:26 -0700362 model = CordSubscriberRoot
363
364class CordSubscriberRootAdmin(ReadOnlyAwareAdmin):
365 list_display = ('backend_status_icon', 'id', 'name', )
366 list_display_links = ('backend_status_icon', 'id', 'name', )
367 fieldsets = [ (None, {'fields': ['backend_status_text', 'kind', 'name', 'service_specific_id', # 'service_specific_attribute',
368 'url_filter_level'],
369 'classes':['suit-tab suit-tab-general']})]
370 readonly_fields = ('backend_status_text', 'service_specific_attribute', 'bbs_account')
371 form = CordSubscriberRootForm
Scott Baker4124e962015-07-24 10:15:01 -0700372 inlines = (VOLTTenantInline, TenantRootPrivilegeInline)
Scott Baker6dddd2f2015-07-23 12:06:26 -0700373
374 suit_form_tabs =(('general', 'Cord Subscriber Root Details'),
Scott Baker4124e962015-07-24 10:15:01 -0700375 ('volttenants','VOLT Tenancy'),
Scott Baker6dddd2f2015-07-23 12:06:26 -0700376 ('tenantrootprivileges','Privileges')
377 )
378
379 def queryset(self, request):
Scott Baker27de6012015-07-24 15:36:02 -0700380 return CordSubscriberRoot.get_tenant_objects_by_user(request.user)
Scott Baker6dddd2f2015-07-23 12:06:26 -0700381
Scott Bakerbb2a2a22015-04-21 16:59:04 -0700382admin.site.register(VOLTService, VOLTServiceAdmin)
383admin.site.register(VOLTTenant, VOLTTenantAdmin)
Scott Bakerf91e6152016-02-11 12:07:10 -0800384admin.site.register(VSGService, VSGServiceAdmin)
Scott Baker4c052b22016-02-11 11:08:42 -0800385admin.site.register(VSGTenant, VSGTenantAdmin)
Scott Baker27b768d2015-04-21 17:15:18 -0700386admin.site.register(VBNGService, VBNGServiceAdmin)
387admin.site.register(VBNGTenant, VBNGTenantAdmin)
Scott Baker6dddd2f2015-07-23 12:06:26 -0700388admin.site.register(CordSubscriberRoot, CordSubscriberRootAdmin)
Scott Bakerbb2a2a22015-04-21 16:59:04 -0700389