Cycle Management & Member Integration closes #279 #294
1 changed files with 13 additions and 6 deletions
|
|
@ -18,14 +18,16 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
|
||||||
|
|
||||||
create :create_member do
|
create :create_member do
|
||||||
# ...
|
# ...
|
||||||
change Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
|
change Mv.MembershipFees.Changes.SetMembershipFeeStartDate
|
||||||
where [present(:membership_fee_type_id), present(:join_date)]
|
|
||||||
end
|
|
||||||
end
|
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
|
use Ash.Resource.Change
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
alias Mv.MembershipFees.CalendarCycles
|
alias Mv.MembershipFees.CalendarCycles
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|
@ -62,8 +64,13 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
|
||||||
start_date = calculate_start_date(join_date, interval, include_joining_cycle)
|
start_date = calculate_start_date(join_date, interval, include_joining_cycle)
|
||||||
Ash.Changeset.force_change_attribute(changeset, :membership_fee_start_date, start_date)
|
Ash.Changeset.force_change_attribute(changeset, :membership_fee_start_date, start_date)
|
||||||
else
|
else
|
||||||
{:error, _reason} ->
|
{:error, reason} ->
|
||||||
# If we can't calculate the start date (missing required fields), just return unchanged
|
# 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
|
changeset
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -140,7 +147,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDate do
|
||||||
~D[2024-04-01]
|
~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
|
def calculate_start_date(join_date, interval, include_joining_cycle) do
|
||||||
if include_joining_cycle do
|
if include_joining_cycle do
|
||||||
# Start date is the first day of the joining cycle
|
# Start date is the first day of the joining cycle
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue