Visual hierarchy for fields in member view and edit form - closes #231 #247
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")
|
||||
|
moritz marked this conversation as resolved
Outdated
rafael
commented
This won't work in german, I think This won't work in german, I think
|
||||
|
||||
{: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"
|
||||
|
moritz marked this conversation as resolved
Outdated
rafael
commented
These functions should use gettext These functions should use gettext
moritz
commented
the return values are HTML input types. So a translation doesn't make any sense here. the return values are HTML input types. So a translation doesn't make any sense here.
|
||||
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: ""
|
||||
|
moritz marked this conversation as resolved
Outdated
rafael
commented
For nil, this should be an empty string (this is how we do it in other parts of the UI) For nil, this should be an empty string (this is how we do it in other parts of the UI)
|
||||
defp display_value(""), do: ""
|
||||
defp display_value(value), do: value
|
||||
|
||||
defp format_address(member) do
|
||||
|
moritz marked this conversation as resolved
Outdated
rafael
commented
can we move this somewhere else so we can reuse it in the member overview? can we move this somewhere else so we can reuse it in the member overview?
|
||||
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
I think these tabs are confusing at the moment.