diff --git a/lib/mv_web/helpers/membership_fee_helpers.ex b/lib/mv_web/helpers/membership_fee_helpers.ex
index 8b97c15..f6b6ec0 100644
--- a/lib/mv_web/helpers/membership_fee_helpers.ex
+++ b/lib/mv_web/helpers/membership_fee_helpers.ex
@@ -28,6 +28,7 @@ defmodule MvWeb.Helpers.MembershipFeeHelpers do
# Use German format: comma as decimal separator, always 2 decimal places
# Normalize to 2 decimal places
normalized = Decimal.round(amount, 2)
+
normalized_str =
normalized
|> Decimal.to_string(:normal)
diff --git a/lib/mv_web/live/member_live/show.ex b/lib/mv_web/live/member_live/show.ex
index e29e00a..0b6ed18 100644
--- a/lib/mv_web/live/member_live/show.ex
+++ b/lib/mv_web/live/member_live/show.ex
@@ -248,6 +248,7 @@ defmodule MvWeb.MemberLive.Show do
# Calculate last and current cycle status from loaded cycles
last_cycle_status = get_last_cycle_status(member)
current_cycle_status = get_current_cycle_status(member)
+
member =
member
|> Map.put(:last_cycle_status, last_cycle_status)
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 2a33e22..a4ea5d4 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
@@ -39,7 +39,9 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
<% else %>
- {gettext("No membership fee type assigned")}
+
+ {gettext("No membership fee type assigned")}
+
<% end %>
@@ -369,9 +371,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
{:error, %Ash.Error.Invalid{} = error} ->
error_msg =
- error.errors
- |> Enum.map(fn e -> e.message end)
- |> Enum.join(", ")
+ Enum.map_join(error.errors, ", ", fn e -> e.message end)
{:noreply,
socket
@@ -424,7 +424,6 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
end
end
-
def handle_event("edit_cycle_amount", %{"cycle_id" => cycle_id}, socket) do
cycle = find_cycle(socket.assigns.cycles, cycle_id)
diff --git a/lib/mv_web/live/membership_fee_settings_live.ex b/lib/mv_web/live/membership_fee_settings_live.ex
index 206bc85..61774e8 100644
--- a/lib/mv_web/live/membership_fee_settings_live.ex
+++ b/lib/mv_web/live/membership_fee_settings_live.ex
@@ -44,7 +44,8 @@ defmodule MvWeb.MembershipFeeSettingsLive do
Map.put(params, "include_joining_cycle", false)
end
- {:noreply, assign(socket, form: AshPhoenix.Form.validate(socket.assigns.form, normalized_params))}
+ {:noreply,
+ assign(socket, form: AshPhoenix.Form.validate(socket.assigns.form, normalized_params))}
end
def handle_event("save", %{"settings" => params}, socket) do
diff --git a/lib/mv_web/live/membership_fee_type_live/form.ex b/lib/mv_web/live/membership_fee_type_live/form.ex
index 5c276ff..0025974 100644
--- a/lib/mv_web/live/membership_fee_type_live/form.ex
+++ b/lib/mv_web/live/membership_fee_type_live/form.ex
@@ -324,55 +324,32 @@ defmodule MvWeb.MembershipFeeTypeLive.Form do
defp get_existing_form_values(form) do
# Extract values directly from form fields to get current state
# This ensures we get the actual current values, not just initial params
- existing_values = %{}
-
- existing_values =
- if form[:name] && form[:name].value do
- Map.put(existing_values, "name", to_string(form[:name].value))
- else
- existing_values
- end
-
- existing_values =
- if form[:amount] && form[:amount].value do
- # Convert Decimal to string for form
- amount_str =
- case form[:amount].value do
- %Decimal{} = amount -> Decimal.to_string(amount, :normal)
- value when is_binary(value) -> value
- value -> to_string(value)
- end
-
- Map.put(existing_values, "amount", amount_str)
- else
- existing_values
- end
-
- existing_values =
- if form[:interval] && form[:interval].value do
- # Convert atom to string for form
- interval_str =
- case form[:interval].value do
- value when is_atom(value) -> Atom.to_string(value)
- value when is_binary(value) -> value
- value -> to_string(value)
- end
-
- Map.put(existing_values, "interval", interval_str)
- else
- existing_values
- end
-
- existing_values =
- if form[:description] && form[:description].value do
- Map.put(existing_values, "description", to_string(form[:description].value))
- else
- existing_values
- end
-
- existing_values
+ %{}
+ |> extract_form_value(form, :name, &to_string/1)
+ |> extract_form_value(form, :amount, &format_amount_value/1)
+ |> extract_form_value(form, :interval, &format_interval_value/1)
+ |> extract_form_value(form, :description, &to_string/1)
end
+ # Helper to extract a single form field value
+ defp extract_form_value(acc, form, field, formatter) do
+ if form[field] && form[field].value do
+ Map.put(acc, to_string(field), formatter.(form[field].value))
+ else
+ acc
+ end
+ end
+
+ # Formats amount value (Decimal or string) to string
+ defp format_amount_value(%Decimal{} = amount), do: Decimal.to_string(amount, :normal)
+ defp format_amount_value(value) when is_binary(value), do: value
+ defp format_amount_value(value), do: to_string(value)
+
+ # Formats interval value (atom or string) to string
+ defp format_interval_value(value) when is_atom(value), do: Atom.to_string(value)
+ defp format_interval_value(value) when is_binary(value), do: value
+ defp format_interval_value(value), do: to_string(value)
+
@spec return_path(String.t(), MembershipFeeType.t() | nil) :: String.t()
defp return_path("index", _membership_fee_type), do: ~p"/membership_fee_types"
diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po
index bd20a73..cc93a73 100644
--- a/priv/gettext/de/LC_MESSAGES/default.po
+++ b/priv/gettext/de/LC_MESSAGES/default.po
@@ -17,6 +17,7 @@ msgid "Actions"
msgstr "Aktionen"
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#: lib/mv_web/live/user_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Are you sure?"
@@ -37,6 +38,8 @@ msgstr "Stadt"
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#: lib/mv_web/live/user_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -141,9 +144,10 @@ msgstr "Notizen"
#: lib/mv_web/live/components/payment_filter_component.ex
#: lib/mv_web/live/contribution_period_live/show.ex
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#: lib/mv_web/translations/member_fields.ex
#, elixir-autogen, elixir-format
msgid "Paid"
@@ -170,6 +174,7 @@ msgstr "Mitglied speichern"
#: lib/mv_web/live/custom_field_value_live/form.ex
#: lib/mv_web/live/global_settings_live.ex
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
msgid "Saving..."
@@ -256,6 +261,8 @@ msgstr "Ihr Passwort wurde erfolgreich zurückgesetzt"
#: lib/mv_web/live/custom_field_live/index_component.ex
#: lib/mv_web/live/custom_field_value_live/form.ex
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
msgid "Cancel"
@@ -268,6 +275,7 @@ msgstr "Mitglied auswählen"
#: lib/mv_web/live/custom_field_live/form_component.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Description"
msgstr "Beschreibung"
@@ -302,6 +310,7 @@ msgstr "Mitglied"
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/member_live/index.ex
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Members"
msgstr "Mitglieder"
@@ -309,6 +318,8 @@ msgstr "Mitglieder"
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/custom_field_live/form_component.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Name"
msgstr "Name"
@@ -776,6 +787,7 @@ msgid "This field cannot be empty"
msgstr "Dieses Feld darf nicht leer bleiben"
#: lib/mv_web/components/core_components.ex
+#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "All"
msgstr "Alle"
@@ -807,7 +819,6 @@ msgid "Back"
msgstr "Zurück"
#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Coming soon"
msgstr "Demnächst verfügbar"
@@ -818,40 +829,26 @@ msgstr "Demnächst verfügbar"
msgid "Contact Data"
msgstr "Kontaktdaten"
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "Contribution"
-msgstr "Beitrag"
-
#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "Nr."
msgstr "Nr."
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payment Cycle"
msgstr "Zahlungszyklus"
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payment Data"
msgstr "Beitragsdaten"
#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payments"
msgstr "Zahlungen"
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "Pending"
-msgstr "Ausstehend"
-
#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
@@ -866,27 +863,11 @@ msgid "Phone"
msgstr "Telefon"
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "Save"
msgstr "Speichern"
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "This data is for demonstration purposes only (mockup)."
-msgstr "Diese Daten dienen nur zu Demonstrationszwecken (Mockup)."
-
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "monthly"
-msgstr "monatlich"
-
-#: lib/mv_web/live/member_live/form.ex
-#, elixir-autogen, elixir-format
-msgid "yearly"
-msgstr "jährlich"
-
#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "Create Member"
@@ -906,6 +887,9 @@ msgstr "Über Beitragsarten"
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Amount"
msgstr "Betrag"
@@ -916,6 +900,7 @@ msgid "Back to Settings"
msgstr "Zurück zu den Einstellungen"
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Can be changed at any time. Amount changes affect future periods only."
msgstr "Kann jederzeit geändert werden. Änderungen des Betrags betreffen nur zukünftige Zyklen."
@@ -935,7 +920,6 @@ msgstr "Beitragsart ändern"
msgid "Contribution Start"
msgstr "Beitragsbeginn"
-#: lib/mv_web/components/layouts/navbar.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Types"
@@ -967,6 +951,7 @@ msgid "Current"
msgstr "Aktuell"
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Deletion"
msgstr "Löschen"
@@ -982,6 +967,7 @@ msgid "Family"
msgstr "Familie"
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Fixed after creation. Members can only switch between types with the same interval."
msgstr "Festgelegt nach der Erstellung. Mitglieder können nur zwischen Beitragsarten mit gleichem Intervall wechseln."
@@ -991,9 +977,11 @@ msgstr "Festgelegt nach der Erstellung. Mitglieder können nur zwischen Beitrags
msgid "Global Settings"
msgstr "Vereinsdaten"
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Half-yearly"
msgstr "Halbjährlich"
@@ -1011,6 +999,9 @@ msgstr "Ehrenamtlich"
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Interval"
msgstr "Zyklus"
@@ -1080,9 +1071,11 @@ msgstr "Mitglied seit"
msgid "Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
msgstr "Mitglieder können nur zwischen Beitragsarten mit demselben Zahlungszyklus wechseln (z. B. jährlich zu jährlich). Dadurch werden komplexe Überlappungen vermieden."
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Monthly"
msgstr "Monatlich"
@@ -1093,6 +1086,7 @@ msgid "Monthly fee for students and trainees"
msgstr "Monatlicher Beitrag für Studierende und Auszubildende"
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Name & Amount"
msgstr "Name & Betrag"
@@ -1108,6 +1102,7 @@ msgid "No fee for honorary members"
msgstr "Kein Beitrag für ehrenamtliche Mitglieder"
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Only possible if no members are assigned to this type."
msgstr "Nur möglich, wenn diesem Typ keine Mitglieder zugewiesen sind."
@@ -1128,9 +1123,11 @@ msgstr "Bezahlt durch Überweisung"
msgid "Preview Mockup"
msgstr "Vorschau"
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Quarterly"
msgstr "Vierteljährlich"
@@ -1168,6 +1165,7 @@ msgid "Standard membership fee for regular members"
msgstr "Regulärer Mitgliedsbeitrag für Vollmitglieder"
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "Status"
msgstr "Status"
@@ -1188,6 +1186,9 @@ msgid "Suspend"
msgstr "Pausieren"
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#, elixir-autogen, elixir-format
msgid "Suspended"
msgstr "Pausiert"
@@ -1209,6 +1210,9 @@ msgid "Total Contributions"
msgstr "Gesamtbeiträge"
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#, elixir-autogen, elixir-format
msgid "Unpaid"
msgstr "Unbezahlt"
@@ -1218,9 +1222,11 @@ msgstr "Unbezahlt"
msgid "Why are not all contribution types shown?"
msgstr "Warum werden nicht alle Beitragsarten angezeigt?"
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Yearly"
msgstr "jährlich"
@@ -1241,6 +1247,7 @@ msgid "Last name"
msgstr "Nachname"
#: lib/mv_web/components/core_components.ex
+#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "None"
msgstr "Keine"
@@ -1422,6 +1429,322 @@ msgstr "Jährliches Intervall – Beitrittszeitraum nicht einbezogen"
msgid "Yearly Interval - Joining Cycle Included"
msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen"
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "About Membership Fee Types"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Already paid cycles will remain with the old amount."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "An error occurred"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Are you sure you want to delete this cycle?"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Cannot delete - %{count} member(s) assigned"
+msgstr "Löschen nicht möglich – es sind Mitglieder zugewiesen"
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Change Amount?"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Changing the amount will affect %{count} member(s)."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Confirm Change"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Current Cycle"
+msgstr "Aktuell"
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Current amount"
+msgstr "Aktuell"
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle amount updated"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle deleted"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle status updated"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycles regenerated successfully"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Delete Cycle"
+msgstr "Löschen"
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Edit Cycle Amount"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Edit Membership Fee Type"
+msgstr "Mitglied bearbeiten"
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Edit amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Failed to update cycle status: %{errors}"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Future unpaid cycles will be regenerated with the new amount."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Generate cycles from the last existing cycle to today"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Interval cannot be changed after creation."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Invalid amount format"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Last Cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Manage membership fee types for membership fees."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Mark as paid"
+msgstr "Als unbezahlt markieren"
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Mark as suspended"
+msgstr "Als pausiert markieren"
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Mark as unpaid"
+msgstr "Als unbezahlt markieren"
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee"
+msgstr "Mitgliedsbeitragseinstellungen"
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee Status"
+msgstr "Mitgliedsbeitragseinstellungen"
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee Type"
+msgstr "Mitgliedsbeitragseinstellungen"
+
+#: lib/mv_web/components/layouts/navbar.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee Types"
+msgstr "Mitgliedsbeitragseinstellungen"
+
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fees"
+msgstr "Mitgliedsbeitragseinstellungen"
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership fee type deleted"
+msgstr "Beitragsbeginn"
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership fee type removed"
+msgstr "Beitragsbeginn"
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type saved successfully"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type updated. Cycles regenerated."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership fee types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
+msgstr "Beitragsarten definieren verschiedene Beitragsmodelle. Jede Art hat einen festen Zyklus (monatlich, vierteljährlich, halbjährlich, jährlich), der nach Erstellung nicht mehr geändert werden kann."
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "New Membership Fee Type"
+msgstr "Standard-Mitgliedsbeitragsart"
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "New amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "No cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "No cycles"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "No membership fee type assigned"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "No status"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Please confirm the amount change first"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Regenerate Cycles"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Regenerating..."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Save Membership Fee Type"
+msgstr "Standard-Mitgliedsbeitragsart"
+
+#: lib/mv_web/live/member_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Select a membership fee type for this member. Members can only switch between types with the same interval."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Select interval"
+msgstr "Alle auswählen"
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Show current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Show last completed cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Switch to current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Switch to last completed cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Type"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Unpaid in current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Unpaid in last cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Use this form to manage membership fee types in your database."
+msgstr "Verwenden Sie dieses Formular, um Benutzer*innen-Datensätze zu verwalten."
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval."
+msgstr ""
+
#~ #: lib/mv_web/live/custom_field_live/show.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "Auto-generated identifier (immutable)"
@@ -1432,6 +1755,12 @@ msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen"
#~ msgid "Configure global settings for membership contributions."
#~ msgstr "Globale Einstellungen für Mitgliedsbeiträge konfigurieren."
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "Contribution"
+#~ msgstr "Beitrag"
+
#~ #: lib/mv_web/components/layouts/navbar.ex
#~ #: lib/mv_web/live/contribution_settings_live.ex
#~ #, elixir-autogen, elixir-format, fuzzy
@@ -1488,6 +1817,17 @@ msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen"
#~ msgid "New Custom field"
#~ msgstr "Benutzerdefiniertes Feld speichern"
+#~ #: lib/mv_web/live/user_live/form.ex
+#~ #: lib/mv_web/live/user_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "Not set"
+#~ msgstr "Nicht gesetzt"
+
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "Pending"
+#~ msgstr "Ausstehend"
+
#~ #: lib/mv_web/live/contribution_settings_live.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "Quarterly Interval - Joining Period Excluded"
@@ -1503,6 +1843,12 @@ msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen"
#~ msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
#~ msgstr "Dieser Beitragstyp wird automatisch neuen Mitgliedern zugewiesen. Kann individuell angepasst werden."
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "This data is for demonstration purposes only (mockup)."
+#~ msgstr "Diese Daten dienen nur zu Demonstrationszwecken (Mockup)."
+
#~ #: lib/mv_web/live/contribution_settings_live.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "View Example Member"
@@ -1527,3 +1873,14 @@ msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen"
#~ #, elixir-autogen, elixir-format
#~ msgid "Yearly Interval - Joining Period Included"
#~ msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen"
+
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "monthly"
+#~ msgstr "monatlich"
+
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "yearly"
+#~ msgstr "jährlich"
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index e2bbf32..b78300a 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -18,6 +18,7 @@ msgid "Actions"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#: lib/mv_web/live/user_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Are you sure?"
@@ -38,6 +39,8 @@ msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#: lib/mv_web/live/user_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -142,9 +145,10 @@ msgstr ""
#: lib/mv_web/live/components/payment_filter_component.ex
#: lib/mv_web/live/contribution_period_live/show.ex
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#: lib/mv_web/translations/member_fields.ex
#, elixir-autogen, elixir-format
msgid "Paid"
@@ -171,6 +175,7 @@ msgstr ""
#: lib/mv_web/live/custom_field_value_live/form.ex
#: lib/mv_web/live/global_settings_live.ex
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
msgid "Saving..."
@@ -257,6 +262,8 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/index_component.ex
#: lib/mv_web/live/custom_field_value_live/form.ex
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
msgid "Cancel"
@@ -269,6 +276,7 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/form_component.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Description"
msgstr ""
@@ -303,6 +311,7 @@ msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/member_live/index.ex
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Members"
msgstr ""
@@ -310,6 +319,8 @@ msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/custom_field_live/form_component.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Name"
msgstr ""
@@ -777,6 +788,7 @@ msgid "This field cannot be empty"
msgstr ""
#: lib/mv_web/components/core_components.ex
+#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
@@ -808,7 +820,6 @@ msgid "Back"
msgstr ""
#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Coming soon"
msgstr ""
@@ -819,40 +830,26 @@ msgstr ""
msgid "Contact Data"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "Contribution"
-msgstr ""
-
#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "Nr."
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payment Cycle"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payment Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payments"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "Pending"
-msgstr ""
-
#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
@@ -867,27 +864,11 @@ msgid "Phone"
msgstr ""
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "Save"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "This data is for demonstration purposes only (mockup)."
-msgstr ""
-
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "monthly"
-msgstr ""
-
-#: lib/mv_web/live/member_live/form.ex
-#, elixir-autogen, elixir-format
-msgid "yearly"
-msgstr ""
-
#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "Create Member"
@@ -907,6 +888,9 @@ msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Amount"
msgstr ""
@@ -917,6 +901,7 @@ msgid "Back to Settings"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Can be changed at any time. Amount changes affect future periods only."
msgstr ""
@@ -936,7 +921,6 @@ msgstr ""
msgid "Contribution Start"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Contribution Types"
@@ -968,6 +952,7 @@ msgid "Current"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Deletion"
msgstr ""
@@ -983,6 +968,7 @@ msgid "Family"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Fixed after creation. Members can only switch between types with the same interval."
msgstr ""
@@ -992,9 +978,11 @@ msgstr ""
msgid "Global Settings"
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Half-yearly"
msgstr ""
@@ -1012,6 +1000,9 @@ msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Interval"
msgstr ""
@@ -1081,9 +1072,11 @@ msgstr ""
msgid "Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Monthly"
msgstr ""
@@ -1094,6 +1087,7 @@ msgid "Monthly fee for students and trainees"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Name & Amount"
msgstr ""
@@ -1109,6 +1103,7 @@ msgid "No fee for honorary members"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Only possible if no members are assigned to this type."
msgstr ""
@@ -1129,9 +1124,11 @@ msgstr ""
msgid "Preview Mockup"
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Quarterly"
msgstr ""
@@ -1169,6 +1166,7 @@ msgid "Standard membership fee for regular members"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "Status"
msgstr ""
@@ -1189,6 +1187,9 @@ msgid "Suspend"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#, elixir-autogen, elixir-format
msgid "Suspended"
msgstr ""
@@ -1210,6 +1211,9 @@ msgid "Total Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#, elixir-autogen, elixir-format
msgid "Unpaid"
msgstr ""
@@ -1219,9 +1223,11 @@ msgstr ""
msgid "Why are not all contribution types shown?"
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Yearly"
msgstr ""
@@ -1242,6 +1248,7 @@ msgid "Last name"
msgstr ""
#: lib/mv_web/components/core_components.ex
+#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "None"
msgstr ""
@@ -1422,3 +1429,319 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Cycle Included"
msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "About Membership Fee Types"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Already paid cycles will remain with the old amount."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "An error occurred"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Are you sure you want to delete this cycle?"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Cannot delete - %{count} member(s) assigned"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Change Amount?"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Changing the amount will affect %{count} member(s)."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Confirm Change"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Current Cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Current amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle amount updated"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle deleted"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle status updated"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycles regenerated successfully"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Delete Cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Edit Cycle Amount"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Edit Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Edit amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Failed to update cycle status: %{errors}"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Future unpaid cycles will be regenerated with the new amount."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Generate cycles from the last existing cycle to today"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Interval cannot be changed after creation."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Invalid amount format"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Last Cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Manage membership fee types for membership fees."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Mark as paid"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Mark as suspended"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Mark as unpaid"
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Membership Fee"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Membership Fee Status"
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/components/layouts/navbar.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Membership Fee Types"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Membership Fees"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type deleted"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type removed"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type saved successfully"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type updated. Cycles regenerated."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "New Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "New amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "No cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "No cycles"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "No membership fee type assigned"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "No status"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Please confirm the amount change first"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Regenerate Cycles"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Regenerating..."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Save Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Select a membership fee type for this member. Members can only switch between types with the same interval."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Select interval"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Show current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Show last completed cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Switch to current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Switch to last completed cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Type"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Unpaid in current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Unpaid in last cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Use this form to manage membership fee types in your database."
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval."
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 86301d0..6b94ac4 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -18,6 +18,7 @@ msgid "Actions"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#: lib/mv_web/live/user_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Are you sure?"
@@ -38,6 +39,8 @@ msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#: lib/mv_web/live/user_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -142,9 +145,10 @@ msgstr ""
#: lib/mv_web/live/components/payment_filter_component.ex
#: lib/mv_web/live/contribution_period_live/show.ex
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/index.html.heex
#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#: lib/mv_web/translations/member_fields.ex
#, elixir-autogen, elixir-format
msgid "Paid"
@@ -171,6 +175,7 @@ msgstr ""
#: lib/mv_web/live/custom_field_value_live/form.ex
#: lib/mv_web/live/global_settings_live.ex
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
msgid "Saving..."
@@ -257,6 +262,8 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/index_component.ex
#: lib/mv_web/live/custom_field_value_live/form.ex
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#: lib/mv_web/live/user_live/form.ex
#, elixir-autogen, elixir-format
msgid "Cancel"
@@ -269,6 +276,7 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/form_component.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Description"
msgstr ""
@@ -303,6 +311,7 @@ msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/member_live/index.ex
#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Members"
msgstr ""
@@ -310,6 +319,8 @@ msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/custom_field_live/form_component.ex
#: lib/mv_web/live/custom_field_live/index_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Name"
msgstr ""
@@ -777,6 +788,7 @@ msgid "This field cannot be empty"
msgstr ""
#: lib/mv_web/components/core_components.ex
+#: lib/mv_web/live/member_live/index.html.heex
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
@@ -808,7 +820,6 @@ msgid "Back"
msgstr ""
#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Coming soon"
msgstr ""
@@ -819,40 +830,26 @@ msgstr ""
msgid "Contact Data"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "Contribution"
-msgstr ""
-
#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "Nr."
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Payment Cycle"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payment Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
msgid "Payments"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format, fuzzy
-msgid "Pending"
-msgstr ""
-
#: lib/mv_web/live/member_live/form.ex
#: lib/mv_web/live/member_live/show.ex
#, elixir-autogen, elixir-format
@@ -867,27 +864,11 @@ msgid "Phone"
msgstr ""
#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Save"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "This data is for demonstration purposes only (mockup)."
-msgstr ""
-
-#: lib/mv_web/live/member_live/form.ex
-#: lib/mv_web/live/member_live/show.ex
-#, elixir-autogen, elixir-format
-msgid "monthly"
-msgstr ""
-
-#: lib/mv_web/live/member_live/form.ex
-#, elixir-autogen, elixir-format
-msgid "yearly"
-msgstr ""
-
#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format
msgid "Create Member"
@@ -907,6 +888,9 @@ msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Amount"
msgstr ""
@@ -917,6 +901,7 @@ msgid "Back to Settings"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Can be changed at any time. Amount changes affect future periods only."
msgstr ""
@@ -936,7 +921,6 @@ msgstr ""
msgid "Contribution Start"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Contribution Types"
@@ -968,6 +952,7 @@ msgid "Current"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "Deletion"
msgstr ""
@@ -983,6 +968,7 @@ msgid "Family"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Fixed after creation. Members can only switch between types with the same interval."
msgstr ""
@@ -992,9 +978,11 @@ msgstr ""
msgid "Global Settings"
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Half-yearly"
msgstr ""
@@ -1012,6 +1000,9 @@ msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Interval"
msgstr ""
@@ -1081,9 +1072,11 @@ msgstr ""
msgid "Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Monthly"
msgstr ""
@@ -1094,6 +1087,7 @@ msgid "Monthly fee for students and trainees"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Name & Amount"
msgstr ""
@@ -1109,6 +1103,7 @@ msgid "No fee for honorary members"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
#, elixir-autogen, elixir-format
msgid "Only possible if no members are assigned to this type."
msgstr ""
@@ -1129,9 +1124,11 @@ msgstr ""
msgid "Preview Mockup"
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Quarterly"
msgstr ""
@@ -1169,6 +1166,7 @@ msgid "Standard membership fee for regular members"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
#, elixir-autogen, elixir-format
msgid "Status"
msgstr ""
@@ -1189,6 +1187,9 @@ msgid "Suspend"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#, elixir-autogen, elixir-format
msgid "Suspended"
msgstr ""
@@ -1210,6 +1211,9 @@ msgid "Total Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/member_live/index/membership_fee_status.ex
#, elixir-autogen, elixir-format
msgid "Unpaid"
msgstr ""
@@ -1219,9 +1223,11 @@ msgstr ""
msgid "Why are not all contribution types shown?"
msgstr ""
+#: lib/mv_web/helpers/membership_fee_helpers.ex
#: lib/mv_web/live/contribution_period_live/show.ex
#: lib/mv_web/live/contribution_type_live/index.ex
#: lib/mv_web/live/membership_fee_settings_live.ex
+#: lib/mv_web/live/membership_fee_type_live/form.ex
#, elixir-autogen, elixir-format
msgid "Yearly"
msgstr ""
@@ -1242,6 +1248,7 @@ msgid "Last name"
msgstr ""
#: lib/mv_web/components/core_components.ex
+#: lib/mv_web/live/member_live/form.ex
#, elixir-autogen, elixir-format, fuzzy
msgid "None"
msgstr ""
@@ -1423,6 +1430,322 @@ msgstr ""
msgid "Yearly Interval - Joining Cycle Included"
msgstr ""
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "About Membership Fee Types"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Already paid cycles will remain with the old amount."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "An error occurred"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Are you sure you want to delete this cycle?"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Cannot delete - %{count} member(s) assigned"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Change Amount?"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Changing the amount will affect %{count} member(s)."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Confirm Change"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Current Cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Current amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle amount updated"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle deleted"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycle status updated"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Cycles regenerated successfully"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Delete Cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Edit Cycle Amount"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Edit Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Edit amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Failed to update cycle status: %{errors}"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Future unpaid cycles will be regenerated with the new amount."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Generate cycles from the last existing cycle to today"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Interval cannot be changed after creation."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Invalid amount format"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Last Cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format
+msgid "Manage membership fee types for membership fees."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Mark as paid"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Mark as suspended"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Mark as unpaid"
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/index.html.heex
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee Status"
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/components/layouts/navbar.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fee Types"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership Fees"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership fee type deleted"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership fee type removed"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type saved successfully"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Membership fee type updated. Cycles regenerated."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Membership fee types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#: lib/mv_web/live/membership_fee_type_live/index.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "New Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "New amount"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "No cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "No cycles"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned."
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "No membership fee type assigned"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "No status"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Please confirm the amount change first"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Regenerate Cycles"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Regenerating..."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Save Membership Fee Type"
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#, elixir-autogen, elixir-format
+msgid "Select a membership fee type for this member. Members can only switch between types with the same interval."
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Select interval"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Show current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Show last completed cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Switch to current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Switch to last completed cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/show.ex
+#, elixir-autogen, elixir-format
+msgid "Type"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Unpaid in current cycle"
+msgstr ""
+
+#: lib/mv_web/live/member_live/index.html.heex
+#, elixir-autogen, elixir-format
+msgid "Unpaid in last cycle"
+msgstr ""
+
+#: lib/mv_web/live/membership_fee_type_live/form.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Use this form to manage membership fee types in your database."
+msgstr ""
+
+#: lib/mv_web/live/member_live/form.ex
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval."
+msgstr ""
+
#~ #: lib/mv_web/live/custom_field_live/show.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "Auto-generated identifier (immutable)"
@@ -1433,6 +1756,12 @@ msgstr ""
#~ msgid "Configure global settings for membership contributions."
#~ msgstr ""
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "Contribution"
+#~ msgstr ""
+
#~ #: lib/mv_web/components/layouts/navbar.ex
#~ #: lib/mv_web/live/contribution_settings_live.ex
#~ #, elixir-autogen, elixir-format
@@ -1489,6 +1818,16 @@ msgstr ""
#~ msgid "New Custom field"
#~ msgstr ""
+#~ #: lib/mv_web/live/user_live/show.ex
+#~ #, elixir-autogen, elixir-format, fuzzy
+#~ msgid "Not set"
+#~ msgstr ""
+
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format, fuzzy
+#~ msgid "Pending"
+#~ msgstr ""
+
#~ #: lib/mv_web/live/contribution_settings_live.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "Quarterly Interval - Joining Period Excluded"
@@ -1504,6 +1843,12 @@ msgstr ""
#~ msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
#~ msgstr ""
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "This data is for demonstration purposes only (mockup)."
+#~ msgstr ""
+
#~ #: lib/mv_web/live/contribution_settings_live.ex
#~ #, elixir-autogen, elixir-format
#~ msgid "View Example Member"
@@ -1528,3 +1873,14 @@ msgstr ""
#~ #, elixir-autogen, elixir-format
#~ msgid "Yearly Interval - Joining Period Included"
#~ msgstr ""
+
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #: lib/mv_web/live/member_live/show.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "monthly"
+#~ msgstr ""
+
+#~ #: lib/mv_web/live/member_live/form.ex
+#~ #, elixir-autogen, elixir-format
+#~ msgid "yearly"
+#~ msgstr ""
diff --git a/test/mv_web/member_live/membership_fee_integration_test.exs b/test/mv_web/member_live/membership_fee_integration_test.exs
index f58e7ee..3b7f4c8 100644
--- a/test/mv_web/member_live/membership_fee_integration_test.exs
+++ b/test/mv_web/member_live/membership_fee_integration_test.exs
@@ -75,7 +75,7 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
|> Ash.Query.filter(member_id == ^member.id)
|> Ash.read!()
- if length(cycles) > 0 do
+ if !Enum.empty?(cycles) do
cycle = List.first(cycles)
# Change status
diff --git a/test/mv_web/member_live/show_membership_fees_test.exs b/test/mv_web/member_live/show_membership_fees_test.exs
index 60e4345..e37fcc9 100644
--- a/test/mv_web/member_live/show_membership_fees_test.exs
+++ b/test/mv_web/member_live/show_membership_fees_test.exs
@@ -161,7 +161,9 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
# Mark as paid
view
- |> element("button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='paid']")
+ |> element(
+ "button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='paid']"
+ )
|> render_click()
# Verify cycle is now paid
@@ -184,7 +186,9 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
# Mark as suspended
view
- |> element("button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='suspended']")
+ |> element(
+ "button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='suspended']"
+ )
|> render_click()
# Verify cycle is now suspended
@@ -207,7 +211,9 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
# Mark as unpaid
view
- |> element("button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='unpaid']")
+ |> element(
+ "button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}'][phx-value-status='unpaid']"
+ )
|> render_click()
# Verify cycle is now unpaid