| defmodule PlausibleWeb.Components.Billing.Helpers do |
| @moduledoc false |
|
|
| require Plausible.Billing.Subscription.Status |
| alias Plausible.Billing.{Plan, Plans, EnterprisePlan, Subscription, Subscriptions} |
|
|
| def present_plan_name(%Plan{kind: kind}), |
| do: kind |> to_string() |> String.capitalize() |
|
|
| def present_plan_name(%EnterprisePlan{}), do: "Enterprise" |
| def present_plan_name(:free_10k), do: "Free" |
| def present_plan_name(_), do: "Plan" |
|
|
| def present_subscription_interval(subscription) do |
| case Plans.subscription_interval(subscription) do |
| "monthly" -> "month" |
| "yearly" -> "year" |
| interval -> interval |
| end |
| end |
|
|
| @spec present_subscription_status(Subscription.Status.status()) :: String.t() |
| def present_subscription_status(Subscription.Status.active()), do: "Active" |
| def present_subscription_status(Subscription.Status.past_due()), do: "Past due" |
| def present_subscription_status(Subscription.Status.deleted()), do: "Cancelled" |
| def present_subscription_status(Subscription.Status.paused()), do: "Paused" |
| def present_subscription_status(status), do: status |
|
|
| def subscription_pill_color(Subscription.Status.active()), do: :green |
| def subscription_pill_color(Subscription.Status.past_due()), do: :yellow |
| def subscription_pill_color(Subscription.Status.paused()), do: :red |
| def subscription_pill_color(Subscription.Status.deleted()), do: :red |
| def subscription_pill_color(_), do: :gray |
|
|
| def trial_button_label(team) do |
| if Plausible.Teams.Billing.enterprise_configured?(team) do |
| "Upgrade" |
| else |
| "Choose a plan →" |
| end |
| end |
|
|
| def change_plan_button_label(nil), do: "Upgrade" |
|
|
| def change_plan_button_label(subscription) do |
| if Subscriptions.resumable?(subscription) && subscription.cancel_url do |
| "Change plan" |
| else |
| "Upgrade" |
| end |
| end |
|
|
| def format_invoices(invoice_list) do |
| Enum.map(invoice_list, fn invoice -> |
| %{ |
| date: invoice["payout_date"] |> Date.from_iso8601!() |> Calendar.strftime("%b %-d, %Y"), |
| amount: (invoice["amount"] / 1) |> :erlang.float_to_binary(decimals: 2), |
| currency: invoice["currency"] |> PlausibleWeb.BillingView.present_currency(), |
| url: invoice["receipt_url"] |
| } |
| end) |
| end |
| end |
|
|