feat(overview): add point-in-time, suspended, OR-group and count-range filters
This commit is contained in:
parent
c547ca19af
commit
c0d1550401
23 changed files with 1116 additions and 117 deletions
|
|
@ -35,6 +35,7 @@ defmodule MvWeb.Components.AddFilterBuilderComponent do
|
|||
|
||||
alias Mv.Constants
|
||||
alias MvWeb.MemberLive.Index.DateFilter
|
||||
alias MvWeb.MemberLive.Index.DatePresets
|
||||
alias MvWeb.MemberLive.Index.FilterDescriptor
|
||||
alias MvWeb.MemberLive.Index.FilterParams
|
||||
alias MvWeb.MemberLive.Index.PaymentAging
|
||||
|
|
@ -968,32 +969,30 @@ defmodule MvWeb.Components.AddFilterBuilderComponent do
|
|||
# --- date presets ---------------------------------------------------------
|
||||
|
||||
defp date_presets do
|
||||
[
|
||||
{"this_year", gettext("This year")},
|
||||
{"last_year", gettext("Last year")},
|
||||
{"this_month", gettext("This month")},
|
||||
{"last_30_days", gettext("Last 30 days")}
|
||||
]
|
||||
Enum.map(DatePresets.all(), fn preset -> {Atom.to_string(preset), preset_label(preset)} end)
|
||||
end
|
||||
|
||||
defp preset_range("this_year") do
|
||||
y = Date.utc_today().year
|
||||
{Date.new!(y, 1, 1), Date.new!(y, 12, 31)}
|
||||
end
|
||||
defp preset_label(:last_7_days), do: gettext("Last 7 days")
|
||||
defp preset_label(:last_30_days), do: gettext("Last 30 days")
|
||||
defp preset_label(:last_3_months), do: gettext("Last 3 months")
|
||||
defp preset_label(:last_12_months), do: gettext("Last 12 months")
|
||||
defp preset_label(:this_month), do: gettext("This month")
|
||||
defp preset_label(:this_quarter), do: gettext("This quarter")
|
||||
defp preset_label(:this_year), do: gettext("This year")
|
||||
|
||||
defp preset_range("last_year") do
|
||||
y = Date.utc_today().year - 1
|
||||
{Date.new!(y, 1, 1), Date.new!(y, 12, 31)}
|
||||
end
|
||||
# Resolves a preset string (from `phx-value-preset`) to a concrete `{from, to}`
|
||||
# tuple via the shared, clock-free `DatePresets` resolver, or nil for an
|
||||
# unknown preset. The resolver defines "this year" as period-to-date
|
||||
# ([Jan 1, today]) per §2.8, superseding the prior full-year range.
|
||||
defp preset_range(preset) when is_binary(preset) do
|
||||
case Enum.find(DatePresets.all(), &(Atom.to_string(&1) == preset)) do
|
||||
nil ->
|
||||
nil
|
||||
|
||||
defp preset_range("this_month") do
|
||||
today = Date.utc_today()
|
||||
{Date.beginning_of_month(today), Date.end_of_month(today)}
|
||||
end
|
||||
|
||||
defp preset_range("last_30_days") do
|
||||
today = Date.utc_today()
|
||||
{Date.add(today, -30), today}
|
||||
key ->
|
||||
%{from: from, to: to} = DatePresets.resolve(key)
|
||||
{from, to}
|
||||
end
|
||||
end
|
||||
|
||||
defp preset_range(_), do: nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue