fix(export): order member export chronologically by custom :date fields
This commit is contained in:
parent
6d4629ef5b
commit
2eda661e37
1 changed files with 11 additions and 17 deletions
|
|
@ -12,6 +12,7 @@ defmodule MvWeb.MemberExportController do
|
||||||
|
|
||||||
alias Mv.Authorization.Actor
|
alias Mv.Authorization.Actor
|
||||||
alias Mv.Membership.CustomField
|
alias Mv.Membership.CustomField
|
||||||
|
alias Mv.Membership.CustomFieldSort
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.Membership.MemberExport
|
alias Mv.Membership.MemberExport
|
||||||
alias Mv.Membership.MembersCSV
|
alias Mv.Membership.MembersCSV
|
||||||
|
|
@ -523,18 +524,22 @@ defmodule MvWeb.MemberExportController do
|
||||||
false
|
false
|
||||||
|
|
||||||
cfv ->
|
cfv ->
|
||||||
extracted = extract_sort_value(cfv.value, custom_field.value_type)
|
not empty_custom_field_value?(cfv.value, custom_field.value_type)
|
||||||
not empty_value?(extracted, custom_field.value_type)
|
|
||||||
end
|
end
|
||||||
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) == ""
|
String.trim(value) == ""
|
||||||
end
|
end
|
||||||
|
|
||||||
defp empty_value?(_value, _type), do: false
|
defp empty_custom_field_value?(_value, _type), do: false
|
||||||
|
|
||||||
defp find_cfv(member, custom_field) do
|
defp find_cfv(member, custom_field) do
|
||||||
(member.custom_field_values || [])
|
(member.custom_field_values || [])
|
||||||
|
|
@ -548,7 +553,7 @@ defmodule MvWeb.MemberExportController do
|
||||||
defp extract_member_sort_value(member, custom_field) do
|
defp extract_member_sort_value(member, custom_field) do
|
||||||
case find_cfv(member, custom_field) do
|
case find_cfv(member, custom_field) do
|
||||||
nil -> nil
|
nil -> nil
|
||||||
cfv -> extract_sort_value(cfv.value, custom_field.value_type)
|
cfv -> CustomFieldSort.sort_key(cfv.value, custom_field.value_type)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -670,15 +675,4 @@ defmodule MvWeb.MemberExportController do
|
||||||
|> String.split()
|
|> String.split()
|
||||||
|> Enum.map_join(" ", &String.capitalize/1)
|
|> Enum.map_join(" ", &String.capitalize/1)
|
||||||
end
|
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
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue