Membership Fee 6 - UI Components & LiveViews closes #280 #304

Open
moritz wants to merge 65 commits from feature/280_membership_fee_ui into main
3 changed files with 71 additions and 19 deletions
Showing only changes of commit f25e198b0e - Show all commits

View file

@ -42,23 +42,34 @@
cycle_status_filter={@cycle_status_filter}
member_count={length(@members)}
/>
<div class="flex gap-2 items-center">
<button
type="button"
phx-click="toggle_cycle_view"
class={[
"btn btn-sm btn-outline gap-2",
@cycle_status_filter && "btn-active"
"btn gap-2",
@show_current_cycle && "btn-active"
]}
aria-label={gettext("Show Last/Current Cycle Payment Status")}
title={gettext("Show Last/Current Cycle Payment Status")}
aria-label={
if(@show_current_cycle,
do: gettext("Current Cycle Payment Status"),
else: gettext("Last Cycle Payment Status")
)
}
title={
if(@show_current_cycle,
do: gettext("Current Cycle Payment Status"),
else: gettext("Last Cycle Payment Status")
)
}
>
<.icon name="hero-arrow-path" class="size-4" />
<.icon name="hero-arrow-path" class="h-5 w-5" />
<span class="hidden sm:inline">
{gettext("Show Last/Current Cycle Payment Status")}
{if(@show_current_cycle,
do: gettext("Current Cycle Payment Status"),
else: gettext("Last Cycle Payment Status")
)}
</span>
</button>
</div>
<.live_component
module={MvWeb.Components.FieldVisibilityDropdownComponent}
id="field-visibility-dropdown"

View file

@ -186,7 +186,10 @@ Enum.with_index(member_attrs_list)
member_attrs_with_fee_type = Map.put(member_attrs, :membership_fee_type_id, fee_type.id)
# Use upsert to prevent duplicates based on email
Membership.create_member!(member_attrs_with_fee_type, upsert?: true, upsert_identity: :unique_email)
Membership.create_member!(member_attrs_with_fee_type,
upsert?: true,
upsert_identity: :unique_email
)
end)
# Create additional users for user-member linking examples
@ -249,7 +252,9 @@ Enum.with_index(linked_members)
# 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)
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
if user.member_id == nil do

View file

@ -42,5 +42,41 @@ defmodule Mv.SeedsTest do
assert length(custom_fields_count_1) == length(custom_fields_count_2),
"CustomFields count should remain same after re-running seeds"
end
test "all members have membership fee type assigned" do
# Run the seeds script
assert Code.eval_file("priv/repo/seeds.exs")
# Get all members
{:ok, members} = Ash.read(Mv.Membership.Member)
# All members should have a membership_fee_type_id
Enum.each(members, fn member ->
assert member.membership_fee_type_id != nil,
"Member #{member.first_name} #{member.last_name} should have a membership fee type assigned"
end)
end
test "each membership fee type has at least one member" do
# Run the seeds script
assert Code.eval_file("priv/repo/seeds.exs")
# Get all fee types and members
{:ok, fee_types} = Ash.read(Mv.MembershipFees.MembershipFeeType)
{:ok, members} = Ash.read(Mv.Membership.Member)
# Group members by fee type
members_by_fee_type =
members
|> Enum.group_by(& &1.membership_fee_type_id)
# Each fee type should have at least one member
Enum.each(fee_types, fn fee_type ->
members_for_type = Map.get(members_by_fee_type, fee_type.id, [])
assert length(members_for_type) > 0,
"Membership fee type #{fee_type.name} should have at least one member assigned"
end)
end
end
end