Statistic Page closes #310 #417

Merged
moritz merged 16 commits from feature/statistics into main 2026-02-12 19:40:23 +01:00
Showing only changes of commit b416944321 - Show all commits

View file

@ -10,6 +10,8 @@ defmodule Mv.Statistics do
require Ash.Query require Ash.Query
import Ash.Expr import Ash.Expr
require Logger
alias Mv.Membership.Member alias Mv.Membership.Member
alias Mv.MembershipFees alias Mv.MembershipFees
alias Mv.MembershipFees.MembershipFeeCycle alias Mv.MembershipFees.MembershipFeeCycle
@ -30,9 +32,15 @@ defmodule Mv.Statistics do
|> Ash.Query.limit(1) |> Ash.Query.limit(1)
case Ash.read_one(query, opts) do case Ash.read_one(query, opts) do
{:ok, nil} -> nil {:ok, nil} ->
{:ok, member} -> member.join_date.year nil
{:error, _} -> nil
{:ok, member} ->
member.join_date.year
{:error, reason} ->
Logger.warning("Statistics.first_join_year failed: #{inspect(reason)}")
nil
end end
end end
@ -46,8 +54,12 @@ defmodule Mv.Statistics do
|> Ash.Query.filter(expr(is_nil(exit_date))) |> Ash.Query.filter(expr(is_nil(exit_date)))
case Ash.count(query, opts) do case Ash.count(query, opts) do
{:ok, count} -> count {:ok, count} ->
{:error, _} -> 0 count
{:error, reason} ->
Logger.warning("Statistics.active_member_count failed: #{inspect(reason)}")
0
end end
end end
@ -61,8 +73,12 @@ defmodule Mv.Statistics do
|> Ash.Query.filter(expr(not is_nil(exit_date))) |> Ash.Query.filter(expr(not is_nil(exit_date)))
case Ash.count(query, opts) do case Ash.count(query, opts) do
{:ok, count} -> count {:ok, count} ->
{:error, _} -> 0 count
{:error, reason} ->
Logger.warning("Statistics.inactive_member_count failed: #{inspect(reason)}")
0
end end
end end
@ -79,8 +95,12 @@ defmodule Mv.Statistics do
|> Ash.Query.filter(expr(join_date >= ^first_day and join_date <= ^last_day)) |> Ash.Query.filter(expr(join_date >= ^first_day and join_date <= ^last_day))
case Ash.count(query, opts) do case Ash.count(query, opts) do
{:ok, count} -> count {:ok, count} ->
{:error, _} -> 0 count
{:error, reason} ->
Logger.warning("Statistics.joins_by_year failed: #{inspect(reason)}")
0
end end
end end
@ -97,8 +117,12 @@ defmodule Mv.Statistics do
|> Ash.Query.filter(expr(exit_date >= ^first_day and exit_date <= ^last_day)) |> Ash.Query.filter(expr(exit_date >= ^first_day and exit_date <= ^last_day))
case Ash.count(query, opts) do case Ash.count(query, opts) do
{:ok, count} -> count {:ok, count} ->
{:error, _} -> 0 count
{:error, reason} ->
Logger.warning("Statistics.exits_by_year failed: #{inspect(reason)}")
0
end end
end end
@ -129,8 +153,12 @@ defmodule Mv.Statistics do
|> Keyword.put(:domain, MembershipFees) |> Keyword.put(:domain, MembershipFees)
case Ash.read(query, opts_for_read) do case Ash.read(query, opts_for_read) do
{:ok, cycles} -> cycle_totals_from_cycles(cycles) {:ok, cycles} ->
{:error, _} -> zero_cycle_totals() cycle_totals_from_cycles(cycles)
{:error, reason} ->
Logger.warning("Statistics.cycle_totals_by_year failed: #{inspect(reason)}")
zero_cycle_totals()
end end
end end
@ -201,7 +229,8 @@ defmodule Mv.Statistics do
{:ok, cycles} -> {:ok, cycles} ->
Enum.reduce(cycles, Decimal.new(0), fn c, acc -> Decimal.add(acc, c.amount) end) Enum.reduce(cycles, Decimal.new(0), fn c, acc -> Decimal.add(acc, c.amount) end)
{:error, _} -> {:error, reason} ->
Logger.warning("Statistics.open_amount_total failed: #{inspect(reason)}")
Decimal.new(0) Decimal.new(0)
end end
end end