finalize groups #437
1 changed files with 65 additions and 2 deletions
|
|
@ -3,10 +3,10 @@
|
||||||
# mix run priv/repo/seeds.exs
|
# mix run priv/repo/seeds.exs
|
||||||
#
|
#
|
||||||
|
|
||||||
alias Mv.Membership
|
|
||||||
alias Mv.Accounts
|
alias Mv.Accounts
|
||||||
alias Mv.MembershipFees.MembershipFeeType
|
alias Mv.Membership
|
||||||
alias Mv.MembershipFees.CycleGenerator
|
alias Mv.MembershipFees.CycleGenerator
|
||||||
|
alias Mv.MembershipFees.MembershipFeeType
|
||||||
|
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
|
|
||||||
|
|
@ -579,6 +579,39 @@ Enum.with_index(linked_members)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
# Create example groups (idempotent: create only if name does not exist)
|
||||||
|
group_configs = [
|
||||||
|
%{name: "Vorstand", description: "Gremium Vorstand"},
|
||||||
|
%{name: "Trainer*innen", description: "Alle lizenzierten Trainer*innen"},
|
||||||
|
%{name: "Jugend", description: "Jugendbereich"},
|
||||||
|
%{name: "Newsletter", description: "Empfänger*innen Newsletter"}
|
||||||
|
]
|
||||||
|
|
||||||
|
existing_groups =
|
||||||
|
case Membership.list_groups(actor: admin_user_with_role) do
|
||||||
|
{:ok, list} -> list
|
||||||
|
{:error, _} -> []
|
||||||
|
end
|
||||||
|
|
||||||
|
existing_names_lower = MapSet.new(existing_groups, &String.downcase(&1.name))
|
||||||
|
|
||||||
|
seed_groups =
|
||||||
|
Enum.reduce(group_configs, %{}, fn config, acc ->
|
||||||
|
name = config.name
|
||||||
|
|
||||||
|
if MapSet.member?(existing_names_lower, String.downcase(name)) do
|
||||||
|
group = Enum.find(existing_groups, &(String.downcase(&1.name) == String.downcase(name)))
|
||||||
|
Map.put(acc, name, group)
|
||||||
|
else
|
||||||
|
group =
|
||||||
|
Membership.create_group!(%{name: name, description: config.description},
|
||||||
|
actor: admin_user_with_role
|
||||||
|
)
|
||||||
|
|
||||||
|
Map.put(acc, name, group)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
# Create sample custom field values for some members
|
# Create sample custom field values for some members
|
||||||
all_members = Ash.read!(Membership.Member, actor: admin_user_with_role)
|
all_members = Ash.read!(Membership.Member, actor: admin_user_with_role)
|
||||||
all_custom_fields = Ash.read!(Membership.CustomField, actor: admin_user_with_role)
|
all_custom_fields = Ash.read!(Membership.CustomField, actor: admin_user_with_role)
|
||||||
|
|
@ -587,6 +620,35 @@ all_custom_fields = Ash.read!(Membership.CustomField, actor: admin_user_with_rol
|
||||||
find_field = fn name -> Enum.find(all_custom_fields, &(&1.name == name)) end
|
find_field = fn name -> Enum.find(all_custom_fields, &(&1.name == name)) end
|
||||||
find_member = fn email -> Enum.find(all_members, &(&1.email == email)) end
|
find_member = fn email -> Enum.find(all_members, &(&1.email == email)) end
|
||||||
|
|
||||||
|
# Assign seed members to groups (idempotent: duplicate create_member_group is skipped)
|
||||||
|
member_group_assignments = [
|
||||||
|
{"hans.mueller@example.de", ["Vorstand", "Newsletter"]},
|
||||||
|
{"greta.schmidt@example.de", ["Jugend", "Newsletter"]},
|
||||||
|
{"friedrich.wagner@example.de", ["Trainer*innen"]},
|
||||||
|
{"maria.weber@example.de", ["Newsletter"]},
|
||||||
|
{"thomas.klein@example.de", ["Newsletter"]}
|
||||||
|
]
|
||||||
|
|
||||||
|
Enum.each(member_group_assignments, fn {email, group_names} ->
|
||||||
|
member = find_member.(email)
|
||||||
|
|
||||||
|
if member do
|
||||||
|
Enum.each(group_names, fn group_name ->
|
||||||
|
group = seed_groups[group_name]
|
||||||
|
|
||||||
|
if group do
|
||||||
|
case Membership.create_member_group(
|
||||||
|
%{member_id: member.id, group_id: group.id},
|
||||||
|
actor: admin_user_with_role
|
||||||
|
) do
|
||||||
|
{:ok, _} -> :ok
|
||||||
|
{:error, _} -> :ok
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
# Add custom field values for Hans Müller
|
# Add custom field values for Hans Müller
|
||||||
if hans = find_member.("hans.mueller@example.de") do
|
if hans = find_member.("hans.mueller@example.de") do
|
||||||
[
|
[
|
||||||
|
|
@ -731,6 +793,7 @@ IO.puts(
|
||||||
)
|
)
|
||||||
|
|
||||||
IO.puts(" - Sample members: Hans, Greta, Friedrich")
|
IO.puts(" - Sample members: Hans, Greta, Friedrich")
|
||||||
|
IO.puts(" - Groups: Vorstand, Trainer*innen, Jugend, Newsletter (with members assigned)")
|
||||||
|
|
||||||
IO.puts(
|
IO.puts(
|
||||||
" - Additional users: hans.mueller@example.de, greta.schmidt@example.de, maria.weber@example.de, thomas.klein@example.de"
|
" - Additional users: hans.mueller@example.de, greta.schmidt@example.de, maria.weber@example.de, thomas.klein@example.de"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue