File size: 1,555 Bytes
3e21b19 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | defmodule Plausible.Billing.Subscriptions do
@moduledoc false
require Plausible.Billing.Subscription.Status
alias Plausible.Billing.Subscription
def active?(%Subscription{status: Subscription.Status.active()}), do: true
def active?(%Subscription{status: Subscription.Status.past_due()}), do: true
def active?(%Subscription{status: Subscription.Status.deleted()} = subscription) do
not is_nil(subscription.next_bill_date) and
not Date.before?(subscription.next_bill_date, Date.utc_today())
end
def active?(%Subscription{}), do: false
def active?(nil), do: false
@spec expired?(Subscription.t()) :: boolean()
@doc """
Returns whether the given subscription is expired. That means that the
subscription status is `deleted` and the date until which the customer
has paid for (i.e. `next_bill_date`) has passed.
"""
def expired?(subscription)
def expired?(%Subscription{paddle_plan_id: "free_10k"}), do: false
def expired?(%Subscription{next_bill_date: next_bill_date} = subscription) do
deleted? = Subscription.Status.deleted?(subscription)
expired? = Date.before?(next_bill_date, Date.utc_today())
deleted? && expired?
end
def resumable?(subscription) do
Subscription.Status.in?(subscription, [
Subscription.Status.active(),
Subscription.Status.past_due(),
Subscription.Status.paused()
])
end
def halted?(subscription) do
Subscription.Status.in?(subscription, [
Subscription.Status.past_due(),
Subscription.Status.paused()
])
end
end
|