diff --git a/lib/mv_web/live/member_live/show.ex b/lib/mv_web/live/member_live/show.ex
index faa4ffc..f283a2c 100644
--- a/lib/mv_web/live/member_live/show.ex
+++ b/lib/mv_web/live/member_live/show.ex
@@ -21,6 +21,8 @@ defmodule MvWeb.MemberLive.Show do
use MvWeb, :live_view
import Ash.Query
+ alias MvWeb.Helpers.MembershipFeeHelpers
+
@impl true
def render(assigns) do
~H"""
@@ -162,25 +164,37 @@ defmodule MvWeb.MemberLive.Show do
<% end %>
- <%!-- Payment Data Section (Mockup) --%>
+ <%!-- Payment Data Section --%>
<.section_box title={gettext("Payment Data")}>
-
- <.icon name="hero-information-circle" class="size-5" />
- {gettext("This data is for demonstration purposes only (mockup).")}
-
-
-
- <.data_field label={gettext("Contribution")} value="72 €" class="w-24" />
- <.data_field label={gettext("Payment Cycle")} value={gettext("monthly")} class="w-28" />
- <.data_field label={gettext("Paid")} class="w-24">
- <%= if @member.paid do %>
- {gettext("Paid")}
- <% else %>
- {gettext("Pending")}
- <% end %>
-
-
+ <%= if @member.membership_fee_type do %>
+
+ <.data_field
+ label={gettext("Membership Fee")}
+ value={MembershipFeeHelpers.format_currency(@member.membership_fee_type.amount)}
+ class="w-24"
+ />
+ <.data_field
+ label={gettext("Payment Cycle")}
+ value={MembershipFeeHelpers.format_interval(@member.membership_fee_type.interval)}
+ class="w-28"
+ />
+ <.data_field label={gettext("Status")} class="w-24">
+ <%= if @member.last_cycle_status do %>
+ <% status = @member.last_cycle_status %>
+
+ {format_status_label(status)}
+
+ <% else %>
+ {gettext("No cycles")}
+ <% end %>
+
+
+ <% else %>
+
+ {gettext("No membership fee type assigned")}
+
+ <% end %>
<% end %>
@@ -216,6 +230,10 @@ defmodule MvWeb.MemberLive.Show do
member = Ash.read_one!(query)
+ # Calculate last cycle status from loaded cycles
+ last_cycle_status = get_last_cycle_status(member)
+ member = Map.put(member, :last_cycle_status, last_cycle_status)
+
{:noreply,
socket
|> assign(:page_title, page_title(socket.assigns.live_action))
@@ -282,6 +300,18 @@ defmodule MvWeb.MemberLive.Show do
defp display_value(""), do: ""
defp display_value(value), do: value
+ defp format_status_label(:paid), do: gettext("Paid")
+ defp format_status_label(:unpaid), do: gettext("Unpaid")
+ defp format_status_label(:suspended), do: gettext("Suspended")
+ defp format_status_label(nil), do: gettext("No status")
+
+ defp get_last_cycle_status(member) do
+ case MembershipFeeHelpers.get_last_completed_cycle(member) do
+ nil -> nil
+ cycle -> cycle.status
+ end
+ end
+
defp format_address(member) do
street_part =
[member.street, member.house_number]