feat(export): include Fee Type and groups in PDF export
MemberExport allowlist and insert_fee_type; Build load/sort/cell_value; MemberPdfExportController allow membership_fee_type and groups.
This commit is contained in:
parent
8db24405fa
commit
e86c78a0dc
3 changed files with 101 additions and 34 deletions
|
|
@ -16,7 +16,7 @@ defmodule Mv.Membership.MemberExport do
|
|||
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
||||
|
||||
@member_fields_allowlist (Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)) ++
|
||||
["membership_fee_status", "groups"]
|
||||
["membership_fee_type", "membership_fee_status", "groups"]
|
||||
@computed_export_fields ["membership_fee_status"]
|
||||
@computed_insert_after "membership_fee_start_date"
|
||||
@custom_field_prefix Mv.Constants.custom_field_prefix()
|
||||
|
|
@ -326,10 +326,10 @@ defmodule Mv.Membership.MemberExport do
|
|||
# Separate groups from other fields (groups is handled as a special field, not a member field)
|
||||
groups_field = if "groups" in member_fields, do: ["groups"], else: []
|
||||
|
||||
# final member_fields list (used for column specs order): table order + computed inserted + groups
|
||||
# final member_fields list (used for column specs order): table order + fee type + computed + groups
|
||||
ordered_member_fields =
|
||||
selectable_member_fields
|
||||
|> insert_computed_fields_like_table(computed_fields)
|
||||
|> insert_fee_type_and_computed_fields_like_table(computed_fields, member_fields)
|
||||
|> then(fn fields -> fields ++ groups_field end)
|
||||
|
||||
%{
|
||||
|
|
@ -420,27 +420,44 @@ defmodule Mv.Membership.MemberExport do
|
|||
table_order |> Enum.filter(&(&1 in fields))
|
||||
end
|
||||
|
||||
defp insert_computed_fields_like_table(db_fields_ordered, computed_fields) do
|
||||
# Insert membership_fee_status right after membership_fee_start_date (if both selected),
|
||||
# otherwise append at the end of DB fields.
|
||||
defp insert_fee_type_and_computed_fields_like_table(
|
||||
db_fields_ordered,
|
||||
computed_fields,
|
||||
member_fields
|
||||
) do
|
||||
computed_fields = computed_fields || []
|
||||
member_fields = member_fields || []
|
||||
|
||||
db_with_insert =
|
||||
Enum.flat_map(db_fields_ordered, fn f ->
|
||||
if f == @computed_insert_after and "membership_fee_status" in computed_fields do
|
||||
[f, "membership_fee_status"]
|
||||
else
|
||||
[f]
|
||||
end
|
||||
expand_field_with_computed(f, member_fields, computed_fields)
|
||||
end)
|
||||
|
||||
remaining =
|
||||
computed_fields
|
||||
|> Enum.reject(&(&1 in db_with_insert))
|
||||
|
||||
remaining = Enum.reject(computed_fields, &(&1 in db_with_insert))
|
||||
db_with_insert ++ remaining
|
||||
end
|
||||
|
||||
# Insert membership_fee_type and membership_fee_status after membership_fee_start_date (table order).
|
||||
defp expand_field_with_computed(f, member_fields, computed_fields) do
|
||||
if f == @computed_insert_after do
|
||||
extra = []
|
||||
|
||||
extra =
|
||||
if "membership_fee_type" in member_fields,
|
||||
do: extra ++ ["membership_fee_type"],
|
||||
else: extra
|
||||
|
||||
extra =
|
||||
if "membership_fee_status" in computed_fields,
|
||||
do: extra ++ ["membership_fee_status"],
|
||||
else: extra
|
||||
|
||||
[f] ++ extra
|
||||
else
|
||||
[f]
|
||||
end
|
||||
end
|
||||
|
||||
defp normalize_computed_fields(fields) when is_list(fields) do
|
||||
fields
|
||||
|> Enum.filter(&is_binary/1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue