Cycle Management & Member Integration closes #279 #294

Open
moritz wants to merge 48 commits from feature/279_cycle_management into main
Showing only changes of commit 2e8c9eeccb - Show all commits

View file

@ -112,14 +112,26 @@ defmodule Mv.Membership.Member do
# but in test environment it runs synchronously for DB sandbox compatibility # but in test environment it runs synchronously for DB sandbox compatibility
change after_action(fn _changeset, member, _context -> change after_action(fn _changeset, member, _context ->
if member.membership_fee_type_id && member.join_date do if member.membership_fee_type_id && member.join_date do
generate_fn = fn ->
case Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id) do
{:ok, _cycles} ->
:ok
{:error, reason} ->
require Logger
Logger.warning(
"Failed to generate cycles for member #{member.id}: #{inspect(reason)}"
)
end
end
if Application.get_env(:mv, :sql_sandbox, false) do if Application.get_env(:mv, :sql_sandbox, false) do
# Run synchronously in test environment for DB sandbox compatibility # Run synchronously in test environment for DB sandbox compatibility
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id) generate_fn.()
else else
# Run asynchronously in other environments # Run asynchronously in other environments
Task.start(fn -> Task.start(generate_fn)
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
end)
end end
end end
@ -180,14 +192,26 @@ defmodule Mv.Membership.Member do
Ash.Changeset.changing_attribute?(changeset, :membership_fee_type_id) Ash.Changeset.changing_attribute?(changeset, :membership_fee_type_id)
if fee_type_changed && member.membership_fee_type_id && member.join_date do if fee_type_changed && member.membership_fee_type_id && member.join_date do
generate_fn = fn ->
case Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id) do
{:ok, _cycles} ->
:ok
{:error, reason} ->
require Logger
Logger.warning(
"Failed to generate cycles for member #{member.id}: #{inspect(reason)}"
)
end
end
if Application.get_env(:mv, :sql_sandbox, false) do if Application.get_env(:mv, :sql_sandbox, false) do
# Run synchronously in test environment for DB sandbox compatibility # Run synchronously in test environment for DB sandbox compatibility
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id) generate_fn.()
else else
# Run asynchronously in other environments # Run asynchronously in other environments
Task.start(fn -> Task.start(generate_fn)
Mv.MembershipFees.CycleGenerator.generate_cycles_for_member(member.id)
end)
end end
end end