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:
commit
5c1a766e87
5 changed files with 1005 additions and 434 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 ""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue