mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 09:16:10 -06:00
Closes #12518: Add 'asset tag' to rack view
This commit is contained in:
parent
9eeca06115
commit
6756256afb
@ -291,6 +291,10 @@ class RackElevationDetailFilterSerializer(serializers.Serializer):
|
||||
required=False,
|
||||
default=True
|
||||
)
|
||||
use_assettag = serializers.BooleanField(
|
||||
required=False,
|
||||
default=False
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
|
@ -222,7 +222,8 @@ class RackViewSet(NetBoxModelViewSet):
|
||||
legend_width=data['legend_width'],
|
||||
include_images=data['include_images'],
|
||||
base_url=request.build_absolute_uri('/'),
|
||||
highlight_params=highlight_params
|
||||
highlight_params=highlight_params,
|
||||
use_assettag=data['use_assettag']
|
||||
)
|
||||
return HttpResponse(drawing.tostring(), content_type='image/svg+xml')
|
||||
|
||||
|
@ -394,7 +394,8 @@ class Rack(PrimaryModel, WeightMixin):
|
||||
margin_width=RACK_ELEVATION_DEFAULT_MARGIN_WIDTH,
|
||||
include_images=True,
|
||||
base_url=None,
|
||||
highlight_params=None
|
||||
highlight_params=None,
|
||||
use_assettag=False
|
||||
):
|
||||
"""
|
||||
Return an SVG of the rack elevation
|
||||
@ -419,7 +420,8 @@ class Rack(PrimaryModel, WeightMixin):
|
||||
user=user,
|
||||
include_images=include_images,
|
||||
base_url=base_url,
|
||||
highlight_params=highlight_params
|
||||
highlight_params=highlight_params,
|
||||
use_assettag=use_assettag
|
||||
)
|
||||
|
||||
return elevation.render(face)
|
||||
|
@ -23,8 +23,10 @@ __all__ = (
|
||||
)
|
||||
|
||||
|
||||
def get_device_name(device):
|
||||
if device.virtual_chassis:
|
||||
def get_device_name(device, use_assettag):
|
||||
if use_assettag and device.asset_tag:
|
||||
name = device.asset_tag
|
||||
elif device.virtual_chassis:
|
||||
name = f'{device.virtual_chassis.name}:{device.vc_position}'
|
||||
elif device.name:
|
||||
name = device.name
|
||||
@ -76,10 +78,11 @@ class RackElevationSVG:
|
||||
:param highlight_params: Iterable of two-tuples which identifies attributes of devices to highlight
|
||||
"""
|
||||
def __init__(self, rack, unit_height=None, unit_width=None, legend_width=None, margin_width=None, user=None,
|
||||
include_images=True, base_url=None, highlight_params=None):
|
||||
include_images=True, base_url=None, highlight_params=None, use_assettag=False):
|
||||
self.rack = rack
|
||||
self.include_images = include_images
|
||||
self.base_url = base_url.rstrip('/') if base_url is not None else ''
|
||||
self.use_assettag = use_assettag
|
||||
|
||||
# Set drawing dimensions
|
||||
config = get_config()
|
||||
@ -152,7 +155,8 @@ class RackElevationSVG:
|
||||
return x, y
|
||||
|
||||
def _draw_device(self, device, coords, size, color=None, image=None):
|
||||
name = get_device_name(device)
|
||||
name = get_device_name(device, self.use_assettag)
|
||||
asset_tag = f"[{device.asset_tag}]" if device.asset_tag else name
|
||||
description = get_device_description(device)
|
||||
text_color = f'#{foreground_color(color)}' if color else '#000000'
|
||||
text_coords = (
|
||||
@ -174,6 +178,7 @@ class RackElevationSVG:
|
||||
else:
|
||||
link.add(Rect(coords, size, class_=f'slot blocked{css_extra}'))
|
||||
link.add(Text(name, insert=text_coords, fill=text_color, class_=f'label{css_extra}'))
|
||||
link.add(Text(asset_tag, insert=text_coords, fill=text_color, class_=f'hidden asset-tag{css_extra}'),)
|
||||
|
||||
# Embed device type image if provided
|
||||
if self.include_images and image:
|
||||
|
BIN
netbox/project-static/dist/netbox.js
vendored
BIN
netbox/project-static/dist/netbox.js
vendored
Binary file not shown.
BIN
netbox/project-static/dist/netbox.js.map
vendored
BIN
netbox/project-static/dist/netbox.js.map
vendored
Binary file not shown.
@ -16,18 +16,31 @@ function setRackView(
|
||||
case 'images-and-labels': {
|
||||
showRackElements('image.device-image', elevation);
|
||||
showRackElements('text.device-image-label', elevation);
|
||||
showRackElements('text.label', elevation);
|
||||
hideRackElements('text.asset-tag', elevation);
|
||||
break;
|
||||
}
|
||||
case 'images-only': {
|
||||
showRackElements('image.device-image', elevation);
|
||||
hideRackElements('text.device-image-label', elevation);
|
||||
showRackElements('text.label', elevation);
|
||||
hideRackElements('text.asset-tag', elevation);
|
||||
break;
|
||||
}
|
||||
case 'labels-only': {
|
||||
hideRackElements('image.device-image', elevation);
|
||||
hideRackElements('text.device-image-label', elevation);
|
||||
showRackElements('text.label', elevation);
|
||||
hideRackElements('text.asset-tag', elevation);
|
||||
break;
|
||||
}
|
||||
case 'assettags-only': {
|
||||
hideRackElements('image.device-image', elevation);
|
||||
hideRackElements('text.device-image-label', elevation);
|
||||
hideRackElements('text.label', elevation);
|
||||
showRackElements('text.asset-tag', elevation);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,10 @@
|
||||
import { createState } from '../state';
|
||||
|
||||
export type RackViewSelection = 'images-and-labels' | 'images-only' | 'labels-only';
|
||||
export type RackViewSelection =
|
||||
| 'images-and-labels'
|
||||
| 'images-only'
|
||||
| 'labels-only'
|
||||
| 'assettags-only';
|
||||
|
||||
export const rackImagesState = createState<{ view: RackViewSelection }>(
|
||||
{ view: 'images-and-labels' },
|
||||
|
@ -173,6 +173,7 @@
|
||||
<option value="images-and-labels" selected="selected">Images and Labels</option>
|
||||
<option value="images-only">Images only</option>
|
||||
<option value="labels-only">Labels only</option>
|
||||
<option value="assettags-only">AssetTags only</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="row" style="margin-bottom: 20px">
|
||||
|
@ -15,6 +15,7 @@
|
||||
<option value="images-and-labels" selected="selected">Images and Labels</option>
|
||||
<option value="images-only">Images only</option>
|
||||
<option value="labels-only">Labels only</option>
|
||||
<option value="assettags-only">AssetTags only</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="btn-group btn-group-sm" role="group">
|
||||
|
Loading…
Reference in New Issue
Block a user