Merge pull request 'Visual hierarchy for fields in member view and edit form - closes #231' (#247) from feature/231_member_view_ui into main

Reviewed-on: #247
Reviewed-by: rafael <rafael@noreply.git.local-it.org>
This commit is contained in:
moritz 2025-12-03 15:33:01 +01:00
commit 5c1a766e87
5 changed files with 1005 additions and 434 deletions

View file

@ -5,80 +5,212 @@ defmodule MvWeb.MemberLive.Form do
## Features
- Create new members with personal information
- Edit existing member details
- Manage custom properties (dynamic fields)
- Grouped sections for better organization
- Tab navigation (Payments tab disabled, coming soon)
- Manage custom properties (dynamic fields, displayed sorted by name)
- Real-time validation with visual feedback
- Link/unlink user accounts
## Form Fields
**Required:**
- first_name, last_name, email
**Optional:**
- phone_number, address fields (city, street, house_number, postal_code)
- join_date, exit_date
- paid status
- notes
## Custom Field Values
Members can have dynamic custom field values defined by CustomFields.
The form dynamically renders inputs based on available CustomFields.
## Form Sections
- Personal Data: Name, address, contact information, membership dates, notes
- Custom Fields: Dynamic fields in uniform grid layout (displayed sorted by name)
- Payment Data: Mockup section (not editable)
## Events
- `validate` - Real-time form validation
- `save` - Submit form (create or update member)
- Custom field value management events for adding/removing custom fields
"""
use MvWeb, :live_view
@impl true
def render(assigns) do
# Sort custom fields by name for display only
sorted_custom_fields = Enum.sort_by(assigns.custom_fields, & &1.name)
assigns = assign(assigns, :sorted_custom_fields, sorted_custom_fields)
~H"""
<Layouts.app flash={@flash} current_user={@current_user}>
<.header>
{@page_title}
<:subtitle>
{gettext("Fields marked with an asterisk (*) cannot be empty.")}
</:subtitle>
</.header>
<.form for={@form} id="member-form" phx-change="validate" phx-submit="save">
<.input field={@form[:first_name]} label={gettext("First Name")} required />
<.input field={@form[:last_name]} label={gettext("Last Name")} required />
<.input field={@form[:email]} label={gettext("Email")} required type="email" />
<.input field={@form[:paid]} label={gettext("Paid")} type="checkbox" />
<.input field={@form[:phone_number]} label={gettext("Phone Number")} />
<.input field={@form[:join_date]} label={gettext("Join Date")} type="date" />
<.input field={@form[:exit_date]} label={gettext("Exit Date")} type="date" />
<.input field={@form[:notes]} label={gettext("Notes")} />
<.input field={@form[:city]} label={gettext("City")} />
<.input field={@form[:street]} label={gettext("Street")} />
<.input field={@form[:house_number]} label={gettext("House Number")} />
<.input field={@form[:postal_code]} label={gettext("Postal Code")} />
<%!-- Header with Back button, Name display, and Save button --%>
<div class="flex items-center justify-between gap-4 pb-4">
<.button navigate={return_path(@return_to, @member)} type="button">
<.icon name="hero-arrow-left" class="size-4" />
{gettext("Back")}
</.button>
<h3 class="mt-8 mb-2 text-lg font-semibold">{gettext("Custom Field Values")}</h3>
<.inputs_for :let={f_custom_field_value} field={@form[:custom_field_values]}>
<% type =
Enum.find(@custom_fields, &(&1.id == f_custom_field_value[:custom_field_id].value)) %>
<.inputs_for :let={value_form} field={f_custom_field_value[:value]}>
<% input_type =
cond do
type && type.value_type == :boolean -> "checkbox"
type && type.value_type == :date -> :date
true -> :text
end %>
<.input field={value_form[:value]} label={type && type.name} type={input_type} />
</.inputs_for>
<input
type="hidden"
name={f_custom_field_value[:custom_field_id].name}
value={f_custom_field_value[:custom_field_id].value}
/>
</.inputs_for>
<h1 class="text-2xl font-bold text-center flex-1">
<%= if @member do %>
{@member.first_name} {@member.last_name}
<% else %>
{gettext("New Member")}
<% end %>
</h1>
<.button phx-disable-with={gettext("Saving...")} variant="primary">
{gettext("Save Member")}
</.button>
<.button navigate={return_path(@return_to, @member)}>{gettext("Cancel")}</.button>
<.button phx-disable-with={gettext("Saving...")} variant="primary" type="submit">
{gettext("Save")}
</.button>
</div>
<%!-- Tab Navigation --%>
<div role="tablist" class="tabs tabs-bordered mb-6">
<button type="button" role="tab" class="tab tab-active" aria-selected="true">
<.icon name="hero-identification" class="size-4 mr-2" />
{gettext("Contact Data")}
</button>
<button
type="button"
role="tab"
class="tab"
disabled
aria-disabled="true"
title={gettext("Coming soon")}
>
<.icon name="hero-credit-card" class="size-4 mr-2" />
{gettext("Payments")}
</button>
</div>
<%!-- Personal Data and Custom Fields Row --%>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
<%!-- Personal Data Section --%>
<div>
<.form_section title={gettext("Personal Data")}>
<div class="space-y-4">
<%!-- Name Row --%>
<div class="flex gap-4">
<div class="w-48">
<.input field={@form[:first_name]} label={gettext("First Name")} required />
</div>
<div class="w-48">
<.input field={@form[:last_name]} label={gettext("Last Name")} required />
</div>
</div>
<%!-- Address Row --%>
<div class="flex gap-4">
<div class="flex-1">
<.input field={@form[:street]} label={gettext("Street")} />
</div>
<div class="w-16">
<.input field={@form[:house_number]} label={gettext("Nr.")} />
</div>
<div class="w-24">
<.input field={@form[:postal_code]} label={gettext("Postal Code")} />
</div>
<div class="w-32">
<.input field={@form[:city]} label={gettext("City")} />
</div>
</div>
<%!-- Email --%>
<div>
<.input field={@form[:email]} label={gettext("Email")} required type="email" />
</div>
<%!-- Phone --%>
<div>
<.input field={@form[:phone_number]} label={gettext("Phone")} type="tel" />
</div>
<%!-- Membership Dates Row --%>
<div class="flex gap-4">
<div class="w-36">
<.input field={@form[:join_date]} label={gettext("Join Date")} type="date" />
</div>
<div class="w-36">
<.input field={@form[:exit_date]} label={gettext("Exit Date")} type="date" />
</div>
</div>
<%!-- Notes --%>
<div>
<.input field={@form[:notes]} label={gettext("Notes")} type="textarea" />
</div>
</div>
</.form_section>
</div>
<%!-- Custom Fields Section --%>
<%= if Enum.any?(@custom_fields) do %>
<div>
<.form_section title={gettext("Custom Fields")}>
<div class="grid grid-cols-2 gap-4">
<%!-- Render in sorted order by finding the form for each sorted custom field --%>
<%= for cf <- @sorted_custom_fields do %>
<.inputs_for :let={f_cfv} field={@form[:custom_field_values]}>
<%= if f_cfv[:custom_field_id].value == cf.id do %>
<div class={if cf.value_type == :boolean, do: "flex items-end", else: ""}>
<.inputs_for :let={value_form} field={f_cfv[:value]}>
<.input
field={value_form[:value]}
label={cf.name}
type={custom_field_input_type(cf.value_type)}
/>
</.inputs_for>
<input
type="hidden"
name={f_cfv[:custom_field_id].name}
value={f_cfv[:custom_field_id].value}
/>
</div>
<% end %>
</.inputs_for>
<% end %>
</div>
</.form_section>
</div>
<% end %>
</div>
<%!-- Payment Data Section (Mockup) --%>
<div class="max-w-xl">
<.form_section title={gettext("Payment Data")}>
<div role="alert" class="alert alert-info mb-4">
<.icon name="hero-information-circle" class="size-5" />
<span>{gettext("This data is for demonstration purposes only (mockup).")}</span>
</div>
<div class="flex gap-8">
<div class="w-24">
<label for="mock-contribution" class="label text-sm font-medium">
{gettext("Contribution")}
</label>
<input
type="text"
id="mock-contribution"
value="72 €"
disabled
class="input input-bordered w-full bg-base-200"
/>
</div>
<div class="w-40">
<label class="label text-sm font-medium">{gettext("Payment Cycle")}</label>
<div class="flex gap-3 mt-2">
<label class="flex items-center gap-1 cursor-not-allowed opacity-60">
<input type="radio" name="mock_cycle" checked disabled class="radio radio-sm" />
<span class="text-sm">{gettext("monthly")}</span>
</label>
<label class="flex items-center gap-1 cursor-not-allowed opacity-60">
<input type="radio" name="mock_cycle" disabled class="radio radio-sm" />
<span class="text-sm">{gettext("yearly")}</span>
</label>
</div>
</div>
<div class="w-24 flex items-end">
<.input field={@form[:paid]} label={gettext("Paid")} type="checkbox" />
</div>
</div>
</.form_section>
</div>
<%!-- Bottom Action Buttons --%>
<div class="flex justify-end gap-4 mt-6">
<.button navigate={return_path(@return_to, @member)} type="button">
{gettext("Cancel")}
</.button>
<.button phx-disable-with={gettext("Saving...")} variant="primary" type="submit">
{gettext("Save Member")}
</.button>
</div>
</.form>
</Layouts.app>
"""
@ -106,8 +238,8 @@ defmodule MvWeb.MemberLive.Form do
id -> Ash.get!(Mv.Membership.Member, id)
end
action = if is_nil(member), do: "New", else: "Edit"
page_title = action <> " " <> "Member"
page_title =
if is_nil(member), do: gettext("Create Member"), else: gettext("Edit Member")
{:ok,
socket
@ -213,5 +345,37 @@ defmodule MvWeb.MemberLive.Form do
end
defp return_path("index", _member), do: ~p"/members"
defp return_path("show", nil), do: ~p"/members"
defp return_path("show", member), do: ~p"/members/#{member.id}"
# -----------------------------------------------------------------
# Helper Components
# -----------------------------------------------------------------
# Renders a form section box with border and title.
attr :title, :string, required: true
slot :inner_block, required: true
defp form_section(assigns) do
~H"""
<section class="mb-6">
<h2 class="text-lg font-semibold mb-3">{@title}</h2>
<div class="border border-base-300 rounded-lg p-4 bg-base-100">
{render_slot(@inner_block)}
</div>
</section>
"""
end
# -----------------------------------------------------------------
# Helper Functions for Custom Fields
# -----------------------------------------------------------------
# Returns input type for custom field based on value type
defp custom_field_input_type(:string), do: "text"
defp custom_field_input_type(:integer), do: "number"
defp custom_field_input_type(:boolean), do: "checkbox"
defp custom_field_input_type(:date), do: "date"
defp custom_field_input_type(:email), do: "email"
defp custom_field_input_type(_), do: "text"
end

View file

@ -3,19 +3,16 @@ defmodule MvWeb.MemberLive.Show do
LiveView for displaying a single member's details.
## Features
- Display all member information (personal, contact, address)
- Show linked user account (if exists)
- Display custom field values
- Display all member information in grouped sections
- Tab navigation for future features (Payments)
- Show custom field values with type-based formatting
- Navigate to edit form
- Return to member list
## Displayed Information
- Basic: name, email, dates (join, exit)
- Contact: phone number
- Address: street, house number, postal code, city
- Status: paid flag
- Relationships: linked user account
- Custom: dynamic custom field values from CustomFields
## Sections
- Personal Data: Name, address, contact information, membership dates, notes
- Custom Fields: Dynamic fields in uniform grid layout (sorted by name)
- Payment Data: Mockup section with placeholder data
## Navigation
- Back to member list
@ -23,69 +20,155 @@ defmodule MvWeb.MemberLive.Show do
"""
use MvWeb, :live_view
import Ash.Query
alias MvWeb.Helpers.DateFormatter
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash} current_user={@current_user}>
<.header>
{@member.first_name} {@member.last_name}
<:subtitle>{gettext("This is a member record from your database.")}</:subtitle>
<%!-- Header with Back button, Name, and Edit button --%>
<div class="flex items-center justify-between gap-4 pb-4">
<.button navigate={~p"/members"} aria-label={gettext("Back to members list")}>
<.icon name="hero-arrow-left" class="size-4" />
{gettext("Back")}
</.button>
<:actions>
<.button navigate={~p"/members"} aria-label={gettext("Back to members list")}>
<.icon name="hero-arrow-left" />
<span class="sr-only">{gettext("Back to members list")}</span>
</.button>
<.button variant="primary" navigate={~p"/members/#{@member}/edit?return_to=show"}>
<.icon name="hero-pencil-square" /> {gettext("Edit Member")}
</.button>
</:actions>
</.header>
<h1 class="text-2xl font-bold text-center flex-1">
{@member.first_name} {@member.last_name}
</h1>
<.list>
<:item title={gettext("Id")}>{@member.id}</:item>
<:item title={gettext("First Name")}>{@member.first_name}</:item>
<:item title={gettext("Last Name")}>{@member.last_name}</:item>
<:item title={gettext("Email")}>{@member.email}</:item>
<:item title={gettext("Paid")}>
{if @member.paid, do: gettext("Yes"), else: gettext("No")}
</:item>
<:item title={gettext("Phone Number")}>{@member.phone_number}</:item>
<:item title={gettext("Join Date")}>{DateFormatter.format_date(@member.join_date)}</:item>
<:item title={gettext("Exit Date")}>{DateFormatter.format_date(@member.exit_date)}</:item>
<:item title={gettext("Notes")}>{@member.notes}</:item>
<:item title={gettext("City")}>{@member.city}</:item>
<:item title={gettext("Street")}>{@member.street}</:item>
<:item title={gettext("House Number")}>{@member.house_number}</:item>
<:item title={gettext("Postal Code")}>{@member.postal_code}</:item>
<:item title={gettext("Linked User")}>
<%= if @member.user do %>
<.link
navigate={~p"/users/#{@member.user}"}
class="text-blue-600 hover:text-blue-800 underline"
>
<.icon name="hero-user" class="h-4 w-4 inline mr-1" />
{@member.user.email}
</.link>
<% else %>
<span class="text-gray-500 italic">{gettext("No user linked")}</span>
<% end %>
</:item>
</.list>
<.button variant="primary" navigate={~p"/members/#{@member}/edit?return_to=show"}>
{gettext("Edit Member")}
</.button>
</div>
<h3 class="mt-8 mb-2 text-lg font-semibold">{gettext("Custom Field Values")}</h3>
<.generic_list items={
Enum.map(@member.custom_field_values, fn cfv ->
{
# name
cfv.custom_field && cfv.custom_field.name,
# value
format_custom_field_value(cfv)
}
end)
} />
<%!-- Tab Navigation --%>
<div role="tablist" class="tabs tabs-bordered mb-6">
<button role="tab" class="tab tab-active" aria-selected="true">
<.icon name="hero-identification" class="size-4 mr-2" />
{gettext("Contact Data")}
</button>
<button role="tab" class="tab" disabled aria-disabled="true" title={gettext("Coming soon")}>
<.icon name="hero-credit-card" class="size-4 mr-2" />
{gettext("Payments")}
</button>
</div>
<%!-- Personal Data and Custom Fields Row --%>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
<%!-- Personal Data Section --%>
<div>
<.section_box title={gettext("Personal Data")}>
<div class="space-y-4">
<%!-- Name Row --%>
<div class="flex gap-6">
<.data_field label={gettext("First Name")} value={@member.first_name} class="w-48" />
<.data_field label={gettext("Last Name")} value={@member.last_name} class="w-48" />
</div>
<%!-- Address --%>
<div>
<.data_field label={gettext("Address")} value={format_address(@member)} />
</div>
<%!-- Email --%>
<div>
<.data_field label={gettext("Email")}>
<a
href={"mailto:#{MvWeb.MemberLive.Index.format_member_email(@member)}"}
class="text-blue-700 hover:text-blue-800 underline"
>
{@member.email}
</a>
</.data_field>
</div>
<%!-- Phone --%>
<div>
<.data_field label={gettext("Phone")} value={@member.phone_number} />
</div>
<%!-- Membership Dates Row --%>
<div class="flex gap-6">
<.data_field
label={gettext("Join Date")}
value={format_date(@member.join_date)}
class="w-28"
/>
<.data_field
label={gettext("Exit Date")}
value={format_date(@member.exit_date)}
class="w-28"
/>
</div>
<%!-- Linked User --%>
<div>
<.data_field label={gettext("Linked User")}>
<%= if @member.user do %>
<.link
navigate={~p"/users/#{@member.user}"}
class="text-blue-700 hover:text-blue-800 underline inline-flex items-center gap-1"
>
<.icon name="hero-user" class="size-4" />
{@member.user.email}
</.link>
<% else %>
<span class="text-base-content/70 italic">{gettext("No user linked")}</span>
<% end %>
</.data_field>
</div>
<%!-- Notes --%>
<%= if @member.notes && String.trim(@member.notes) != "" do %>
<div>
<.data_field label={gettext("Notes")}>
<p class="whitespace-pre-wrap text-base-content/80">{@member.notes}</p>
</.data_field>
</div>
<% end %>
</div>
</.section_box>
</div>
<%!-- Custom Fields Section --%>
<%= if Enum.any?(@member.custom_field_values) do %>
<div>
<.section_box title={gettext("Custom Fields")}>
<div class="grid grid-cols-2 gap-4">
<%= for cfv <- sort_custom_field_values(@member.custom_field_values) do %>
<% custom_field = cfv.custom_field %>
<% value_type = custom_field && custom_field.value_type %>
<.data_field label={custom_field && custom_field.name}>
{format_custom_field_value(cfv.value, value_type)}
</.data_field>
<% end %>
</div>
</.section_box>
</div>
<% end %>
</div>
<%!-- Payment Data Section (Mockup) --%>
<div class="max-w-xl">
<.section_box title={gettext("Payment Data")}>
<div role="alert" class="alert alert-info mb-4">
<.icon name="hero-information-circle" class="size-5" />
<span>{gettext("This data is for demonstration purposes only (mockup).")}</span>
</div>
<div class="flex gap-6">
<.data_field label={gettext("Contribution")} value="72 €" class="w-24" />
<.data_field label={gettext("Payment Cycle")} value={gettext("monthly")} class="w-28" />
<.data_field label={gettext("Paid")} class="w-24">
<%= if @member.paid do %>
<span class="badge badge-success">{gettext("Paid")}</span>
<% else %>
<span class="badge badge-warning">{gettext("Pending")}</span>
<% end %>
</.data_field>
</div>
</.section_box>
</div>
</Layouts.app>
"""
end
@ -113,16 +196,119 @@ defmodule MvWeb.MemberLive.Show do
defp page_title(:show), do: gettext("Show Member")
defp page_title(:edit), do: gettext("Edit Member")
defp format_custom_field_value(cfv) do
value =
case cfv.value do
%{value: v} -> v
v -> v
end
# -----------------------------------------------------------------
# Helper Components
# -----------------------------------------------------------------
case value do
%Date{} = date -> DateFormatter.format_date(date)
other -> other
# Renders a section box with border and title.
attr :title, :string, required: true
slot :inner_block, required: true
defp section_box(assigns) do
~H"""
<section class="mb-6">
<h2 class="text-lg font-semibold mb-3">{@title}</h2>
<div class="border border-base-300 rounded-lg p-4 bg-base-100">
{render_slot(@inner_block)}
</div>
</section>
"""
end
# Renders a labeled data field.
attr :label, :string, required: true
attr :value, :string, default: nil
attr :class, :string, default: ""
slot :inner_block
defp data_field(assigns) do
~H"""
<dl class={@class}>
<dt class="text-sm font-medium text-base-content/70">{@label}</dt>
<dd class="mt-1 text-base-content">
<%= if @inner_block != [] do %>
{render_slot(@inner_block)}
<% else %>
{display_value(@value)}
<% end %>
</dd>
</dl>
"""
end
# -----------------------------------------------------------------
# Helper Functions
# -----------------------------------------------------------------
defp display_value(nil), do: ""
defp display_value(""), do: ""
defp display_value(value), do: value
defp format_address(member) do
street_part =
[member.street, member.house_number]
|> Enum.filter(&(&1 && &1 != ""))
|> Enum.join(" ")
city_part =
[member.postal_code, member.city]
|> Enum.filter(&(&1 && &1 != ""))
|> Enum.join(" ")
[street_part, city_part]
|> Enum.filter(&(&1 != ""))
|> Enum.join(", ")
|> case do
"" -> nil
address -> address
end
end
defp format_date(nil), do: nil
defp format_date(%Date{} = date) do
Calendar.strftime(date, "%d.%m.%Y")
end
defp format_date(date), do: to_string(date)
# Sorts custom field values by custom field name
defp sort_custom_field_values(custom_field_values) do
Enum.sort_by(custom_field_values, fn cfv ->
(cfv.custom_field && cfv.custom_field.name) || ""
end)
end
# Formats custom field value based on type
defp format_custom_field_value(%Ash.Union{value: value, type: type}, _expected_type) do
format_custom_field_value(value, type)
end
defp format_custom_field_value(nil, _type), do: ""
defp format_custom_field_value(value, :boolean) when is_boolean(value) do
if value, do: gettext("Yes"), else: gettext("No")
end
defp format_custom_field_value(%Date{} = date, :date) do
Calendar.strftime(date, "%d.%m.%Y")
end
defp format_custom_field_value(value, :email) when is_binary(value) do
assigns = %{email: value}
~H"""
<a href={"mailto:#{@email}"} class="text-blue-700 hover:text-blue-800 underline">{@email}</a>
"""
end
defp format_custom_field_value(value, :integer) when is_integer(value) do
Integer.to_string(value)
end
defp format_custom_field_value(value, _type) when is_binary(value) do
if String.trim(value) == "", do: "", else: value
end
defp format_custom_field_value(value, _type), do: to_string(value)
end

View file

@ -28,9 +28,8 @@ msgstr "Bist du sicher?"
msgid "Attempting to reconnect"
msgstr "Verbindung wird wiederhergestellt"
#: lib/mv_web/live/member_live/form.ex:53
#: lib/mv_web/live/member_live/form.ex:100
#: lib/mv_web/live/member_live/index.html.heex:184
#: lib/mv_web/live/member_live/show.ex:59
#, elixir-autogen, elixir-format
msgid "City"
msgstr "Stadt"
@ -48,18 +47,19 @@ msgstr "Löschen"
#: lib/mv_web/live/user_live/index.html.heex:65
#, elixir-autogen, elixir-format
msgid "Edit"
msgstr "Bearbeiten"
msgstr "Bearbeite"
#: lib/mv_web/live/member_live/show.ex:42
#: lib/mv_web/live/member_live/show.ex:114
#: lib/mv_web/live/member_live/form.ex:242
#: lib/mv_web/live/member_live/show.ex:40
#: lib/mv_web/live/member_live/show.ex:197
#, 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/form.ex:106
#: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:51
#: lib/mv_web/live/member_live/show.ex:75
#: lib/mv_web/live/user_live/form.ex:46
#: lib/mv_web/live/user_live/index.html.heex:44
#: lib/mv_web/live/user_live/show.ex:49
@ -67,25 +67,26 @@ msgstr "Mitglied bearbeiten"
msgid "Email"
msgstr "E-Mail"
#: lib/mv_web/live/member_live/form.ex:45
#: lib/mv_web/live/member_live/show.ex:49
#: lib/mv_web/live/member_live/form.ex:81
#: lib/mv_web/live/member_live/show.ex:64
#, elixir-autogen, elixir-format
msgid "First Name"
msgstr "Vorname"
#: lib/mv_web/live/member_live/form.ex:50
#: lib/mv_web/live/member_live/form.ex:117
#: lib/mv_web/live/member_live/index.html.heex:220
#: lib/mv_web/live/member_live/show.ex:56
#: lib/mv_web/live/member_live/show.ex:93
#, elixir-autogen, elixir-format
msgid "Join Date"
msgstr "Beitrittsdatum"
#: lib/mv_web/live/member_live/form.ex:46
#: lib/mv_web/live/member_live/show.ex:50
#: lib/mv_web/live/member_live/form.ex:84
#: lib/mv_web/live/member_live/show.ex:65
#, elixir-autogen, elixir-format
msgid "Last Name"
msgstr "Nachname"
#: lib/mv_web/live/member_live/form.ex:44
#: lib/mv_web/live/member_live/index.html.heex:29
#, elixir-autogen, elixir-format
msgid "New Member"
@ -112,22 +113,20 @@ msgstr "Keine Internetverbindung gefunden"
msgid "close"
msgstr "schließen"
#: lib/mv_web/live/member_live/form.ex:51
#: lib/mv_web/live/member_live/show.ex:57
#: lib/mv_web/live/member_live/form.ex:120
#: lib/mv_web/live/member_live/show.ex:98
#, elixir-autogen, elixir-format
msgid "Exit Date"
msgstr "Austrittsdatum"
#: lib/mv_web/live/member_live/form.ex:55
#: lib/mv_web/live/member_live/index.html.heex:148
#: lib/mv_web/live/member_live/show.ex:61
#, elixir-autogen, elixir-format
msgid "House Number"
msgstr "Hausnummer"
#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:58
#: lib/mv_web/live/member_live/form.ex:126
#: lib/mv_web/live/member_live/show.ex:124
#, elixir-autogen, elixir-format
msgid "Notes"
msgstr "Notizen"
@ -136,28 +135,26 @@ msgstr "Notizen"
#: 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:241
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/form.ex:199
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:52
#: lib/mv_web/live/member_live/show.ex:162
#: lib/mv_web/live/member_live/show.ex:164
#, elixir-autogen, elixir-format
msgid "Paid"
msgstr "Bezahlt"
#: lib/mv_web/live/member_live/form.ex:49
#: lib/mv_web/live/member_live/index.html.heex:202
#: lib/mv_web/live/member_live/show.ex:55
#, elixir-autogen, elixir-format
msgid "Phone Number"
msgstr "Telefonnummer"
#: lib/mv_web/live/member_live/form.ex:56
#: lib/mv_web/live/member_live/form.ex:97
#: lib/mv_web/live/member_live/index.html.heex:166
#: lib/mv_web/live/member_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Postal Code"
msgstr "Postleitzahl"
#: lib/mv_web/live/member_live/form.ex:79
#: lib/mv_web/live/member_live/form.ex:211
#, elixir-autogen, elixir-format
msgid "Save Member"
msgstr "Mitglied speichern"
@ -165,58 +162,48 @@ 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:78
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/form.ex:210
#: lib/mv_web/live/user_live/form.ex:249
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr "Speichern..."
#: lib/mv_web/live/member_live/form.ex:54
#: lib/mv_web/live/member_live/form.ex:91
#: lib/mv_web/live/member_live/index.html.heex:130
#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "Street"
msgstr "Straße"
#: lib/mv_web/live/member_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Id"
msgstr "ID"
#: lib/mv_web/live/member_live/index.html.heex:234
#: lib/mv_web/live/member_live/index/formatter.ex:62
#: lib/mv_web/live/member_live/show.ex:53
#: lib/mv_web/live/member_live/show.ex:290
#, elixir-autogen, elixir-format
msgid "No"
msgstr "Nein"
#: lib/mv_web/live/member_live/show.ex:113
#: lib/mv_web/live/member_live/show.ex:196
#, elixir-autogen, elixir-format, fuzzy
msgid "Show Member"
msgstr "Mitglied anzeigen"
#: lib/mv_web/live/member_live/show.ex:34
#, elixir-autogen, elixir-format
msgid "This is a member record from your database."
msgstr "Dies ist ein Mitglied aus deiner Datenbank."
#: lib/mv_web/live/member_live/index.html.heex:234
#: 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:290
#, 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:137
#: lib/mv_web/live/member_live/form.ex:269
#, 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:138
#: lib/mv_web/live/member_live/form.ex:270
#, elixir-autogen, elixir-format
msgid "update"
msgstr "aktualisiert"
@ -226,7 +213,7 @@ msgstr "aktualisiert"
msgid "Incorrect email or password"
msgstr "Falsche E-Mail oder Passwort"
#: lib/mv_web/live/member_live/form.ex:144
#: lib/mv_web/live/member_live/form.ex:276
#, elixir-autogen, elixir-format
msgid "Member %{action} successfully"
msgstr "Mitglied %{action} erfolgreich"
@ -259,7 +246,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:81
#: lib/mv_web/live/member_live/form.ex:208
#: lib/mv_web/live/user_live/form.ex:252
#, elixir-autogen, elixir-format
msgid "Cancel"
@ -503,7 +490,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:106
#, elixir-autogen, elixir-format
msgid "Linked User"
msgstr "Verknüpfte*r Benutzer*in"
@ -514,13 +501,12 @@ 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:116
#, elixir-autogen, elixir-format
msgid "No user linked"
msgstr "Keine*r Benutzer*in verknüpft"
#: lib/mv_web/live/member_live/show.ex:37
#: lib/mv_web/live/member_live/show.ex:39
#: lib/mv_web/live/member_live/show.ex:30
#, elixir-autogen, elixir-format
msgid "Back to members list"
msgstr "Zurück zur Mitgliederliste"
@ -601,12 +587,6 @@ 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:58
#: lib/mv_web/live/member_live/show.ex:78
#, elixir-autogen, elixir-format
msgid "Custom Field Values"
msgstr "Benutzerdefinierte Feldwerte"
#: lib/mv_web/live/custom_field_value_live/form.ex:51
#, elixir-autogen, elixir-format
msgid "Custom field"
@ -643,6 +623,8 @@ msgid "Use this form to manage custom_field records in your database."
msgstr "Verwende dieses Formular, um Benutzerdefinierte Felder in deiner Datenbank zu verwalten."
#: lib/mv_web/components/layouts/navbar.ex:26
#: lib/mv_web/live/member_live/form.ex:135
#: lib/mv_web/live/member_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Custom Fields"
msgstr "Benutzerdefinierte Felder"
@ -813,11 +795,6 @@ msgstr "Im E-Mail-Programm öffnen"
msgid "Tip: Paste email addresses into the BCC field for privacy compliance"
msgstr "Tipp: E-Mail-Adressen ins BCC-Feld einfügen für Datenschutzkonformität"
#: lib/mv_web/live/member_live/form.ex:40
#, elixir-autogen, elixir-format
msgid "Fields marked with an asterisk (*) cannot be empty."
msgstr "Felder, die mit einem Sternchen (*) markiert sind, dürfen nicht leer bleiben."
#: lib/mv_web/components/core_components.ex:206
#: lib/mv_web/components/core_components.ex:223
#: lib/mv_web/components/core_components.ex:250
@ -848,411 +825,507 @@ msgstr "Nicht bezahlt"
msgid "Payment filter"
msgstr "Zahlungsfilter"
#: lib/mv_web/live/member_live/show.ex:70
#, elixir-autogen, elixir-format
msgid "Address"
msgstr "Adresse"
#: lib/mv_web/live/member_live/form.ex:37
#: lib/mv_web/live/member_live/show.ex:32
#, elixir-autogen, elixir-format
msgid "Back"
msgstr "Zurück"
#: lib/mv_web/live/member_live/form.ex:65
#: lib/mv_web/live/member_live/show.ex:50
#, elixir-autogen, elixir-format
msgid "Coming soon"
msgstr "Demnächst verfügbar"
#: lib/mv_web/live/member_live/form.ex:57
#: lib/mv_web/live/member_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Contact Data"
msgstr "Kontaktdaten"
#: lib/mv_web/live/member_live/form.ex:175
#: lib/mv_web/live/member_live/show.ex:160
#, elixir-autogen, elixir-format
msgid "Contribution"
msgstr "Beitrag"
#: lib/mv_web/live/member_live/form.ex:94
#, elixir-autogen, elixir-format
msgid "Nr."
msgstr "Nr."
#: lib/mv_web/live/member_live/form.ex:186
#: lib/mv_web/live/member_live/show.ex:161
#, elixir-autogen, elixir-format
msgid "Payment Cycle"
msgstr "Zahlungszyklus"
#: lib/mv_web/live/member_live/form.ex:166
#: lib/mv_web/live/member_live/show.ex:153
#, elixir-autogen, elixir-format
msgid "Payment Data"
msgstr "Beitragsdaten"
#: lib/mv_web/live/member_live/form.ex:68
#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "Payments"
msgstr "Zahlungen"
#: lib/mv_web/live/member_live/show.ex:166
#, elixir-autogen, elixir-format
msgid "Pending"
msgstr "Ausstehend"
#: lib/mv_web/live/member_live/form.ex:76
#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "Personal Data"
msgstr "Persönliche Daten"
#: lib/mv_web/live/member_live/form.ex:111
#: lib/mv_web/live/member_live/show.ex:87
#, elixir-autogen, elixir-format
msgid "Phone"
msgstr "Telefon"
#: lib/mv_web/live/member_live/form.ex:49
#, elixir-autogen, elixir-format
msgid "Save"
msgstr "Speichern"
#: lib/mv_web/live/member_live/form.ex:169
#: lib/mv_web/live/member_live/show.ex:156
#, elixir-autogen, elixir-format
msgid "This data is for demonstration purposes only (mockup)."
msgstr "Diese Daten dienen nur zu Demonstrationszwecken (Mockup)."
#: lib/mv_web/live/member_live/form.ex:190
#: lib/mv_web/live/member_live/show.ex:161
#, elixir-autogen, elixir-format
msgid "monthly"
msgstr "monatlich"
#: lib/mv_web/live/member_live/form.ex:194
#, elixir-autogen, elixir-format
msgid "yearly"
msgstr "jährlich"
#: lib/mv_web/live/member_live/form.ex:242
#, elixir-autogen, elixir-format
msgid "Create Member"
msgstr "Mitglied erstellen"
#: 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"
msgstr[0] ""
msgstr[1] ""
#: lib/mv_web/live/contribution_type_live/index.ex:113
#, elixir-autogen, elixir-format
msgid "About Contribution Types"
msgstr "Über Beitragsarten"
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 "Betrag"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Back to Settings"
msgstr "Zurück zu Einstellungen"
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 "Kann jederzeit geändert werden. Betragsänderungen wirken sich nur auf zukünftige Beiträge aus."
msgstr ""
#: 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"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:83
#, elixir-autogen, elixir-format
msgid "Change Contribution Type"
msgstr "Beitragsart ändern"
msgstr ""
#: 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."
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
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Settings"
msgstr "Beitragseinstellungen"
msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex:62
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Start"
msgstr "Beitragsbeginn"
msgstr "Beitrag"
#: 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
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Types"
msgstr "Beitragsarten"
msgstr "Beitrag"
#: lib/mv_web/live/contribution_settings_live.ex:224
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution start"
msgstr "Beitragsbeginn"
msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex:41
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution type"
msgstr "Beitragsart"
msgstr "Beitrag"
#: 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."
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:30
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contributions"
msgstr "Beiträge"
msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex:39
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contributions for %{name}"
msgstr "Beiträge für %{name}"
msgstr "Beitrag"
#: lib/mv_web/live/contribution_period_live/show.ex:159
#, elixir-autogen, elixir-format
msgid "Current"
msgstr "Aktuell"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:60
#, elixir-autogen, elixir-format
msgid "Default Contribution Type"
msgstr "Standard-Beitragsart"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:133
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Deletion"
msgstr "Löschung"
msgstr "Löschen"
#: lib/mv_web/live/contribution_settings_live.ex:173
#, elixir-autogen, elixir-format
msgid "Example: Member Contribution View"
msgstr "Beispiel: Mitglieder-Beitragsansicht"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:113
#, elixir-autogen, elixir-format
msgid "Examples"
msgstr "Beispiele"
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 "Familie"
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 "Nach der Erstellung unveränderlich. Mitglieder können nur zwischen Arten mit demselben Intervall wechseln."
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:228
#, elixir-autogen, elixir-format
msgid "Generated periods"
msgstr "Generierte Beiträge"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:52
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Global Settings"
msgstr "Globale Einstellungen"
msgstr "Vereinsdaten"
#: lib/mv_web/live/contribution_period_live/show.ex:343
#: 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"
msgstr ""
#: 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"
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 "Ehrenmitglied"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:85
#, elixir-autogen, elixir-format
msgid "Include joining period"
msgstr "Zahlt ab Zeitpunkt des Eintritts"
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 "Intervall"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:220
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Joining date"
msgstr "Eintrittsdatum"
msgstr "Beitrittsdatum"
#: lib/mv_web/live/contribution_period_live/show.ex:331
#, elixir-autogen, elixir-format
msgid "Joining year - reduced to 0"
msgstr "Eintrittsjahr - auf 0 reduziert"
msgstr ""
#: 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."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:116
#, elixir-autogen, elixir-format
msgid "Mark as Paid"
msgstr "Als bezahlt markieren"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:120
#, elixir-autogen, elixir-format
msgid "Mark as Suspended"
msgstr "Als ausgesetzt markieren"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:124
#, elixir-autogen, elixir-format
msgid "Mark as Unpaid"
msgstr "Als unbezahlt markieren"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:26
#, elixir-autogen, elixir-format
msgid "Member Contributions"
msgstr "Mitgliedsbeiträge"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:43
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Member since"
msgstr "Mitglied seit"
msgstr "Mitglieder"
#: 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."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:341
#: lib/mv_web/live/contribution_settings_live.ex:273
#: lib/mv_web/live/contribution_type_live/index.ex:201
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Monthly"
msgstr "Monatlich"
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"
msgstr ""
#: 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"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:123
#, elixir-autogen, elixir-format
msgid "Name & Amount"
msgstr "Name & Betrag"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:42
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "New Contribution Type"
msgstr "Neue Beitragsart"
msgstr "Beitrag"
#: 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"
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 "Nur möglich, wenn keine Mitglieder dieser Art zugewiesen sind."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:70
#, elixir-autogen, elixir-format
msgid "Open Contributions"
msgstr "Offene Beiträge"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:301
#, elixir-autogen, elixir-format
msgid "Paid via bank transfer"
msgstr "Per Überweisung bezahlt"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:225
#: 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"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:342
#: 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"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:139
#, elixir-autogen, elixir-format
msgid "Quarterly Interval - Joining Period Excluded"
msgstr "Quartalsintervall - Eintrittsperiode ausgeschlossen"
msgstr ""
#: 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"
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 "Ermäßigt"
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 "Ermäßigter Beitrag für Arbeitslose, Rentner*innen oder Geringverdienende"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:275
#: 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"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:204
#, elixir-autogen, elixir-format
msgid "Reopen"
msgstr "Wieder öffnen"
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 "Sehen Sie, wie die Beitragsperioden für ein einzelnes Mitglied angezeigt werden. Dieses Beispiel zeigt Maria Weber mit mehreren Beitragsperioden."
msgstr ""
#: 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"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:139
#, elixir-autogen, elixir-format
msgid "Status"
msgstr "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 "Student*in"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:180
#, elixir-autogen, elixir-format
msgid "Supporting Member"
msgstr "Fördermitglied"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:195
#, elixir-autogen, elixir-format
msgid "Suspend"
msgstr "Aussetzen"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:259
#, elixir-autogen, elixir-format
msgid "Suspended"
msgstr "Ausgesetzt"
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 "Diese Beitragsart wird automatisch allen neuen Mitgliedern zugewiesen. Kann pro Mitglied individuell geändert werden."
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: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."
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Time Period"
msgstr "Zeitraum"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:66
#, elixir-autogen, elixir-format
msgid "Total Contributions"
msgstr "Beiträge gesamt"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:250
#, elixir-autogen, elixir-format
msgid "Unpaid"
msgstr "Unbezahlt"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:183
#, elixir-autogen, elixir-format
msgid "View Example Member"
msgstr "Beispielmitglied ansehen"
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 "Wenn aktiv: Mitglieder zahlen ab der Periode ihres Eintritts."
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 "Wenn inaktiv: Mitglieder zahlen ab der nächsten vollen Periode nach dem Eintritt."
msgstr ""
#: 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?"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:85
#: lib/mv_web/live/contribution_period_live/show.ex:86
@ -1260,31 +1333,30 @@ msgstr "Warum werden nicht alle Beitragsarten angezeigt?"
#: lib/mv_web/live/contribution_period_live/show.ex:344
#: lib/mv_web/live/contribution_settings_live.ex:276
#: lib/mv_web/live/contribution_type_live/index.ex:204
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Yearly"
msgstr "Jährlich"
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"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:117
#, elixir-autogen, elixir-format
msgid "Yearly Interval - Joining Period Included"
msgstr "Jährliches Intervall - Eintrittsperiode eingeschlossen"
#~ #: lib/mv_web/live/member_live/form.ex:48
#~ #: lib/mv_web/live/member_live/show.ex:51
#~ #, elixir-autogen, elixir-format
#~ msgid "Birth Date"
#~ msgstr "Geburtsdatum"
msgstr ""
#~ #: lib/mv_web/live/user_live/show.ex:49
#~ #, elixir-autogen, elixir-format
#~ msgid "ID"
#~ msgstr "ID"
#~ #: lib/mv_web/live/member_live/show.ex:47
#~ #, elixir-autogen, elixir-format
#~ msgid "Id"
#~ msgstr "ID"
#~ #: lib/mv_web/live/user_live/show.ex:51
#~ #, elixir-autogen, elixir-format
#~ msgid "Not set"
@ -1295,3 +1367,8 @@ msgstr "Jährliches Intervall - Eintrittsperiode eingeschlossen"
#~ #, elixir-autogen, elixir-format
#~ msgid "OIDC ID"
#~ msgstr "OIDC ID"
#~ #: lib/mv_web/live/member_live/show.ex:33
#~ #, elixir-autogen, elixir-format
#~ msgid "This is a member record from your database."
#~ msgstr "Dies ist ein Mitglied aus deiner Datenbank."

View file

@ -29,9 +29,8 @@ msgstr ""
msgid "Attempting to reconnect"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:53
#: lib/mv_web/live/member_live/form.ex:100
#: lib/mv_web/live/member_live/index.html.heex:184
#: lib/mv_web/live/member_live/show.ex:59
#, elixir-autogen, elixir-format
msgid "City"
msgstr ""
@ -51,16 +50,17 @@ msgstr ""
msgid "Edit"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:42
#: lib/mv_web/live/member_live/show.ex:114
#: lib/mv_web/live/member_live/form.ex:242
#: lib/mv_web/live/member_live/show.ex:40
#: lib/mv_web/live/member_live/show.ex:197
#, 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/form.ex:106
#: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:51
#: lib/mv_web/live/member_live/show.ex:75
#: lib/mv_web/live/user_live/form.ex:46
#: lib/mv_web/live/user_live/index.html.heex:44
#: lib/mv_web/live/user_live/show.ex:49
@ -68,25 +68,26 @@ msgstr ""
msgid "Email"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:45
#: lib/mv_web/live/member_live/show.ex:49
#: lib/mv_web/live/member_live/form.ex:81
#: lib/mv_web/live/member_live/show.ex:64
#, elixir-autogen, elixir-format
msgid "First Name"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:50
#: lib/mv_web/live/member_live/form.ex:117
#: lib/mv_web/live/member_live/index.html.heex:220
#: lib/mv_web/live/member_live/show.ex:56
#: lib/mv_web/live/member_live/show.ex:93
#, elixir-autogen, elixir-format
msgid "Join Date"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:46
#: lib/mv_web/live/member_live/show.ex:50
#: lib/mv_web/live/member_live/form.ex:84
#: lib/mv_web/live/member_live/show.ex:65
#, elixir-autogen, elixir-format
msgid "Last Name"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:44
#: lib/mv_web/live/member_live/index.html.heex:29
#, elixir-autogen, elixir-format
msgid "New Member"
@ -113,22 +114,20 @@ msgstr ""
msgid "close"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:51
#: lib/mv_web/live/member_live/show.ex:57
#: lib/mv_web/live/member_live/form.ex:120
#: lib/mv_web/live/member_live/show.ex:98
#, elixir-autogen, elixir-format
msgid "Exit Date"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:55
#: lib/mv_web/live/member_live/index.html.heex:148
#: lib/mv_web/live/member_live/show.ex:61
#, elixir-autogen, elixir-format
msgid "House Number"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:58
#: lib/mv_web/live/member_live/form.ex:126
#: lib/mv_web/live/member_live/show.ex:124
#, elixir-autogen, elixir-format
msgid "Notes"
msgstr ""
@ -137,28 +136,26 @@ msgstr ""
#: 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:241
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/form.ex:199
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:52
#: lib/mv_web/live/member_live/show.ex:162
#: lib/mv_web/live/member_live/show.ex:164
#, elixir-autogen, elixir-format
msgid "Paid"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:49
#: lib/mv_web/live/member_live/index.html.heex:202
#: lib/mv_web/live/member_live/show.ex:55
#, elixir-autogen, elixir-format
msgid "Phone Number"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:56
#: lib/mv_web/live/member_live/form.ex:97
#: lib/mv_web/live/member_live/index.html.heex:166
#: lib/mv_web/live/member_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Postal Code"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:79
#: lib/mv_web/live/member_live/form.ex:211
#, elixir-autogen, elixir-format
msgid "Save Member"
msgstr ""
@ -166,58 +163,48 @@ 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:78
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/form.ex:210
#: lib/mv_web/live/user_live/form.ex:249
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr ""
#: lib/mv_web/live/member_live/form.ex:54
#: lib/mv_web/live/member_live/form.ex:91
#: lib/mv_web/live/member_live/index.html.heex:130
#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "Street"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Id"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:234
#: lib/mv_web/live/member_live/index/formatter.ex:62
#: lib/mv_web/live/member_live/show.ex:53
#: lib/mv_web/live/member_live/show.ex:290
#, elixir-autogen, elixir-format
msgid "No"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:113
#: lib/mv_web/live/member_live/show.ex:196
#, elixir-autogen, elixir-format
msgid "Show Member"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:34
#, elixir-autogen, elixir-format
msgid "This is a member record from your database."
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:234
#: 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:290
#, 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:137
#: lib/mv_web/live/member_live/form.ex:269
#, 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:138
#: lib/mv_web/live/member_live/form.ex:270
#, elixir-autogen, elixir-format
msgid "update"
msgstr ""
@ -227,7 +214,7 @@ msgstr ""
msgid "Incorrect email or password"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:144
#: lib/mv_web/live/member_live/form.ex:276
#, elixir-autogen, elixir-format
msgid "Member %{action} successfully"
msgstr ""
@ -260,7 +247,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:81
#: lib/mv_web/live/member_live/form.ex:208
#: lib/mv_web/live/user_live/form.ex:252
#, elixir-autogen, elixir-format
msgid "Cancel"
@ -504,7 +491,7 @@ msgstr ""
msgid "Linked Member"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:63
#: lib/mv_web/live/member_live/show.ex:106
#, elixir-autogen, elixir-format
msgid "Linked User"
msgstr ""
@ -515,13 +502,12 @@ msgstr ""
msgid "No member linked"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:73
#: lib/mv_web/live/member_live/show.ex:116
#, elixir-autogen, elixir-format
msgid "No user linked"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:37
#: lib/mv_web/live/member_live/show.ex:39
#: lib/mv_web/live/member_live/show.ex:30
#, elixir-autogen, elixir-format
msgid "Back to members list"
msgstr ""
@ -602,12 +588,6 @@ msgstr ""
msgid "Choose a custom field"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:58
#: lib/mv_web/live/member_live/show.ex:78
#, elixir-autogen, elixir-format
msgid "Custom Field Values"
msgstr ""
#: lib/mv_web/live/custom_field_value_live/form.ex:51
#, elixir-autogen, elixir-format
msgid "Custom field"
@ -644,6 +624,8 @@ msgid "Use this form to manage custom_field records in your database."
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:26
#: lib/mv_web/live/member_live/form.ex:135
#: lib/mv_web/live/member_live/show.ex:136
#, elixir-autogen, elixir-format
msgid "Custom Fields"
msgstr ""
@ -814,11 +796,6 @@ msgstr ""
msgid "Tip: Paste email addresses into the BCC field for privacy compliance"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:40
#, elixir-autogen, elixir-format
msgid "Fields marked with an asterisk (*) cannot be empty."
msgstr ""
#: lib/mv_web/components/core_components.ex:206
#: lib/mv_web/components/core_components.ex:223
#: lib/mv_web/components/core_components.ex:250
@ -849,6 +826,102 @@ msgstr ""
msgid "Payment filter"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:70
#, elixir-autogen, elixir-format
msgid "Address"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:37
#: lib/mv_web/live/member_live/show.ex:32
#, elixir-autogen, elixir-format
msgid "Back"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:65
#: lib/mv_web/live/member_live/show.ex:50
#, elixir-autogen, elixir-format
msgid "Coming soon"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:57
#: lib/mv_web/live/member_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Contact Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:175
#: lib/mv_web/live/member_live/show.ex:160
#, elixir-autogen, elixir-format
msgid "Contribution"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:94
#, elixir-autogen, elixir-format
msgid "Nr."
msgstr ""
#: lib/mv_web/live/member_live/form.ex:186
#: lib/mv_web/live/member_live/show.ex:161
#, elixir-autogen, elixir-format
msgid "Payment Cycle"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:166
#: lib/mv_web/live/member_live/show.ex:153
#, elixir-autogen, elixir-format
msgid "Payment Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:68
#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "Payments"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:166
#, elixir-autogen, elixir-format
msgid "Pending"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:76
#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "Personal Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:111
#: lib/mv_web/live/member_live/show.ex:87
#, elixir-autogen, elixir-format
msgid "Phone"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:49
#, elixir-autogen, elixir-format
msgid "Save"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:169
#: lib/mv_web/live/member_live/show.ex:156
#, elixir-autogen, elixir-format
msgid "This data is for demonstration purposes only (mockup)."
msgstr ""
#: lib/mv_web/live/member_live/form.ex:190
#: lib/mv_web/live/member_live/show.ex:161
#, elixir-autogen, elixir-format
msgid "monthly"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:194
#, elixir-autogen, elixir-format
msgid "yearly"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:242
#, elixir-autogen, elixir-format
msgid "Create Member"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:107
#, elixir-autogen, elixir-format
msgid "%{count} period selected"

View file

@ -29,9 +29,8 @@ msgstr ""
msgid "Attempting to reconnect"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:53
#: lib/mv_web/live/member_live/form.ex:100
#: lib/mv_web/live/member_live/index.html.heex:184
#: lib/mv_web/live/member_live/show.ex:59
#, elixir-autogen, elixir-format
msgid "City"
msgstr ""
@ -51,16 +50,17 @@ msgstr ""
msgid "Edit"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:42
#: lib/mv_web/live/member_live/show.ex:114
#: lib/mv_web/live/member_live/form.ex:242
#: lib/mv_web/live/member_live/show.ex:40
#: lib/mv_web/live/member_live/show.ex:197
#, 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/form.ex:106
#: lib/mv_web/live/member_live/index.html.heex:112
#: lib/mv_web/live/member_live/show.ex:51
#: lib/mv_web/live/member_live/show.ex:75
#: lib/mv_web/live/user_live/form.ex:46
#: lib/mv_web/live/user_live/index.html.heex:44
#: lib/mv_web/live/user_live/show.ex:49
@ -68,25 +68,26 @@ msgstr ""
msgid "Email"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:45
#: lib/mv_web/live/member_live/show.ex:49
#: lib/mv_web/live/member_live/form.ex:81
#: lib/mv_web/live/member_live/show.ex:64
#, elixir-autogen, elixir-format
msgid "First Name"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:50
#: lib/mv_web/live/member_live/form.ex:117
#: lib/mv_web/live/member_live/index.html.heex:220
#: lib/mv_web/live/member_live/show.ex:56
#: lib/mv_web/live/member_live/show.ex:93
#, elixir-autogen, elixir-format
msgid "Join Date"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:46
#: lib/mv_web/live/member_live/show.ex:50
#: lib/mv_web/live/member_live/form.ex:84
#: lib/mv_web/live/member_live/show.ex:65
#, elixir-autogen, elixir-format
msgid "Last Name"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:44
#: lib/mv_web/live/member_live/index.html.heex:29
#, elixir-autogen, elixir-format
msgid "New Member"
@ -113,22 +114,20 @@ msgstr ""
msgid "close"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:51
#: lib/mv_web/live/member_live/show.ex:57
#: lib/mv_web/live/member_live/form.ex:120
#: lib/mv_web/live/member_live/show.ex:98
#, elixir-autogen, elixir-format
msgid "Exit Date"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:55
#: lib/mv_web/live/member_live/index.html.heex:148
#: lib/mv_web/live/member_live/show.ex:61
#, elixir-autogen, elixir-format
msgid "House Number"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:140
#: lib/mv_web/live/member_live/form.ex:52
#: lib/mv_web/live/member_live/show.ex:58
#: lib/mv_web/live/member_live/form.ex:126
#: lib/mv_web/live/member_live/show.ex:124
#, elixir-autogen, elixir-format
msgid "Notes"
msgstr ""
@ -137,28 +136,26 @@ msgstr ""
#: 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:241
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/form.ex:199
#: lib/mv_web/live/member_live/index.html.heex:229
#: lib/mv_web/live/member_live/show.ex:52
#: lib/mv_web/live/member_live/show.ex:162
#: lib/mv_web/live/member_live/show.ex:164
#, elixir-autogen, elixir-format
msgid "Paid"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:49
#: lib/mv_web/live/member_live/index.html.heex:202
#: lib/mv_web/live/member_live/show.ex:55
#, elixir-autogen, elixir-format
msgid "Phone Number"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:56
#: lib/mv_web/live/member_live/form.ex:97
#: lib/mv_web/live/member_live/index.html.heex:166
#: lib/mv_web/live/member_live/show.ex:62
#, elixir-autogen, elixir-format
msgid "Postal Code"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:79
#: lib/mv_web/live/member_live/form.ex:211
#, elixir-autogen, elixir-format, fuzzy
msgid "Save Member"
msgstr ""
@ -166,58 +163,48 @@ 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:78
#: lib/mv_web/live/member_live/form.ex:48
#: lib/mv_web/live/member_live/form.ex:210
#: lib/mv_web/live/user_live/form.ex:249
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr ""
#: lib/mv_web/live/member_live/form.ex:54
#: lib/mv_web/live/member_live/form.ex:91
#: lib/mv_web/live/member_live/index.html.heex:130
#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "Street"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Id"
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:234
#: lib/mv_web/live/member_live/index/formatter.ex:62
#: lib/mv_web/live/member_live/show.ex:53
#: lib/mv_web/live/member_live/show.ex:290
#, elixir-autogen, elixir-format
msgid "No"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:113
#: lib/mv_web/live/member_live/show.ex:196
#, elixir-autogen, elixir-format, fuzzy
msgid "Show Member"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:34
#, elixir-autogen, elixir-format
msgid "This is a member record from your database."
msgstr ""
#: lib/mv_web/live/member_live/index.html.heex:234
#: 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:290
#, 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:137
#: lib/mv_web/live/member_live/form.ex:269
#, 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:138
#: lib/mv_web/live/member_live/form.ex:270
#, elixir-autogen, elixir-format
msgid "update"
msgstr ""
@ -227,7 +214,7 @@ msgstr ""
msgid "Incorrect email or password"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:144
#: lib/mv_web/live/member_live/form.ex:276
#, elixir-autogen, elixir-format
msgid "Member %{action} successfully"
msgstr ""
@ -260,7 +247,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:81
#: lib/mv_web/live/member_live/form.ex:208
#: lib/mv_web/live/user_live/form.ex:252
#, elixir-autogen, elixir-format
msgid "Cancel"
@ -504,7 +491,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:106
#, elixir-autogen, elixir-format
msgid "Linked User"
msgstr ""
@ -515,13 +502,12 @@ msgstr ""
msgid "No member linked"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:73
#: lib/mv_web/live/member_live/show.ex:116
#, elixir-autogen, elixir-format
msgid "No user linked"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:37
#: lib/mv_web/live/member_live/show.ex:39
#: lib/mv_web/live/member_live/show.ex:30
#, elixir-autogen, elixir-format
msgid "Back to members list"
msgstr ""
@ -602,12 +588,6 @@ msgstr ""
msgid "Choose a custom field"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:58
#: lib/mv_web/live/member_live/show.ex:78
#, elixir-autogen, elixir-format
msgid "Custom Field Values"
msgstr ""
#: lib/mv_web/live/custom_field_value_live/form.ex:51
#, elixir-autogen, elixir-format
msgid "Custom field"
@ -644,6 +624,8 @@ msgid "Use this form to manage custom_field records in your database."
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:26
#: lib/mv_web/live/member_live/form.ex:135
#: lib/mv_web/live/member_live/show.ex:136
#, elixir-autogen, elixir-format, fuzzy
msgid "Custom Fields"
msgstr ""
@ -814,11 +796,6 @@ msgstr ""
msgid "Tip: Paste email addresses into the BCC field for privacy compliance"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:40
#, elixir-autogen, elixir-format
msgid "Fields marked with an asterisk (*) cannot be empty."
msgstr ""
#: lib/mv_web/components/core_components.ex:206
#: lib/mv_web/components/core_components.ex:223
#: lib/mv_web/components/core_components.ex:250
@ -849,6 +826,102 @@ msgstr ""
msgid "Payment filter"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:70
#, elixir-autogen, elixir-format
msgid "Address"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:37
#: lib/mv_web/live/member_live/show.ex:32
#, elixir-autogen, elixir-format
msgid "Back"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:65
#: lib/mv_web/live/member_live/show.ex:50
#, elixir-autogen, elixir-format
msgid "Coming soon"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:57
#: lib/mv_web/live/member_live/show.ex:48
#, elixir-autogen, elixir-format
msgid "Contact Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:175
#: lib/mv_web/live/member_live/show.ex:160
#, elixir-autogen, elixir-format
msgid "Contribution"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:94
#, elixir-autogen, elixir-format
msgid "Nr."
msgstr ""
#: lib/mv_web/live/member_live/form.ex:186
#: lib/mv_web/live/member_live/show.ex:161
#, elixir-autogen, elixir-format, fuzzy
msgid "Payment Cycle"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:166
#: lib/mv_web/live/member_live/show.ex:153
#, elixir-autogen, elixir-format
msgid "Payment Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:68
#: lib/mv_web/live/member_live/show.ex:52
#, elixir-autogen, elixir-format
msgid "Payments"
msgstr ""
#: lib/mv_web/live/member_live/show.ex:166
#, elixir-autogen, elixir-format, fuzzy
msgid "Pending"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:76
#: lib/mv_web/live/member_live/show.ex:60
#, elixir-autogen, elixir-format
msgid "Personal Data"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:111
#: lib/mv_web/live/member_live/show.ex:87
#, elixir-autogen, elixir-format, fuzzy
msgid "Phone"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:49
#, elixir-autogen, elixir-format, fuzzy
msgid "Save"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:169
#: lib/mv_web/live/member_live/show.ex:156
#, elixir-autogen, elixir-format
msgid "This data is for demonstration purposes only (mockup)."
msgstr ""
#: lib/mv_web/live/member_live/form.ex:190
#: lib/mv_web/live/member_live/show.ex:161
#, elixir-autogen, elixir-format
msgid "monthly"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:194
#, elixir-autogen, elixir-format
msgid "yearly"
msgstr ""
#: lib/mv_web/live/member_live/form.ex:242
#, elixir-autogen, elixir-format
msgid "Create Member"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:107
#, elixir-autogen, elixir-format
msgid "%{count} period selected"
@ -895,29 +968,29 @@ 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
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Settings"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:62
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
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
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution Types"
msgstr ""
#: lib/mv_web/live/contribution_settings_live.ex:224
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution start"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:41
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contribution type"
msgstr ""
@ -927,12 +1000,12 @@ msgid "Contribution types define different membership fee structures. Each type
msgstr ""
#: lib/mv_web/components/layouts/navbar.ex:30
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contributions"
msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:39
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Contributions for %{name}"
msgstr ""
@ -1080,7 +1153,7 @@ msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:341
#: lib/mv_web/live/contribution_settings_live.ex:273
#: lib/mv_web/live/contribution_type_live/index.ex:201
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Monthly"
msgstr ""
@ -1100,7 +1173,7 @@ msgid "Name & Amount"
msgstr ""
#: lib/mv_web/live/contribution_type_live/index.ex:42
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "New Contribution Type"
msgstr ""
@ -1261,7 +1334,7 @@ msgstr ""
#: lib/mv_web/live/contribution_period_live/show.ex:344
#: lib/mv_web/live/contribution_settings_live.ex:276
#: lib/mv_web/live/contribution_type_live/index.ex:204
#, elixir-autogen, elixir-format
#, elixir-autogen, elixir-format, fuzzy
msgid "Yearly"
msgstr ""
@ -1275,17 +1348,16 @@ msgstr ""
msgid "Yearly Interval - Joining Period Included"
msgstr ""
#~ #: lib/mv_web/live/member_live/form.ex:48
#~ #: lib/mv_web/live/member_live/show.ex:51
#~ #, elixir-autogen, elixir-format
#~ msgid "Birth Date"
#~ msgstr ""
#~ #: lib/mv_web/live/user_live/show.ex:49
#~ #, elixir-autogen, elixir-format
#~ msgid "ID"
#~ msgstr ""
#~ #: lib/mv_web/live/member_live/show.ex:47
#~ #, elixir-autogen, elixir-format
#~ msgid "Id"
#~ msgstr ""
#~ #: lib/mv_web/live/user_live/show.ex:51
#~ #, elixir-autogen, elixir-format, fuzzy
#~ msgid "Not set"
@ -1297,8 +1369,7 @@ msgstr ""
#~ msgid "OIDC ID"
#~ msgstr ""
#~ #: lib/mv_web/live/contribution_period_live/show.ex:273
#~ #: lib/mv_web/live/contribution_settings_live.ex:248
#~ #: lib/mv_web/live/member_live/show.ex:33
#~ #, elixir-autogen, elixir-format
#~ msgid "Related Pages"
#~ msgid "This is a member record from your database."
#~ msgstr ""