From 7de061cf10bc277f54be74f5a560b6dd697944c3 Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Mon, 27 Nov 2023 08:31:39 -0800 Subject: [PATCH] billing: Inline is_realm_on_paid_plan. This helps simplify the BillingSession interface to have less realm-specific functions outside RealmBillingSesssion. --- corporate/lib/stripe.py | 16 ++++++---------- corporate/views/billing_page.py | 10 +++++++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/corporate/lib/stripe.py b/corporate/lib/stripe.py index 87f6cff19f..ad81fac01d 100644 --- a/corporate/lib/stripe.py +++ b/corporate/lib/stripe.py @@ -79,11 +79,6 @@ CARD_CAPITALIZATION = { "visa": "Visa", } -PAID_PLANS = [ - Realm.PLAN_TYPE_STANDARD, - Realm.PLAN_TYPE_PLUS, -] - # The version of Stripe API the billing system supports. STRIPE_API_VERSION = "2020-08-27" @@ -212,10 +207,6 @@ def check_upgrade_parameters( ) -def is_realm_on_paid_plan(realm: Realm) -> bool: - return realm.plan_type in PAID_PLANS - - # Be extremely careful changing this function. Historical billing periods # are not stored anywhere, and are just computed on the fly using this # function. Any change you make here should return the same value (or be @@ -1636,6 +1627,11 @@ class RealmBillingSession(BillingSession): assert realm is not None # for mypy self.realm = realm + PAID_PLANS = [ + Realm.PLAN_TYPE_STANDARD, + Realm.PLAN_TYPE_PLUS, + ] + @override @property def billing_session_url(self) -> str: @@ -1861,7 +1857,7 @@ class RealmBillingSession(BillingSession): @override def on_paid_plan(self) -> bool: - return is_realm_on_paid_plan(self.realm) + return self.realm.plan_type in self.PAID_PLANS @override def add_sponsorship_info_to_context(self, context: Dict[str, Any]) -> None: diff --git a/corporate/views/billing_page.py b/corporate/views/billing_page.py index 6cf35a7e83..d0aee6691f 100644 --- a/corporate/views/billing_page.py +++ b/corporate/views/billing_page.py @@ -5,7 +5,7 @@ from django.http import HttpRequest, HttpResponse, HttpResponseRedirect from django.shortcuts import render from django.urls import reverse -from corporate.lib.stripe import RealmBillingSession, UpdatePlanRequest, is_realm_on_paid_plan +from corporate.lib.stripe import RealmBillingSession, UpdatePlanRequest from corporate.models import CustomerPlan, get_customer_by_realm from zerver.decorator import require_billing_access, zulip_login_required from zerver.lib.request import REQ, has_request_variables @@ -39,6 +39,11 @@ def billing_home( user = request.user assert user.is_authenticated + # BUG: This should pass the acting_user; this is just working + # around that make_end_of_cycle_updates_if_needed doesn't do audit + # logging not using the session user properly. + billing_session = RealmBillingSession(user=None, realm=user.realm) + context: Dict[str, Any] = { "admin_access": user.has_billing_access, "has_active_plan": False, @@ -54,7 +59,7 @@ def billing_home( customer = get_customer_by_realm(user.realm) if customer is not None and customer.sponsorship_pending: # Don't redirect to sponsorship page if the realm is on a paid plan - if not is_realm_on_paid_plan(user.realm): + if not billing_session.on_paid_plan(): return HttpResponseRedirect(reverse("sponsorship_request")) # If the realm is on a paid plan, show the sponsorship pending message # TODO: Add a sponsorship pending message to the billing page @@ -73,7 +78,6 @@ def billing_home( return HttpResponseRedirect(reverse(upgrade_page)) - billing_session = RealmBillingSession(user=None, realm=user.realm) main_context = billing_session.get_billing_page_context() if main_context: context.update(main_context)