bulk_edit.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from circuits.choices import CircuitCommitRateChoices, CircuitStatusChoices
  4. from circuits.models import *
  5. from dcim.models import Site
  6. from ipam.models import ASN
  7. from netbox.forms import NetBoxModelBulkEditForm
  8. from tenancy.models import Tenant
  9. from utilities.forms import add_blank_choice
  10. from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField
  11. from utilities.forms.rendering import FieldSet, TabbedGroups
  12. from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, NumberWithOptions
  13. __all__ = (
  14. 'CircuitBulkEditForm',
  15. 'CircuitTerminationBulkEditForm',
  16. 'CircuitTypeBulkEditForm',
  17. 'ProviderBulkEditForm',
  18. 'ProviderAccountBulkEditForm',
  19. 'ProviderNetworkBulkEditForm',
  20. )
  21. class ProviderBulkEditForm(NetBoxModelBulkEditForm):
  22. asns = DynamicModelMultipleChoiceField(
  23. queryset=ASN.objects.all(),
  24. label=_('ASNs'),
  25. required=False
  26. )
  27. description = forms.CharField(
  28. label=_('Description'),
  29. max_length=200,
  30. required=False
  31. )
  32. comments = CommentField()
  33. model = Provider
  34. fieldsets = (
  35. FieldSet('asns', 'description'),
  36. )
  37. nullable_fields = (
  38. 'asns', 'description', 'comments',
  39. )
  40. class ProviderAccountBulkEditForm(NetBoxModelBulkEditForm):
  41. provider = DynamicModelChoiceField(
  42. label=_('Provider'),
  43. queryset=Provider.objects.all(),
  44. required=False
  45. )
  46. description = forms.CharField(
  47. label=_('Description'),
  48. max_length=200,
  49. required=False
  50. )
  51. comments = CommentField()
  52. model = ProviderAccount
  53. fieldsets = (
  54. FieldSet('provider', 'description'),
  55. )
  56. nullable_fields = (
  57. 'description', 'comments',
  58. )
  59. class ProviderNetworkBulkEditForm(NetBoxModelBulkEditForm):
  60. provider = DynamicModelChoiceField(
  61. label=_('Provider'),
  62. queryset=Provider.objects.all(),
  63. required=False
  64. )
  65. service_id = forms.CharField(
  66. max_length=100,
  67. required=False,
  68. label=_('Service ID')
  69. )
  70. description = forms.CharField(
  71. label=_('Description'),
  72. max_length=200,
  73. required=False
  74. )
  75. comments = CommentField()
  76. model = ProviderNetwork
  77. fieldsets = (
  78. FieldSet('provider', 'service_id', 'description'),
  79. )
  80. nullable_fields = (
  81. 'service_id', 'description', 'comments',
  82. )
  83. class CircuitTypeBulkEditForm(NetBoxModelBulkEditForm):
  84. color = ColorField(
  85. label=_('Color'),
  86. required=False
  87. )
  88. description = forms.CharField(
  89. label=_('Description'),
  90. max_length=200,
  91. required=False
  92. )
  93. model = CircuitType
  94. fieldsets = (
  95. FieldSet('color', 'description'),
  96. )
  97. nullable_fields = ('color', 'description')
  98. class CircuitBulkEditForm(NetBoxModelBulkEditForm):
  99. type = DynamicModelChoiceField(
  100. label=_('Type'),
  101. queryset=CircuitType.objects.all(),
  102. required=False
  103. )
  104. provider = DynamicModelChoiceField(
  105. label=_('Provider'),
  106. queryset=Provider.objects.all(),
  107. required=False
  108. )
  109. provider_account = DynamicModelChoiceField(
  110. label=_('Provider account'),
  111. queryset=ProviderAccount.objects.all(),
  112. required=False,
  113. query_params={
  114. 'provider': '$provider'
  115. }
  116. )
  117. status = forms.ChoiceField(
  118. label=_('Status'),
  119. choices=add_blank_choice(CircuitStatusChoices),
  120. required=False,
  121. initial=''
  122. )
  123. tenant = DynamicModelChoiceField(
  124. label=_('Tenant'),
  125. queryset=Tenant.objects.all(),
  126. required=False
  127. )
  128. install_date = forms.DateField(
  129. label=_('Install date'),
  130. required=False,
  131. widget=DatePicker()
  132. )
  133. termination_date = forms.DateField(
  134. label=_('Termination date'),
  135. required=False,
  136. widget=DatePicker()
  137. )
  138. commit_rate = forms.IntegerField(
  139. required=False,
  140. label=_('Commit rate (Kbps)'),
  141. widget=NumberWithOptions(
  142. options=CircuitCommitRateChoices
  143. )
  144. )
  145. description = forms.CharField(
  146. label=_('Description'),
  147. max_length=100,
  148. required=False
  149. )
  150. comments = CommentField()
  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('tenant', name=_('Tenancy')),
  156. )
  157. nullable_fields = (
  158. 'tenant', 'commit_rate', 'description', 'comments',
  159. )
  160. class CircuitTerminationBulkEditForm(NetBoxModelBulkEditForm):
  161. description = forms.CharField(
  162. label=_('Description'),
  163. max_length=200,
  164. required=False
  165. )
  166. site = DynamicModelChoiceField(
  167. label=_('Site'),
  168. queryset=Site.objects.all(),
  169. required=False
  170. )
  171. provider_network = DynamicModelChoiceField(
  172. label=_('Provider Network'),
  173. queryset=ProviderNetwork.objects.all(),
  174. required=False
  175. )
  176. port_speed = forms.IntegerField(
  177. required=False,
  178. label=_('Port speed (Kbps)'),
  179. )
  180. upstream_speed = forms.IntegerField(
  181. required=False,
  182. label=_('Upstream speed (Kbps)'),
  183. )
  184. mark_connected = forms.NullBooleanField(
  185. label=_('Mark connected'),
  186. required=False,
  187. widget=BulkEditNullBooleanSelect
  188. )
  189. model = CircuitTermination
  190. fieldsets = (
  191. FieldSet(
  192. 'description',
  193. TabbedGroups(
  194. FieldSet('site', name=_('Site')),
  195. FieldSet('provider_network', name=_('Provider Network')),
  196. ),
  197. 'mark_connected', name=_('Circuit Termination')
  198. ),
  199. FieldSet('port_speed', 'upstream_speed', name=_('Termination Details')),
  200. )
  201. nullable_fields = ('description')