fix(export): order member export chronologically by custom :date fields

This commit is contained in:
Moritz 2026-06-15 16:18:13 +02:00
parent 6d4629ef5b
commit 2eda661e37

View file

@ -12,6 +12,7 @@ defmodule MvWeb.MemberExportController do
alias Mv.Authorization.Actor
alias Mv.Membership.CustomField
alias Mv.Membership.CustomFieldSort
alias Mv.Membership.Member
alias Mv.Membership.MemberExport
alias Mv.Membership.MembersCSV
@ -523,18 +524,22 @@ defmodule MvWeb.MemberExportController do
false
cfv ->
extracted = extract_sort_value(cfv.value, custom_field.value_type)
not empty_value?(extracted, custom_field.value_type)
not empty_custom_field_value?(cfv.value, custom_field.value_type)
end
end
defp empty_value?(nil, _type), do: true
defp empty_custom_field_value?(%Ash.Union{value: value, type: type}, _expected_type) do
empty_custom_field_value?(value, type)
end
defp empty_value?(value, type) when type in [:string, :email] and is_binary(value) do
defp empty_custom_field_value?(nil, _type), do: true
defp empty_custom_field_value?(value, type)
when type in [:string, :email] and is_binary(value) do
String.trim(value) == ""
end
defp empty_value?(_value, _type), do: false
defp empty_custom_field_value?(_value, _type), do: false
defp find_cfv(member, custom_field) do
(member.custom_field_values || [])
@ -548,7 +553,7 @@ defmodule MvWeb.MemberExportController do
defp extract_member_sort_value(member, custom_field) do
case find_cfv(member, custom_field) do
nil -> nil
cfv -> extract_sort_value(cfv.value, custom_field.value_type)
cfv -> CustomFieldSort.sort_key(cfv.value, custom_field.value_type)
end
end
@ -670,15 +675,4 @@ defmodule MvWeb.MemberExportController do
|> String.split()
|> Enum.map_join(" ", &String.capitalize/1)
end
defp extract_sort_value(%Ash.Union{value: value, type: type}, _),
do: extract_sort_value(value, type)
defp extract_sort_value(nil, _), do: nil
defp extract_sort_value(value, :string) when is_binary(value), do: value
defp extract_sort_value(value, :integer) when is_integer(value), do: value
defp extract_sort_value(value, :boolean) when is_boolean(value), do: value
defp extract_sort_value(%Date{} = d, :date), do: d
defp extract_sort_value(value, :email) when is_binary(value), do: value
defp extract_sort_value(value, _), do: to_string(value)
end