| defmodule PlausibleWeb.DevSubscriptionController do |
| use Plausible |
|
|
| on_ee do |
| use PlausibleWeb, :controller |
|
|
| alias Plausible.Billing.DevSubscriptions |
| alias Plausible.Auth.User |
| alias Plausible.Teams.Team |
| alias Plausible.Teams |
|
|
| require Plausible.Billing |
|
|
| plug PlausibleWeb.RequireAccountPlug |
|
|
| plug Plausible.Plugs.AuthorizeTeamAccess, Plausible.Billing.allowed_roles() |
|
|
| def create_form(conn, %{"plan_id" => plan_id}) do |
| render(conn, "create_dev_subscription.html", |
| back_link: Routes.billing_path(conn, :choose_plan), |
| plan_id: plan_id |
| ) |
| end |
|
|
| def update_form(conn, _params) do |
| team = conn.assigns.current_team |> Teams.with_subscription() |
|
|
| if is_nil(team.subscription), |
| do: raise("Can't render subscription update form without subscription") |
|
|
| render(conn, "update_dev_subscription.html", |
| back_link: Routes.settings_path(conn, :subscription), |
| current_status: team.subscription.status |
| ) |
| end |
|
|
| def cancel_form(conn, _params) do |
| team = conn.assigns.current_team |> Teams.with_subscription() |
|
|
| if is_nil(team.subscription), |
| do: raise("Can't render subscription cancel form without subscription") |
|
|
| render(conn, "cancel_dev_subscription.html", |
| back_link: Routes.settings_path(conn, :subscription), |
| enterprise_plan?: Teams.Billing.enterprise_configured?(team) |
| ) |
| end |
|
|
| def create(conn, %{"plan_id" => plan_id}) do |
| for_team = |
| case conn.assigns do |
| %{current_team: %Team{} = team} -> team |
| %{current_user: %User{} = user} -> Teams.force_create_my_team(user) |
| end |
|
|
| DevSubscriptions.create_after_1s(for_team.id, plan_id) |
| redirect(conn, to: Routes.billing_path(PlausibleWeb.Endpoint, :upgrade_success)) |
| end |
|
|
| def update(conn, %{"status" => status}) do |
| team = conn.assigns.current_team |
|
|
| :ok = DevSubscriptions.update(team.id, status) |
|
|
| conn |
| |> put_flash(:success, "Subscription status set to '#{status}'") |
| |> redirect(to: Routes.settings_path(conn, :subscription)) |
| end |
|
|
| def cancel(conn, %{"action" => action}) do |
| team = conn.assigns.current_team |
|
|
| flash_msg = |
| case action do |
| "cancel" -> |
| DevSubscriptions.cancel(team.id) |
| "Subscription cancelled" |
|
|
| "cancel_and_expire" -> |
| DevSubscriptions.cancel(team.id, set_expired?: true) |
| "Subscription cancelled and set as 'expired'" |
|
|
| "delete" -> |
| DevSubscriptions.delete(team.id) |
| "Subscription deleted" |
|
|
| "delete_enterprise" -> |
| DevSubscriptions.delete(team.id, delete_enterprise?: true) |
| "Subscription and enterprise plans deleted" |
| end |
|
|
| conn |
| |> put_flash(:success, flash_msg) |
| |> redirect(to: Routes.settings_path(conn, :subscription)) |
| end |
| end |
| end |
|
|