feat: show both last and current cycle status in payment data

- Add current cycle status calculation and display
- Show both Last Cycle and Current Cycle status badges
- Replace single Status field with two separate fields
This commit is contained in:
Moritz 2025-12-16 12:10:23 +01:00
parent 355d5bea9e
commit aece03c9c2
Signed by: moritz
GPG key ID: 1020A035E5DD0824

View file

@ -179,7 +179,7 @@ defmodule MvWeb.MemberLive.Show do
value={MembershipFeeHelpers.format_interval(@member.membership_fee_type.interval)}
class="w-28"
/>
<.data_field label={gettext("Status")} class="w-24">
<.data_field label={gettext("Last Cycle")} class="w-28">
<%= if @member.last_cycle_status do %>
<% status = @member.last_cycle_status %>
<span class={["badge", MembershipFeeHelpers.status_color(status)]}>
@ -189,6 +189,16 @@ defmodule MvWeb.MemberLive.Show do
<span class="badge badge-ghost">{gettext("No cycles")}</span>
<% end %>
</.data_field>
<.data_field label={gettext("Current Cycle")} class="w-28">
<%= if @member.current_cycle_status do %>
<% status = @member.current_cycle_status %>
<span class={["badge", MembershipFeeHelpers.status_color(status)]}>
{format_status_label(status)}
</span>
<% else %>
<span class="badge badge-ghost">{gettext("No cycles")}</span>
<% end %>
</.data_field>
</div>
<% else %>
<div class="text-base-content/70 italic">
@ -230,9 +240,13 @@ defmodule MvWeb.MemberLive.Show do
member = Ash.read_one!(query)
# Calculate last cycle status from loaded cycles
# Calculate last and current cycle status from loaded cycles
last_cycle_status = get_last_cycle_status(member)
member = Map.put(member, :last_cycle_status, last_cycle_status)
current_cycle_status = get_current_cycle_status(member)
member =
member
|> Map.put(:last_cycle_status, last_cycle_status)
|> Map.put(:current_cycle_status, current_cycle_status)
{:noreply,
socket
@ -312,6 +326,13 @@ defmodule MvWeb.MemberLive.Show do
end
end
defp get_current_cycle_status(member) do
case MembershipFeeHelpers.get_current_cycle(member) do
nil -> nil
cycle -> cycle.status
end
end
defp format_address(member) do
street_part =
[member.street, member.house_number]