| 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 |
|
|