Hi @axelson , thanks for the input.
The offending table:
<div id="tc-appr-data" class="apprv-margin-top apprv-margin-left apprv-data-table-dimensions overflow-scroll absolute">
<table align="left" class="collapse">
<tbody>
<%= for {_department, engagements} <- grouped_engagements do %>
<%= for engagement <- engagements do %>
<%
timecards = Map.get(tcs_by_oid, engagement.offer_id, [])
%>
<tr class="apprv-row-height f6 ba k-b--lighter-grey">
<%=
render "approver_components/crew_member_row.html",
timecards: timecards,
conn: @conn,
project: @project,
approvers: @approvers,
current_user: @current_user,
week_date_range: week_date_range,
col_width: col_width
%>
</tr>
<% end %>
<% end %>
</tbody>
</table>
</div>
And the component approver_components/crew_member_row.html
.
(a bit big)
<%
tcs_by_date = Enum.group_by(@timecards, & &1.date)
%>
<%= for date <- @week_date_range do %>
<%
tc = if tcs_by_date[date], do: tcs_by_date[date] |> hd(), else: nil
date_string = Date.to_string(date)
collapsible_column_id = "collapsible-column-#{date_string}"
border = "ba k-b--lighter-grey "
%>
<%= if !tc do %>
<%=
render "approver_components/no_tc_column.html",
col_width: @col_width,
collapsible_column_id: collapsible_column_id,
border: border
%>
<% else %>
<%
can_approve? = check_approvable?(@conn, @project, @approvers, @current_user, tc)
# check this user can approve this tc to determine which data to show
tc_data = if can_approve?, do: tc.latest_data_for_approver, else: tc.latest_approved_data
shoot_day? = Ev2.Timecards.shoot_day?(tc_data)
original = get_crew_data(tc)
%>
<%
# if tc was auto submitted, use grey font
base_colour = get_tc_data_base_font_colour(tc, tc_data)
%>
<!-- Time columns -->
<%= if tc_data.straight_day? || !shoot_day? do %>
<%
abbreviated_day_type = get_abbreviated_day_type(tc_data)
original_day_type = get_abbreviated_day_type(original)
colour =
case original_day_type == abbreviated_day_type do
true -> base_colour
false -> " red"
end
%>
<!-- show day type if either straight day or non shoot day -->
<td colspan="2" class="tc truncate bl k-b--light-grey <%= "#{@col_width."6"} #{colour}" %>">
<%= abbreviated_day_type %>
</td>
<% else %>
<%
column_data = [
{format_time(original.start_datetime), format_time(tc_data.start_datetime), "bl k-b--light-grey"},
{format_time(original.finish_datetime), format_time(tc_data.finish_datetime), "ba k-b--lighter-grey"}
]
%>
<%= for {original, latest, class} <- column_data do %>
<%
colour =
case original == latest do
true -> base_colour
false -> " red"
end
%>
<td class="tc <%= "#{@col_width."3"} #{class}" %> <%= colour %>">
<%= if shoot_day?, do: latest %>
</td>
<% end %>
<% end %>
<!-- non-time columns -->
<%
# TODO: # TODO: # TODO: Use formatted tc data
column_data = [
{format_nil(original.camera_ot), format_nil(tc_data.camera_ot), @col_width."3", false, :with_border, :camera_ot},
{format_nil(original.other_ot), format_nil(tc_data.other_ot), @col_width."3", false, false, :other_ot},
{format_nil(original.ot.additional_day_penalty), format_nil(tc_data.ot.additional_day_penalty), @col_width."3", :collapsible, :with_border, :unit},
{get_unit_name(original.unit), get_unit_name(tc_data.unit), @col_width."6", :collapsible, :with_border, :unit},
{format_locations(original.locations), format_locations(tc_data.locations), @col_width."6", :collapsible, :with_border, :locations},
{original.upgrade, tc_data.upgrade, @col_width."6", :collapsible, :with_border, :upgrade},
{format_allowances(original), format_allowances(tc_data), @col_width."4", :collapsible, :with_border, :allowances}
]
%>
<%= for {original, latest, width, collapsible?, with_border?, atom} <- column_data do %>
<%
colour =
case original == latest do
true -> base_colour
false -> "red"
end
id = if collapsible?, do: collapsible_column_id
display = if collapsible?, do: "dn"
border = if with_border?, do: "ba k-b--lighter-grey"
latest = atom == :locations && latest != nil && String.contains?(latest, ", ") && "Multi" || latest
%>
<td id="<%= id %>" class="tc truncate <%= "#{border} #{width} #{colour} #{display}" %>">
<%= latest %>
</td>
<% end %>
<!-- approval columns -->
<td id="<%= collapsible_column_id %>" class="<%= @col_width."2" %> <%= border %> tc dn">
<%= if !approver_exists?(tc, :dept) do %>
<!-- no dept approver -->
n/a
<% else %>
<%= if tc_approved_by?(tc, :dept) && tc.approvals_by_type.dept.auto_generated? do %>
<!-- was auto approved -->
<span class="k-grey">Auto</span>
<% else %>
<%= if tc_approved_by?(tc, :dept) do %>
<!-- was manually approved -->
<img class="w1" src="/images/tick-light.svg" />
<% end %>
<% end %>
<% end %>
</td>
<td id="<%= collapsible_column_id %>" class="<%= @col_width."2" %> <%= border %> tc dn">
<%= if tc_approved_by?(tc, :prod) do %>
<img class="w1" src="/images/tick-light.svg" />
<% end %>
</td>
<td id="<%= collapsible_column_id %>" class="<%= @col_width."2" %> tc dn">
<%= if tc_approved_by?(tc, :accs) do %>
<img class="w1" src="/images/tick-light.svg" />
<% end %>
</td>
<% end %>
<% end %>
Sorry that is a lot to pick through. Too much logic in that last component.