From 3f723a3c3abfa8d3b8bcc5a102a95d80606c7e96 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 16 Dec 2025 12:20:05 +0100 Subject: [PATCH] feat: add cycle management features to membership fees component - Add regenerate cycles functionality - Add delete cycle with confirmation - Add edit cycle amount modal - Add regenerate missing cycles button - Complete cycle management UI implementation --- .../show/membership_fees_component.ex | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/mv_web/live/member_live/show/membership_fees_component.ex b/lib/mv_web/live/member_live/show/membership_fees_component.ex index 2a24591..3176e3d 100644 --- a/lib/mv_web/live/member_live/show/membership_fees_component.ex +++ b/lib/mv_web/live/member_live/show/membership_fees_component.ex @@ -374,14 +374,32 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do :suspended -> :mark_as_suspended end - case Ash.update!(cycle, action) do - updated_cycle -> + case Ash.update(cycle, action: action) do + {:ok, updated_cycle} -> updated_cycles = replace_cycle(socket.assigns.cycles, updated_cycle) {:noreply, socket |> assign(:cycles, updated_cycles) |> put_flash(:info, gettext("Cycle status updated"))} + + {:error, %Ash.Error.Invalid{} = error} -> + error_msg = + error.errors + |> Enum.map(fn e -> e.message end) + |> Enum.join(", ") + + {:noreply, + socket + |> put_flash( + :error, + gettext("Failed to update cycle status: %{errors}", errors: error_msg) + )} + + {:error, error} -> + {:noreply, + socket + |> put_flash(:error, format_error(error))} end end