Membership Fee 6 - UI Components & LiveViews closes #280 #304
4 changed files with 106 additions and 86 deletions
|
|
@ -1459,7 +1459,6 @@ msgstr "Die Änderung des Betrags betrifft %{count} Mitglied(er)."
|
||||||
msgid "Confirm Change"
|
msgid "Confirm Change"
|
||||||
msgstr "Änderung bestätigen"
|
msgstr "Änderung bestätigen"
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#: lib/mv_web/live/member_live/show.ex
|
#: lib/mv_web/live/member_live/show.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Current Cycle"
|
msgid "Current Cycle"
|
||||||
|
|
@ -1535,7 +1534,6 @@ msgstr "Das Intervall kann nach der Erstellung nicht geändert werden."
|
||||||
msgid "Invalid amount format"
|
msgid "Invalid amount format"
|
||||||
msgstr "Ungültiges Betragsformat"
|
msgstr "Ungültiges Betragsformat"
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#: lib/mv_web/live/member_live/show.ex
|
#: lib/mv_web/live/member_live/show.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Last Cycle"
|
msgid "Last Cycle"
|
||||||
|
|
@ -1682,16 +1680,6 @@ msgstr "Wählen Sie eine Mitgliedsbeitragsart für dieses Mitglied. Mitglieder k
|
||||||
msgid "Select interval"
|
msgid "Select interval"
|
||||||
msgstr "Intervall auswählen"
|
msgstr "Intervall auswählen"
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Show current cycle"
|
|
||||||
msgstr "Aktuellen Zyklus anzeigen"
|
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Show last completed cycle"
|
|
||||||
msgstr "Letzten abgeschlossenen Zyklus anzeigen"
|
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
#: lib/mv_web/live/member_live/index.html.heex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Switch to current cycle"
|
msgid "Switch to current cycle"
|
||||||
|
|
@ -1818,6 +1806,11 @@ msgstr ""
|
||||||
msgid "You are about to delete all %{count} cycles for this member."
|
msgid "You are about to delete all %{count} cycles for this member."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show Last/Current Cycle Payment Status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ #: lib/mv_web/live/components/payment_filter_component.ex
|
#~ #: lib/mv_web/live/components/payment_filter_component.ex
|
||||||
#~ #, elixir-autogen, elixir-format
|
#~ #, elixir-autogen, elixir-format
|
||||||
#~ msgid "All payment statuses"
|
#~ msgid "All payment statuses"
|
||||||
|
|
@ -1901,6 +1894,16 @@ msgstr ""
|
||||||
#~ msgid "Quarterly Interval - Joining Period Excluded"
|
#~ msgid "Quarterly Interval - Joining Period Excluded"
|
||||||
#~ msgstr "Vierteljährliches Intervall – Beitrittszeitraum nicht einbezogen"
|
#~ msgstr "Vierteljährliches Intervall – Beitrittszeitraum nicht einbezogen"
|
||||||
|
|
||||||
|
#~ #: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
#~ #, elixir-autogen, elixir-format
|
||||||
|
#~ msgid "Show current cycle"
|
||||||
|
#~ msgstr "Aktuellen Zyklus anzeigen"
|
||||||
|
|
||||||
|
#~ #: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
#~ #, elixir-autogen, elixir-format
|
||||||
|
#~ msgid "Show last completed cycle"
|
||||||
|
#~ msgstr "Letzten abgeschlossenen Zyklus anzeigen"
|
||||||
|
|
||||||
#~ #: lib/mv_web/live/member_live/form.ex
|
#~ #: lib/mv_web/live/member_live/form.ex
|
||||||
#~ #: lib/mv_web/live/member_live/show.ex
|
#~ #: lib/mv_web/live/member_live/show.ex
|
||||||
#~ #, elixir-autogen, elixir-format
|
#~ #, elixir-autogen, elixir-format
|
||||||
|
|
|
||||||
|
|
@ -1460,7 +1460,6 @@ msgstr ""
|
||||||
msgid "Confirm Change"
|
msgid "Confirm Change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#: lib/mv_web/live/member_live/show.ex
|
#: lib/mv_web/live/member_live/show.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Current Cycle"
|
msgid "Current Cycle"
|
||||||
|
|
@ -1536,7 +1535,6 @@ msgstr ""
|
||||||
msgid "Invalid amount format"
|
msgid "Invalid amount format"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#: lib/mv_web/live/member_live/show.ex
|
#: lib/mv_web/live/member_live/show.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Last Cycle"
|
msgid "Last Cycle"
|
||||||
|
|
@ -1683,16 +1681,6 @@ msgstr ""
|
||||||
msgid "Select interval"
|
msgid "Select interval"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Show current cycle"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Show last completed cycle"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
#: lib/mv_web/live/member_live/index.html.heex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Switch to current cycle"
|
msgid "Switch to current cycle"
|
||||||
|
|
@ -1818,3 +1806,8 @@ msgstr ""
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "You are about to delete all %{count} cycles for this member."
|
msgid "You are about to delete all %{count} cycles for this member."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show Last/Current Cycle Payment Status"
|
||||||
|
msgstr ""
|
||||||
|
|
|
||||||
|
|
@ -1460,7 +1460,6 @@ msgstr ""
|
||||||
msgid "Confirm Change"
|
msgid "Confirm Change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#: lib/mv_web/live/member_live/show.ex
|
#: lib/mv_web/live/member_live/show.ex
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Current Cycle"
|
msgid "Current Cycle"
|
||||||
|
|
@ -1536,7 +1535,6 @@ msgstr ""
|
||||||
msgid "Invalid amount format"
|
msgid "Invalid amount format"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#: lib/mv_web/live/member_live/show.ex
|
#: lib/mv_web/live/member_live/show.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Last Cycle"
|
msgid "Last Cycle"
|
||||||
|
|
@ -1683,16 +1681,6 @@ msgstr ""
|
||||||
msgid "Select interval"
|
msgid "Select interval"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Show current cycle"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Show last completed cycle"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
#: lib/mv_web/live/member_live/index.html.heex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Switch to current cycle"
|
msgid "Switch to current cycle"
|
||||||
|
|
@ -1819,6 +1807,11 @@ msgstr ""
|
||||||
msgid "You are about to delete all %{count} cycles for this member."
|
msgid "You are about to delete all %{count} cycles for this member."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Show Last/Current Cycle Payment Status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ #: lib/mv_web/live/components/payment_filter_component.ex
|
#~ #: lib/mv_web/live/components/payment_filter_component.ex
|
||||||
#~ #, elixir-autogen, elixir-format
|
#~ #, elixir-autogen, elixir-format
|
||||||
#~ msgid "All payment statuses"
|
#~ msgid "All payment statuses"
|
||||||
|
|
@ -1923,6 +1916,16 @@ msgstr ""
|
||||||
#~ msgid "Quarterly Interval - Joining Period Excluded"
|
#~ msgid "Quarterly Interval - Joining Period Excluded"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ #: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
#~ #, elixir-autogen, elixir-format
|
||||||
|
#~ msgid "Show current cycle"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ #: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
#~ #, elixir-autogen, elixir-format
|
||||||
|
#~ msgid "Show last completed cycle"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
#~ #: lib/mv_web/live/member_live/form.ex
|
#~ #: lib/mv_web/live/member_live/form.ex
|
||||||
#~ #: lib/mv_web/live/member_live/show.ex
|
#~ #: lib/mv_web/live/member_live/show.ex
|
||||||
#~ #, elixir-autogen, elixir-format
|
#~ #, elixir-autogen, elixir-format
|
||||||
|
|
|
||||||
|
|
@ -127,8 +127,12 @@ Accounts.create_user!(%{email: "admin@mv.local"}, upsert?: true, upsert_identity
|
||||||
|> Ash.Changeset.for_update(:admin_set_password, %{password: "testpassword"})
|
|> Ash.Changeset.for_update(:admin_set_password, %{password: "testpassword"})
|
||||||
|> Ash.update!()
|
|> Ash.update!()
|
||||||
|
|
||||||
|
# Load all membership fee types for assignment
|
||||||
|
all_fee_types = MembershipFeeType |> Ash.read!() |> Enum.to_list()
|
||||||
|
|
||||||
# Create sample members for testing - use upsert to prevent duplicates
|
# Create sample members for testing - use upsert to prevent duplicates
|
||||||
for member_attrs <- [
|
# Assign each member to a fee type using round-robin distribution
|
||||||
|
member_attrs_list = [
|
||||||
%{
|
%{
|
||||||
first_name: "Hans",
|
first_name: "Hans",
|
||||||
last_name: "Müller",
|
last_name: "Müller",
|
||||||
|
|
@ -172,10 +176,18 @@ for member_attrs <- [
|
||||||
street: "Kastanienallee",
|
street: "Kastanienallee",
|
||||||
house_number: "8"
|
house_number: "8"
|
||||||
}
|
}
|
||||||
] do
|
]
|
||||||
|
|
||||||
|
# Assign fee types to members using round-robin
|
||||||
|
Enum.with_index(member_attrs_list)
|
||||||
|
|> Enum.each(fn {member_attrs, index} ->
|
||||||
|
# Round-robin assignment: cycle through fee types
|
||||||
|
fee_type = Enum.at(all_fee_types, rem(index, length(all_fee_types)))
|
||||||
|
member_attrs_with_fee_type = Map.put(member_attrs, :membership_fee_type_id, fee_type.id)
|
||||||
|
|
||||||
# Use upsert to prevent duplicates based on email
|
# Use upsert to prevent duplicates based on email
|
||||||
Membership.create_member!(member_attrs, upsert?: true, upsert_identity: :unique_email)
|
Membership.create_member!(member_attrs_with_fee_type, upsert?: true, upsert_identity: :unique_email)
|
||||||
end
|
end)
|
||||||
|
|
||||||
# Create additional users for user-member linking examples
|
# Create additional users for user-member linking examples
|
||||||
additional_users = [
|
additional_users = [
|
||||||
|
|
@ -226,21 +238,30 @@ linked_members = [
|
||||||
]
|
]
|
||||||
|
|
||||||
# Create the linked members - use upsert to prevent duplicates
|
# Create the linked members - use upsert to prevent duplicates
|
||||||
Enum.each(linked_members, fn member_attrs ->
|
# Assign fee types to linked members using round-robin
|
||||||
|
# Continue from where we left off with the previous members
|
||||||
|
Enum.with_index(linked_members)
|
||||||
|
|> Enum.each(fn {member_attrs, index} ->
|
||||||
user = member_attrs.user
|
user = member_attrs.user
|
||||||
member_attrs_without_user = Map.delete(member_attrs, :user)
|
member_attrs_without_user = Map.delete(member_attrs, :user)
|
||||||
|
|
||||||
|
# Round-robin assignment: continue cycling through fee types
|
||||||
|
# Start from where previous members ended
|
||||||
|
fee_type_index = rem(length(member_attrs_list) + index, length(all_fee_types))
|
||||||
|
fee_type = Enum.at(all_fee_types, fee_type_index)
|
||||||
|
member_attrs_with_fee_type = Map.put(member_attrs_without_user, :membership_fee_type_id, fee_type.id)
|
||||||
|
|
||||||
# Check if user already has a member
|
# Check if user already has a member
|
||||||
if user.member_id == nil do
|
if user.member_id == nil do
|
||||||
# User is free, create member and link - use upsert to prevent duplicates
|
# User is free, create member and link - use upsert to prevent duplicates
|
||||||
Membership.create_member!(
|
Membership.create_member!(
|
||||||
Map.put(member_attrs_without_user, :user, %{id: user.id}),
|
Map.put(member_attrs_with_fee_type, :user, %{id: user.id}),
|
||||||
upsert?: true,
|
upsert?: true,
|
||||||
upsert_identity: :unique_email
|
upsert_identity: :unique_email
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
# User already has a member, just create the member without linking - use upsert to prevent duplicates
|
# User already has a member, just create the member without linking - use upsert to prevent duplicates
|
||||||
Membership.create_member!(member_attrs_without_user,
|
Membership.create_member!(member_attrs_with_fee_type,
|
||||||
upsert?: true,
|
upsert?: true,
|
||||||
upsert_identity: :unique_email
|
upsert_identity: :unique_email
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue