feat: Add contribution management mock-up pages

Add non-functional preview pages for Contribution Types, Settings, and Member Contribution Periods with German translations
This commit is contained in:
Moritz 2025-12-02 16:39:09 +01:00 committed by Rafael Epplée
parent 8391122426
commit cd1af5aff5
9 changed files with 2187 additions and 21 deletions

View file

@ -187,10 +187,16 @@
**Current State:** **Current State:**
- ✅ Basic "paid" boolean field on members - ✅ Basic "paid" boolean field on members
- ✅ **UI Mock-ups for Contribution Types & Settings** (2025-12-02)
- ⚠️ No payment tracking - ⚠️ No payment tracking
**Open Issues:** **Open Issues:**
- [#156](https://git.local-it.org/local-it/mitgliederverwaltung/issues/156) - Set up & document testing environment for vereinfacht.digital (L, Low priority) - [#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:** **Missing Features:**
- ❌ Membership fee configuration - ❌ Membership fee configuration

View file

@ -25,6 +25,17 @@ defmodule MvWeb.Layouts.Navbar do
<li><.link navigate="/members">{gettext("Members")}</.link></li> <li><.link navigate="/members">{gettext("Members")}</.link></li>
<li><.link navigate="/custom_fields">{gettext("Custom Fields")}</.link></li> <li><.link navigate="/custom_fields">{gettext("Custom Fields")}</.link></li>
<li><.link navigate="/users">{gettext("Users")}</.link></li> <li><.link navigate="/users">{gettext("Users")}</.link></li>
<li>
<details>
<summary>{gettext("Contributions")}</summary>
<ul class="bg-base-200 rounded-t-none p-2 z-10 w-48">
<li><.link navigate="/contribution_types">{gettext("Contribution Types")}</.link></li>
<li>
<.link navigate="/contribution_settings">{gettext("Contribution Settings")}</.link>
</li>
</ul>
</details>
</li>
</ul> </ul>
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">

View file

@ -0,0 +1,345 @@
defmodule MvWeb.ContributionPeriodLive.Show do
@moduledoc """
Mock-up LiveView for Member Contribution Periods (Admin/Treasurer View).
This is a preview-only page that displays the planned UI for viewing
and managing contribution periods for a specific member.
It shows static mock data and is not functional.
## Planned Features (Future Implementation)
- Display all contribution periods for a member
- Show period dates, interval, amount, and status
- Quick status change (paid/unpaid/suspended)
- Bulk marking of multiple periods
- Notes per period
## Note
This page is intentionally non-functional and serves as a UI mockup
for the upcoming Membership Contributions feature.
"""
use MvWeb, :live_view
@impl true
def mount(_params, _session, socket) do
{:ok,
socket
|> assign(:page_title, gettext("Member Contributions"))
|> assign(:member, mock_member())
|> assign(:periods, mock_periods())
|> assign(:selected_periods, MapSet.new())}
end
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash} current_user={@current_user}>
<.mockup_warning />
<.header>
{gettext("Contributions for %{name}", name: "#{@member.first_name} #{@member.last_name}")}
<:subtitle>
{gettext("Contribution type")}:
<span class="font-semibold">{@member.contribution_type}</span>
· {gettext("Member since")}: <span class="font-mono">{@member.joined_at}</span>
</:subtitle>
<:actions>
<.link navigate={~p"/contribution_settings"} class="btn btn-ghost btn-sm">
<.icon name="hero-arrow-left" class="size-4" />
{gettext("Back to Settings")}
</.link>
</:actions>
</.header>
<%!-- Member Info Card --%>
<div class="mb-6 shadow card bg-base-100">
<div class="card-body">
<div class="grid grid-cols-2 gap-4 md:grid-cols-4">
<div>
<span class="text-sm text-base-content/60">{gettext("Email")}</span>
<p class="font-medium">{@member.email}</p>
</div>
<div>
<span class="text-sm text-base-content/60">{gettext("Contribution Start")}</span>
<p class="font-mono">{@member.contribution_start}</p>
</div>
<div>
<span class="text-sm text-base-content/60">{gettext("Total Contributions")}</span>
<p class="font-semibold">{length(@periods)}</p>
</div>
<div>
<span class="text-sm text-base-content/60">{gettext("Open Contributions")}</span>
<p class="font-semibold text-error">
{Enum.count(@periods, &(&1.status == :unpaid))}
</p>
</div>
</div>
</div>
</div>
<%!-- Contribution Type Change --%>
<div class="mb-6 card bg-base-200">
<div class="py-4 card-body">
<div class="flex flex-wrap items-center gap-4">
<span class="font-semibold">{gettext("Change Contribution Type")}:</span>
<select class="w-64 select select-bordered select-sm" disabled>
<option selected>{@member.contribution_type} (60,00 , {gettext("Yearly")})</option>
<option>{gettext("Reduced")} (30,00 , {gettext("Yearly")})</option>
<option>{gettext("Honorary")} (0,00 , {gettext("Yearly")})</option>
</select>
<span
class="text-sm text-base-content/60 cursor-help tooltip tooltip-bottom"
data-tip={
gettext(
"Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
)
}
>
<.icon name="hero-question-mark-circle" class="inline size-4" />
{gettext("Why are not all contribution types shown?")}
</span>
</div>
</div>
</div>
<%!-- Bulk Actions --%>
<div class="flex flex-wrap items-center gap-4 mb-4">
<span class="text-sm text-base-content/60">
{ngettext(
"%{count} period selected",
"%{count} periods selected",
MapSet.size(@selected_periods),
count: MapSet.size(@selected_periods)
)}
</span>
<button class="btn btn-sm btn-success" disabled>
<.icon name="hero-check" class="size-4" />
{gettext("Mark as Paid")}
</button>
<button class="btn btn-sm btn-ghost" disabled>
<.icon name="hero-minus-circle" class="size-4" />
{gettext("Mark as Suspended")}
</button>
<button class="btn btn-sm btn-ghost" disabled>
<.icon name="hero-x-circle" class="size-4" />
{gettext("Mark as Unpaid")}
</button>
</div>
<%!-- Periods Table --%>
<div class="overflow-x-auto">
<table class="table table-zebra">
<thead>
<tr>
<th>
<input type="checkbox" class="checkbox checkbox-sm" disabled />
</th>
<th>{gettext("Time Period")}</th>
<th>{gettext("Interval")}</th>
<th>{gettext("Amount")}</th>
<th>{gettext("Status")}</th>
<th>{gettext("Notes")}</th>
<th>{gettext("Actions")}</th>
</tr>
</thead>
<tbody>
<tr :for={period <- @periods} class={period_row_class(period.status)}>
<td>
<input
type="checkbox"
class="checkbox checkbox-sm"
checked={MapSet.member?(@selected_periods, period.id)}
disabled
/>
</td>
<td>
<div class="font-mono">
{period.period_start} {period.period_end}
</div>
<div :if={period.is_current} class="mt-1 badge badge-info badge-sm">
{gettext("Current")}
</div>
</td>
<td>
<span class="badge badge-outline badge-sm">{format_interval(period.interval)}</span>
</td>
<td>
<span class="font-mono">{format_currency(period.amount)}</span>
</td>
<td>
<.status_badge status={period.status} />
</td>
<td>
<span :if={period.notes} class="text-sm italic text-base-content/60">
{period.notes}
</span>
<span :if={!period.notes} class="text-base-content/30"></span>
</td>
<td class="w-0 font-semibold whitespace-nowrap">
<div class="flex gap-4">
<.link
href="#"
class={[
"cursor-not-allowed",
if(period.status == :paid, do: "invisible", else: "opacity-50")
]}
>
{gettext("Paid")}
</.link>
<.link
href="#"
class={[
"cursor-not-allowed",
if(period.status == :suspended, do: "invisible", else: "opacity-50")
]}
>
{gettext("Suspend")}
</.link>
<.link
href="#"
class={[
"cursor-not-allowed",
if(period.status != :paid, do: "invisible", else: "opacity-50")
]}
>
{gettext("Reopen")}
</.link>
<.link href="#" class="opacity-50 cursor-not-allowed">
{gettext("Note")}
</.link>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</Layouts.app>
"""
end
# Mock-up warning banner component - subtle orange style
defp mockup_warning(assigns) do
~H"""
<div class="flex items-center gap-3 px-4 py-3 mb-6 border rounded-lg border-warning text-warning bg-base-100">
<.icon name="hero-exclamation-triangle" class="size-5 shrink-0" />
<div>
<span class="font-semibold">{gettext("Preview Mockup")}</span>
<span class="ml-2 text-sm text-base-content/70">
{gettext("This page is not functional and only displays the planned features.")}
</span>
</div>
</div>
"""
end
# Status badge component
attr :status, :atom, required: true
defp status_badge(%{status: :paid} = assigns) do
~H"""
<span class="gap-1 badge badge-success">
<.icon name="hero-check-circle-mini" class="size-3" />
{gettext("Paid")}
</span>
"""
end
defp status_badge(%{status: :unpaid} = assigns) do
~H"""
<span class="gap-1 badge badge-error">
<.icon name="hero-x-circle-mini" class="size-3" />
{gettext("Unpaid")}
</span>
"""
end
defp status_badge(%{status: :suspended} = assigns) do
~H"""
<span class="gap-1 badge badge-neutral">
<.icon name="hero-pause-circle-mini" class="size-3" />
{gettext("Suspended")}
</span>
"""
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

View file

@ -0,0 +1,277 @@
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"""
<Layouts.app flash={@flash} current_user={@current_user}>
<.mockup_warning />
<.header>
{gettext("Contribution Settings")}
<:subtitle>
{gettext("Configure global settings for membership contributions.")}
</:subtitle>
</.header>
<div class="grid gap-6 lg:grid-cols-2">
<%!-- Settings Form --%>
<div class="card bg-base-100 shadow-xl">
<div class="card-body">
<h2 class="card-title">
<.icon name="hero-cog-6-tooth" class="size-5" />
{gettext("Global Settings")}
</h2>
<form class="space-y-6">
<%!-- Default Contribution Type --%>
<fieldset class="fieldset">
<label class="label">
<span class="label-text font-semibold">
{gettext("Default Contribution Type")}
</span>
</label>
<select class="select select-bordered w-full" disabled>
<option :for={ct <- @contribution_types} selected={ct.id == @selected_type_id}>
{ct.name} ({format_currency(ct.amount)}, {format_interval(ct.interval)})
</option>
</select>
<p class="text-sm text-base-content/60 mt-2">
{gettext(
"This contribution type is automatically assigned to all new members. Can be changed individually per member."
)}
</p>
</fieldset>
<%!-- Include Joining Period --%>
<fieldset class="fieldset">
<label class="label cursor-pointer justify-start gap-3">
<input
type="checkbox"
class="checkbox checkbox-primary"
checked={@include_joining_period}
disabled
/>
<span class="label-text font-semibold">
{gettext("Include joining period")}
</span>
</label>
<div class="ml-9 space-y-2">
<p class="text-sm text-base-content/60">
{gettext("When active: Members pay from the period of their joining.")}
</p>
<p class="text-sm text-base-content/60">
{gettext("When inactive: Members pay from the next full period after joining.")}
</p>
</div>
</fieldset>
<div class="divider"></div>
<button type="button" class="btn btn-primary w-full" disabled>
<.icon name="hero-check" class="size-5" />
{gettext("Save Settings")}
</button>
</form>
</div>
</div>
<%!-- Examples Card --%>
<div class="card bg-base-200">
<div class="card-body">
<h2 class="card-title">
<.icon name="hero-light-bulb" class="size-5" />
{gettext("Examples")}
</h2>
<.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")}
/>
<div class="divider"></div>
<.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")}
/>
<div class="divider"></div>
<.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")}
/>
<div class="divider"></div>
<.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")}
/>
</div>
</div>
</div>
<.example_member_card />
</Layouts.app>
"""
end
# Example member card with link to period view
defp example_member_card(assigns) do
~H"""
<div class="card bg-base-100 shadow-xl mt-6">
<div class="card-body">
<h2 class="card-title">
<.icon name="hero-user" class="size-5" />
{gettext("Example: Member Contribution View")}
</h2>
<p class="text-base-content/70">
{gettext(
"See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
)}
</p>
<div class="card-actions justify-end">
<.link navigate={~p"/contributions/member/example"} class="btn btn-primary btn-sm">
<.icon name="hero-eye" class="size-4" />
{gettext("View Example Member")}
</.link>
</div>
</div>
</div>
"""
end
# Mock-up warning banner component - subtle orange style
defp mockup_warning(assigns) do
~H"""
<div class="border border-warning text-warning bg-base-100 rounded-lg px-4 py-3 mb-6 flex items-center gap-3">
<.icon name="hero-exclamation-triangle" class="size-5 shrink-0" />
<div>
<span class="font-semibold">{gettext("Preview Mockup")}</span>
<span class="text-sm text-base-content/70 ml-2">
{gettext("This page is not functional and only displays the planned features.")}
</span>
</div>
</div>
"""
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"""
<div class="space-y-2">
<h3 class="font-semibold text-sm">{@title}</h3>
<div class="bg-base-300 rounded-lg p-3 text-sm space-y-1">
<p>
<span class="text-base-content/60">{gettext("Joining date")}:</span>
<span class="font-mono">{@joining_date}</span>
</p>
<p>
<span class="text-base-content/60">{gettext("Contribution start")}:</span>
<span class="font-mono font-semibold text-primary">{@start_date}</span>
</p>
<p>
<span class="text-base-content/60">{gettext("Generated periods")}:</span>
<span class="font-mono">
{Enum.join(@periods, ", ")}
</span>
</p>
</div>
<p class="text-xs text-base-content/60 italic"> {@note}</p>
</div>
"""
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

View file

@ -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"""
<Layouts.app flash={@flash} current_user={@current_user}>
<.mockup_warning />
<.header>
{gettext("Contribution Types")}
<:subtitle>
{gettext("Manage contribution types for membership fees.")}
</:subtitle>
<:actions>
<button class="btn btn-primary" disabled>
<.icon name="hero-plus" /> {gettext("New Contribution Type")}
</button>
</:actions>
</.header>
<.table id="contribution_types" rows={@contribution_types} row_id={fn ct -> "ct-#{ct.id}" end}>
<:col :let={ct} label={gettext("Name")}>
<span class="font-medium">{ct.name}</span>
<p :if={ct.description} class="text-sm text-base-content/60">{ct.description}</p>
</:col>
<:col :let={ct} label={gettext("Amount")}>
<span class="font-mono">{format_currency(ct.amount)}</span>
</:col>
<:col :let={ct} label={gettext("Interval")}>
<span class="badge badge-outline">{format_interval(ct.interval)}</span>
</:col>
<:col :let={ct} label={gettext("Members")}>
<span class="badge badge-ghost">{ct.member_count}</span>
</:col>
<:action :let={_ct}>
<button class="btn btn-ghost btn-xs" disabled title={gettext("Edit")}>
<.icon name="hero-pencil" class="size-4" />
</button>
</:action>
<:action :let={ct}>
<button
class="btn btn-ghost btn-xs text-error"
disabled
title={
if ct.member_count > 0,
do: gettext("Cannot delete - members assigned"),
else: gettext("Delete")
}
>
<.icon name="hero-trash" class="size-4" />
</button>
</:action>
</.table>
<.info_card />
</Layouts.app>
"""
end
# Mock-up warning banner component - subtle orange style
defp mockup_warning(assigns) do
~H"""
<div class="border border-warning text-warning bg-base-100 rounded-lg px-4 py-3 mb-6 flex items-center gap-3">
<.icon name="hero-exclamation-triangle" class="size-5 shrink-0" />
<div>
<span class="font-semibold">{gettext("Preview Mockup")}</span>
<span class="text-sm text-base-content/70 ml-2">
{gettext("This page is not functional and only displays the planned features.")}
</span>
</div>
</div>
"""
end
# Info card explaining the contribution type concept
defp info_card(assigns) do
~H"""
<div class="card bg-base-200 mt-6">
<div class="card-body">
<h2 class="card-title">
<.icon name="hero-information-circle" class="size-5" />
{gettext("About Contribution Types")}
</h2>
<div class="prose prose-sm max-w-none">
<p>
{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."
)}
</p>
<ul>
<li>
<strong>{gettext("Name & Amount")}</strong>
- {gettext("Can be changed at any time. Amount changes affect future periods only.")}
</li>
<li>
<strong>{gettext("Interval")}</strong>
- {gettext(
"Fixed after creation. Members can only switch between types with the same interval."
)}
</li>
<li>
<strong>{gettext("Deletion")}</strong>
- {gettext("Only possible if no members are assigned to this type.")}
</li>
</ul>
</div>
</div>
</div>
"""
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

View file

@ -75,6 +75,11 @@ defmodule MvWeb.Router do
live "/settings", GlobalSettingsLive 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 post "/set_locale", LocaleController, :set_locale
end end

View file

@ -11,6 +11,7 @@ msgstr ""
"Language: en\n" "Language: en\n"
#: lib/mv_web/components/core_components.ex:386 #: lib/mv_web/components/core_components.ex:386
#: lib/mv_web/live/contribution_period_live/show.ex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Actions" msgid "Actions"
msgstr "Aktionen" msgstr "Aktionen"
@ -34,12 +35,14 @@ msgstr "Verbindung wird wiederhergestellt"
msgid "City" msgid "City"
msgstr "Stadt" msgstr "Stadt"
#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:250 #: lib/mv_web/live/member_live/index.html.heex:250
#: lib/mv_web/live/user_live/index.html.heex:74 #: lib/mv_web/live/user_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: lib/mv_web/live/contribution_type_live/index.ex:66
#: lib/mv_web/live/member_live/index.html.heex:242 #: lib/mv_web/live/member_live/index.html.heex:242
#: lib/mv_web/live/user_live/form.ex:265 #: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66 #: lib/mv_web/live/user_live/index.html.heex:66
@ -53,6 +56,7 @@ msgstr "Bearbeiten"
msgid "Edit Member" msgid "Edit Member"
msgstr "Mitglied bearbeiten" 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/form.ex:47
#: lib/mv_web/live/member_live/index.html.heex:112 #: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:50 #: lib/mv_web/live/member_live/show.ex:50
@ -121,6 +125,7 @@ msgstr "Austrittsdatum"
msgid "House Number" msgid "House Number"
msgstr "Hausnummer" msgstr "Hausnummer"
#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52 #: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:57 #: lib/mv_web/live/member_live/show.ex:57
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -129,6 +134,8 @@ msgstr "Notizen"
#: lib/mv_web/live/components/payment_filter_component.ex:94 #: lib/mv_web/live/components/payment_filter_component.ex:94
#: lib/mv_web/live/components/payment_filter_component.ex:144 #: lib/mv_web/live/components/payment_filter_component.ex:144
#: lib/mv_web/live/contribution_period_live/show.ex:186
#: lib/mv_web/live/contribution_period_live/show.ex:242
#: lib/mv_web/live/member_live/form.ex:48 #: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:229 #: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:51 #: lib/mv_web/live/member_live/show.ex:51
@ -288,7 +295,7 @@ msgstr "ID"
msgid "Immutable" msgid "Immutable"
msgstr "Unveränderlich" msgstr "Unveränderlich"
#: lib/mv_web/components/layouts/navbar.ex:102 #: lib/mv_web/components/layouts/navbar.ex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Logout" msgid "Logout"
msgstr "Abmelden" msgstr "Abmelden"
@ -305,12 +312,14 @@ msgid "Member"
msgstr "Mitglied" msgstr "Mitglied"
#: lib/mv_web/components/layouts/navbar.ex:25 #: lib/mv_web/components/layouts/navbar.ex:25
#: lib/mv_web/live/contribution_type_live/index.ex:61
#: lib/mv_web/live/member_live/index.ex:73 #: lib/mv_web/live/member_live/index.ex:73
#: lib/mv_web/live/member_live/index.html.heex:3 #: lib/mv_web/live/member_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Members" msgid "Members"
msgstr "Mitglieder" msgstr "Mitglieder"
#: lib/mv_web/live/contribution_type_live/index.ex:48
#: lib/mv_web/live/custom_field_live/form.ex:51 #: lib/mv_web/live/custom_field_live/form.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Name" msgid "Name"
@ -331,6 +340,7 @@ msgstr "Nicht aktiviert"
msgid "Not set" msgid "Not set"
msgstr "Nicht gesetzt" 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:107
#: lib/mv_web/live/user_live/form.ex:115 #: lib/mv_web/live/user_live/form.ex:115
#: lib/mv_web/live/user_live/form.ex:224 #: lib/mv_web/live/user_live/form.ex:224
@ -349,7 +359,7 @@ msgstr "OIDC ID"
msgid "Password Authentication" msgid "Password Authentication"
msgstr "Passwort-Authentifizierung" msgstr "Passwort-Authentifizierung"
#: lib/mv_web/components/layouts/navbar.ex:95 #: lib/mv_web/components/layouts/navbar.ex:106
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Profil" msgid "Profil"
msgstr "Profil" msgstr "Profil"
@ -369,7 +379,7 @@ msgstr "Alle Mitglieder auswählen"
msgid "Select member" msgid "Select member"
msgstr "Mitglied auswählen" msgstr "Mitglied auswählen"
#: lib/mv_web/components/layouts/navbar.ex:99 #: lib/mv_web/components/layouts/navbar.ex:110
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
@ -537,14 +547,14 @@ msgstr "Zurück zur Mitgliederliste"
msgid "Back to users list" msgid "Back to users list"
msgstr "Zurück zur Benutzer*innen-Liste" msgstr "Zurück zur Benutzer*innen-Liste"
#: lib/mv_web/components/layouts/navbar.ex:33 #: lib/mv_web/components/layouts/navbar.ex:44
#: lib/mv_web/components/layouts/navbar.ex:39 #: lib/mv_web/components/layouts/navbar.ex:50
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select language" msgid "Select language"
msgstr "Sprache auswählen" msgstr "Sprache auswählen"
#: lib/mv_web/components/layouts/navbar.ex:46 #: lib/mv_web/components/layouts/navbar.ex:57
#: lib/mv_web/components/layouts/navbar.ex:66 #: lib/mv_web/components/layouts/navbar.ex:77
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Toggle dark mode" msgid "Toggle dark mode"
msgstr "Dunklen Modus umschalten" msgstr "Dunklen Modus umschalten"
@ -716,6 +726,7 @@ msgstr "Vereinsdaten"
msgid "Manage global settings for the association." msgid "Manage global settings for the association."
msgstr "Passe übergreifende Einstellungen für den Verein an." 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 #: lib/mv_web/live/global_settings_live.ex:56
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Save Settings" msgid "Save Settings"
@ -853,6 +864,432 @@ msgstr "Nicht bezahlt"
msgid "Payment filter" msgid "Payment filter"
msgstr "Zahlungsfilter" msgstr "Zahlungsfilter"
#: lib/mv_web/live/contribution_period_live/show.ex:107
#, elixir-autogen, elixir-format
msgid "%{count} period selected"
msgid_plural "%{count} periods selected"
msgstr[0] "%{count} Beiträge ausgewählt"
msgstr[1] "%{count} Beiträge ausgewählt"
#: lib/mv_web/live/contribution_type_live/index.ex:113
#, elixir-autogen, elixir-format
msgid "About Contribution Types"
msgstr "Über Beitragsarten"
#: lib/mv_web/live/contribution_period_live/show.ex:138
#: lib/mv_web/live/contribution_type_live/index.ex:53
#, elixir-autogen, elixir-format
msgid "Amount"
msgstr "Betrag"
#: lib/mv_web/live/contribution_period_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Back to Settings"
msgstr "Zurück zu Einstellungen"
#: lib/mv_web/live/contribution_type_live/index.ex:124
#, elixir-autogen, elixir-format
msgid "Can be changed at any time. Amount changes affect future periods only."
msgstr "Kann jederzeit geändert werden. Betragsänderungen wirken sich nur auf zukünftige Beiträge aus."
#: lib/mv_web/live/contribution_type_live/index.ex:77
#, elixir-autogen, elixir-format
msgid "Cannot delete - members assigned"
msgstr "Löschen nicht möglich - Mitglieder zugewiesen"
#: lib/mv_web/live/contribution_period_live/show.ex:83
#, elixir-autogen, elixir-format
msgid "Change Contribution Type"
msgstr "Beitragsart ändern"
#: lib/mv_web/live/contribution_settings_live.ex:42
#, elixir-autogen, elixir-format
msgid "Configure global settings for membership contributions."
msgstr "Globale Einstellungen für Mitgliedsbeiträge konfigurieren."
#: lib/mv_web/components/layouts/navbar.ex:34
#: lib/mv_web/live/contribution_settings_live.ex:27
#: lib/mv_web/live/contribution_settings_live.ex:40
#, elixir-autogen, elixir-format
msgid "Contribution Settings"
msgstr "Beitragseinstellungen"
#: lib/mv_web/live/contribution_period_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Contribution Start"
msgstr "Beitragsbeginn"
#: lib/mv_web/components/layouts/navbar.ex:32
#: lib/mv_web/live/contribution_type_live/index.ex:25
#: lib/mv_web/live/contribution_type_live/index.ex:36
#, elixir-autogen, elixir-format
msgid "Contribution Types"
msgstr "Beitragsarten"
#: lib/mv_web/live/contribution_settings_live.ex:224
#, elixir-autogen, elixir-format
msgid "Contribution start"
msgstr "Beitragsbeginn"
#: lib/mv_web/live/contribution_period_live/show.ex:41
#, elixir-autogen, elixir-format
msgid "Contribution type"
msgstr "Beitragsart"
#: lib/mv_web/live/contribution_type_live/index.ex:117
#, elixir-autogen, elixir-format
msgid "Contribution types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
msgstr "Beitragsarten definieren verschiedene Mitgliedsbeitragsstrukturen. Jede Art hat ein festes Intervall (monatlich, quartalsweise, halbjährlich, jährlich), das nach der Erstellung nicht mehr geändert werden kann."
#: lib/mv_web/components/layouts/navbar.ex:30
#, elixir-autogen, elixir-format
msgid "Contributions"
msgstr "Beiträge"
#: lib/mv_web/live/contribution_period_live/show.ex:39
#, elixir-autogen, elixir-format
msgid "Contributions for %{name}"
msgstr "Beiträge für %{name}"
#: lib/mv_web/live/contribution_period_live/show.ex:159
#, elixir-autogen, elixir-format
msgid "Current"
msgstr "Aktuell"
#: lib/mv_web/live/contribution_settings_live.ex:60
#, elixir-autogen, elixir-format
msgid "Default Contribution Type"
msgstr "Standard-Beitragsart"
#: lib/mv_web/live/contribution_type_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Deletion"
msgstr "Löschung"
#: lib/mv_web/live/contribution_settings_live.ex:173
#, elixir-autogen, elixir-format
msgid "Example: Member Contribution View"
msgstr "Beispiel: Mitglieder-Beitragsansicht"
#: lib/mv_web/live/contribution_settings_live.ex:113
#, elixir-autogen, elixir-format
msgid "Examples"
msgstr "Beispiele"
#: lib/mv_web/live/contribution_settings_live.ex:262
#: lib/mv_web/live/contribution_type_live/index.ex:172
#, elixir-autogen, elixir-format
msgid "Family"
msgstr "Familie"
#: lib/mv_web/live/contribution_type_live/index.ex:128
#, elixir-autogen, elixir-format
msgid "Fixed after creation. Members can only switch between types with the same interval."
msgstr "Nach der Erstellung unveränderlich. Mitglieder können nur zwischen Arten mit demselben Intervall wechseln."
#: lib/mv_web/live/contribution_settings_live.ex:228
#, elixir-autogen, elixir-format
msgid "Generated periods"
msgstr "Generierte Beiträge"
#: lib/mv_web/live/contribution_settings_live.ex:52
#, elixir-autogen, elixir-format
msgid "Global Settings"
msgstr "Globale Einstellungen"
#: lib/mv_web/live/contribution_period_live/show.ex:344
#: lib/mv_web/live/contribution_settings_live.ex:275
#: lib/mv_web/live/contribution_type_live/index.ex:203
#, elixir-autogen, elixir-format
msgid "Half-yearly"
msgstr "Halbjährlich"
#: lib/mv_web/live/contribution_type_live/index.ex:181
#, elixir-autogen, elixir-format
msgid "Half-yearly contribution for supporting members"
msgstr "Halbjährlicher Beitrag für Fördermitglieder"
#: lib/mv_web/live/contribution_period_live/show.ex:87
#: lib/mv_web/live/contribution_type_live/index.ex:188
#, elixir-autogen, elixir-format
msgid "Honorary"
msgstr "Ehrenmitglied"
#: lib/mv_web/live/contribution_settings_live.ex:85
#, elixir-autogen, elixir-format
msgid "Include joining period"
msgstr "Zahlt ab Zeitpunkt des Eintritts"
#: lib/mv_web/live/contribution_period_live/show.ex:137
#: lib/mv_web/live/contribution_type_live/index.ex:57
#: lib/mv_web/live/contribution_type_live/index.ex:127
#, elixir-autogen, elixir-format
msgid "Interval"
msgstr "Intervall"
#: lib/mv_web/live/contribution_settings_live.ex:220
#, elixir-autogen, elixir-format
msgid "Joining date"
msgstr "Eintrittsdatum"
#: lib/mv_web/live/contribution_period_live/show.ex:332
#, elixir-autogen, elixir-format
msgid "Joining year - reduced to 0"
msgstr "Eintrittsjahr - auf 0 reduziert"
#: lib/mv_web/live/contribution_type_live/index.ex:38
#, elixir-autogen, elixir-format
msgid "Manage contribution types for membership fees."
msgstr "Beitragsarten für Mitgliedsbeiträge verwalten."
#: lib/mv_web/live/contribution_period_live/show.ex:116
#, elixir-autogen, elixir-format
msgid "Mark as Paid"
msgstr "Als bezahlt markieren"
#: lib/mv_web/live/contribution_period_live/show.ex:120
#, elixir-autogen, elixir-format
msgid "Mark as Suspended"
msgstr "Als ausgesetzt markieren"
#: lib/mv_web/live/contribution_period_live/show.ex:124
#, elixir-autogen, elixir-format
msgid "Mark as Unpaid"
msgstr "Als unbezahlt markieren"
#: lib/mv_web/live/contribution_period_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "Member Contributions"
msgstr "Mitgliedsbeiträge"
#: lib/mv_web/live/contribution_settings_live.ex:122
#, elixir-autogen, elixir-format
msgid "Member pays for the year they joined"
msgstr "Mitglied zahlt für das Eintrittsjahr"
#: lib/mv_web/live/contribution_settings_live.ex:155
#, elixir-autogen, elixir-format
msgid "Member pays from the joining month"
msgstr "Mitglied zahlt ab dem Eintrittsmonat"
#: lib/mv_web/live/contribution_settings_live.ex:144
#, elixir-autogen, elixir-format
msgid "Member pays from the next full quarter"
msgstr "Mitglied zahlt ab dem nächsten vollen Quartal"
#: lib/mv_web/live/contribution_settings_live.ex:133
#, elixir-autogen, elixir-format
msgid "Member pays from the next full year"
msgstr "Mitglied zahlt ab dem nächsten vollen Jahr"
#: lib/mv_web/live/contribution_period_live/show.ex:43
#, elixir-autogen, elixir-format
msgid "Member since"
msgstr "Mitglied seit"
#: lib/mv_web/live/contribution_period_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
msgstr "Mitglieder können nur zwischen Beitragsarten mit demselben Zahlungsintervall wechseln (z.B. jährlich zu jährlich). Dies verhindert komplexe Periodenüberschneidungen."
#: lib/mv_web/live/contribution_period_live/show.ex:342
#: lib/mv_web/live/contribution_settings_live.ex:273
#: lib/mv_web/live/contribution_type_live/index.ex:201
#, elixir-autogen, elixir-format
msgid "Monthly"
msgstr "Monatlich"
#: lib/mv_web/live/contribution_settings_live.ex:150
#, elixir-autogen, elixir-format
msgid "Monthly Interval - Joining Period Included"
msgstr "Monatliches Intervall - Eintrittsperiode eingeschlossen"
#: lib/mv_web/live/contribution_type_live/index.ex:165
#, elixir-autogen, elixir-format
msgid "Monthly fee for students and trainees"
msgstr "Monatlicher Beitrag für Studierende und Auszubildende"
#: lib/mv_web/live/contribution_type_live/index.ex:123
#, elixir-autogen, elixir-format
msgid "Name & Amount"
msgstr "Name & Betrag"
#: lib/mv_web/live/contribution_type_live/index.ex:42
#, elixir-autogen, elixir-format
msgid "New Contribution Type"
msgstr "Neue Beitragsart"
#: lib/mv_web/live/contribution_type_live/index.ex:189
#, elixir-autogen, elixir-format
msgid "No fee for honorary members"
msgstr "Kein Beitrag für Ehrenmitglieder"
#: lib/mv_web/live/contribution_type_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Only possible if no members are assigned to this type."
msgstr "Nur möglich, wenn keine Mitglieder dieser Art zugewiesen sind."
#: lib/mv_web/live/contribution_period_live/show.ex:70
#, elixir-autogen, elixir-format
msgid "Open Contributions"
msgstr "Offene Beiträge"
#: lib/mv_web/live/contribution_period_live/show.ex:302
#, elixir-autogen, elixir-format
msgid "Paid via bank transfer"
msgstr "Per Überweisung bezahlt"
#: lib/mv_web/live/contribution_period_live/show.ex:226
#: lib/mv_web/live/contribution_settings_live.ex:197
#: lib/mv_web/live/contribution_type_live/index.ex:97
#, elixir-autogen, elixir-format
msgid "Preview Mockup"
msgstr "Vorschau"
#: lib/mv_web/live/contribution_period_live/show.ex:343
#: lib/mv_web/live/contribution_settings_live.ex:274
#: lib/mv_web/live/contribution_type_live/index.ex:202
#, elixir-autogen, elixir-format
msgid "Quarterly"
msgstr "Quartalsweise"
#: lib/mv_web/live/contribution_settings_live.ex:139
#, elixir-autogen, elixir-format
msgid "Quarterly Interval - Joining Period Excluded"
msgstr "Quartalsintervall - Eintrittsperiode ausgeschlossen"
#: lib/mv_web/live/contribution_type_live/index.ex:173
#, elixir-autogen, elixir-format
msgid "Quarterly fee for family memberships"
msgstr "Quartalsbeitrag für Familienmitgliedschaften"
#: lib/mv_web/live/contribution_period_live/show.ex:86
#: lib/mv_web/live/contribution_settings_live.ex:250
#: lib/mv_web/live/contribution_type_live/index.ex:156
#, elixir-autogen, elixir-format
msgid "Reduced"
msgstr "Ermäßigt"
#: lib/mv_web/live/contribution_type_live/index.ex:157
#, elixir-autogen, elixir-format
msgid "Reduced fee for unemployed, pensioners, or low income"
msgstr "Ermäßigter Beitrag für Arbeitslose, Rentner*innen oder Geringverdienende"
#: lib/mv_web/live/contribution_period_live/show.ex:276
#: lib/mv_web/live/contribution_settings_live.ex:244
#: lib/mv_web/live/contribution_type_live/index.ex:148
#, elixir-autogen, elixir-format
msgid "Regular"
msgstr "Regulär"
#: lib/mv_web/live/contribution_period_live/show.ex:204
#, elixir-autogen, elixir-format
msgid "Reopen"
msgstr "Wieder öffnen"
#: lib/mv_web/live/contribution_settings_live.ex:176
#, elixir-autogen, elixir-format
msgid "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
msgstr "Sehen Sie, wie die Beitragsperioden für ein einzelnes Mitglied angezeigt werden. Dieses Beispiel zeigt Maria Weber mit mehreren Beitragsperioden."
#: lib/mv_web/live/contribution_type_live/index.ex:149
#, elixir-autogen, elixir-format
msgid "Standard membership fee for regular members"
msgstr "Standard-Mitgliedsbeitrag für reguläre Mitglieder"
#: lib/mv_web/live/contribution_period_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Status"
msgstr "Status"
#: lib/mv_web/live/contribution_settings_live.ex:256
#: lib/mv_web/live/contribution_type_live/index.ex:164
#, elixir-autogen, elixir-format
msgid "Student"
msgstr "Student*in"
#: lib/mv_web/live/contribution_type_live/index.ex:180
#, elixir-autogen, elixir-format
msgid "Supporting Member"
msgstr "Fördermitglied"
#: lib/mv_web/live/contribution_period_live/show.ex:195
#, elixir-autogen, elixir-format
msgid "Suspend"
msgstr "Aussetzen"
#: lib/mv_web/live/contribution_period_live/show.ex:260
#, elixir-autogen, elixir-format
msgid "Suspended"
msgstr "Ausgesetzt"
#: lib/mv_web/live/contribution_settings_live.ex:69
#, elixir-autogen, elixir-format
msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
msgstr "Diese Beitragsart wird automatisch allen neuen Mitgliedern zugewiesen. Kann pro Mitglied individuell geändert werden."
#: lib/mv_web/live/contribution_period_live/show.ex:228
#: lib/mv_web/live/contribution_settings_live.ex:199
#: lib/mv_web/live/contribution_type_live/index.ex:99
#, elixir-autogen, elixir-format
msgid "This page is not functional and only displays the planned features."
msgstr "Diese Seite ist nicht funktional und zeigt nur die geplanten Funktionen."
#: lib/mv_web/live/contribution_period_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Time Period"
msgstr "Zeitraum"
#: lib/mv_web/live/contribution_period_live/show.ex:66
#, elixir-autogen, elixir-format
msgid "Total Contributions"
msgstr "Beiträge gesamt"
#: lib/mv_web/live/contribution_period_live/show.ex:251
#, elixir-autogen, elixir-format
msgid "Unpaid"
msgstr "Unbezahlt"
#: lib/mv_web/live/contribution_settings_live.ex:183
#, elixir-autogen, elixir-format
msgid "View Example Member"
msgstr "Beispielmitglied ansehen"
#: lib/mv_web/live/contribution_settings_live.ex:90
#, elixir-autogen, elixir-format
msgid "When active: Members pay from the period of their joining."
msgstr "Wenn aktiv: Mitglieder zahlen ab der Periode ihres Eintritts."
#: lib/mv_web/live/contribution_settings_live.ex:93
#, elixir-autogen, elixir-format
msgid "When inactive: Members pay from the next full period after joining."
msgstr "Wenn inaktiv: Mitglieder zahlen ab der nächsten vollen Periode nach dem Eintritt."
#: lib/mv_web/live/contribution_period_live/show.ex:98
#, elixir-autogen, elixir-format
msgid "Why are not all contribution types shown?"
msgstr "Warum werden nicht alle Beitragsarten angezeigt?"
#: lib/mv_web/live/contribution_period_live/show.ex:85
#: lib/mv_web/live/contribution_period_live/show.ex:86
#: lib/mv_web/live/contribution_period_live/show.ex:87
#: lib/mv_web/live/contribution_period_live/show.ex:345
#: lib/mv_web/live/contribution_settings_live.ex:276
#: lib/mv_web/live/contribution_type_live/index.ex:204
#, elixir-autogen, elixir-format
msgid "Yearly"
msgstr "Jährlich"
#: lib/mv_web/live/contribution_settings_live.ex:128
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Excluded"
msgstr "Jährliches Intervall - Eintrittsperiode ausgeschlossen"
#: lib/mv_web/live/contribution_settings_live.ex:117
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Included"
msgstr "Jährliches Intervall - Eintrittsperiode eingeschlossen"
#~ #: lib/mv_web/live/member_live/form.ex:48 #~ #: lib/mv_web/live/member_live/form.ex:48
#~ #: lib/mv_web/live/member_live/show.ex:51 #~ #: lib/mv_web/live/member_live/show.ex:51
#~ #, elixir-autogen, elixir-format #~ #, elixir-autogen, elixir-format

View file

@ -12,6 +12,7 @@ msgid ""
msgstr "" msgstr ""
#: lib/mv_web/components/core_components.ex:386 #: lib/mv_web/components/core_components.ex:386
#: lib/mv_web/live/contribution_period_live/show.ex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
@ -35,12 +36,14 @@ msgstr ""
msgid "City" msgid "City"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:250 #: lib/mv_web/live/member_live/index.html.heex:250
#: lib/mv_web/live/user_live/index.html.heex:74 #: lib/mv_web/live/user_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:66
#: lib/mv_web/live/member_live/index.html.heex:242 #: lib/mv_web/live/member_live/index.html.heex:242
#: lib/mv_web/live/user_live/form.ex:265 #: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66 #: lib/mv_web/live/user_live/index.html.heex:66
@ -54,6 +57,7 @@ msgstr ""
msgid "Edit Member" msgid "Edit Member"
msgstr "" 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/form.ex:47
#: lib/mv_web/live/member_live/index.html.heex:112 #: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:50 #: lib/mv_web/live/member_live/show.ex:50
@ -122,6 +126,7 @@ msgstr ""
msgid "House Number" msgid "House Number"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52 #: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:57 #: lib/mv_web/live/member_live/show.ex:57
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -130,6 +135,8 @@ msgstr ""
#: lib/mv_web/live/components/payment_filter_component.ex:94 #: lib/mv_web/live/components/payment_filter_component.ex:94
#: lib/mv_web/live/components/payment_filter_component.ex:144 #: lib/mv_web/live/components/payment_filter_component.ex:144
#: lib/mv_web/live/contribution_period_live/show.ex:186
#: lib/mv_web/live/contribution_period_live/show.ex:242
#: lib/mv_web/live/member_live/form.ex:48 #: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:229 #: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:51 #: lib/mv_web/live/member_live/show.ex:51
@ -289,7 +296,7 @@ msgstr ""
msgid "Immutable" msgid "Immutable"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:102 #: lib/mv_web/components/layouts/navbar.ex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
@ -306,12 +313,14 @@ msgid "Member"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:25 #: lib/mv_web/components/layouts/navbar.ex:25
#: lib/mv_web/live/contribution_type_live/index.ex:61
#: lib/mv_web/live/member_live/index.ex:73 #: lib/mv_web/live/member_live/index.ex:73
#: lib/mv_web/live/member_live/index.html.heex:3 #: lib/mv_web/live/member_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Members" msgid "Members"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:48
#: lib/mv_web/live/custom_field_live/form.ex:51 #: lib/mv_web/live/custom_field_live/form.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Name" msgid "Name"
@ -332,6 +341,7 @@ msgstr ""
msgid "Not set" msgid "Not set"
msgstr "" 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:107
#: lib/mv_web/live/user_live/form.ex:115 #: lib/mv_web/live/user_live/form.ex:115
#: lib/mv_web/live/user_live/form.ex:224 #: lib/mv_web/live/user_live/form.ex:224
@ -350,7 +360,7 @@ msgstr ""
msgid "Password Authentication" msgid "Password Authentication"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:95 #: lib/mv_web/components/layouts/navbar.ex:106
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Profil" msgid "Profil"
msgstr "" msgstr ""
@ -370,7 +380,7 @@ msgstr ""
msgid "Select member" msgid "Select member"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:99 #: lib/mv_web/components/layouts/navbar.ex:110
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
@ -538,14 +548,14 @@ msgstr ""
msgid "Back to users list" msgid "Back to users list"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:33 #: lib/mv_web/components/layouts/navbar.ex:44
#: lib/mv_web/components/layouts/navbar.ex:39 #: lib/mv_web/components/layouts/navbar.ex:50
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Select language" msgid "Select language"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:46 #: lib/mv_web/components/layouts/navbar.ex:57
#: lib/mv_web/components/layouts/navbar.ex:66 #: lib/mv_web/components/layouts/navbar.ex:77
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Toggle dark mode" msgid "Toggle dark mode"
msgstr "" msgstr ""
@ -717,6 +727,7 @@ msgstr ""
msgid "Manage global settings for the association." msgid "Manage global settings for the association."
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:102
#: lib/mv_web/live/global_settings_live.ex:56 #: lib/mv_web/live/global_settings_live.ex:56
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save Settings" msgid "Save Settings"
@ -853,3 +864,429 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Payment filter" msgid "Payment filter"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:107
#, elixir-autogen, elixir-format
msgid "%{count} period selected"
msgid_plural "%{count} periods selected"
msgstr[0] ""
msgstr[1] ""
#: lib/mv_web/live/contribution_type_live/index.ex:113
#, elixir-autogen, elixir-format
msgid "About Contribution Types"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:138
#: lib/mv_web/live/contribution_type_live/index.ex:53
#, elixir-autogen, elixir-format
msgid "Amount"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Back to Settings"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:124
#, elixir-autogen, elixir-format
msgid "Can be changed at any time. Amount changes affect future periods only."
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:77
#, elixir-autogen, elixir-format
msgid "Cannot delete - members assigned"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:83
#, elixir-autogen, elixir-format
msgid "Change Contribution Type"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:42
#, elixir-autogen, elixir-format
msgid "Configure global settings for membership contributions."
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:34
#: lib/mv_web/live/contribution_settings_live.ex:27
#: lib/mv_web/live/contribution_settings_live.ex:40
#, elixir-autogen, elixir-format
msgid "Contribution Settings"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Contribution Start"
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:32
#: lib/mv_web/live/contribution_type_live/index.ex:25
#: lib/mv_web/live/contribution_type_live/index.ex:36
#, elixir-autogen, elixir-format
msgid "Contribution Types"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:224
#, elixir-autogen, elixir-format
msgid "Contribution start"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:41
#, elixir-autogen, elixir-format
msgid "Contribution type"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:117
#, elixir-autogen, elixir-format
msgid "Contribution types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:30
#, elixir-autogen, elixir-format
msgid "Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:39
#, elixir-autogen, elixir-format
msgid "Contributions for %{name}"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:159
#, elixir-autogen, elixir-format
msgid "Current"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:60
#, elixir-autogen, elixir-format
msgid "Default Contribution Type"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:133
#, elixir-autogen, elixir-format
msgid "Deletion"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:173
#, elixir-autogen, elixir-format
msgid "Example: Member Contribution View"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:113
#, elixir-autogen, elixir-format
msgid "Examples"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:262
#: lib/mv_web/live/contribution_type_live/index.ex:172
#, elixir-autogen, elixir-format
msgid "Family"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:128
#, elixir-autogen, elixir-format
msgid "Fixed after creation. Members can only switch between types with the same interval."
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:228
#, elixir-autogen, elixir-format
msgid "Generated periods"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:52
#, elixir-autogen, elixir-format
msgid "Global Settings"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:344
#: lib/mv_web/live/contribution_settings_live.ex:275
#: lib/mv_web/live/contribution_type_live/index.ex:203
#, elixir-autogen, elixir-format
msgid "Half-yearly"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:181
#, elixir-autogen, elixir-format
msgid "Half-yearly contribution for supporting members"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:87
#: lib/mv_web/live/contribution_type_live/index.ex:188
#, elixir-autogen, elixir-format
msgid "Honorary"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:85
#, elixir-autogen, elixir-format
msgid "Include joining period"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:137
#: lib/mv_web/live/contribution_type_live/index.ex:57
#: lib/mv_web/live/contribution_type_live/index.ex:127
#, elixir-autogen, elixir-format
msgid "Interval"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:220
#, elixir-autogen, elixir-format
msgid "Joining date"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:332
#, elixir-autogen, elixir-format
msgid "Joining year - reduced to 0"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:38
#, elixir-autogen, elixir-format
msgid "Manage contribution types for membership fees."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:116
#, elixir-autogen, elixir-format
msgid "Mark as Paid"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:120
#, elixir-autogen, elixir-format
msgid "Mark as Suspended"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:124
#, elixir-autogen, elixir-format
msgid "Mark as Unpaid"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "Member Contributions"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:122
#, elixir-autogen, elixir-format
msgid "Member pays for the year they joined"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:155
#, elixir-autogen, elixir-format
msgid "Member pays from the joining month"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:144
#, elixir-autogen, elixir-format
msgid "Member pays from the next full quarter"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:133
#, elixir-autogen, elixir-format
msgid "Member pays from the next full year"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:43
#, elixir-autogen, elixir-format
msgid "Member since"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:342
#: lib/mv_web/live/contribution_settings_live.ex:273
#: lib/mv_web/live/contribution_type_live/index.ex:201
#, elixir-autogen, elixir-format
msgid "Monthly"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:150
#, elixir-autogen, elixir-format
msgid "Monthly Interval - Joining Period Included"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:165
#, elixir-autogen, elixir-format
msgid "Monthly fee for students and trainees"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:123
#, elixir-autogen, elixir-format
msgid "Name & Amount"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:42
#, elixir-autogen, elixir-format
msgid "New Contribution Type"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:189
#, elixir-autogen, elixir-format
msgid "No fee for honorary members"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Only possible if no members are assigned to this type."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:70
#, elixir-autogen, elixir-format
msgid "Open Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:302
#, elixir-autogen, elixir-format
msgid "Paid via bank transfer"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:226
#: lib/mv_web/live/contribution_settings_live.ex:197
#: lib/mv_web/live/contribution_type_live/index.ex:97
#, elixir-autogen, elixir-format
msgid "Preview Mockup"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:343
#: lib/mv_web/live/contribution_settings_live.ex:274
#: lib/mv_web/live/contribution_type_live/index.ex:202
#, elixir-autogen, elixir-format
msgid "Quarterly"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:139
#, elixir-autogen, elixir-format
msgid "Quarterly Interval - Joining Period Excluded"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:173
#, elixir-autogen, elixir-format
msgid "Quarterly fee for family memberships"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:86
#: lib/mv_web/live/contribution_settings_live.ex:250
#: lib/mv_web/live/contribution_type_live/index.ex:156
#, elixir-autogen, elixir-format
msgid "Reduced"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:157
#, elixir-autogen, elixir-format
msgid "Reduced fee for unemployed, pensioners, or low income"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:276
#: lib/mv_web/live/contribution_settings_live.ex:244
#: lib/mv_web/live/contribution_type_live/index.ex:148
#, elixir-autogen, elixir-format
msgid "Regular"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:204
#, elixir-autogen, elixir-format
msgid "Reopen"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:176
#, elixir-autogen, elixir-format
msgid "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:149
#, elixir-autogen, elixir-format
msgid "Standard membership fee for regular members"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Status"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:256
#: lib/mv_web/live/contribution_type_live/index.ex:164
#, elixir-autogen, elixir-format
msgid "Student"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:180
#, elixir-autogen, elixir-format
msgid "Supporting Member"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:195
#, elixir-autogen, elixir-format
msgid "Suspend"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:260
#, elixir-autogen, elixir-format
msgid "Suspended"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:69
#, elixir-autogen, elixir-format
msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:228
#: lib/mv_web/live/contribution_settings_live.ex:199
#: lib/mv_web/live/contribution_type_live/index.ex:99
#, elixir-autogen, elixir-format
msgid "This page is not functional and only displays the planned features."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Time Period"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:66
#, elixir-autogen, elixir-format
msgid "Total Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:251
#, elixir-autogen, elixir-format
msgid "Unpaid"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:183
#, elixir-autogen, elixir-format
msgid "View Example Member"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:90
#, elixir-autogen, elixir-format
msgid "When active: Members pay from the period of their joining."
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:93
#, elixir-autogen, elixir-format
msgid "When inactive: Members pay from the next full period after joining."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:98
#, elixir-autogen, elixir-format
msgid "Why are not all contribution types shown?"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:85
#: lib/mv_web/live/contribution_period_live/show.ex:86
#: lib/mv_web/live/contribution_period_live/show.ex:87
#: lib/mv_web/live/contribution_period_live/show.ex:345
#: lib/mv_web/live/contribution_settings_live.ex:276
#: lib/mv_web/live/contribution_type_live/index.ex:204
#, elixir-autogen, elixir-format
msgid "Yearly"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:128
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Excluded"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:117
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Included"
msgstr ""

View file

@ -12,6 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/mv_web/components/core_components.ex:386 #: lib/mv_web/components/core_components.ex:386
#: lib/mv_web/live/contribution_period_live/show.ex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
@ -35,12 +36,14 @@ msgstr ""
msgid "City" msgid "City"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:78
#: lib/mv_web/live/member_live/index.html.heex:250 #: lib/mv_web/live/member_live/index.html.heex:250
#: lib/mv_web/live/user_live/index.html.heex:74 #: lib/mv_web/live/user_live/index.html.heex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:66
#: lib/mv_web/live/member_live/index.html.heex:242 #: lib/mv_web/live/member_live/index.html.heex:242
#: lib/mv_web/live/user_live/form.ex:265 #: lib/mv_web/live/user_live/form.ex:265
#: lib/mv_web/live/user_live/index.html.heex:66 #: lib/mv_web/live/user_live/index.html.heex:66
@ -54,6 +57,7 @@ msgstr ""
msgid "Edit Member" msgid "Edit Member"
msgstr "" 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/form.ex:47
#: lib/mv_web/live/member_live/index.html.heex:112 #: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:50 #: lib/mv_web/live/member_live/show.ex:50
@ -122,6 +126,7 @@ msgstr ""
msgid "House Number" msgid "House Number"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52 #: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:57 #: lib/mv_web/live/member_live/show.ex:57
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -130,6 +135,8 @@ msgstr ""
#: lib/mv_web/live/components/payment_filter_component.ex:94 #: lib/mv_web/live/components/payment_filter_component.ex:94
#: lib/mv_web/live/components/payment_filter_component.ex:144 #: lib/mv_web/live/components/payment_filter_component.ex:144
#: lib/mv_web/live/contribution_period_live/show.ex:186
#: lib/mv_web/live/contribution_period_live/show.ex:242
#: lib/mv_web/live/member_live/form.ex:48 #: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/index.html.heex:229 #: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:51 #: lib/mv_web/live/member_live/show.ex:51
@ -289,7 +296,7 @@ msgstr ""
msgid "Immutable" msgid "Immutable"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:102 #: lib/mv_web/components/layouts/navbar.ex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
@ -306,12 +313,14 @@ msgid "Member"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:25 #: lib/mv_web/components/layouts/navbar.ex:25
#: lib/mv_web/live/contribution_type_live/index.ex:61
#: lib/mv_web/live/member_live/index.ex:73 #: lib/mv_web/live/member_live/index.ex:73
#: lib/mv_web/live/member_live/index.html.heex:3 #: lib/mv_web/live/member_live/index.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Members" msgid "Members"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:48
#: lib/mv_web/live/custom_field_live/form.ex:51 #: lib/mv_web/live/custom_field_live/form.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Name" msgid "Name"
@ -332,6 +341,7 @@ msgstr ""
msgid "Not set" msgid "Not set"
msgstr "" 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:107
#: lib/mv_web/live/user_live/form.ex:115 #: lib/mv_web/live/user_live/form.ex:115
#: lib/mv_web/live/user_live/form.ex:224 #: lib/mv_web/live/user_live/form.ex:224
@ -350,7 +360,7 @@ msgstr ""
msgid "Password Authentication" msgid "Password Authentication"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:95 #: lib/mv_web/components/layouts/navbar.ex:106
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Profil" msgid "Profil"
msgstr "" msgstr ""
@ -370,7 +380,7 @@ msgstr ""
msgid "Select member" msgid "Select member"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:99 #: lib/mv_web/components/layouts/navbar.ex:110
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
@ -538,14 +548,14 @@ msgstr ""
msgid "Back to users list" msgid "Back to users list"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:33 #: lib/mv_web/components/layouts/navbar.ex:44
#: lib/mv_web/components/layouts/navbar.ex:39 #: lib/mv_web/components/layouts/navbar.ex:50
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Select language" msgid "Select language"
msgstr "" msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:46 #: lib/mv_web/components/layouts/navbar.ex:57
#: lib/mv_web/components/layouts/navbar.ex:66 #: lib/mv_web/components/layouts/navbar.ex:77
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Toggle dark mode" msgid "Toggle dark mode"
msgstr "" msgstr ""
@ -717,6 +727,7 @@ msgstr ""
msgid "Manage global settings for the association." msgid "Manage global settings for the association."
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:102
#: lib/mv_web/live/global_settings_live.ex:56 #: lib/mv_web/live/global_settings_live.ex:56
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "Save Settings" msgid "Save Settings"
@ -854,8 +865,440 @@ msgstr ""
msgid "Payment filter" msgid "Payment filter"
msgstr "" msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:107
#, elixir-autogen, elixir-format
msgid "%{count} period selected"
msgid_plural "%{count} periods selected"
msgstr[0] ""
msgstr[1] ""
#: lib/mv_web/live/contribution_type_live/index.ex:113
#, elixir-autogen, elixir-format
msgid "About Contribution Types"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:138
#: lib/mv_web/live/contribution_type_live/index.ex:53
#, elixir-autogen, elixir-format
msgid "Amount"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Back to Settings"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:124
#, elixir-autogen, elixir-format
msgid "Can be changed at any time. Amount changes affect future periods only."
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:77
#, elixir-autogen, elixir-format
msgid "Cannot delete - members assigned"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:83
#, elixir-autogen, elixir-format
msgid "Change Contribution Type"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:42
#, elixir-autogen, elixir-format
msgid "Configure global settings for membership contributions."
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:34
#: lib/mv_web/live/contribution_settings_live.ex:27
#: lib/mv_web/live/contribution_settings_live.ex:40
#, elixir-autogen, elixir-format
msgid "Contribution Settings"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Contribution Start"
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:32
#: lib/mv_web/live/contribution_type_live/index.ex:25
#: lib/mv_web/live/contribution_type_live/index.ex:36
#, elixir-autogen, elixir-format
msgid "Contribution Types"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:224
#, elixir-autogen, elixir-format
msgid "Contribution start"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:41
#, elixir-autogen, elixir-format
msgid "Contribution type"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:117
#, elixir-autogen, elixir-format
msgid "Contribution types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation."
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:30
#, elixir-autogen, elixir-format
msgid "Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:39
#, elixir-autogen, elixir-format
msgid "Contributions for %{name}"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:159
#, elixir-autogen, elixir-format
msgid "Current"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:60
#, elixir-autogen, elixir-format
msgid "Default Contribution Type"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:133
#, elixir-autogen, elixir-format, fuzzy
msgid "Deletion"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:173
#, elixir-autogen, elixir-format
msgid "Example: Member Contribution View"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:113
#, elixir-autogen, elixir-format
msgid "Examples"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:262
#: lib/mv_web/live/contribution_type_live/index.ex:172
#, elixir-autogen, elixir-format
msgid "Family"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:128
#, elixir-autogen, elixir-format
msgid "Fixed after creation. Members can only switch between types with the same interval."
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:228
#, elixir-autogen, elixir-format
msgid "Generated periods"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:52
#, elixir-autogen, elixir-format, fuzzy
msgid "Global Settings"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:344
#: lib/mv_web/live/contribution_settings_live.ex:275
#: lib/mv_web/live/contribution_type_live/index.ex:203
#, elixir-autogen, elixir-format
msgid "Half-yearly"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:181
#, elixir-autogen, elixir-format
msgid "Half-yearly contribution for supporting members"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:87
#: lib/mv_web/live/contribution_type_live/index.ex:188
#, elixir-autogen, elixir-format
msgid "Honorary"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:85
#, elixir-autogen, elixir-format
msgid "Include joining period"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:137
#: lib/mv_web/live/contribution_type_live/index.ex:57
#: lib/mv_web/live/contribution_type_live/index.ex:127
#, elixir-autogen, elixir-format
msgid "Interval"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:220
#, elixir-autogen, elixir-format, fuzzy
msgid "Joining date"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:332
#, elixir-autogen, elixir-format
msgid "Joining year - reduced to 0"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:38
#, elixir-autogen, elixir-format
msgid "Manage contribution types for membership fees."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:116
#, elixir-autogen, elixir-format
msgid "Mark as Paid"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:120
#, elixir-autogen, elixir-format
msgid "Mark as Suspended"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:124
#, elixir-autogen, elixir-format
msgid "Mark as Unpaid"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "Member Contributions"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:122
#, elixir-autogen, elixir-format
msgid "Member pays for the year they joined"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:155
#, elixir-autogen, elixir-format
msgid "Member pays from the joining month"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:144
#, elixir-autogen, elixir-format
msgid "Member pays from the next full quarter"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:133
#, elixir-autogen, elixir-format
msgid "Member pays from the next full year"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:43
#, elixir-autogen, elixir-format, fuzzy
msgid "Member since"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:92
#, elixir-autogen, elixir-format
msgid "Members can only switch between contribution types with the same payment interval (e.g., yearly to yearly). This prevents complex period overlaps."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:342
#: lib/mv_web/live/contribution_settings_live.ex:273
#: lib/mv_web/live/contribution_type_live/index.ex:201
#, elixir-autogen, elixir-format
msgid "Monthly"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:150
#, elixir-autogen, elixir-format
msgid "Monthly Interval - Joining Period Included"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:165
#, elixir-autogen, elixir-format
msgid "Monthly fee for students and trainees"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:123
#, elixir-autogen, elixir-format
msgid "Name & Amount"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:42
#, elixir-autogen, elixir-format
msgid "New Contribution Type"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:189
#, elixir-autogen, elixir-format
msgid "No fee for honorary members"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:134
#, elixir-autogen, elixir-format
msgid "Only possible if no members are assigned to this type."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:70
#, elixir-autogen, elixir-format
msgid "Open Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:302
#, elixir-autogen, elixir-format
msgid "Paid via bank transfer"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:226
#: lib/mv_web/live/contribution_settings_live.ex:197
#: lib/mv_web/live/contribution_type_live/index.ex:97
#, elixir-autogen, elixir-format
msgid "Preview Mockup"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:343
#: lib/mv_web/live/contribution_settings_live.ex:274
#: lib/mv_web/live/contribution_type_live/index.ex:202
#, elixir-autogen, elixir-format
msgid "Quarterly"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:139
#, elixir-autogen, elixir-format
msgid "Quarterly Interval - Joining Period Excluded"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:173
#, elixir-autogen, elixir-format
msgid "Quarterly fee for family memberships"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:86
#: lib/mv_web/live/contribution_settings_live.ex:250
#: lib/mv_web/live/contribution_type_live/index.ex:156
#, elixir-autogen, elixir-format
msgid "Reduced"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:157
#, elixir-autogen, elixir-format
msgid "Reduced fee for unemployed, pensioners, or low income"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:276
#: lib/mv_web/live/contribution_settings_live.ex:244
#: lib/mv_web/live/contribution_type_live/index.ex:148
#, elixir-autogen, elixir-format
msgid "Regular"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:204
#, elixir-autogen, elixir-format
msgid "Reopen"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:176
#, elixir-autogen, elixir-format
msgid "See how the contribution periods will be displayed for an individual member. This example shows Maria Weber with multiple contribution periods."
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:149
#, elixir-autogen, elixir-format
msgid "Standard membership fee for regular members"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Status"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:256
#: lib/mv_web/live/contribution_type_live/index.ex:164
#, elixir-autogen, elixir-format
msgid "Student"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:180
#, elixir-autogen, elixir-format
msgid "Supporting Member"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:195
#, elixir-autogen, elixir-format
msgid "Suspend"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:260
#, elixir-autogen, elixir-format
msgid "Suspended"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:69
#, elixir-autogen, elixir-format
msgid "This contribution type is automatically assigned to all new members. Can be changed individually per member."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:228
#: lib/mv_web/live/contribution_settings_live.ex:199
#: lib/mv_web/live/contribution_type_live/index.ex:99
#, elixir-autogen, elixir-format
msgid "This page is not functional and only displays the planned features."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Time Period"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:66
#, elixir-autogen, elixir-format
msgid "Total Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:251
#, elixir-autogen, elixir-format
msgid "Unpaid"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:183
#, elixir-autogen, elixir-format
msgid "View Example Member"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:90
#, elixir-autogen, elixir-format
msgid "When active: Members pay from the period of their joining."
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:93
#, elixir-autogen, elixir-format
msgid "When inactive: Members pay from the next full period after joining."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:98
#, elixir-autogen, elixir-format
msgid "Why are not all contribution types shown?"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:85
#: lib/mv_web/live/contribution_period_live/show.ex:86
#: lib/mv_web/live/contribution_period_live/show.ex:87
#: lib/mv_web/live/contribution_period_live/show.ex:345
#: lib/mv_web/live/contribution_settings_live.ex:276
#: lib/mv_web/live/contribution_type_live/index.ex:204
#, elixir-autogen, elixir-format
msgid "Yearly"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:128
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Excluded"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:117
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Included"
msgstr ""
#~ #: lib/mv_web/live/member_live/form.ex:48 #~ #: lib/mv_web/live/member_live/form.ex:48
#~ #: lib/mv_web/live/member_live/show.ex:51 #~ #: lib/mv_web/live/member_live/show.ex:51
#~ #, elixir-autogen, elixir-format #~ #, elixir-autogen, elixir-format
#~ msgid "Birth Date" #~ msgid "Birth Date"
#~ msgstr "" #~ 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 ""