diff --git a/lib/mv_web/live/contribution_period_live/show.ex b/lib/mv_web/live/contribution_period_live/show.ex
new file mode 100644
index 0000000..95179ac
--- /dev/null
+++ b/lib/mv_web/live/contribution_period_live/show.ex
@@ -0,0 +1,345 @@
+defmodule MvWeb.ContributionPeriodLive.Show do
+ @moduledoc """
+ Mock-up LiveView for Member Contribution Periods (Admin/Treasurer View).
+
+ This is a preview-only page that displays the planned UI for viewing
+ and managing contribution periods for a specific member.
+ It shows static mock data and is not functional.
+
+ ## Planned Features (Future Implementation)
+ - Display all contribution periods for a member
+ - Show period dates, interval, amount, and status
+ - Quick status change (paid/unpaid/suspended)
+ - Bulk marking of multiple periods
+ - Notes per period
+
+ ## Note
+ This page is intentionally non-functional and serves as a UI mockup
+ for the upcoming Membership Contributions feature.
+ """
+ use MvWeb, :live_view
+
+ @impl true
+ def mount(_params, _session, socket) do
+ {:ok,
+ socket
+ |> assign(:page_title, gettext("Member Contributions"))
+ |> assign(:member, mock_member())
+ |> assign(:periods, mock_periods())
+ |> assign(:selected_periods, MapSet.new())}
+ end
+
+ @impl true
+ def render(assigns) do
+ ~H"""
+
+ <.mockup_warning />
+
+ <.header>
+ {gettext("Contributions for %{name}", name: "#{@member.first_name} #{@member.last_name}")}
+ <:subtitle>
+ {gettext("Contribution type")}:
+ {@member.contribution_type}
+ · {gettext("Member since")}: {@member.joined_at}
+
+ <:actions>
+ <.link navigate={~p"/contribution_settings"} class="btn btn-ghost btn-sm">
+ <.icon name="hero-arrow-left" class="size-4" />
+ {gettext("Back to Settings")}
+
+
+
+
+ <%!-- Member Info Card --%>
+
+ {gettext(
+ "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
+ )}
+
+ {gettext(
+ "Contribution types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
+ )}
+
+
+
+ {gettext("Name & Amount")}
+ - {gettext("Can be changed at any time. Amount changes affect future periods only.")}
+
+
+ {gettext("Interval")}
+ - {gettext(
+ "Fixed after creation. Members can only switch between types with the same interval."
+ )}
+
+
+ {gettext("Deletion")}
+ - {gettext("Only possible if no members are assigned to this type.")}
+
+
+
+
+
+ """
+ end
+
+ # Mock data for demonstration
+ defp mock_contribution_types do
+ [
+ %{
+ id: "1",
+ name: gettext("Regular"),
+ description: gettext("Standard membership fee for regular members"),
+ amount: Decimal.new("60.00"),
+ interval: :yearly,
+ member_count: 45
+ },
+ %{
+ id: "2",
+ name: gettext("Reduced"),
+ description: gettext("Reduced fee for unemployed, pensioners, or low income"),
+ amount: Decimal.new("30.00"),
+ interval: :yearly,
+ member_count: 12
+ },
+ %{
+ id: "3",
+ name: gettext("Student"),
+ description: gettext("Monthly fee for students and trainees"),
+ amount: Decimal.new("5.00"),
+ interval: :monthly,
+ member_count: 8
+ },
+ %{
+ id: "4",
+ name: gettext("Family"),
+ description: gettext("Quarterly fee for family memberships"),
+ amount: Decimal.new("25.00"),
+ interval: :quarterly,
+ member_count: 15
+ },
+ %{
+ id: "5",
+ name: gettext("Supporting Member"),
+ description: gettext("Half-yearly contribution for supporting members"),
+ amount: Decimal.new("100.00"),
+ interval: :half_yearly,
+ member_count: 3
+ },
+ %{
+ id: "6",
+ name: gettext("Honorary"),
+ description: gettext("No fee for honorary members"),
+ amount: Decimal.new("0.00"),
+ interval: :yearly,
+ member_count: 2
+ }
+ ]
+ end
+
+ defp format_currency(%Decimal{} = amount) do
+ "#{Decimal.to_string(amount)} €"
+ end
+
+ defp format_interval(:monthly), do: gettext("Monthly")
+ defp format_interval(:quarterly), do: gettext("Quarterly")
+ defp format_interval(:half_yearly), do: gettext("Half-yearly")
+ defp format_interval(:yearly), do: gettext("Yearly")
+end
diff --git a/lib/mv_web/router.ex b/lib/mv_web/router.ex
index 09a2792..c574e17 100644
--- a/lib/mv_web/router.ex
+++ b/lib/mv_web/router.ex
@@ -75,6 +75,11 @@ defmodule MvWeb.Router do
live "/settings", GlobalSettingsLive
+ # Contribution Management (Mock-ups)
+ live "/contribution_types", ContributionTypeLive.Index, :index
+ live "/contribution_settings", ContributionSettingsLive
+ live "/contributions/member/:id", ContributionPeriodLive.Show, :show
+
post "/set_locale", LocaleController, :set_locale
end
diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po
index 57df5ab..9d645ad 100644
--- a/priv/gettext/de/LC_MESSAGES/default.po
+++ b/priv/gettext/de/LC_MESSAGES/default.po
@@ -11,6 +11,7 @@ msgstr ""
"Language: en\n"
#: lib/mv_web/components/core_components.ex:386
+#: lib/mv_web/live/contribution_period_live/show.ex:141
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr "Aktionen"
@@ -34,12 +35,14 @@ msgstr "Verbindung wird wiederhergestellt"
msgid "City"
msgstr "Stadt"
+#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:250
#: lib/mv_web/live/user_live/index.html.heex:74
#, elixir-autogen, elixir-format
msgid "Delete"
msgstr "Löschen"
+#: lib/mv_web/live/contribution_type_live/index.ex:66
#: lib/mv_web/live/member_live/index.html.heex:242
#: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66
@@ -53,6 +56,7 @@ msgstr "Bearbeite"
msgid "Edit Member"
msgstr "Mitglied bearbeiten"
+#: lib/mv_web/live/contribution_period_live/show.ex:58
#: lib/mv_web/live/member_live/form.ex:47
#: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:50
@@ -121,6 +125,7 @@ msgstr "Austrittsdatum"
msgid "House Number"
msgstr "Hausnummer"
+#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:57
#, elixir-autogen, elixir-format
@@ -129,6 +134,8 @@ msgstr "Notizen"
#: lib/mv_web/live/components/payment_filter_component.ex:94
#: lib/mv_web/live/components/payment_filter_component.ex:144
+#: lib/mv_web/live/contribution_period_live/show.ex:186
+#: lib/mv_web/live/contribution_period_live/show.ex:242
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:51
@@ -288,7 +295,7 @@ msgstr "ID"
msgid "Immutable"
msgstr "Unveränderlich"
-#: lib/mv_web/components/layouts/navbar.ex:102
+#: lib/mv_web/components/layouts/navbar.ex:113
#, elixir-autogen, elixir-format
msgid "Logout"
msgstr "Abmelden"
@@ -305,12 +312,14 @@ msgid "Member"
msgstr "Mitglied"
#: lib/mv_web/components/layouts/navbar.ex:25
+#: lib/mv_web/live/contribution_type_live/index.ex:61
#: lib/mv_web/live/member_live/index.ex:73
#: lib/mv_web/live/member_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Members"
msgstr "Mitglieder"
+#: lib/mv_web/live/contribution_type_live/index.ex:48
#: lib/mv_web/live/custom_field_live/form.ex:51
#, elixir-autogen, elixir-format
msgid "Name"
@@ -331,6 +340,7 @@ msgstr "Nicht aktiviert"
msgid "Not set"
msgstr "Nicht gesetzt"
+#: lib/mv_web/live/contribution_period_live/show.ex:207
#: lib/mv_web/live/user_live/form.ex:107
#: lib/mv_web/live/user_live/form.ex:115
#: lib/mv_web/live/user_live/form.ex:224
@@ -349,7 +359,7 @@ msgstr "OIDC ID"
msgid "Password Authentication"
msgstr "Passwort-Authentifizierung"
-#: lib/mv_web/components/layouts/navbar.ex:95
+#: lib/mv_web/components/layouts/navbar.ex:106
#, elixir-autogen, elixir-format
msgid "Profil"
msgstr "Profil"
@@ -369,7 +379,7 @@ msgstr "Alle Mitglieder auswählen"
msgid "Select member"
msgstr "Mitglied auswählen"
-#: lib/mv_web/components/layouts/navbar.ex:99
+#: lib/mv_web/components/layouts/navbar.ex:110
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr "Einstellungen"
@@ -537,14 +547,14 @@ msgstr "Zurück zur Mitgliederliste"
msgid "Back to users list"
msgstr "Zurück zur Benutzer*innen-Liste"
-#: lib/mv_web/components/layouts/navbar.ex:33
-#: lib/mv_web/components/layouts/navbar.ex:39
+#: lib/mv_web/components/layouts/navbar.ex:44
+#: lib/mv_web/components/layouts/navbar.ex:50
#, elixir-autogen, elixir-format
msgid "Select language"
msgstr "Sprache auswählen"
-#: lib/mv_web/components/layouts/navbar.ex:46
-#: lib/mv_web/components/layouts/navbar.ex:66
+#: lib/mv_web/components/layouts/navbar.ex:57
+#: lib/mv_web/components/layouts/navbar.ex:77
#, elixir-autogen, elixir-format
msgid "Toggle dark mode"
msgstr "Dunklen Modus umschalten"
@@ -716,6 +726,7 @@ msgstr "Vereinsdaten"
msgid "Manage global settings for the association."
msgstr "Passe übergreifende Einstellungen für den Verein an."
+#: lib/mv_web/live/contribution_settings_live.ex:102
#: lib/mv_web/live/global_settings_live.ex:56
#, elixir-autogen, elixir-format, fuzzy
msgid "Save Settings"
@@ -853,6 +864,432 @@ msgstr "Nicht bezahlt"
msgid "Payment filter"
msgstr "Zahlungsfilter"
+#: lib/mv_web/live/contribution_period_live/show.ex:107
+#, elixir-autogen, elixir-format
+msgid "%{count} period selected"
+msgid_plural "%{count} periods selected"
+msgstr[0] "%{count} Beiträge ausgewählt"
+msgstr[1] "%{count} Beiträge ausgewählt"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:113
+#, elixir-autogen, elixir-format
+msgid "About Contribution Types"
+msgstr "Über Beitragsarten"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:138
+#: lib/mv_web/live/contribution_type_live/index.ex:53
+#, elixir-autogen, elixir-format
+msgid "Amount"
+msgstr "Betrag"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:48
+#, elixir-autogen, elixir-format
+msgid "Back to Settings"
+msgstr "Zurück zu Einstellungen"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:124
+#, elixir-autogen, elixir-format
+msgid "Can be changed at any time. Amount changes affect future periods only."
+msgstr "Kann jederzeit geändert werden. Betragsänderungen wirken sich nur auf zukünftige Beiträge aus."
+
+#: lib/mv_web/live/contribution_type_live/index.ex:77
+#, elixir-autogen, elixir-format
+msgid "Cannot delete - members assigned"
+msgstr "Löschen nicht möglich - Mitglieder zugewiesen"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:83
+#, elixir-autogen, elixir-format
+msgid "Change Contribution Type"
+msgstr "Beitragsart ändern"
+
+#: lib/mv_web/live/contribution_settings_live.ex:42
+#, elixir-autogen, elixir-format
+msgid "Configure global settings for membership contributions."
+msgstr "Globale Einstellungen für Mitgliedsbeiträge konfigurieren."
+
+#: lib/mv_web/components/layouts/navbar.ex:34
+#: lib/mv_web/live/contribution_settings_live.ex:27
+#: lib/mv_web/live/contribution_settings_live.ex:40
+#, elixir-autogen, elixir-format
+msgid "Contribution Settings"
+msgstr "Beitragseinstellungen"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:62
+#, elixir-autogen, elixir-format
+msgid "Contribution Start"
+msgstr "Beitragsbeginn"
+
+#: lib/mv_web/components/layouts/navbar.ex:32
+#: lib/mv_web/live/contribution_type_live/index.ex:25
+#: lib/mv_web/live/contribution_type_live/index.ex:36
+#, elixir-autogen, elixir-format
+msgid "Contribution Types"
+msgstr "Beitragsarten"
+
+#: lib/mv_web/live/contribution_settings_live.ex:224
+#, elixir-autogen, elixir-format
+msgid "Contribution start"
+msgstr "Beitragsbeginn"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:41
+#, elixir-autogen, elixir-format
+msgid "Contribution type"
+msgstr "Beitragsart"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:117
+#, elixir-autogen, elixir-format
+msgid "Contribution 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 Mitgliedsbeitragsstrukturen. Jede Art hat ein festes Intervall (monatlich, quartalsweise, halbjährlich, jährlich), das nach der Erstellung nicht mehr geändert werden kann."
+
+#: lib/mv_web/components/layouts/navbar.ex:30
+#, elixir-autogen, elixir-format
+msgid "Contributions"
+msgstr "Beiträge"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:39
+#, elixir-autogen, elixir-format
+msgid "Contributions for %{name}"
+msgstr "Beiträge für %{name}"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:159
+#, elixir-autogen, elixir-format
+msgid "Current"
+msgstr "Aktuell"
+
+#: lib/mv_web/live/contribution_settings_live.ex:60
+#, elixir-autogen, elixir-format
+msgid "Default Contribution Type"
+msgstr "Standard-Beitragsart"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:133
+#, elixir-autogen, elixir-format
+msgid "Deletion"
+msgstr "Löschung"
+
+#: lib/mv_web/live/contribution_settings_live.ex:173
+#, elixir-autogen, elixir-format
+msgid "Example: Member Contribution View"
+msgstr "Beispiel: Mitglieder-Beitragsansicht"
+
+#: lib/mv_web/live/contribution_settings_live.ex:113
+#, elixir-autogen, elixir-format
+msgid "Examples"
+msgstr "Beispiele"
+
+#: lib/mv_web/live/contribution_settings_live.ex:262
+#: lib/mv_web/live/contribution_type_live/index.ex:172
+#, elixir-autogen, elixir-format
+msgid "Family"
+msgstr "Familie"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:128
+#, elixir-autogen, elixir-format
+msgid "Fixed after creation. Members can only switch between types with the same interval."
+msgstr "Nach der Erstellung unveränderlich. Mitglieder können nur zwischen Arten mit demselben Intervall wechseln."
+
+#: lib/mv_web/live/contribution_settings_live.ex:228
+#, elixir-autogen, elixir-format
+msgid "Generated periods"
+msgstr "Generierte Beiträge"
+
+#: lib/mv_web/live/contribution_settings_live.ex:52
+#, elixir-autogen, elixir-format
+msgid "Global Settings"
+msgstr "Globale Einstellungen"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:344
+#: lib/mv_web/live/contribution_settings_live.ex:275
+#: lib/mv_web/live/contribution_type_live/index.ex:203
+#, elixir-autogen, elixir-format
+msgid "Half-yearly"
+msgstr "Halbjährlich"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:181
+#, elixir-autogen, elixir-format
+msgid "Half-yearly contribution for supporting members"
+msgstr "Halbjährlicher Beitrag für Fördermitglieder"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:87
+#: lib/mv_web/live/contribution_type_live/index.ex:188
+#, elixir-autogen, elixir-format
+msgid "Honorary"
+msgstr "Ehrenmitglied"
+
+#: lib/mv_web/live/contribution_settings_live.ex:85
+#, elixir-autogen, elixir-format
+msgid "Include joining period"
+msgstr "Zahlt ab Zeitpunkt des Eintritts"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:137
+#: lib/mv_web/live/contribution_type_live/index.ex:57
+#: lib/mv_web/live/contribution_type_live/index.ex:127
+#, elixir-autogen, elixir-format
+msgid "Interval"
+msgstr "Intervall"
+
+#: lib/mv_web/live/contribution_settings_live.ex:220
+#, elixir-autogen, elixir-format
+msgid "Joining date"
+msgstr "Eintrittsdatum"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:332
+#, elixir-autogen, elixir-format
+msgid "Joining year - reduced to 0"
+msgstr "Eintrittsjahr - auf 0 reduziert"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:38
+#, elixir-autogen, elixir-format
+msgid "Manage contribution types for membership fees."
+msgstr "Beitragsarten für Mitgliedsbeiträge verwalten."
+
+#: lib/mv_web/live/contribution_period_live/show.ex:116
+#, elixir-autogen, elixir-format
+msgid "Mark as Paid"
+msgstr "Als bezahlt markieren"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:120
+#, elixir-autogen, elixir-format
+msgid "Mark as Suspended"
+msgstr "Als ausgesetzt markieren"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:124
+#, elixir-autogen, elixir-format
+msgid "Mark as Unpaid"
+msgstr "Als unbezahlt markieren"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:26
+#, elixir-autogen, elixir-format
+msgid "Member Contributions"
+msgstr "Mitgliedsbeiträge"
+
+#: lib/mv_web/live/contribution_settings_live.ex:122
+#, elixir-autogen, elixir-format
+msgid "Member pays for the year they joined"
+msgstr "Mitglied zahlt für das Eintrittsjahr"
+
+#: lib/mv_web/live/contribution_settings_live.ex:155
+#, elixir-autogen, elixir-format
+msgid "Member pays from the joining month"
+msgstr "Mitglied zahlt ab dem Eintrittsmonat"
+
+#: lib/mv_web/live/contribution_settings_live.ex:144
+#, elixir-autogen, elixir-format
+msgid "Member pays from the next full quarter"
+msgstr "Mitglied zahlt ab dem nächsten vollen Quartal"
+
+#: lib/mv_web/live/contribution_settings_live.ex:133
+#, elixir-autogen, elixir-format
+msgid "Member pays from the next full year"
+msgstr "Mitglied zahlt ab dem nächsten vollen Jahr"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:43
+#, elixir-autogen, elixir-format
+msgid "Member since"
+msgstr "Mitglied seit"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:92
+#, elixir-autogen, elixir-format
+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 Zahlungsintervall wechseln (z.B. jährlich zu jährlich). Dies verhindert komplexe Periodenüberschneidungen."
+
+#: lib/mv_web/live/contribution_period_live/show.ex:342
+#: lib/mv_web/live/contribution_settings_live.ex:273
+#: lib/mv_web/live/contribution_type_live/index.ex:201
+#, elixir-autogen, elixir-format
+msgid "Monthly"
+msgstr "Monatlich"
+
+#: lib/mv_web/live/contribution_settings_live.ex:150
+#, elixir-autogen, elixir-format
+msgid "Monthly Interval - Joining Period Included"
+msgstr "Monatliches Intervall - Eintrittsperiode eingeschlossen"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:165
+#, elixir-autogen, elixir-format
+msgid "Monthly fee for students and trainees"
+msgstr "Monatlicher Beitrag für Studierende und Auszubildende"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:123
+#, elixir-autogen, elixir-format
+msgid "Name & Amount"
+msgstr "Name & Betrag"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:42
+#, elixir-autogen, elixir-format
+msgid "New Contribution Type"
+msgstr "Neue Beitragsart"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:189
+#, elixir-autogen, elixir-format
+msgid "No fee for honorary members"
+msgstr "Kein Beitrag für Ehrenmitglieder"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:134
+#, elixir-autogen, elixir-format
+msgid "Only possible if no members are assigned to this type."
+msgstr "Nur möglich, wenn keine Mitglieder dieser Art zugewiesen sind."
+
+#: lib/mv_web/live/contribution_period_live/show.ex:70
+#, elixir-autogen, elixir-format
+msgid "Open Contributions"
+msgstr "Offene Beiträge"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:302
+#, elixir-autogen, elixir-format
+msgid "Paid via bank transfer"
+msgstr "Per Überweisung bezahlt"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:226
+#: lib/mv_web/live/contribution_settings_live.ex:197
+#: lib/mv_web/live/contribution_type_live/index.ex:97
+#, elixir-autogen, elixir-format
+msgid "Preview Mockup"
+msgstr "Vorschau"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:343
+#: lib/mv_web/live/contribution_settings_live.ex:274
+#: lib/mv_web/live/contribution_type_live/index.ex:202
+#, elixir-autogen, elixir-format
+msgid "Quarterly"
+msgstr "Quartalsweise"
+
+#: lib/mv_web/live/contribution_settings_live.ex:139
+#, elixir-autogen, elixir-format
+msgid "Quarterly Interval - Joining Period Excluded"
+msgstr "Quartalsintervall - Eintrittsperiode ausgeschlossen"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:173
+#, elixir-autogen, elixir-format
+msgid "Quarterly fee for family memberships"
+msgstr "Quartalsbeitrag für Familienmitgliedschaften"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:86
+#: lib/mv_web/live/contribution_settings_live.ex:250
+#: lib/mv_web/live/contribution_type_live/index.ex:156
+#, elixir-autogen, elixir-format
+msgid "Reduced"
+msgstr "Ermäßigt"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:157
+#, elixir-autogen, elixir-format
+msgid "Reduced fee for unemployed, pensioners, or low income"
+msgstr "Ermäßigter Beitrag für Arbeitslose, Rentner*innen oder Geringverdienende"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:276
+#: lib/mv_web/live/contribution_settings_live.ex:244
+#: lib/mv_web/live/contribution_type_live/index.ex:148
+#, elixir-autogen, elixir-format
+msgid "Regular"
+msgstr "Regulär"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:204
+#, elixir-autogen, elixir-format
+msgid "Reopen"
+msgstr "Wieder öffnen"
+
+#: lib/mv_web/live/contribution_settings_live.ex:176
+#, elixir-autogen, elixir-format
+msgid "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
+msgstr "Sehen Sie, wie die Beitragsperioden für ein einzelnes Mitglied angezeigt werden. Dieses Beispiel zeigt Maria Weber mit mehreren Beitragsperioden."
+
+#: lib/mv_web/live/contribution_type_live/index.ex:149
+#, elixir-autogen, elixir-format
+msgid "Standard membership fee for regular members"
+msgstr "Standard-Mitgliedsbeitrag für reguläre Mitglieder"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:139
+#, elixir-autogen, elixir-format
+msgid "Status"
+msgstr "Status"
+
+#: lib/mv_web/live/contribution_settings_live.ex:256
+#: lib/mv_web/live/contribution_type_live/index.ex:164
+#, elixir-autogen, elixir-format
+msgid "Student"
+msgstr "Student*in"
+
+#: lib/mv_web/live/contribution_type_live/index.ex:180
+#, elixir-autogen, elixir-format
+msgid "Supporting Member"
+msgstr "Fördermitglied"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:195
+#, elixir-autogen, elixir-format
+msgid "Suspend"
+msgstr "Aussetzen"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:260
+#, elixir-autogen, elixir-format
+msgid "Suspended"
+msgstr "Ausgesetzt"
+
+#: lib/mv_web/live/contribution_settings_live.ex:69
+#, elixir-autogen, elixir-format
+msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
+msgstr "Diese Beitragsart wird automatisch allen neuen Mitgliedern zugewiesen. Kann pro Mitglied individuell geändert werden."
+
+#: lib/mv_web/live/contribution_period_live/show.ex:228
+#: lib/mv_web/live/contribution_settings_live.ex:199
+#: lib/mv_web/live/contribution_type_live/index.ex:99
+#, elixir-autogen, elixir-format
+msgid "This page is not functional and only displays the planned features."
+msgstr "Diese Seite ist nicht funktional und zeigt nur die geplanten Funktionen."
+
+#: lib/mv_web/live/contribution_period_live/show.ex:136
+#, elixir-autogen, elixir-format
+msgid "Time Period"
+msgstr "Zeitraum"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:66
+#, elixir-autogen, elixir-format
+msgid "Total Contributions"
+msgstr "Beiträge gesamt"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:251
+#, elixir-autogen, elixir-format
+msgid "Unpaid"
+msgstr "Unbezahlt"
+
+#: lib/mv_web/live/contribution_settings_live.ex:183
+#, elixir-autogen, elixir-format
+msgid "View Example Member"
+msgstr "Beispielmitglied ansehen"
+
+#: lib/mv_web/live/contribution_settings_live.ex:90
+#, elixir-autogen, elixir-format
+msgid "When active: Members pay from the period of their joining."
+msgstr "Wenn aktiv: Mitglieder zahlen ab der Periode ihres Eintritts."
+
+#: lib/mv_web/live/contribution_settings_live.ex:93
+#, elixir-autogen, elixir-format
+msgid "When inactive: Members pay from the next full period after joining."
+msgstr "Wenn inaktiv: Mitglieder zahlen ab der nächsten vollen Periode nach dem Eintritt."
+
+#: lib/mv_web/live/contribution_period_live/show.ex:98
+#, elixir-autogen, elixir-format
+msgid "Why are not all contribution types shown?"
+msgstr "Warum werden nicht alle Beitragsarten angezeigt?"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:85
+#: lib/mv_web/live/contribution_period_live/show.ex:86
+#: lib/mv_web/live/contribution_period_live/show.ex:87
+#: lib/mv_web/live/contribution_period_live/show.ex:345
+#: lib/mv_web/live/contribution_settings_live.ex:276
+#: lib/mv_web/live/contribution_type_live/index.ex:204
+#, elixir-autogen, elixir-format
+msgid "Yearly"
+msgstr "Jährlich"
+
+#: lib/mv_web/live/contribution_settings_live.ex:128
+#, elixir-autogen, elixir-format
+msgid "Yearly Interval - Joining Period Excluded"
+msgstr "Jährliches Intervall - Eintrittsperiode ausgeschlossen"
+
+#: lib/mv_web/live/contribution_settings_live.ex:117
+#, elixir-autogen, elixir-format
+msgid "Yearly Interval - Joining Period Included"
+msgstr "Jährliches Intervall - Eintrittsperiode eingeschlossen"
+
#~ #: lib/mv_web/live/member_live/form.ex:48
#~ #: lib/mv_web/live/member_live/show.ex:51
#~ #, elixir-autogen, elixir-format
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index 1e0e954..8594746 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -12,6 +12,7 @@ msgid ""
msgstr ""
#: lib/mv_web/components/core_components.ex:386
+#: lib/mv_web/live/contribution_period_live/show.ex:141
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
@@ -35,12 +36,14 @@ msgstr ""
msgid "City"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:250
#: lib/mv_web/live/user_live/index.html.heex:74
#, elixir-autogen, elixir-format
msgid "Delete"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:66
#: lib/mv_web/live/member_live/index.html.heex:242
#: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66
@@ -54,6 +57,7 @@ msgstr ""
msgid "Edit Member"
msgstr ""
+#: lib/mv_web/live/contribution_period_live/show.ex:58
#: lib/mv_web/live/member_live/form.ex:47
#: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:50
@@ -122,6 +126,7 @@ msgstr ""
msgid "House Number"
msgstr ""
+#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:57
#, elixir-autogen, elixir-format
@@ -130,6 +135,8 @@ msgstr ""
#: lib/mv_web/live/components/payment_filter_component.ex:94
#: lib/mv_web/live/components/payment_filter_component.ex:144
+#: lib/mv_web/live/contribution_period_live/show.ex:186
+#: lib/mv_web/live/contribution_period_live/show.ex:242
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:51
@@ -289,7 +296,7 @@ msgstr ""
msgid "Immutable"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:102
+#: lib/mv_web/components/layouts/navbar.ex:113
#, elixir-autogen, elixir-format
msgid "Logout"
msgstr ""
@@ -306,12 +313,14 @@ msgid "Member"
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:25
+#: lib/mv_web/live/contribution_type_live/index.ex:61
#: lib/mv_web/live/member_live/index.ex:73
#: lib/mv_web/live/member_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Members"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:48
#: lib/mv_web/live/custom_field_live/form.ex:51
#, elixir-autogen, elixir-format
msgid "Name"
@@ -332,6 +341,7 @@ msgstr ""
msgid "Not set"
msgstr ""
+#: lib/mv_web/live/contribution_period_live/show.ex:207
#: lib/mv_web/live/user_live/form.ex:107
#: lib/mv_web/live/user_live/form.ex:115
#: lib/mv_web/live/user_live/form.ex:224
@@ -350,7 +360,7 @@ msgstr ""
msgid "Password Authentication"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:95
+#: lib/mv_web/components/layouts/navbar.ex:106
#, elixir-autogen, elixir-format
msgid "Profil"
msgstr ""
@@ -370,7 +380,7 @@ msgstr ""
msgid "Select member"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:99
+#: lib/mv_web/components/layouts/navbar.ex:110
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr ""
@@ -538,14 +548,14 @@ msgstr ""
msgid "Back to users list"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:33
-#: lib/mv_web/components/layouts/navbar.ex:39
+#: lib/mv_web/components/layouts/navbar.ex:44
+#: lib/mv_web/components/layouts/navbar.ex:50
#, elixir-autogen, elixir-format
msgid "Select language"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:46
-#: lib/mv_web/components/layouts/navbar.ex:66
+#: lib/mv_web/components/layouts/navbar.ex:57
+#: lib/mv_web/components/layouts/navbar.ex:77
#, elixir-autogen, elixir-format
msgid "Toggle dark mode"
msgstr ""
@@ -717,6 +727,7 @@ msgstr ""
msgid "Manage global settings for the association."
msgstr ""
+#: lib/mv_web/live/contribution_settings_live.ex:102
#: lib/mv_web/live/global_settings_live.ex:56
#, elixir-autogen, elixir-format
msgid "Save Settings"
@@ -853,3 +864,429 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Payment filter"
msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:107
+#, elixir-autogen, elixir-format
+msgid "%{count} period selected"
+msgid_plural "%{count} periods selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:113
+#, elixir-autogen, elixir-format
+msgid "About Contribution Types"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:138
+#: lib/mv_web/live/contribution_type_live/index.ex:53
+#, elixir-autogen, elixir-format
+msgid "Amount"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:48
+#, elixir-autogen, elixir-format
+msgid "Back to Settings"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:124
+#, elixir-autogen, elixir-format
+msgid "Can be changed at any time. Amount changes affect future periods only."
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:77
+#, elixir-autogen, elixir-format
+msgid "Cannot delete - members assigned"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:83
+#, elixir-autogen, elixir-format
+msgid "Change Contribution Type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:42
+#, elixir-autogen, elixir-format
+msgid "Configure global settings for membership contributions."
+msgstr ""
+
+#: lib/mv_web/components/layouts/navbar.ex:34
+#: lib/mv_web/live/contribution_settings_live.ex:27
+#: lib/mv_web/live/contribution_settings_live.ex:40
+#, elixir-autogen, elixir-format
+msgid "Contribution Settings"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:62
+#, elixir-autogen, elixir-format
+msgid "Contribution Start"
+msgstr ""
+
+#: lib/mv_web/components/layouts/navbar.ex:32
+#: lib/mv_web/live/contribution_type_live/index.ex:25
+#: lib/mv_web/live/contribution_type_live/index.ex:36
+#, elixir-autogen, elixir-format
+msgid "Contribution Types"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:224
+#, elixir-autogen, elixir-format
+msgid "Contribution start"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:41
+#, elixir-autogen, elixir-format
+msgid "Contribution type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:117
+#, elixir-autogen, elixir-format
+msgid "Contribution 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/components/layouts/navbar.ex:30
+#, elixir-autogen, elixir-format
+msgid "Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:39
+#, elixir-autogen, elixir-format
+msgid "Contributions for %{name}"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:159
+#, elixir-autogen, elixir-format
+msgid "Current"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:60
+#, elixir-autogen, elixir-format
+msgid "Default Contribution Type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:133
+#, elixir-autogen, elixir-format
+msgid "Deletion"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:173
+#, elixir-autogen, elixir-format
+msgid "Example: Member Contribution View"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:113
+#, elixir-autogen, elixir-format
+msgid "Examples"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:262
+#: lib/mv_web/live/contribution_type_live/index.ex:172
+#, elixir-autogen, elixir-format
+msgid "Family"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:128
+#, elixir-autogen, elixir-format
+msgid "Fixed after creation. Members can only switch between types with the same interval."
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:228
+#, elixir-autogen, elixir-format
+msgid "Generated periods"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:52
+#, elixir-autogen, elixir-format
+msgid "Global Settings"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:344
+#: lib/mv_web/live/contribution_settings_live.ex:275
+#: lib/mv_web/live/contribution_type_live/index.ex:203
+#, elixir-autogen, elixir-format
+msgid "Half-yearly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:181
+#, elixir-autogen, elixir-format
+msgid "Half-yearly contribution for supporting members"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:87
+#: lib/mv_web/live/contribution_type_live/index.ex:188
+#, elixir-autogen, elixir-format
+msgid "Honorary"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:85
+#, elixir-autogen, elixir-format
+msgid "Include joining period"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:137
+#: lib/mv_web/live/contribution_type_live/index.ex:57
+#: lib/mv_web/live/contribution_type_live/index.ex:127
+#, elixir-autogen, elixir-format
+msgid "Interval"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:220
+#, elixir-autogen, elixir-format
+msgid "Joining date"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:332
+#, elixir-autogen, elixir-format
+msgid "Joining year - reduced to 0"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:38
+#, elixir-autogen, elixir-format
+msgid "Manage contribution types for membership fees."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:116
+#, elixir-autogen, elixir-format
+msgid "Mark as Paid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:120
+#, elixir-autogen, elixir-format
+msgid "Mark as Suspended"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:124
+#, elixir-autogen, elixir-format
+msgid "Mark as Unpaid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:26
+#, elixir-autogen, elixir-format
+msgid "Member Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:122
+#, elixir-autogen, elixir-format
+msgid "Member pays for the year they joined"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:155
+#, elixir-autogen, elixir-format
+msgid "Member pays from the joining month"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:144
+#, elixir-autogen, elixir-format
+msgid "Member pays from the next full quarter"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:133
+#, elixir-autogen, elixir-format
+msgid "Member pays from the next full year"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:43
+#, elixir-autogen, elixir-format
+msgid "Member since"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:92
+#, elixir-autogen, elixir-format
+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/live/contribution_period_live/show.ex:342
+#: lib/mv_web/live/contribution_settings_live.ex:273
+#: lib/mv_web/live/contribution_type_live/index.ex:201
+#, elixir-autogen, elixir-format
+msgid "Monthly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:150
+#, elixir-autogen, elixir-format
+msgid "Monthly Interval - Joining Period Included"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:165
+#, elixir-autogen, elixir-format
+msgid "Monthly fee for students and trainees"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:123
+#, elixir-autogen, elixir-format
+msgid "Name & Amount"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:42
+#, elixir-autogen, elixir-format
+msgid "New Contribution Type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:189
+#, elixir-autogen, elixir-format
+msgid "No fee for honorary members"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:134
+#, elixir-autogen, elixir-format
+msgid "Only possible if no members are assigned to this type."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:70
+#, elixir-autogen, elixir-format
+msgid "Open Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:302
+#, elixir-autogen, elixir-format
+msgid "Paid via bank transfer"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:226
+#: lib/mv_web/live/contribution_settings_live.ex:197
+#: lib/mv_web/live/contribution_type_live/index.ex:97
+#, elixir-autogen, elixir-format
+msgid "Preview Mockup"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:343
+#: lib/mv_web/live/contribution_settings_live.ex:274
+#: lib/mv_web/live/contribution_type_live/index.ex:202
+#, elixir-autogen, elixir-format
+msgid "Quarterly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:139
+#, elixir-autogen, elixir-format
+msgid "Quarterly Interval - Joining Period Excluded"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:173
+#, elixir-autogen, elixir-format
+msgid "Quarterly fee for family memberships"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:86
+#: lib/mv_web/live/contribution_settings_live.ex:250
+#: lib/mv_web/live/contribution_type_live/index.ex:156
+#, elixir-autogen, elixir-format
+msgid "Reduced"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:157
+#, elixir-autogen, elixir-format
+msgid "Reduced fee for unemployed, pensioners, or low income"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:276
+#: lib/mv_web/live/contribution_settings_live.ex:244
+#: lib/mv_web/live/contribution_type_live/index.ex:148
+#, elixir-autogen, elixir-format
+msgid "Regular"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:204
+#, elixir-autogen, elixir-format
+msgid "Reopen"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:176
+#, elixir-autogen, elixir-format
+msgid "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:149
+#, elixir-autogen, elixir-format
+msgid "Standard membership fee for regular members"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:139
+#, elixir-autogen, elixir-format
+msgid "Status"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:256
+#: lib/mv_web/live/contribution_type_live/index.ex:164
+#, elixir-autogen, elixir-format
+msgid "Student"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:180
+#, elixir-autogen, elixir-format
+msgid "Supporting Member"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:195
+#, elixir-autogen, elixir-format
+msgid "Suspend"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:260
+#, elixir-autogen, elixir-format
+msgid "Suspended"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:69
+#, elixir-autogen, elixir-format
+msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:228
+#: lib/mv_web/live/contribution_settings_live.ex:199
+#: lib/mv_web/live/contribution_type_live/index.ex:99
+#, elixir-autogen, elixir-format
+msgid "This page is not functional and only displays the planned features."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:136
+#, elixir-autogen, elixir-format
+msgid "Time Period"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:66
+#, elixir-autogen, elixir-format
+msgid "Total Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:251
+#, elixir-autogen, elixir-format
+msgid "Unpaid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:183
+#, elixir-autogen, elixir-format
+msgid "View Example Member"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:90
+#, elixir-autogen, elixir-format
+msgid "When active: Members pay from the period of their joining."
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:93
+#, elixir-autogen, elixir-format
+msgid "When inactive: Members pay from the next full period after joining."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:98
+#, elixir-autogen, elixir-format
+msgid "Why are not all contribution types shown?"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:85
+#: lib/mv_web/live/contribution_period_live/show.ex:86
+#: lib/mv_web/live/contribution_period_live/show.ex:87
+#: lib/mv_web/live/contribution_period_live/show.ex:345
+#: lib/mv_web/live/contribution_settings_live.ex:276
+#: lib/mv_web/live/contribution_type_live/index.ex:204
+#, elixir-autogen, elixir-format
+msgid "Yearly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:128
+#, elixir-autogen, elixir-format
+msgid "Yearly Interval - Joining Period Excluded"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:117
+#, elixir-autogen, elixir-format
+msgid "Yearly Interval - Joining Period Included"
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 319bcc3..cf081bf 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -12,6 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/mv_web/components/core_components.ex:386
+#: lib/mv_web/live/contribution_period_live/show.ex:141
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
@@ -35,12 +36,14 @@ msgstr ""
msgid "City"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:250
#: lib/mv_web/live/user_live/index.html.heex:74
#, elixir-autogen, elixir-format
msgid "Delete"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:66
#: lib/mv_web/live/member_live/index.html.heex:242
#: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66
@@ -54,6 +57,7 @@ msgstr ""
msgid "Edit Member"
msgstr ""
+#: lib/mv_web/live/contribution_period_live/show.ex:58
#: lib/mv_web/live/member_live/form.ex:47
#: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:50
@@ -122,6 +126,7 @@ msgstr ""
msgid "House Number"
msgstr ""
+#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:57
#, elixir-autogen, elixir-format
@@ -130,6 +135,8 @@ msgstr ""
#: lib/mv_web/live/components/payment_filter_component.ex:94
#: lib/mv_web/live/components/payment_filter_component.ex:144
+#: lib/mv_web/live/contribution_period_live/show.ex:186
+#: lib/mv_web/live/contribution_period_live/show.ex:242
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:51
@@ -289,7 +296,7 @@ msgstr ""
msgid "Immutable"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:102
+#: lib/mv_web/components/layouts/navbar.ex:113
#, elixir-autogen, elixir-format
msgid "Logout"
msgstr ""
@@ -306,12 +313,14 @@ msgid "Member"
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:25
+#: lib/mv_web/live/contribution_type_live/index.ex:61
#: lib/mv_web/live/member_live/index.ex:73
#: lib/mv_web/live/member_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "Members"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:48
#: lib/mv_web/live/custom_field_live/form.ex:51
#, elixir-autogen, elixir-format
msgid "Name"
@@ -332,6 +341,7 @@ msgstr ""
msgid "Not set"
msgstr ""
+#: lib/mv_web/live/contribution_period_live/show.ex:207
#: lib/mv_web/live/user_live/form.ex:107
#: lib/mv_web/live/user_live/form.ex:115
#: lib/mv_web/live/user_live/form.ex:224
@@ -350,7 +360,7 @@ msgstr ""
msgid "Password Authentication"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:95
+#: lib/mv_web/components/layouts/navbar.ex:106
#, elixir-autogen, elixir-format
msgid "Profil"
msgstr ""
@@ -370,7 +380,7 @@ msgstr ""
msgid "Select member"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:99
+#: lib/mv_web/components/layouts/navbar.ex:110
#, elixir-autogen, elixir-format
msgid "Settings"
msgstr ""
@@ -538,14 +548,14 @@ msgstr ""
msgid "Back to users list"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:33
-#: lib/mv_web/components/layouts/navbar.ex:39
+#: lib/mv_web/components/layouts/navbar.ex:44
+#: lib/mv_web/components/layouts/navbar.ex:50
#, elixir-autogen, elixir-format, fuzzy
msgid "Select language"
msgstr ""
-#: lib/mv_web/components/layouts/navbar.ex:46
-#: lib/mv_web/components/layouts/navbar.ex:66
+#: lib/mv_web/components/layouts/navbar.ex:57
+#: lib/mv_web/components/layouts/navbar.ex:77
#, elixir-autogen, elixir-format
msgid "Toggle dark mode"
msgstr ""
@@ -717,6 +727,7 @@ msgstr ""
msgid "Manage global settings for the association."
msgstr ""
+#: lib/mv_web/live/contribution_settings_live.ex:102
#: lib/mv_web/live/global_settings_live.ex:56
#, elixir-autogen, elixir-format, fuzzy
msgid "Save Settings"
@@ -854,8 +865,440 @@ msgstr ""
msgid "Payment filter"
msgstr ""
+#: lib/mv_web/live/contribution_period_live/show.ex:107
+#, elixir-autogen, elixir-format
+msgid "%{count} period selected"
+msgid_plural "%{count} periods selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:113
+#, elixir-autogen, elixir-format
+msgid "About Contribution Types"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:138
+#: lib/mv_web/live/contribution_type_live/index.ex:53
+#, elixir-autogen, elixir-format
+msgid "Amount"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:48
+#, elixir-autogen, elixir-format
+msgid "Back to Settings"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:124
+#, elixir-autogen, elixir-format
+msgid "Can be changed at any time. Amount changes affect future periods only."
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:77
+#, elixir-autogen, elixir-format
+msgid "Cannot delete - members assigned"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:83
+#, elixir-autogen, elixir-format
+msgid "Change Contribution Type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:42
+#, elixir-autogen, elixir-format
+msgid "Configure global settings for membership contributions."
+msgstr ""
+
+#: lib/mv_web/components/layouts/navbar.ex:34
+#: lib/mv_web/live/contribution_settings_live.ex:27
+#: lib/mv_web/live/contribution_settings_live.ex:40
+#, elixir-autogen, elixir-format
+msgid "Contribution Settings"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:62
+#, elixir-autogen, elixir-format
+msgid "Contribution Start"
+msgstr ""
+
+#: lib/mv_web/components/layouts/navbar.ex:32
+#: lib/mv_web/live/contribution_type_live/index.ex:25
+#: lib/mv_web/live/contribution_type_live/index.ex:36
+#, elixir-autogen, elixir-format
+msgid "Contribution Types"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:224
+#, elixir-autogen, elixir-format
+msgid "Contribution start"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:41
+#, elixir-autogen, elixir-format
+msgid "Contribution type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:117
+#, elixir-autogen, elixir-format
+msgid "Contribution 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/components/layouts/navbar.ex:30
+#, elixir-autogen, elixir-format
+msgid "Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:39
+#, elixir-autogen, elixir-format
+msgid "Contributions for %{name}"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:159
+#, elixir-autogen, elixir-format
+msgid "Current"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:60
+#, elixir-autogen, elixir-format
+msgid "Default Contribution Type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:133
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Deletion"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:173
+#, elixir-autogen, elixir-format
+msgid "Example: Member Contribution View"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:113
+#, elixir-autogen, elixir-format
+msgid "Examples"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:262
+#: lib/mv_web/live/contribution_type_live/index.ex:172
+#, elixir-autogen, elixir-format
+msgid "Family"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:128
+#, elixir-autogen, elixir-format
+msgid "Fixed after creation. Members can only switch between types with the same interval."
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:228
+#, elixir-autogen, elixir-format
+msgid "Generated periods"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:52
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Global Settings"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:344
+#: lib/mv_web/live/contribution_settings_live.ex:275
+#: lib/mv_web/live/contribution_type_live/index.ex:203
+#, elixir-autogen, elixir-format
+msgid "Half-yearly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:181
+#, elixir-autogen, elixir-format
+msgid "Half-yearly contribution for supporting members"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:87
+#: lib/mv_web/live/contribution_type_live/index.ex:188
+#, elixir-autogen, elixir-format
+msgid "Honorary"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:85
+#, elixir-autogen, elixir-format
+msgid "Include joining period"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:137
+#: lib/mv_web/live/contribution_type_live/index.ex:57
+#: lib/mv_web/live/contribution_type_live/index.ex:127
+#, elixir-autogen, elixir-format
+msgid "Interval"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:220
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Joining date"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:332
+#, elixir-autogen, elixir-format
+msgid "Joining year - reduced to 0"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:38
+#, elixir-autogen, elixir-format
+msgid "Manage contribution types for membership fees."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:116
+#, elixir-autogen, elixir-format
+msgid "Mark as Paid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:120
+#, elixir-autogen, elixir-format
+msgid "Mark as Suspended"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:124
+#, elixir-autogen, elixir-format
+msgid "Mark as Unpaid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:26
+#, elixir-autogen, elixir-format
+msgid "Member Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:122
+#, elixir-autogen, elixir-format
+msgid "Member pays for the year they joined"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:155
+#, elixir-autogen, elixir-format
+msgid "Member pays from the joining month"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:144
+#, elixir-autogen, elixir-format
+msgid "Member pays from the next full quarter"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:133
+#, elixir-autogen, elixir-format
+msgid "Member pays from the next full year"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:43
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Member since"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:92
+#, elixir-autogen, elixir-format
+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/live/contribution_period_live/show.ex:342
+#: lib/mv_web/live/contribution_settings_live.ex:273
+#: lib/mv_web/live/contribution_type_live/index.ex:201
+#, elixir-autogen, elixir-format
+msgid "Monthly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:150
+#, elixir-autogen, elixir-format
+msgid "Monthly Interval - Joining Period Included"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:165
+#, elixir-autogen, elixir-format
+msgid "Monthly fee for students and trainees"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:123
+#, elixir-autogen, elixir-format
+msgid "Name & Amount"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:42
+#, elixir-autogen, elixir-format
+msgid "New Contribution Type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:189
+#, elixir-autogen, elixir-format
+msgid "No fee for honorary members"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:134
+#, elixir-autogen, elixir-format
+msgid "Only possible if no members are assigned to this type."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:70
+#, elixir-autogen, elixir-format
+msgid "Open Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:302
+#, elixir-autogen, elixir-format
+msgid "Paid via bank transfer"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:226
+#: lib/mv_web/live/contribution_settings_live.ex:197
+#: lib/mv_web/live/contribution_type_live/index.ex:97
+#, elixir-autogen, elixir-format
+msgid "Preview Mockup"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:343
+#: lib/mv_web/live/contribution_settings_live.ex:274
+#: lib/mv_web/live/contribution_type_live/index.ex:202
+#, elixir-autogen, elixir-format
+msgid "Quarterly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:139
+#, elixir-autogen, elixir-format
+msgid "Quarterly Interval - Joining Period Excluded"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:173
+#, elixir-autogen, elixir-format
+msgid "Quarterly fee for family memberships"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:86
+#: lib/mv_web/live/contribution_settings_live.ex:250
+#: lib/mv_web/live/contribution_type_live/index.ex:156
+#, elixir-autogen, elixir-format
+msgid "Reduced"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:157
+#, elixir-autogen, elixir-format
+msgid "Reduced fee for unemployed, pensioners, or low income"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:276
+#: lib/mv_web/live/contribution_settings_live.ex:244
+#: lib/mv_web/live/contribution_type_live/index.ex:148
+#, elixir-autogen, elixir-format
+msgid "Regular"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:204
+#, elixir-autogen, elixir-format
+msgid "Reopen"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:176
+#, elixir-autogen, elixir-format
+msgid "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:149
+#, elixir-autogen, elixir-format
+msgid "Standard membership fee for regular members"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:139
+#, elixir-autogen, elixir-format
+msgid "Status"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:256
+#: lib/mv_web/live/contribution_type_live/index.ex:164
+#, elixir-autogen, elixir-format
+msgid "Student"
+msgstr ""
+
+#: lib/mv_web/live/contribution_type_live/index.ex:180
+#, elixir-autogen, elixir-format
+msgid "Supporting Member"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:195
+#, elixir-autogen, elixir-format
+msgid "Suspend"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:260
+#, elixir-autogen, elixir-format
+msgid "Suspended"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:69
+#, elixir-autogen, elixir-format
+msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:228
+#: lib/mv_web/live/contribution_settings_live.ex:199
+#: lib/mv_web/live/contribution_type_live/index.ex:99
+#, elixir-autogen, elixir-format
+msgid "This page is not functional and only displays the planned features."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:136
+#, elixir-autogen, elixir-format
+msgid "Time Period"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:66
+#, elixir-autogen, elixir-format
+msgid "Total Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:251
+#, elixir-autogen, elixir-format
+msgid "Unpaid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:183
+#, elixir-autogen, elixir-format
+msgid "View Example Member"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:90
+#, elixir-autogen, elixir-format
+msgid "When active: Members pay from the period of their joining."
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:93
+#, elixir-autogen, elixir-format
+msgid "When inactive: Members pay from the next full period after joining."
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:98
+#, elixir-autogen, elixir-format
+msgid "Why are not all contribution types shown?"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:85
+#: lib/mv_web/live/contribution_period_live/show.ex:86
+#: lib/mv_web/live/contribution_period_live/show.ex:87
+#: lib/mv_web/live/contribution_period_live/show.ex:345
+#: lib/mv_web/live/contribution_settings_live.ex:276
+#: lib/mv_web/live/contribution_type_live/index.ex:204
+#, elixir-autogen, elixir-format
+msgid "Yearly"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:128
+#, elixir-autogen, elixir-format
+msgid "Yearly Interval - Joining Period Excluded"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:117
+#, elixir-autogen, elixir-format
+msgid "Yearly Interval - Joining Period Included"
+msgstr ""
+
#~ #: lib/mv_web/live/member_live/form.ex:48
#~ #: lib/mv_web/live/member_live/show.ex:51
#~ #, elixir-autogen, elixir-format
#~ msgid "Birth Date"
#~ msgstr ""
+
+#~ #: lib/mv_web/live/contribution_period_live/show.ex:273
+#~ #: lib/mv_web/live/contribution_settings_live.ex:248
+#~ #, elixir-autogen, elixir-format
+#~ msgid "Related Pages"
+#~ msgstr ""