diff --git a/docs/feature-roadmap.md b/docs/feature-roadmap.md
index 609523c..2f86f5e 100644
--- a/docs/feature-roadmap.md
+++ b/docs/feature-roadmap.md
@@ -187,10 +187,16 @@
**Current State:**
- ✅ Basic "paid" boolean field on members
+- ✅ **UI Mock-ups for Contribution Types & Settings** (2025-12-02)
- ⚠️ No payment tracking
**Open Issues:**
- [#156](https://git.local-it.org/local-it/mitgliederverwaltung/issues/156) - Set up & document testing environment for vereinfacht.digital (L, Low priority)
+- [#226](https://git.local-it.org/local-it/mitgliederverwaltung/issues/226) - Payment/Contribution Mockup Pages (Preview)
+
+**Mock-Up Pages (Non-Functional Preview):**
+- `/contribution_types` - Contribution Types Management
+- `/contribution_settings` - Global Contribution Settings
**Missing Features:**
- ❌ Membership fee configuration
diff --git a/lib/mv_web/components/layouts/navbar.ex b/lib/mv_web/components/layouts/navbar.ex
index 7ff7f25..1c1138e 100644
--- a/lib/mv_web/components/layouts/navbar.ex
+++ b/lib/mv_web/components/layouts/navbar.ex
@@ -25,6 +25,17 @@ defmodule MvWeb.Layouts.Navbar do
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..e1f4b93
--- /dev/null
+++ b/lib/mv_web/live/contribution_period_live/show.ex
@@ -0,0 +1,375 @@
+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("Email")}
+
{@member.email}
+
+
+
{gettext("Contribution Start")}
+
{@member.contribution_start}
+
+
+
{gettext("Total Contributions")}
+
{length(@periods)}
+
+
+
{gettext("Open Contributions")}
+
+ {Enum.count(@periods, &(&1.status == :unpaid))}
+
+
+
+
+
+
+ <%!-- Contribution Type Change --%>
+
+
+
+ {gettext("Change Contribution Type")}:
+
+ {@member.contribution_type} (60,00 €, {gettext("Yearly")})
+ {gettext("Reduced")} (30,00 €, {gettext("Yearly")})
+ {gettext("Honorary")} (0,00 €, {gettext("Yearly")})
+
+
+ <.icon name="hero-question-mark-circle" class="size-4 inline" />
+ {gettext("Why are not all contribution types shown?")}
+
+
+
+
+
+ <%!-- Bulk Actions --%>
+
+
+ {ngettext(
+ "%{count} period selected",
+ "%{count} periods selected",
+ MapSet.size(@selected_periods),
+ count: MapSet.size(@selected_periods)
+ )}
+
+
+ <.icon name="hero-check" class="size-4" />
+ {gettext("Mark as Paid")}
+
+
+ <.icon name="hero-minus-circle" class="size-4" />
+ {gettext("Mark as Suspended")}
+
+
+ <.icon name="hero-x-circle" class="size-4" />
+ {gettext("Mark as Unpaid")}
+
+
+
+ <%!-- Periods Table --%>
+
+
+ <.navigation_card />
+
+ """
+ end
+
+ # Mock-up warning banner component - subtle orange style
+ defp mockup_warning(assigns) do
+ ~H"""
+
+ <.icon name="hero-exclamation-triangle" class="size-5 shrink-0" />
+
+ {gettext("Preview Mockup")}
+
+ – {gettext("This page is not functional and only displays the planned features.")}
+
+
+
+ """
+ end
+
+ # Status badge component
+ attr :status, :atom, required: true
+
+ defp status_badge(%{status: :paid} = assigns) do
+ ~H"""
+
+ <.icon name="hero-check-circle-mini" class="size-3" />
+ {gettext("Paid")}
+
+ """
+ end
+
+ defp status_badge(%{status: :unpaid} = assigns) do
+ ~H"""
+
+ <.icon name="hero-x-circle-mini" class="size-3" />
+ {gettext("Unpaid")}
+
+ """
+ end
+
+ defp status_badge(%{status: :suspended} = assigns) do
+ ~H"""
+
+ <.icon name="hero-pause-circle-mini" class="size-3" />
+ {gettext("Suspended")}
+
+ """
+ end
+
+ # Navigation card
+ defp navigation_card(assigns) do
+ ~H"""
+
+
+
+ <.icon name="hero-arrow-right-circle" class="size-5" />
+ {gettext("Related Pages")}
+
+
+ <.link navigate={~p"/contribution_types"} class="btn btn-outline btn-sm">
+ <.icon name="hero-tag" class="size-4" />
+ {gettext("Contribution Types")}
+
+ <.link navigate={~p"/contribution_settings"} class="btn btn-outline btn-sm">
+ <.icon name="hero-cog-6-tooth" class="size-4" />
+ {gettext("Contribution Settings")}
+
+ <.link navigate={~p"/members"} class="btn btn-outline btn-sm">
+ <.icon name="hero-users" class="size-4" />
+ {gettext("Members")}
+
+
+
+
+ """
+ end
+
+ defp period_row_class(:unpaid), do: "bg-error/5"
+ defp period_row_class(:suspended), do: "bg-base-200/50"
+ defp period_row_class(_), do: ""
+
+ # Mock member data
+ defp mock_member do
+ %{
+ id: "123",
+ first_name: "Maria",
+ last_name: "Weber",
+ email: "maria.weber@example.de",
+ contribution_type: gettext("Regular"),
+ joined_at: "15.03.2021",
+ contribution_start: "01.01.2021"
+ }
+ end
+
+ # Mock periods data
+ defp mock_periods do
+ [
+ %{
+ id: "p1",
+ period_start: "01.01.2025",
+ period_end: "31.12.2025",
+ interval: :yearly,
+ amount: Decimal.new("60.00"),
+ status: :unpaid,
+ notes: nil,
+ is_current: true
+ },
+ %{
+ id: "p2",
+ period_start: "01.01.2024",
+ period_end: "31.12.2024",
+ interval: :yearly,
+ amount: Decimal.new("60.00"),
+ status: :paid,
+ notes: gettext("Paid via bank transfer"),
+ is_current: false
+ },
+ %{
+ id: "p3",
+ period_start: "01.01.2023",
+ period_end: "31.12.2023",
+ interval: :yearly,
+ amount: Decimal.new("50.00"),
+ status: :paid,
+ notes: nil,
+ is_current: false
+ },
+ %{
+ id: "p4",
+ period_start: "01.01.2022",
+ period_end: "31.12.2022",
+ interval: :yearly,
+ amount: Decimal.new("50.00"),
+ status: :paid,
+ notes: nil,
+ is_current: false
+ },
+ %{
+ id: "p5",
+ period_start: "01.01.2021",
+ period_end: "31.12.2021",
+ interval: :yearly,
+ amount: Decimal.new("50.00"),
+ status: :suspended,
+ notes: gettext("Joining year - reduced to 0"),
+ is_current: false
+ }
+ ]
+ 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/live/contribution_settings_live.ex b/lib/mv_web/live/contribution_settings_live.ex
new file mode 100644
index 0000000..3543457
--- /dev/null
+++ b/lib/mv_web/live/contribution_settings_live.ex
@@ -0,0 +1,303 @@
+defmodule MvWeb.ContributionSettingsLive do
+ @moduledoc """
+ Mock-up LiveView for Contribution Settings (Admin).
+
+ This is a preview-only page that displays the planned UI for managing
+ global contribution settings. It shows static mock data and is not functional.
+
+ ## Planned Features (Future Implementation)
+ - Set default contribution type for new members
+ - Configure whether joining period is included in contributions
+ - Explanatory text with examples
+
+ ## Settings
+ - `default_contribution_type_id` - UUID of the default contribution type
+ - `include_joining_period` - Boolean whether to include joining 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("Contribution Settings"))
+ |> assign(:contribution_types, mock_contribution_types())
+ |> assign(:selected_type_id, "1")
+ |> assign(:include_joining_period, true)}
+ end
+
+ @impl true
+ def render(assigns) do
+ ~H"""
+
+ <.mockup_warning />
+
+ <.header>
+ {gettext("Contribution Settings")}
+ <:subtitle>
+ {gettext("Configure global settings for membership contributions.")}
+
+
+
+
+ <%!-- Settings Form --%>
+
+
+
+ <.icon name="hero-cog-6-tooth" class="size-5" />
+ {gettext("Global Settings")}
+
+
+
+
+
+
+ <%!-- Examples Card --%>
+
+
+
+ <.icon name="hero-light-bulb" class="size-5" />
+ {gettext("Examples")}
+
+
+ <.example_section
+ title={gettext("Yearly Interval - Joining Period Included")}
+ joining_date="15.03.2023"
+ include_joining={true}
+ start_date="01.01.2023"
+ periods={["2023", "2024", "2025"]}
+ note={gettext("Member pays for the year they joined")}
+ />
+
+
+
+ <.example_section
+ title={gettext("Yearly Interval - Joining Period Excluded")}
+ joining_date="15.03.2023"
+ include_joining={false}
+ start_date="01.01.2024"
+ periods={["2024", "2025"]}
+ note={gettext("Member pays from the next full year")}
+ />
+
+
+
+ <.example_section
+ title={gettext("Quarterly Interval - Joining Period Excluded")}
+ joining_date="15.05.2024"
+ include_joining={false}
+ start_date="01.07.2024"
+ periods={["Q3/2024", "Q4/2024", "Q1/2025"]}
+ note={gettext("Member pays from the next full quarter")}
+ />
+
+
+
+ <.example_section
+ title={gettext("Monthly Interval - Joining Period Included")}
+ joining_date="15.03.2024"
+ include_joining={true}
+ start_date="01.03.2024"
+ periods={["03/2024", "04/2024", "05/2024", "..."]}
+ note={gettext("Member pays from the joining month")}
+ />
+
+
+
+
+ <.example_member_card />
+
+ <.navigation_card />
+
+ """
+ end
+
+ # Example member card with link to period view
+ defp example_member_card(assigns) do
+ ~H"""
+
+
+
+ <.icon name="hero-user" class="size-5" />
+ {gettext("Example: Member Contribution View")}
+
+
+ {gettext(
+ "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
+ )}
+
+
+ <.link navigate={~p"/contributions/member/example"} class="btn btn-primary btn-sm">
+ <.icon name="hero-eye" class="size-4" />
+ {gettext("View Example Member")}
+
+
+
+
+ """
+ end
+
+ # Mock-up warning banner component - subtle orange style
+ defp mockup_warning(assigns) do
+ ~H"""
+
+ <.icon name="hero-exclamation-triangle" class="size-5 shrink-0" />
+
+ {gettext("Preview Mockup")}
+
+ – {gettext("This page is not functional and only displays the planned features.")}
+
+
+
+ """
+ end
+
+ # Example section component
+ attr :title, :string, required: true
+ attr :joining_date, :string, required: true
+ attr :include_joining, :boolean, required: true
+ attr :start_date, :string, required: true
+ attr :periods, :list, required: true
+ attr :note, :string, required: true
+
+ defp example_section(assigns) do
+ ~H"""
+
+
{@title}
+
+
+ {gettext("Joining date")}:
+ {@joining_date}
+
+
+ {gettext("Contribution start")}:
+ {@start_date}
+
+
+ {gettext("Generated periods")}:
+
+ {Enum.join(@periods, ", ")}
+
+
+
+
→ {@note}
+
+ """
+ end
+
+ # Navigation card to other contribution pages
+ defp navigation_card(assigns) do
+ ~H"""
+
+
+
+ <.icon name="hero-arrow-right-circle" class="size-5" />
+ {gettext("Related Pages")}
+
+
+ <.link navigate={~p"/contribution_types"} class="btn btn-outline btn-sm">
+ <.icon name="hero-tag" class="size-4" />
+ {gettext("Contribution Types")}
+
+ <.link navigate={~p"/settings"} class="btn btn-outline btn-sm">
+ <.icon name="hero-cog-6-tooth" class="size-4" />
+ {gettext("Club Settings")}
+
+
+
+
+ """
+ end
+
+ # Mock data for demonstration
+ defp mock_contribution_types do
+ [
+ %{
+ id: "1",
+ name: gettext("Regular"),
+ amount: Decimal.new("60.00"),
+ interval: :yearly
+ },
+ %{
+ id: "2",
+ name: gettext("Reduced"),
+ amount: Decimal.new("30.00"),
+ interval: :yearly
+ },
+ %{
+ id: "3",
+ name: gettext("Student"),
+ amount: Decimal.new("5.00"),
+ interval: :monthly
+ },
+ %{
+ id: "4",
+ name: gettext("Family"),
+ amount: Decimal.new("25.00"),
+ interval: :quarterly
+ }
+ ]
+ 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/live/contribution_type_live/index.ex b/lib/mv_web/live/contribution_type_live/index.ex
new file mode 100644
index 0000000..9a7b602
--- /dev/null
+++ b/lib/mv_web/live/contribution_type_live/index.ex
@@ -0,0 +1,205 @@
+defmodule MvWeb.ContributionTypeLive.Index do
+ @moduledoc """
+ Mock-up LiveView for Contribution Types Management (Admin).
+
+ This is a preview-only page that displays the planned UI for managing
+ contribution types. It shows static mock data and is not functional.
+
+ ## Planned Features (Future Implementation)
+ - List all contribution types
+ - Display: Name, Amount, Interval, Member count
+ - Create new contribution types
+ - Edit existing contribution types (name, amount, description - NOT interval)
+ - Delete contribution types (if no members assigned)
+
+ ## 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("Contribution Types"))
+ |> assign(:contribution_types, mock_contribution_types())}
+ end
+
+ @impl true
+ def render(assigns) do
+ ~H"""
+
+ <.mockup_warning />
+
+ <.header>
+ {gettext("Contribution Types")}
+ <:subtitle>
+ {gettext("Manage contribution types for membership fees.")}
+
+ <:actions>
+
+ <.icon name="hero-plus" /> {gettext("New Contribution Type")}
+
+
+
+
+ <.table id="contribution_types" rows={@contribution_types} row_id={fn ct -> "ct-#{ct.id}" end}>
+ <:col :let={ct} label={gettext("Name")}>
+ {ct.name}
+ {ct.description}
+
+
+ <:col :let={ct} label={gettext("Amount")}>
+ {format_currency(ct.amount)}
+
+
+ <:col :let={ct} label={gettext("Interval")}>
+ {format_interval(ct.interval)}
+
+
+ <:col :let={ct} label={gettext("Members")}>
+ {ct.member_count}
+
+
+ <:action :let={_ct}>
+
+ <.icon name="hero-pencil" class="size-4" />
+
+
+
+ <:action :let={ct}>
+ 0,
+ do: gettext("Cannot delete - members assigned"),
+ else: gettext("Delete")
+ }
+ >
+ <.icon name="hero-trash" class="size-4" />
+
+
+
+
+ <.info_card />
+
+ """
+ end
+
+ # Mock-up warning banner component - subtle orange style
+ defp mockup_warning(assigns) do
+ ~H"""
+
+ <.icon name="hero-exclamation-triangle" class="size-5 shrink-0" />
+
+ {gettext("Preview Mockup")}
+
+ – {gettext("This page is not functional and only displays the planned features.")}
+
+
+
+ """
+ end
+
+ # Info card explaining the contribution type concept
+ defp info_card(assigns) do
+ ~H"""
+
+
+
+ <.icon name="hero-information-circle" class="size-5" />
+ {gettext("About Contribution Types")}
+
+
+
+ {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 a1bf071..f7dd49e 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"
@@ -27,19 +28,21 @@ msgstr "Bist du sicher?"
msgid "Attempting to reconnect"
msgstr "Verbindung wird wiederhergestellt"
-#: lib/mv_web/live/member_live/form.ex:54
+#: lib/mv_web/live/member_live/form.ex:53
#: lib/mv_web/live/member_live/index.html.heex:179
-#: lib/mv_web/live/member_live/show.ex:59
+#: lib/mv_web/live/member_live/show.ex:58
#, elixir-autogen, elixir-format
msgid "City"
msgstr "Stadt"
+#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:245
#: 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:237
#: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66
@@ -48,11 +51,12 @@ msgid "Edit"
msgstr "Bearbeite"
#: lib/mv_web/live/member_live/show.ex:41
-#: lib/mv_web/live/member_live/show.ex:117
+#: lib/mv_web/live/member_live/show.ex:116
#, elixir-autogen, elixir-format
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:107
#: lib/mv_web/live/member_live/show.ex:50
@@ -69,9 +73,9 @@ msgstr "E-Mail"
msgid "First Name"
msgstr "Vorname"
-#: lib/mv_web/live/member_live/form.ex:51
+#: lib/mv_web/live/member_live/form.ex:50
#: lib/mv_web/live/member_live/index.html.heex:215
-#: lib/mv_web/live/member_live/show.ex:56
+#: lib/mv_web/live/member_live/show.ex:55
#, elixir-autogen, elixir-format
msgid "Join Date"
msgstr "Beitrittsdatum"
@@ -108,55 +112,52 @@ msgstr "Keine Internetverbindung gefunden"
msgid "close"
msgstr "schließen"
-#: 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 "Geburtsdatum"
-
-#: lib/mv_web/live/member_live/form.ex:52
-#: lib/mv_web/live/member_live/show.ex:57
+#: lib/mv_web/live/member_live/form.ex:51
+#: lib/mv_web/live/member_live/show.ex:56
#, elixir-autogen, elixir-format
msgid "Exit Date"
msgstr "Austrittsdatum"
-#: lib/mv_web/live/member_live/form.ex:56
+#: lib/mv_web/live/member_live/form.ex:55
#: lib/mv_web/live/member_live/index.html.heex:143
-#: lib/mv_web/live/member_live/show.ex:61
+#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "House Number"
msgstr "Hausnummer"
-#: lib/mv_web/live/member_live/form.ex:53
-#: lib/mv_web/live/member_live/show.ex:58
+#: 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
msgid "Notes"
msgstr "Notizen"
-#: lib/mv_web/live/components/payment_filter_component.ex:88
-#: lib/mv_web/live/components/payment_filter_component.ex:138
-#: lib/mv_web/live/member_live/form.ex:49
+#: 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:243
+#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:224
-#: lib/mv_web/live/member_live/show.ex:52
+#: lib/mv_web/live/member_live/show.ex:51
#, elixir-autogen, elixir-format
msgid "Paid"
msgstr "Bezahlt"
-#: lib/mv_web/live/member_live/form.ex:50
+#: lib/mv_web/live/member_live/form.ex:49
#: lib/mv_web/live/member_live/index.html.heex:197
-#: lib/mv_web/live/member_live/show.ex:55
+#: lib/mv_web/live/member_live/show.ex:54
#, elixir-autogen, elixir-format
msgid "Phone Number"
msgstr "Telefonnummer"
-#: lib/mv_web/live/member_live/form.ex:57
+#: lib/mv_web/live/member_live/form.ex:56
#: lib/mv_web/live/member_live/index.html.heex:161
-#: lib/mv_web/live/member_live/show.ex:62
+#: lib/mv_web/live/member_live/show.ex:61
#, elixir-autogen, elixir-format
msgid "Postal Code"
msgstr "Postleitzahl"
-#: lib/mv_web/live/member_live/form.ex:80
+#: lib/mv_web/live/member_live/form.ex:79
#, elixir-autogen, elixir-format
msgid "Save Member"
msgstr "Mitglied speichern"
@@ -164,15 +165,15 @@ msgstr "Mitglied speichern"
#: lib/mv_web/live/custom_field_live/form.ex:66
#: lib/mv_web/live/custom_field_value_live/form.ex:74
#: lib/mv_web/live/global_settings_live.ex:55
-#: lib/mv_web/live/member_live/form.ex:79
+#: lib/mv_web/live/member_live/form.ex:78
#: lib/mv_web/live/user_live/form.ex:248
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr "Speichern..."
-#: lib/mv_web/live/member_live/form.ex:55
+#: lib/mv_web/live/member_live/form.ex:54
#: lib/mv_web/live/member_live/index.html.heex:125
-#: lib/mv_web/live/member_live/show.ex:60
+#: lib/mv_web/live/member_live/show.ex:59
#, elixir-autogen, elixir-format
msgid "Street"
msgstr "Straße"
@@ -184,12 +185,12 @@ msgstr "ID"
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/index/formatter.ex:61
-#: lib/mv_web/live/member_live/show.ex:53
+#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "No"
msgstr "Nein"
-#: lib/mv_web/live/member_live/show.ex:116
+#: lib/mv_web/live/member_live/show.ex:115
#, elixir-autogen, elixir-format, fuzzy
msgid "Show Member"
msgstr "Mitglied anzeigen"
@@ -201,21 +202,21 @@ msgstr "Dies ist ein Mitglied aus deiner Datenbank."
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/index/formatter.ex:60
-#: lib/mv_web/live/member_live/show.ex:53
+#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "Yes"
msgstr "Ja"
#: lib/mv_web/live/custom_field_live/form.ex:110
#: lib/mv_web/live/custom_field_value_live/form.ex:233
-#: lib/mv_web/live/member_live/form.ex:138
+#: lib/mv_web/live/member_live/form.ex:137
#, elixir-autogen, elixir-format
msgid "create"
msgstr "erstellt"
#: lib/mv_web/live/custom_field_live/form.ex:111
#: lib/mv_web/live/custom_field_value_live/form.ex:234
-#: lib/mv_web/live/member_live/form.ex:139
+#: lib/mv_web/live/member_live/form.ex:138
#, elixir-autogen, elixir-format
msgid "update"
msgstr "aktualisiert"
@@ -225,7 +226,7 @@ msgstr "aktualisiert"
msgid "Incorrect email or password"
msgstr "Falsche E-Mail oder Passwort"
-#: lib/mv_web/live/member_live/form.ex:145
+#: lib/mv_web/live/member_live/form.ex:144
#, elixir-autogen, elixir-format
msgid "Member %{action} successfully"
msgstr "Mitglied %{action} erfolgreich"
@@ -258,7 +259,7 @@ msgstr "Ihr Passwort wurde erfolgreich zurückgesetzt"
#: lib/mv_web/live/custom_field_live/form.ex:69
#: lib/mv_web/live/custom_field_live/index.ex:120
#: lib/mv_web/live/custom_field_value_live/form.ex:77
-#: lib/mv_web/live/member_live/form.ex:82
+#: lib/mv_web/live/member_live/form.ex:81
#: lib/mv_web/live/user_live/form.ex:251
#, elixir-autogen, elixir-format
msgid "Cancel"
@@ -294,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"
@@ -311,12 +312,15 @@ msgid "Member"
msgstr "Mitglied"
#: lib/mv_web/components/layouts/navbar.ex:25
+#: lib/mv_web/live/contribution_period_live/show.ex:286
+#: 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"
@@ -337,6 +341,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
@@ -355,7 +360,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"
@@ -375,7 +380,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"
@@ -515,7 +520,7 @@ msgstr "Benutzer*in wird ohne Passwort erstellt. Aktivieren Sie 'Passwort setzen
msgid "Linked Member"
msgstr "Verknüpftes Mitglied"
-#: lib/mv_web/live/member_live/show.ex:63
+#: lib/mv_web/live/member_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Linked User"
msgstr "Verknüpfte*r Benutzer*in"
@@ -526,7 +531,7 @@ msgstr "Verknüpfte*r Benutzer*in"
msgid "No member linked"
msgstr "Kein Mitglied verknüpft"
-#: lib/mv_web/live/member_live/show.ex:73
+#: lib/mv_web/live/member_live/show.ex:72
#, elixir-autogen, elixir-format
msgid "No user linked"
msgstr "Keine*r Benutzer*in verknüpft"
@@ -543,14 +548,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"
@@ -613,8 +618,8 @@ msgstr "Diese E-Mail-Adresse ist bereits mit einem anderen OIDC-Konto verknüpft
msgid "Choose a custom field"
msgstr "Wähle ein Benutzerdefiniertes Feld"
-#: lib/mv_web/live/member_live/form.ex:59
-#: lib/mv_web/live/member_live/show.ex:78
+#: lib/mv_web/live/member_live/form.ex:58
+#: lib/mv_web/live/member_live/show.ex:77
#, elixir-autogen, elixir-format
msgid "Custom Field Values"
msgstr "Benutzerdefinierte Feldwerte"
@@ -711,6 +716,7 @@ msgstr "In der Mitglieder-Übersicht anzeigen"
msgid "Association Name"
msgstr "Vereinsname"
+#: lib/mv_web/live/contribution_settings_live.ex:257
#: lib/mv_web/live/global_settings_live.ex:31
#: lib/mv_web/live/global_settings_live.ex:41
#, elixir-autogen, elixir-format, fuzzy
@@ -722,6 +728,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"
@@ -837,24 +844,459 @@ msgstr "Felder, die mit einem Sternchen (*) markiert sind, dürfen nicht leer bl
msgid "This field cannot be empty"
msgstr "Dieses Feld darf nicht leer bleiben"
-#: lib/mv_web/live/components/payment_filter_component.ex:74
-#: lib/mv_web/live/components/payment_filter_component.ex:137
+#: lib/mv_web/live/components/payment_filter_component.ex:80
+#: lib/mv_web/live/components/payment_filter_component.ex:143
#, elixir-autogen, elixir-format
msgid "All"
msgstr "Alle"
-#: lib/mv_web/live/components/payment_filter_component.ex:48
+#: lib/mv_web/live/components/payment_filter_component.ex:54
#, elixir-autogen, elixir-format
msgid "Filter by payment status"
msgstr "Nach Zahlungsstatus filtern"
-#: lib/mv_web/live/components/payment_filter_component.ex:102
-#: lib/mv_web/live/components/payment_filter_component.ex:139
+#: lib/mv_web/live/components/payment_filter_component.ex:108
+#: lib/mv_web/live/components/payment_filter_component.ex:145
#, elixir-autogen, elixir-format
msgid "Not paid"
msgstr "Nicht bezahlt"
-#: lib/mv_web/live/components/payment_filter_component.ex:59
+#: lib/mv_web/live/components/payment_filter_component.ex:65
#, elixir-autogen, elixir-format
msgid "Payment filter"
msgstr "Zahlungsfilter"
+
+#: 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_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 Perioden 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_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_period_live/show.ex:282
+#: 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/components/layouts/navbar.ex:32
+#: lib/mv_web/live/contribution_period_live/show.ex:278
+#: lib/mv_web/live/contribution_settings_live.ex:253
+#: 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:226
+#, elixir-autogen, elixir-format
+msgid "Contribution start"
+msgstr "Beitragsbeginn"
+
+#: 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_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:113
+#, elixir-autogen, elixir-format
+msgid "Examples"
+msgstr "Beispiele"
+
+#: lib/mv_web/live/contribution_settings_live.ex:288
+#: 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:230
+#, elixir-autogen, elixir-format
+msgid "Generated periods"
+msgstr "Generierte Perioden"
+
+#: 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:373
+#: lib/mv_web/live/contribution_settings_live.ex:301
+#: 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 "Eintrittsperiode einschließen"
+
+#: 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:222
+#, elixir-autogen, elixir-format
+msgid "Joining date"
+msgstr "Eintrittsdatum"
+
+#: 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_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:371
+#: lib/mv_web/live/contribution_settings_live.ex:299
+#: 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:227
+#: lib/mv_web/live/contribution_settings_live.ex:199
+#: lib/mv_web/live/contribution_type_live/index.ex:97
+#, elixir-autogen, elixir-format
+msgid "Preview Mockup"
+msgstr "Vorschau-Mockup"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:372
+#: lib/mv_web/live/contribution_settings_live.ex:300
+#: 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:276
+#: 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:305
+#: lib/mv_web/live/contribution_settings_live.ex:270
+#: 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:273
+#: lib/mv_web/live/contribution_settings_live.ex:248
+#, elixir-autogen, elixir-format
+msgid "Related Pages"
+msgstr "Verwandte Seiten"
+
+#: 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_settings_live.ex:282
+#: 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_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_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: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:374
+#: lib/mv_web/live/contribution_settings_live.ex:302
+#: 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/contribution_period_live/show.ex:107
+#, elixir-autogen, elixir-format
+msgid "%{count} period selected"
+msgid_plural "%{count} periods selected"
+msgstr[0] "%{count} Periode ausgewählt"
+msgstr[1] "%{count} Perioden ausgewählt"
+
+#: 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_period_live/show.ex:83
+#, elixir-autogen, elixir-format
+msgid "Change Contribution Type"
+msgstr "Beitragsart ändern"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:62
+#, 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_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:175
+#, elixir-autogen, elixir-format
+msgid "Example: Member Contribution View"
+msgstr "Beispiel: Mitglieder-Beitragsansicht"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:361
+#, elixir-autogen, elixir-format
+msgid "Joining year - reduced to 0"
+msgstr "Eintrittsjahr - auf 0 reduziert"
+
+#: 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_period_live/show.ex:43
+#, elixir-autogen, elixir-format
+msgid "Member since"
+msgstr "Mitglied seit"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:331
+#, elixir-autogen, elixir-format
+msgid "Paid via bank transfer"
+msgstr "Per Überweisung bezahlt"
+
+#: lib/mv_web/live/contribution_settings_live.ex:178
+#, 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_period_live/show.ex:139
+#, elixir-autogen, elixir-format
+msgid "Status"
+msgstr "Status"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:261
+#, elixir-autogen, elixir-format
+msgid "Suspended"
+msgstr "Ausgesetzt"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:252
+#, elixir-autogen, elixir-format
+msgid "Unpaid"
+msgstr "Unbezahlt"
+
+#: lib/mv_web/live/contribution_settings_live.ex:185
+#, elixir-autogen, elixir-format
+msgid "View Example Member"
+msgstr "Beispielmitglied ansehen"
+
+#: 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:70
+#, elixir-autogen, elixir-format
+msgid "Open Contributions"
+msgstr "Offene Beiträge"
+
+#: lib/mv_web/live/contribution_period_live/show.ex:204
+#, elixir-autogen, elixir-format
+msgid "Reopen"
+msgstr "Wieder öffnen"
+
+#: 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:229
+#: lib/mv_web/live/contribution_settings_live.ex:201
+#: 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:98
+#, elixir-autogen, elixir-format
+msgid "Why are not all contribution types shown?"
+msgstr "Warum werden nicht alle Beitragsarten angezeigt?"
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index f73d54a..fb309dd 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 ""
@@ -28,19 +29,21 @@ msgstr ""
msgid "Attempting to reconnect"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:54
+#: lib/mv_web/live/member_live/form.ex:53
#: lib/mv_web/live/member_live/index.html.heex:179
-#: lib/mv_web/live/member_live/show.ex:59
+#: lib/mv_web/live/member_live/show.ex:58
#, elixir-autogen, elixir-format
msgid "City"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:245
#: 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:237
#: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66
@@ -49,11 +52,12 @@ msgid "Edit"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:41
-#: lib/mv_web/live/member_live/show.ex:117
+#: lib/mv_web/live/member_live/show.ex:116
#, elixir-autogen, elixir-format
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:107
#: lib/mv_web/live/member_live/show.ex:50
@@ -70,9 +74,9 @@ msgstr ""
msgid "First Name"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:51
+#: lib/mv_web/live/member_live/form.ex:50
#: lib/mv_web/live/member_live/index.html.heex:215
-#: lib/mv_web/live/member_live/show.ex:56
+#: lib/mv_web/live/member_live/show.ex:55
#, elixir-autogen, elixir-format
msgid "Join Date"
msgstr ""
@@ -109,55 +113,52 @@ msgstr ""
msgid "close"
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/member_live/form.ex:52
-#: lib/mv_web/live/member_live/show.ex:57
+#: lib/mv_web/live/member_live/form.ex:51
+#: lib/mv_web/live/member_live/show.ex:56
#, elixir-autogen, elixir-format
msgid "Exit Date"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:56
+#: lib/mv_web/live/member_live/form.ex:55
#: lib/mv_web/live/member_live/index.html.heex:143
-#: lib/mv_web/live/member_live/show.ex:61
+#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "House Number"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:53
-#: lib/mv_web/live/member_live/show.ex:58
+#: 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
msgid "Notes"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:88
-#: lib/mv_web/live/components/payment_filter_component.ex:138
-#: lib/mv_web/live/member_live/form.ex:49
+#: 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:243
+#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:224
-#: lib/mv_web/live/member_live/show.ex:52
+#: lib/mv_web/live/member_live/show.ex:51
#, elixir-autogen, elixir-format
msgid "Paid"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:50
+#: lib/mv_web/live/member_live/form.ex:49
#: lib/mv_web/live/member_live/index.html.heex:197
-#: lib/mv_web/live/member_live/show.ex:55
+#: lib/mv_web/live/member_live/show.ex:54
#, elixir-autogen, elixir-format
msgid "Phone Number"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:57
+#: lib/mv_web/live/member_live/form.ex:56
#: lib/mv_web/live/member_live/index.html.heex:161
-#: lib/mv_web/live/member_live/show.ex:62
+#: lib/mv_web/live/member_live/show.ex:61
#, elixir-autogen, elixir-format
msgid "Postal Code"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:80
+#: lib/mv_web/live/member_live/form.ex:79
#, elixir-autogen, elixir-format
msgid "Save Member"
msgstr ""
@@ -165,15 +166,15 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:66
#: lib/mv_web/live/custom_field_value_live/form.ex:74
#: lib/mv_web/live/global_settings_live.ex:55
-#: lib/mv_web/live/member_live/form.ex:79
+#: lib/mv_web/live/member_live/form.ex:78
#: lib/mv_web/live/user_live/form.ex:248
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:55
+#: lib/mv_web/live/member_live/form.ex:54
#: lib/mv_web/live/member_live/index.html.heex:125
-#: lib/mv_web/live/member_live/show.ex:60
+#: lib/mv_web/live/member_live/show.ex:59
#, elixir-autogen, elixir-format
msgid "Street"
msgstr ""
@@ -185,12 +186,12 @@ msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/index/formatter.ex:61
-#: lib/mv_web/live/member_live/show.ex:53
+#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "No"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex:116
+#: lib/mv_web/live/member_live/show.ex:115
#, elixir-autogen, elixir-format
msgid "Show Member"
msgstr ""
@@ -202,21 +203,21 @@ msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/index/formatter.ex:60
-#: lib/mv_web/live/member_live/show.ex:53
+#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "Yes"
msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:110
#: lib/mv_web/live/custom_field_value_live/form.ex:233
-#: lib/mv_web/live/member_live/form.ex:138
+#: lib/mv_web/live/member_live/form.ex:137
#, elixir-autogen, elixir-format
msgid "create"
msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:111
#: lib/mv_web/live/custom_field_value_live/form.ex:234
-#: lib/mv_web/live/member_live/form.ex:139
+#: lib/mv_web/live/member_live/form.ex:138
#, elixir-autogen, elixir-format
msgid "update"
msgstr ""
@@ -226,7 +227,7 @@ msgstr ""
msgid "Incorrect email or password"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:145
+#: lib/mv_web/live/member_live/form.ex:144
#, elixir-autogen, elixir-format
msgid "Member %{action} successfully"
msgstr ""
@@ -259,7 +260,7 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:69
#: lib/mv_web/live/custom_field_live/index.ex:120
#: lib/mv_web/live/custom_field_value_live/form.ex:77
-#: lib/mv_web/live/member_live/form.ex:82
+#: lib/mv_web/live/member_live/form.ex:81
#: lib/mv_web/live/user_live/form.ex:251
#, elixir-autogen, elixir-format
msgid "Cancel"
@@ -295,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 ""
@@ -312,12 +313,15 @@ msgid "Member"
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:25
+#: lib/mv_web/live/contribution_period_live/show.ex:286
+#: 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"
@@ -338,6 +342,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
@@ -356,7 +361,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 ""
@@ -376,7 +381,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 ""
@@ -516,7 +521,7 @@ msgstr ""
msgid "Linked Member"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex:63
+#: lib/mv_web/live/member_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Linked User"
msgstr ""
@@ -527,7 +532,7 @@ msgstr ""
msgid "No member linked"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex:73
+#: lib/mv_web/live/member_live/show.ex:72
#, elixir-autogen, elixir-format
msgid "No user linked"
msgstr ""
@@ -544,14 +549,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 ""
@@ -614,8 +619,8 @@ msgstr ""
msgid "Choose a custom field"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:59
-#: lib/mv_web/live/member_live/show.ex:78
+#: lib/mv_web/live/member_live/form.ex:58
+#: lib/mv_web/live/member_live/show.ex:77
#, elixir-autogen, elixir-format
msgid "Custom Field Values"
msgstr ""
@@ -712,6 +717,7 @@ msgstr ""
msgid "Association Name"
msgstr ""
+#: lib/mv_web/live/contribution_settings_live.ex:257
#: lib/mv_web/live/global_settings_live.ex:31
#: lib/mv_web/live/global_settings_live.ex:41
#, elixir-autogen, elixir-format
@@ -723,6 +729,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"
@@ -838,24 +845,459 @@ msgstr ""
msgid "This field cannot be empty"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:74
-#: lib/mv_web/live/components/payment_filter_component.ex:137
+#: lib/mv_web/live/components/payment_filter_component.ex:80
+#: lib/mv_web/live/components/payment_filter_component.ex:143
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:48
+#: lib/mv_web/live/components/payment_filter_component.ex:54
#, elixir-autogen, elixir-format
msgid "Filter by payment status"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:102
-#: lib/mv_web/live/components/payment_filter_component.ex:139
+#: lib/mv_web/live/components/payment_filter_component.ex:108
+#: lib/mv_web/live/components/payment_filter_component.ex:145
#, elixir-autogen, elixir-format
msgid "Not paid"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:59
+#: lib/mv_web/live/components/payment_filter_component.ex:65
#, elixir-autogen, elixir-format
msgid "Payment filter"
msgstr ""
+
+#: 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_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_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_period_live/show.ex:282
+#: 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/components/layouts/navbar.ex:32
+#: lib/mv_web/live/contribution_period_live/show.ex:278
+#: lib/mv_web/live/contribution_settings_live.ex:253
+#: 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:226
+#, elixir-autogen, elixir-format
+msgid "Contribution start"
+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_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:113
+#, elixir-autogen, elixir-format
+msgid "Examples"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:288
+#: 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:230
+#, 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:373
+#: lib/mv_web/live/contribution_settings_live.ex:301
+#: 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:222
+#, elixir-autogen, elixir-format
+msgid "Joining date"
+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_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:371
+#: lib/mv_web/live/contribution_settings_live.ex:299
+#: 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:227
+#: lib/mv_web/live/contribution_settings_live.ex:199
+#: 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:372
+#: lib/mv_web/live/contribution_settings_live.ex:300
+#: 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:276
+#: 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:305
+#: lib/mv_web/live/contribution_settings_live.ex:270
+#: 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:273
+#: lib/mv_web/live/contribution_settings_live.ex:248
+#, elixir-autogen, elixir-format
+msgid "Related Pages"
+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_settings_live.ex:282
+#: 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_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_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: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:374
+#: lib/mv_web/live/contribution_settings_live.ex:302
+#: 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/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_period_live/show.ex:48
+#, elixir-autogen, elixir-format
+msgid "Back to Settings"
+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_period_live/show.ex:62
+#, 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_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:175
+#, elixir-autogen, elixir-format
+msgid "Example: Member Contribution View"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:361
+#, elixir-autogen, elixir-format
+msgid "Joining year - reduced to 0"
+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_period_live/show.ex:43
+#, elixir-autogen, elixir-format
+msgid "Member since"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:331
+#, elixir-autogen, elixir-format
+msgid "Paid via bank transfer"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:178
+#, 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_period_live/show.ex:139
+#, elixir-autogen, elixir-format
+msgid "Status"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:261
+#, elixir-autogen, elixir-format
+msgid "Suspended"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:252
+#, elixir-autogen, elixir-format
+msgid "Unpaid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:185
+#, elixir-autogen, elixir-format
+msgid "View Example Member"
+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:70
+#, elixir-autogen, elixir-format
+msgid "Open Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:204
+#, elixir-autogen, elixir-format
+msgid "Reopen"
+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:229
+#: lib/mv_web/live/contribution_settings_live.ex:201
+#: 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:98
+#, elixir-autogen, elixir-format
+msgid "Why are not all contribution types shown?"
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 12c17cd..46b37bf 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 ""
@@ -28,19 +29,21 @@ msgstr ""
msgid "Attempting to reconnect"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:54
+#: lib/mv_web/live/member_live/form.ex:53
#: lib/mv_web/live/member_live/index.html.heex:179
-#: lib/mv_web/live/member_live/show.ex:59
+#: lib/mv_web/live/member_live/show.ex:58
#, elixir-autogen, elixir-format
msgid "City"
msgstr ""
+#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:245
#: 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:237
#: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66
@@ -49,11 +52,12 @@ msgid "Edit"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:41
-#: lib/mv_web/live/member_live/show.ex:117
+#: lib/mv_web/live/member_live/show.ex:116
#, elixir-autogen, elixir-format
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:107
#: lib/mv_web/live/member_live/show.ex:50
@@ -70,9 +74,9 @@ msgstr ""
msgid "First Name"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:51
+#: lib/mv_web/live/member_live/form.ex:50
#: lib/mv_web/live/member_live/index.html.heex:215
-#: lib/mv_web/live/member_live/show.ex:56
+#: lib/mv_web/live/member_live/show.ex:55
#, elixir-autogen, elixir-format
msgid "Join Date"
msgstr ""
@@ -109,55 +113,52 @@ msgstr ""
msgid "close"
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/member_live/form.ex:52
-#: lib/mv_web/live/member_live/show.ex:57
+#: lib/mv_web/live/member_live/form.ex:51
+#: lib/mv_web/live/member_live/show.ex:56
#, elixir-autogen, elixir-format
msgid "Exit Date"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:56
+#: lib/mv_web/live/member_live/form.ex:55
#: lib/mv_web/live/member_live/index.html.heex:143
-#: lib/mv_web/live/member_live/show.ex:61
+#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "House Number"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:53
-#: lib/mv_web/live/member_live/show.ex:58
+#: 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
msgid "Notes"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:88
-#: lib/mv_web/live/components/payment_filter_component.ex:138
-#: lib/mv_web/live/member_live/form.ex:49
+#: 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:243
+#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:224
-#: lib/mv_web/live/member_live/show.ex:52
+#: lib/mv_web/live/member_live/show.ex:51
#, elixir-autogen, elixir-format
msgid "Paid"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:50
+#: lib/mv_web/live/member_live/form.ex:49
#: lib/mv_web/live/member_live/index.html.heex:197
-#: lib/mv_web/live/member_live/show.ex:55
+#: lib/mv_web/live/member_live/show.ex:54
#, elixir-autogen, elixir-format
msgid "Phone Number"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:57
+#: lib/mv_web/live/member_live/form.ex:56
#: lib/mv_web/live/member_live/index.html.heex:161
-#: lib/mv_web/live/member_live/show.ex:62
+#: lib/mv_web/live/member_live/show.ex:61
#, elixir-autogen, elixir-format
msgid "Postal Code"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:80
+#: lib/mv_web/live/member_live/form.ex:79
#, elixir-autogen, elixir-format, fuzzy
msgid "Save Member"
msgstr ""
@@ -165,15 +166,15 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:66
#: lib/mv_web/live/custom_field_value_live/form.ex:74
#: lib/mv_web/live/global_settings_live.ex:55
-#: lib/mv_web/live/member_live/form.ex:79
+#: lib/mv_web/live/member_live/form.ex:78
#: lib/mv_web/live/user_live/form.ex:248
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:55
+#: lib/mv_web/live/member_live/form.ex:54
#: lib/mv_web/live/member_live/index.html.heex:125
-#: lib/mv_web/live/member_live/show.ex:60
+#: lib/mv_web/live/member_live/show.ex:59
#, elixir-autogen, elixir-format
msgid "Street"
msgstr ""
@@ -185,12 +186,12 @@ msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/index/formatter.ex:61
-#: lib/mv_web/live/member_live/show.ex:53
+#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "No"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex:116
+#: lib/mv_web/live/member_live/show.ex:115
#, elixir-autogen, elixir-format, fuzzy
msgid "Show Member"
msgstr ""
@@ -202,21 +203,21 @@ msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/index/formatter.ex:60
-#: lib/mv_web/live/member_live/show.ex:53
+#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "Yes"
msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:110
#: lib/mv_web/live/custom_field_value_live/form.ex:233
-#: lib/mv_web/live/member_live/form.ex:138
+#: lib/mv_web/live/member_live/form.ex:137
#, elixir-autogen, elixir-format
msgid "create"
msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:111
#: lib/mv_web/live/custom_field_value_live/form.ex:234
-#: lib/mv_web/live/member_live/form.ex:139
+#: lib/mv_web/live/member_live/form.ex:138
#, elixir-autogen, elixir-format
msgid "update"
msgstr ""
@@ -226,7 +227,7 @@ msgstr ""
msgid "Incorrect email or password"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:145
+#: lib/mv_web/live/member_live/form.ex:144
#, elixir-autogen, elixir-format
msgid "Member %{action} successfully"
msgstr ""
@@ -259,7 +260,7 @@ msgstr ""
#: lib/mv_web/live/custom_field_live/form.ex:69
#: lib/mv_web/live/custom_field_live/index.ex:120
#: lib/mv_web/live/custom_field_value_live/form.ex:77
-#: lib/mv_web/live/member_live/form.ex:82
+#: lib/mv_web/live/member_live/form.ex:81
#: lib/mv_web/live/user_live/form.ex:251
#, elixir-autogen, elixir-format
msgid "Cancel"
@@ -295,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 ""
@@ -312,12 +313,15 @@ msgid "Member"
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:25
+#: lib/mv_web/live/contribution_period_live/show.ex:286
+#: 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"
@@ -338,6 +342,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
@@ -356,7 +361,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 ""
@@ -376,7 +381,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 ""
@@ -516,7 +521,7 @@ msgstr "User will be created without a password. Check 'Set Password' to add one
msgid "Linked Member"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex:63
+#: lib/mv_web/live/member_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Linked User"
msgstr ""
@@ -527,7 +532,7 @@ msgstr ""
msgid "No member linked"
msgstr ""
-#: lib/mv_web/live/member_live/show.ex:73
+#: lib/mv_web/live/member_live/show.ex:72
#, elixir-autogen, elixir-format
msgid "No user linked"
msgstr ""
@@ -544,14 +549,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 ""
@@ -614,8 +619,8 @@ msgstr ""
msgid "Choose a custom field"
msgstr ""
-#: lib/mv_web/live/member_live/form.ex:59
-#: lib/mv_web/live/member_live/show.ex:78
+#: lib/mv_web/live/member_live/form.ex:58
+#: lib/mv_web/live/member_live/show.ex:77
#, elixir-autogen, elixir-format
msgid "Custom Field Values"
msgstr ""
@@ -712,6 +717,7 @@ msgstr ""
msgid "Association Name"
msgstr ""
+#: lib/mv_web/live/contribution_settings_live.ex:257
#: lib/mv_web/live/global_settings_live.ex:31
#: lib/mv_web/live/global_settings_live.ex:41
#, elixir-autogen, elixir-format, fuzzy
@@ -723,6 +729,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"
@@ -838,24 +845,459 @@ msgstr ""
msgid "This field cannot be empty"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:74
-#: lib/mv_web/live/components/payment_filter_component.ex:137
+#: lib/mv_web/live/components/payment_filter_component.ex:80
+#: lib/mv_web/live/components/payment_filter_component.ex:143
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:48
+#: lib/mv_web/live/components/payment_filter_component.ex:54
#, elixir-autogen, elixir-format
msgid "Filter by payment status"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:102
-#: lib/mv_web/live/components/payment_filter_component.ex:139
+#: lib/mv_web/live/components/payment_filter_component.ex:108
+#: lib/mv_web/live/components/payment_filter_component.ex:145
#, elixir-autogen, elixir-format
msgid "Not paid"
msgstr ""
-#: lib/mv_web/live/components/payment_filter_component.ex:59
+#: lib/mv_web/live/components/payment_filter_component.ex:65
#, elixir-autogen, elixir-format
msgid "Payment filter"
msgstr ""
+
+#: 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_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_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_period_live/show.ex:282
+#: 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/components/layouts/navbar.ex:32
+#: lib/mv_web/live/contribution_period_live/show.ex:278
+#: lib/mv_web/live/contribution_settings_live.ex:253
+#: 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:226
+#, elixir-autogen, elixir-format
+msgid "Contribution start"
+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_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:113
+#, elixir-autogen, elixir-format
+msgid "Examples"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:288
+#: 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:230
+#, 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:373
+#: lib/mv_web/live/contribution_settings_live.ex:301
+#: 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:222
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Joining date"
+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_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:371
+#: lib/mv_web/live/contribution_settings_live.ex:299
+#: 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:227
+#: lib/mv_web/live/contribution_settings_live.ex:199
+#: 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:372
+#: lib/mv_web/live/contribution_settings_live.ex:300
+#: 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:276
+#: 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:305
+#: lib/mv_web/live/contribution_settings_live.ex:270
+#: 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:273
+#: lib/mv_web/live/contribution_settings_live.ex:248
+#, elixir-autogen, elixir-format
+msgid "Related Pages"
+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_settings_live.ex:282
+#: 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_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_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: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:374
+#: lib/mv_web/live/contribution_settings_live.ex:302
+#: 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/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_period_live/show.ex:48
+#, elixir-autogen, elixir-format
+msgid "Back to Settings"
+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_period_live/show.ex:62
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Contribution Start"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:41
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Contribution type"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:39
+#, elixir-autogen, elixir-format, fuzzy
+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:175
+#, elixir-autogen, elixir-format
+msgid "Example: Member Contribution View"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:361
+#, elixir-autogen, elixir-format
+msgid "Joining year - reduced to 0"
+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_period_live/show.ex:43
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Member since"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:331
+#, elixir-autogen, elixir-format
+msgid "Paid via bank transfer"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:178
+#, 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_period_live/show.ex:139
+#, elixir-autogen, elixir-format
+msgid "Status"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:261
+#, elixir-autogen, elixir-format
+msgid "Suspended"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:252
+#, elixir-autogen, elixir-format
+msgid "Unpaid"
+msgstr ""
+
+#: lib/mv_web/live/contribution_settings_live.ex:185
+#, elixir-autogen, elixir-format
+msgid "View Example Member"
+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:70
+#, elixir-autogen, elixir-format
+msgid "Open Contributions"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:204
+#, elixir-autogen, elixir-format
+msgid "Reopen"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:195
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Suspend"
+msgstr ""
+
+#: lib/mv_web/live/contribution_period_live/show.ex:229
+#: lib/mv_web/live/contribution_settings_live.ex:201
+#: lib/mv_web/live/contribution_type_live/index.ex:99
+#, elixir-autogen, elixir-format, fuzzy
+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:98
+#, elixir-autogen, elixir-format
+msgid "Why are not all contribution types shown?"
+msgstr ""