2023-08-06 16:27:33 +12:00
|
|
|
defmodule AshDoubleEntry.Account.Calculations.BalanceAsOf do
|
2023-09-27 02:46:07 +13:00
|
|
|
# Calculates the balance as of a given datetime. See the getting started guide for more.
|
|
|
|
@moduledoc false
|
2023-08-06 16:27:33 +12:00
|
|
|
use Ash.Calculation
|
|
|
|
require Ash.Expr
|
|
|
|
|
|
|
|
def expression(opts, context) do
|
2023-12-23 15:19:49 +13:00
|
|
|
Ash.Expr.expr(
|
|
|
|
balance_as_of_ulid(
|
|
|
|
ulid: Ash.Expr.expr(lazy({__MODULE__, :ulid, [context.timestamp]})),
|
|
|
|
resource: opts[:resource]
|
|
|
|
)
|
|
|
|
)
|
|
|
|
end
|
2023-08-06 16:27:33 +12:00
|
|
|
|
2023-12-23 15:19:49 +13:00
|
|
|
@doc false
|
|
|
|
def ulid(timestamp) do
|
|
|
|
AshDoubleEntry.ULID.generate(timestamp)
|
2023-08-06 16:27:33 +12:00
|
|
|
end
|
|
|
|
end
|