| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- from circuits.models import Circuit, CircuitTermination, Provider
- from dcim.models import *
- from netbox.forms import NetBoxModelForm
- from tenancy.forms import TenancyForm
- from utilities.forms import DynamicModelChoiceField, DynamicModelMultipleChoiceField, StaticSelect
- __all__ = (
- 'ConnectCableToCircuitTerminationForm',
- 'ConnectCableToConsolePortForm',
- 'ConnectCableToConsoleServerPortForm',
- 'ConnectCableToFrontPortForm',
- 'ConnectCableToInterfaceForm',
- 'ConnectCableToPowerFeedForm',
- 'ConnectCableToPowerPortForm',
- 'ConnectCableToPowerOutletForm',
- 'ConnectCableToRearPortForm',
- )
- class BaseCableConnectionForm(TenancyForm, NetBoxModelForm):
- a_terminations = DynamicModelMultipleChoiceField(
- queryset=Interface.objects.all(),
- label='Name',
- disabled_indicator='_occupied'
- )
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=Interface.objects.all(),
- label='Name',
- disabled_indicator='_occupied'
- )
- def save(self, commit=True):
- instance = super().save(commit=commit)
- # Create CableTermination instances
- terminations = []
- terminations.extend([
- CableTermination(cable=instance, cable_end='A', termination=termination)
- for termination in self.cleaned_data['a_terminations']
- ])
- terminations.extend([
- CableTermination(cable=instance, cable_end='B', termination=termination)
- for termination in self.cleaned_data['b_terminations']
- ])
- if commit:
- for ct in terminations:
- ct.save()
- else:
- instance._terminations = [
- *self.cleaned_data['a_terminations'],
- *self.cleaned_data['b_terminations'],
- ]
- return instance
- class ConnectCableToDeviceForm(BaseCableConnectionForm):
- """
- Base form for connecting a Cable to a Device component
- """
- termination_b_region = DynamicModelChoiceField(
- queryset=Region.objects.all(),
- label='Region',
- required=False,
- initial_params={
- 'sites': '$termination_b_site'
- }
- )
- termination_b_sitegroup = DynamicModelChoiceField(
- queryset=SiteGroup.objects.all(),
- label='Site group',
- required=False,
- initial_params={
- 'sites': '$termination_b_site'
- }
- )
- termination_b_site = DynamicModelChoiceField(
- queryset=Site.objects.all(),
- label='Site',
- required=False,
- query_params={
- 'region_id': '$termination_b_region',
- 'group_id': '$termination_b_sitegroup',
- }
- )
- termination_b_location = DynamicModelChoiceField(
- queryset=Location.objects.all(),
- label='Location',
- required=False,
- null_option='None',
- query_params={
- 'site_id': '$termination_b_site'
- }
- )
- termination_b_rack = DynamicModelChoiceField(
- queryset=Rack.objects.all(),
- label='Rack',
- required=False,
- null_option='None',
- query_params={
- 'site_id': '$termination_b_site',
- 'location_id': '$termination_b_location',
- }
- )
- termination_b_device = DynamicModelChoiceField(
- queryset=Device.objects.all(),
- label='Device',
- required=False,
- query_params={
- 'site_id': '$termination_b_site',
- 'location_id': '$termination_b_location',
- 'rack_id': '$termination_b_rack',
- }
- )
- class Meta:
- model = Cable
- fields = [
- 'a_terminations', 'termination_b_region', 'termination_b_sitegroup', 'termination_b_site',
- 'termination_b_rack', 'termination_b_device', 'b_terminations', 'type', 'status', 'tenant_group',
- 'tenant', 'label', 'color', 'length', 'length_unit', 'tags',
- ]
- widgets = {
- 'status': StaticSelect,
- 'type': StaticSelect,
- 'length_unit': StaticSelect,
- }
- class ConnectCableToConsolePortForm(ConnectCableToDeviceForm):
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=ConsolePort.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'device_id': '$termination_b_device'
- }
- )
- class ConnectCableToConsoleServerPortForm(ConnectCableToDeviceForm):
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=ConsoleServerPort.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'device_id': '$termination_b_device'
- }
- )
- class ConnectCableToPowerPortForm(ConnectCableToDeviceForm):
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=PowerPort.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'device_id': '$termination_b_device'
- }
- )
- class ConnectCableToPowerOutletForm(ConnectCableToDeviceForm):
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=PowerOutlet.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'device_id': '$termination_b_device'
- }
- )
- class ConnectCableToInterfaceForm(ConnectCableToDeviceForm):
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=Interface.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'device_id': '$termination_b_device',
- 'kind': 'physical',
- }
- )
- class ConnectCableToFrontPortForm(ConnectCableToDeviceForm):
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=FrontPort.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'device_id': '$termination_b_device'
- }
- )
- class ConnectCableToRearPortForm(ConnectCableToDeviceForm):
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=RearPort.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'device_id': '$termination_b_device'
- }
- )
- class ConnectCableToCircuitTerminationForm(BaseCableConnectionForm):
- termination_b_provider = DynamicModelChoiceField(
- queryset=Provider.objects.all(),
- label='Provider',
- required=False
- )
- termination_b_region = DynamicModelChoiceField(
- queryset=Region.objects.all(),
- label='Region',
- required=False,
- initial_params={
- 'sites': '$termination_b_site'
- }
- )
- termination_b_sitegroup = DynamicModelChoiceField(
- queryset=SiteGroup.objects.all(),
- label='Site group',
- required=False,
- initial_params={
- 'sites': '$termination_b_site'
- }
- )
- termination_b_site = DynamicModelChoiceField(
- queryset=Site.objects.all(),
- label='Site',
- required=False,
- query_params={
- 'region_id': '$termination_b_region',
- 'group_id': '$termination_b_sitegroup',
- }
- )
- termination_b_circuit = DynamicModelChoiceField(
- queryset=Circuit.objects.all(),
- label='Circuit',
- query_params={
- 'provider_id': '$termination_b_provider',
- 'site_id': '$termination_b_site',
- }
- )
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=CircuitTermination.objects.all(),
- label='Side',
- disabled_indicator='_occupied',
- query_params={
- 'circuit_id': '$termination_b_circuit'
- }
- )
- class Meta(ConnectCableToDeviceForm.Meta):
- fields = [
- 'a_terminations', 'termination_b_provider', 'termination_b_region', 'termination_b_sitegroup',
- 'termination_b_site', 'termination_b_circuit', 'b_terminations', 'type', 'status', 'tenant_group',
- 'tenant', 'label', 'color', 'length', 'length_unit', 'tags',
- ]
- class ConnectCableToPowerFeedForm(BaseCableConnectionForm):
- termination_b_region = DynamicModelChoiceField(
- queryset=Region.objects.all(),
- label='Region',
- required=False,
- initial_params={
- 'sites': '$termination_b_site'
- }
- )
- termination_b_sitegroup = DynamicModelChoiceField(
- queryset=SiteGroup.objects.all(),
- label='Site group',
- required=False,
- initial_params={
- 'sites': '$termination_b_site'
- }
- )
- termination_b_site = DynamicModelChoiceField(
- queryset=Site.objects.all(),
- label='Site',
- required=False,
- query_params={
- 'region_id': '$termination_b_region',
- 'group_id': '$termination_b_sitegroup',
- }
- )
- termination_b_location = DynamicModelChoiceField(
- queryset=Location.objects.all(),
- label='Location',
- required=False,
- query_params={
- 'site_id': '$termination_b_site'
- }
- )
- termination_b_powerpanel = DynamicModelChoiceField(
- queryset=PowerPanel.objects.all(),
- label='Power Panel',
- required=False,
- query_params={
- 'site_id': '$termination_b_site',
- 'location_id': '$termination_b_location',
- }
- )
- b_terminations = DynamicModelMultipleChoiceField(
- queryset=PowerFeed.objects.all(),
- label='Name',
- disabled_indicator='_occupied',
- query_params={
- 'power_panel_id': '$termination_b_powerpanel'
- }
- )
- class Meta(ConnectCableToDeviceForm.Meta):
- fields = [
- 'a_terminations', 'termination_b_region', 'termination_b_sitegroup', 'termination_b_site',
- 'termination_b_location', 'termination_b_powerpanel', 'b_terminations', 'type', 'status', 'tenant_group',
- 'tenant', 'label', 'color', 'length', 'length_unit', 'tags',
- ]
|