Membership Fee Type Resource & Settings closes #278 #291

Open
moritz wants to merge 27 commits from feature/278_membership_fee_settings into main
Showing only changes of commit b693ab1e26 - Show all commits

View file

@ -18,14 +18,16 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
create :create_member do
# ...
change Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
where [present(:membership_fee_type_id), present(:join_date)]
end
change Mv.MembershipFees.Changes.SetMembershipFeeStartDate
end
The change module handles all prerequisite checks internally (join_date, membership_fee_type_id).
If any required data is missing, the changeset is returned unchanged with a warning logged.
"""
use Ash.Resource.Change
require Logger
alias Mv.MembershipFees.CalendarCycles
@impl true
@ -62,8 +64,13 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
start_date = calculate_start_date(join_date, interval, include_joining_cycle)
Ash.Changeset.force_change_attribute(changeset, :membership_fee_start_date, start_date)
else
{:error, _reason} ->
# If we can't calculate the start date (missing required fields), just return unchanged
{:error, reason} ->
# Log warning for debugging purposes, but don't fail the action
# Missing join_date or membership_fee_type_id is expected for partial creates
unless reason in [:join_date_not_set, :membership_fee_type_not_set] do
Logger.warning("Could not auto-set membership_fee_start_date: #{inspect(reason)}")
end
changeset
end
end
@ -140,7 +147,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
~D[2024-04-01]
"""
@spec calculate_start_date(Date.t(), atom(), boolean()) :: Date.t()
@spec calculate_start_date(Date.t(), CalendarCycles.interval(), boolean()) :: Date.t()
def calculate_start_date(join_date, interval, include_joining_cycle) do
if include_joining_cycle do
# Start date is the first day of the joining cycle