mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
stripe: Move setup_upgrade_checkout_session_and...
to BillingSession.
Moves the 'setup_upgrade_checkout_session_and_payment_intent' function to the 'BillingSession' abstract class. This refactoring will help in minimizing duplicate code while supporting both realm and remote_server customers.
This commit is contained in:
committed by
Tim Abbott
parent
f2e8d2dc07
commit
31f048d054
@@ -552,6 +552,50 @@ class BillingSession(ABC):
|
||||
extra_data={"charge_automatically": charge_automatically},
|
||||
)
|
||||
|
||||
def setup_upgrade_checkout_session_and_payment_intent(
|
||||
self,
|
||||
plan_tier: int,
|
||||
seat_count: int,
|
||||
licenses: int,
|
||||
license_management: str,
|
||||
billing_schedule: int,
|
||||
billing_modality: str,
|
||||
onboarding: bool,
|
||||
) -> stripe.checkout.Session:
|
||||
customer = self.update_or_create_stripe_customer()
|
||||
assert customer is not None # for mypy
|
||||
free_trial = is_free_trial_offer_enabled()
|
||||
price_per_license = get_price_per_license(
|
||||
plan_tier, billing_schedule, customer.default_discount
|
||||
)
|
||||
general_metadata = {
|
||||
"billing_modality": billing_modality,
|
||||
"billing_schedule": billing_schedule,
|
||||
"licenses": licenses,
|
||||
"license_management": license_management,
|
||||
"price_per_license": price_per_license,
|
||||
"seat_count": seat_count,
|
||||
"type": "upgrade",
|
||||
}
|
||||
updated_metadata = self.update_data_for_checkout_session_and_payment_intent(
|
||||
general_metadata
|
||||
)
|
||||
if free_trial:
|
||||
if onboarding:
|
||||
session_type = Session.FREE_TRIAL_UPGRADE_FROM_ONBOARDING_PAGE
|
||||
else:
|
||||
session_type = Session.FREE_TRIAL_UPGRADE_FROM_BILLING_PAGE
|
||||
payment_intent = None
|
||||
else:
|
||||
session_type = Session.UPGRADE_FROM_BILLING_PAGE
|
||||
payment_intent = self.create_stripe_payment_intent(
|
||||
price_per_license, licenses, updated_metadata
|
||||
)
|
||||
stripe_session = self.create_stripe_checkout_session(
|
||||
updated_metadata, session_type, payment_intent
|
||||
)
|
||||
return stripe_session
|
||||
|
||||
|
||||
class RealmBillingSession(BillingSession):
|
||||
def __init__(self, user: UserProfile, realm: Optional[Realm] = None) -> None:
|
||||
|
@@ -1984,7 +1984,7 @@ class StripeTest(StripeTestCase):
|
||||
stripe_session.id = "stripe_session_id"
|
||||
stripe_session.url = "stripe_session_url"
|
||||
with patch(
|
||||
"corporate.views.upgrade.setup_upgrade_checkout_session_and_payment_intent",
|
||||
"corporate.lib.stripe.BillingSession.setup_upgrade_checkout_session_and_payment_intent",
|
||||
return_value=stripe_session,
|
||||
):
|
||||
response = self.upgrade(
|
||||
@@ -2039,7 +2039,7 @@ class StripeTest(StripeTestCase):
|
||||
hamlet = self.example_user("hamlet")
|
||||
self.login_user(hamlet)
|
||||
with patch(
|
||||
"corporate.views.upgrade.setup_upgrade_checkout_session_and_payment_intent",
|
||||
"corporate.lib.stripe.BillingSession.setup_upgrade_checkout_session_and_payment_intent",
|
||||
side_effect=Exception,
|
||||
), self.assertLogs("corporate.stripe", "WARNING") as m:
|
||||
response = self.upgrade(talk_to_stripe=False)
|
||||
|
@@ -2,7 +2,6 @@ import logging
|
||||
from decimal import Decimal
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
import stripe
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.core import signing
|
||||
@@ -18,7 +17,6 @@ from corporate.lib.stripe import (
|
||||
RealmBillingSession,
|
||||
ensure_customer_does_not_have_active_plan,
|
||||
get_latest_seat_count,
|
||||
get_price_per_license,
|
||||
is_free_trial_offer_enabled,
|
||||
process_initial_upgrade,
|
||||
sign_string,
|
||||
@@ -28,7 +26,6 @@ from corporate.lib.stripe import (
|
||||
from corporate.lib.support import get_support_url
|
||||
from corporate.models import (
|
||||
CustomerPlan,
|
||||
Session,
|
||||
ZulipSponsorshipRequest,
|
||||
get_current_plan_by_customer,
|
||||
get_customer_by_realm,
|
||||
@@ -78,53 +75,6 @@ def check_upgrade_parameters(
|
||||
)
|
||||
|
||||
|
||||
def setup_upgrade_checkout_session_and_payment_intent(
|
||||
user: UserProfile,
|
||||
plan_tier: int,
|
||||
seat_count: int,
|
||||
licenses: int,
|
||||
license_management: str,
|
||||
billing_schedule: int,
|
||||
billing_modality: str,
|
||||
onboarding: bool,
|
||||
) -> stripe.checkout.Session:
|
||||
billing_session = RealmBillingSession(user)
|
||||
customer = billing_session.update_or_create_stripe_customer()
|
||||
assert customer is not None # for mypy
|
||||
free_trial = is_free_trial_offer_enabled()
|
||||
price_per_license = get_price_per_license(
|
||||
plan_tier, billing_schedule, customer.default_discount
|
||||
)
|
||||
general_metadata = {
|
||||
"billing_modality": billing_modality,
|
||||
"billing_schedule": billing_schedule,
|
||||
"licenses": licenses,
|
||||
"license_management": license_management,
|
||||
"price_per_license": price_per_license,
|
||||
"seat_count": seat_count,
|
||||
"type": "upgrade",
|
||||
}
|
||||
updated_metadata = billing_session.update_data_for_checkout_session_and_payment_intent(
|
||||
general_metadata
|
||||
)
|
||||
if free_trial:
|
||||
if onboarding:
|
||||
session_type = Session.FREE_TRIAL_UPGRADE_FROM_ONBOARDING_PAGE
|
||||
else:
|
||||
session_type = Session.FREE_TRIAL_UPGRADE_FROM_BILLING_PAGE
|
||||
payment_intent = None
|
||||
else:
|
||||
session_type = Session.UPGRADE_FROM_BILLING_PAGE
|
||||
payment_intent = billing_session.create_stripe_payment_intent(
|
||||
price_per_license, licenses, updated_metadata
|
||||
)
|
||||
|
||||
stripe_session = billing_session.create_stripe_checkout_session(
|
||||
updated_metadata, session_type, payment_intent
|
||||
)
|
||||
return stripe_session
|
||||
|
||||
|
||||
@require_organization_member
|
||||
@has_request_variables
|
||||
def upgrade(
|
||||
@@ -170,15 +120,17 @@ def upgrade(
|
||||
schedule
|
||||
]
|
||||
if charge_automatically:
|
||||
stripe_checkout_session = setup_upgrade_checkout_session_and_payment_intent(
|
||||
user,
|
||||
CustomerPlan.STANDARD,
|
||||
seat_count,
|
||||
licenses,
|
||||
license_management,
|
||||
billing_schedule,
|
||||
billing_modality,
|
||||
onboarding,
|
||||
billing_session = RealmBillingSession(user)
|
||||
stripe_checkout_session = (
|
||||
billing_session.setup_upgrade_checkout_session_and_payment_intent(
|
||||
CustomerPlan.STANDARD,
|
||||
seat_count,
|
||||
licenses,
|
||||
license_management,
|
||||
billing_schedule,
|
||||
billing_modality,
|
||||
onboarding,
|
||||
)
|
||||
)
|
||||
return json_success(
|
||||
request,
|
||||
|
Reference in New Issue
Block a user