96 lines
2.8 KiB
Elixir
96 lines
2.8 KiB
Elixir
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
|
|
|
|
plug PlausibleWeb.RequireAccountPlug
|
|
|
|
plug Plausible.Plugs.AuthorizeTeamAccess, [:owner, :billing]
|
|
|
|
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
|