diff --git a/app/models/frame.rb b/app/models/frame.rb
index 72dac7304..972fd4b6b 100644
--- a/app/models/frame.rb
+++ b/app/models/frame.rb
@@ -12,8 +12,20 @@ class Frame < ApplicationRecord # rubocop:disable Metrics/ClassLength
belongs_to :bay
has_many :materials, -> { order("servers.position desc") }, class_name: "Server", dependent: :restrict_with_error
- has_many :pdus, -> { only_pdus }, class_name: "Server", dependent: :restrict_with_error
- has_many :servers, -> { no_pdus.order("servers.position desc") }, class_name: "Server", dependent: :restrict_with_error
+ has_many :servers,
+ -> { no_pdus.order("servers.position desc") },
+ class_name: "Server",
+ dependent: :restrict_with_error
+
+ has_many :power_distribution_units, dependent: :restrict_with_error
+ has_many :left_power_distribution_units,
+ -> { left },
+ class_name: "PowerDistributionUnit",
+ dependent: :restrict_with_error
+ has_many :right_power_distribution_units,
+ -> { right },
+ class_name: "PowerDistributionUnit",
+ dependent: :restrict_with_error
has_one :islet, through: :bay
has_one :room, through: :islet
diff --git a/app/views/visualization/frames/_show_complete_frame.html.erb b/app/views/visualization/frames/_show_complete_frame.html.erb
index 8649d7e50..c6da08b6c 100644
--- a/app/views/visualization/frames/_show_complete_frame.html.erb
+++ b/app/views/visualization/frames/_show_complete_frame.html.erb
@@ -1,8 +1,6 @@
<%# locals: (room:, frame:, should_show_heading: true) -%>
-<%
- settings = { min_height: params[:view] == "back" ? 20 : 27 }
-%>
+<% settings = { min_height: params[:view] == "back" ? 20 : 27 } %>
@@ -20,24 +18,59 @@
-
-
+
<%= render partial: "visualization/frames/show_frame",
locals: {
frame:, servers: frame.servers, settings:, view_type: "front",
} %>
-
+
+
<%= render partial: "visualization/frames/show_frame",
locals: {
frame:, servers: frame.servers, settings:, view_type: "back",
} %>
-
+
+ <% if frame.left_power_distribution_units.any? %>
+
+ <% frame.left_power_distribution_units.each do |power_distribution_unit| %>
+ <%= render CardComponent.new(extra_classes: "bg-body-tertiary rounded-bottom") do |card| %>
+ <% card.with_header do %>
+
+ <%= link_to power_distribution_unit_path(power_distribution_unit) do %>
+ <%= render power_distribution_unit.decorated.power_line_badge_component %>
+ <% end %>
+
+ <% end %>
+
+ <%= render partial: "power_distribution_units/visualization",
+ locals: { power_distribution_unit: } %>
+ <% end %>
+ <% end %>
+
+ <% end %>
+
+ <% if frame.right_power_distribution_units.any? %>
+
+ <% frame.right_power_distribution_units.each do |power_distribution_unit| %>
+ <%= render CardComponent.new(extra_classes: "bg-body-tertiary rounded-bottom") do |card| %>
+ <% card.with_header do %>
+
+ <%= link_to power_distribution_unit_path(power_distribution_unit) do %>
+ <%= render power_distribution_unit.decorated.power_line_badge_component %>
+ <% end %>
+
+ <% end %>
+
+ <%= render partial: "power_distribution_units/visualization",
+ locals: { power_distribution_unit: } %>
+ <% end %>
+ <% end %>
+
+ <% end %>
diff --git a/app/views/visualization/frames/show.html.erb b/app/views/visualization/frames/show.html.erb
index b08adcda8..fe9c87ebb 100644
--- a/app/views/visualization/frames/show.html.erb
+++ b/app/views/visualization/frames/show.html.erb
@@ -41,7 +41,7 @@
<%= render "ports/modal_edit_port" %>
-