From 49184d2631d1e422893d527e5283e8e8c9f2f05b Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 2 Dec 2025 16:39:09 +0100 Subject: [PATCH] feat: Add contribution management mock-up pages Add non-functional preview pages for Contribution Types, Settings, and Member Contribution Periods with German translations --- docs/feature-roadmap.md | 6 + lib/mv_web/components/layouts/navbar.ex | 11 + .../live/contribution_period_live/show.ex | 375 ++++++++++++ lib/mv_web/live/contribution_settings_live.ex | 303 ++++++++++ .../live/contribution_type_live/index.ex | 205 +++++++ lib/mv_web/router.ex | 5 + priv/gettext/de/LC_MESSAGES/default.po | 548 ++++++++++++++++-- priv/gettext/default.pot | 548 ++++++++++++++++-- priv/gettext/en/LC_MESSAGES/default.po | 548 ++++++++++++++++-- 9 files changed, 2390 insertions(+), 159 deletions(-) create mode 100644 lib/mv_web/live/contribution_period_live/show.ex create mode 100644 lib/mv_web/live/contribution_settings_live.ex create mode 100644 lib/mv_web/live/contribution_type_live/index.ex 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
  • <.link navigate="/members">{gettext("Members")}
  • <.link navigate="/custom_fields">{gettext("Custom Fields")}
  • <.link navigate="/users">{gettext("Users")}
  • +
  • +
    + {gettext("Contributions")} +
      +
    • <.link navigate="/contribution_types">{gettext("Contribution Types")}
    • +
    • + <.link navigate="/contribution_settings">{gettext("Contribution Settings")} +
    • +
    +
    +
  • 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")}: + + + <.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) + )} + + + + +
    + + <%!-- Periods Table --%> +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + {gettext("Time Period")}{gettext("Interval")}{gettext("Amount")}{gettext("Status")}{gettext("Notes")}{gettext("Actions")}
    + + +
    + {period.period_start} – {period.period_end} +
    +
    + {gettext("Current")} +
    +
    + {format_interval(period.interval)} + + {format_currency(period.amount)} + + <.status_badge status={period.status} /> + + + {period.notes} + + + +
    + <.link + href="#" + class={[ + "cursor-not-allowed", + if(period.status == :paid, do: "invisible", else: "opacity-50") + ]} + > + {gettext("Paid")} + + <.link + href="#" + class={[ + "cursor-not-allowed", + if(period.status == :suspended, do: "invisible", else: "opacity-50") + ]} + > + {gettext("Suspend")} + + <.link + href="#" + class={[ + "cursor-not-allowed", + if(period.status != :paid, do: "invisible", else: "opacity-50") + ]} + > + {gettext("Reopen")} + + <.link href="#" class="opacity-50 cursor-not-allowed"> + {gettext("Note")} + +
    +
    +
    + + <.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")} +

    + +
    + <%!-- Default Contribution Type --%> +
    + + +

    + {gettext( + "This contribution type is automatically assigned to all new members. Can be changed individually per member." + )} +

    +
    + + <%!-- Include Joining Period --%> +
    + +
    +

    + {gettext("When active: Members pay from the period of their joining.")} +

    +

    + {gettext("When inactive: Members pay from the next full period after joining.")} +

    +
    +
    + +
    + + +
    +
    +
    + + <%!-- 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> + + + + + <.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}> + + + + <:action :let={ct}> + + + + + <.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 ""