bulk_edit.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. from django import forms
  2. from django.contrib.contenttypes.models import ContentType
  3. from django.utils.translation import gettext_lazy as _
  4. from circuits.choices import (
  5. CircuitCommitRateChoices,
  6. CircuitPriorityChoices,
  7. CircuitStatusChoices,
  8. VirtualCircuitTerminationRoleChoices,
  9. )
  10. from circuits.constants import CIRCUIT_TERMINATION_TERMINATION_TYPES
  11. from circuits.models import *
  12. from ipam.models import ASN
  13. from netbox.choices import DistanceUnitChoices
  14. from netbox.forms import NetBoxModelBulkEditForm, OrganizationalModelBulkEditForm, PrimaryModelBulkEditForm
  15. from tenancy.models import Tenant
  16. from utilities.forms import GenericObjectFormMixin, add_blank_choice
  17. from utilities.forms.fields import (
  18. ChoiceField,
  19. ColorField,
  20. DynamicModelChoiceField,
  21. DynamicModelMultipleChoiceField,
  22. GenericObjectChoiceField,
  23. )
  24. from utilities.forms.rendering import FieldSet
  25. from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, NumberWithOptions
  26. __all__ = (
  27. 'CircuitBulkEditForm',
  28. 'CircuitGroupAssignmentBulkEditForm',
  29. 'CircuitGroupBulkEditForm',
  30. 'CircuitTerminationBulkEditForm',
  31. 'CircuitTypeBulkEditForm',
  32. 'ProviderAccountBulkEditForm',
  33. 'ProviderBulkEditForm',
  34. 'ProviderNetworkBulkEditForm',
  35. 'VirtualCircuitBulkEditForm',
  36. 'VirtualCircuitTerminationBulkEditForm',
  37. 'VirtualCircuitTypeBulkEditForm',
  38. )
  39. class ProviderBulkEditForm(PrimaryModelBulkEditForm):
  40. asns = DynamicModelMultipleChoiceField(
  41. queryset=ASN.objects.all(),
  42. label=_('ASNs'),
  43. required=False
  44. )
  45. model = Provider
  46. fieldsets = (
  47. FieldSet('asns', 'description'),
  48. )
  49. nullable_fields = (
  50. 'asns', 'description', 'comments',
  51. )
  52. class ProviderAccountBulkEditForm(PrimaryModelBulkEditForm):
  53. provider = DynamicModelChoiceField(
  54. label=_('Provider'),
  55. queryset=Provider.objects.all(),
  56. required=False
  57. )
  58. model = ProviderAccount
  59. fieldsets = (
  60. FieldSet('provider', 'description'),
  61. )
  62. nullable_fields = (
  63. 'description', 'comments',
  64. )
  65. class ProviderNetworkBulkEditForm(PrimaryModelBulkEditForm):
  66. provider = DynamicModelChoiceField(
  67. label=_('Provider'),
  68. queryset=Provider.objects.all(),
  69. required=False
  70. )
  71. service_id = forms.CharField(
  72. max_length=100,
  73. required=False,
  74. label=_('Service ID')
  75. )
  76. model = ProviderNetwork
  77. fieldsets = (
  78. FieldSet('provider', 'service_id', 'description'),
  79. )
  80. nullable_fields = (
  81. 'service_id', 'description', 'comments',
  82. )
  83. class CircuitTypeBulkEditForm(OrganizationalModelBulkEditForm):
  84. color = ColorField(
  85. label=_('Color'),
  86. required=False
  87. )
  88. model = CircuitType
  89. fieldsets = (
  90. FieldSet('color', 'description'),
  91. )
  92. nullable_fields = ('color', 'description', 'comments')
  93. class CircuitBulkEditForm(PrimaryModelBulkEditForm):
  94. type = DynamicModelChoiceField(
  95. label=_('Type'),
  96. queryset=CircuitType.objects.all(),
  97. required=False
  98. )
  99. provider = DynamicModelChoiceField(
  100. label=_('Provider'),
  101. queryset=Provider.objects.all(),
  102. required=False
  103. )
  104. provider_account = DynamicModelChoiceField(
  105. label=_('Provider account'),
  106. queryset=ProviderAccount.objects.all(),
  107. required=False,
  108. query_params={
  109. 'provider': '$provider'
  110. }
  111. )
  112. status = ChoiceField(
  113. label=_('Status'),
  114. choices=add_blank_choice(CircuitStatusChoices),
  115. required=False,
  116. initial=''
  117. )
  118. tenant = DynamicModelChoiceField(
  119. label=_('Tenant'),
  120. queryset=Tenant.objects.all(),
  121. required=False
  122. )
  123. install_date = forms.DateField(
  124. label=_('Install date'),
  125. required=False,
  126. widget=DatePicker()
  127. )
  128. termination_date = forms.DateField(
  129. label=_('Termination date'),
  130. required=False,
  131. widget=DatePicker()
  132. )
  133. commit_rate = forms.IntegerField(
  134. required=False,
  135. label=_('Commit rate (Kbps)'),
  136. widget=NumberWithOptions(
  137. options=CircuitCommitRateChoices
  138. )
  139. )
  140. distance = forms.DecimalField(
  141. label=_('Distance'),
  142. min_value=0,
  143. required=False
  144. )
  145. distance_unit = ChoiceField(
  146. label=_('Distance unit'),
  147. choices=add_blank_choice(DistanceUnitChoices),
  148. required=False,
  149. initial=''
  150. )
  151. model = Circuit
  152. fieldsets = (
  153. FieldSet('provider', 'type', 'status', 'description', name=_('Circuit')),
  154. FieldSet('provider_account', 'install_date', 'termination_date', 'commit_rate', name=_('Service Parameters')),
  155. FieldSet('distance', 'distance_unit', name=_('Attributes')),
  156. FieldSet('tenant', name=_('Tenancy')),
  157. )
  158. nullable_fields = (
  159. 'tenant', 'commit_rate', 'description', 'comments',
  160. )
  161. class CircuitTerminationBulkEditForm(GenericObjectFormMixin, NetBoxModelBulkEditForm):
  162. description = forms.CharField(
  163. label=_('Description'),
  164. max_length=200,
  165. required=False
  166. )
  167. termination = GenericObjectChoiceField(
  168. label=_('Termination'),
  169. content_type_queryset=ContentType.objects.filter(model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES),
  170. required=False,
  171. selector=True,
  172. hx_method='post',
  173. )
  174. port_speed = forms.IntegerField(
  175. required=False,
  176. label=_('Port speed (Kbps)'),
  177. )
  178. upstream_speed = forms.IntegerField(
  179. required=False,
  180. label=_('Upstream speed (Kbps)'),
  181. )
  182. mark_connected = forms.NullBooleanField(
  183. label=_('Mark connected'),
  184. required=False,
  185. widget=BulkEditNullBooleanSelect
  186. )
  187. model = CircuitTermination
  188. fieldsets = (
  189. FieldSet(
  190. 'description', 'termination', 'mark_connected', name=_('Circuit Termination')
  191. ),
  192. FieldSet('port_speed', 'upstream_speed', name=_('Termination Details')),
  193. )
  194. nullable_fields = ('description', 'termination')
  195. class CircuitGroupBulkEditForm(OrganizationalModelBulkEditForm):
  196. tenant = DynamicModelChoiceField(
  197. label=_('Tenant'),
  198. queryset=Tenant.objects.all(),
  199. required=False
  200. )
  201. model = CircuitGroup
  202. nullable_fields = (
  203. 'description', 'tenant', 'comments',
  204. )
  205. class CircuitGroupAssignmentBulkEditForm(NetBoxModelBulkEditForm):
  206. member = DynamicModelChoiceField(
  207. label=_('Circuit'),
  208. queryset=Circuit.objects.all(),
  209. required=False
  210. )
  211. priority = ChoiceField(
  212. label=_('Priority'),
  213. choices=add_blank_choice(CircuitPriorityChoices),
  214. required=False
  215. )
  216. model = CircuitGroupAssignment
  217. fieldsets = (
  218. FieldSet('member', 'priority'),
  219. )
  220. nullable_fields = ('priority',)
  221. class VirtualCircuitTypeBulkEditForm(OrganizationalModelBulkEditForm):
  222. color = ColorField(
  223. label=_('Color'),
  224. required=False
  225. )
  226. model = VirtualCircuitType
  227. fieldsets = (
  228. FieldSet('color', 'description'),
  229. )
  230. nullable_fields = ('color', 'description', 'comments')
  231. class VirtualCircuitBulkEditForm(PrimaryModelBulkEditForm):
  232. provider_network = DynamicModelChoiceField(
  233. label=_('Provider network'),
  234. queryset=ProviderNetwork.objects.all(),
  235. required=False
  236. )
  237. provider_account = DynamicModelChoiceField(
  238. label=_('Provider account'),
  239. queryset=ProviderAccount.objects.all(),
  240. required=False
  241. )
  242. type = DynamicModelChoiceField(
  243. label=_('Type'),
  244. queryset=VirtualCircuitType.objects.all(),
  245. required=False
  246. )
  247. status = ChoiceField(
  248. label=_('Status'),
  249. choices=add_blank_choice(CircuitStatusChoices),
  250. required=False,
  251. initial=''
  252. )
  253. tenant = DynamicModelChoiceField(
  254. label=_('Tenant'),
  255. queryset=Tenant.objects.all(),
  256. required=False
  257. )
  258. model = VirtualCircuit
  259. fieldsets = (
  260. FieldSet('provider_network', 'provider_account', 'status', 'description', name=_('Virtual circuit')),
  261. FieldSet('tenant', name=_('Tenancy')),
  262. )
  263. nullable_fields = (
  264. 'provider_account', 'tenant', 'description', 'comments',
  265. )
  266. class VirtualCircuitTerminationBulkEditForm(NetBoxModelBulkEditForm):
  267. role = ChoiceField(
  268. label=_('Role'),
  269. choices=add_blank_choice(VirtualCircuitTerminationRoleChoices),
  270. required=False,
  271. initial=''
  272. )
  273. description = forms.CharField(
  274. label=_('Description'),
  275. max_length=200,
  276. required=False
  277. )
  278. model = VirtualCircuitTermination
  279. fieldsets = (
  280. FieldSet('role', 'description'),
  281. )
  282. nullable_fields = ('description',)