mirror of
https://github.com/zulip/zulip.git
synced 2025-10-24 08:33:43 +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},
|
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):
|
class RealmBillingSession(BillingSession):
|
||||||
def __init__(self, user: UserProfile, realm: Optional[Realm] = None) -> None:
|
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.id = "stripe_session_id"
|
||||||
stripe_session.url = "stripe_session_url"
|
stripe_session.url = "stripe_session_url"
|
||||||
with patch(
|
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,
|
return_value=stripe_session,
|
||||||
):
|
):
|
||||||
response = self.upgrade(
|
response = self.upgrade(
|
||||||
@@ -2039,7 +2039,7 @@ class StripeTest(StripeTestCase):
|
|||||||
hamlet = self.example_user("hamlet")
|
hamlet = self.example_user("hamlet")
|
||||||
self.login_user(hamlet)
|
self.login_user(hamlet)
|
||||||
with patch(
|
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,
|
side_effect=Exception,
|
||||||
), self.assertLogs("corporate.stripe", "WARNING") as m:
|
), self.assertLogs("corporate.stripe", "WARNING") as m:
|
||||||
response = self.upgrade(talk_to_stripe=False)
|
response = self.upgrade(talk_to_stripe=False)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import logging
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
import stripe
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core import signing
|
from django.core import signing
|
||||||
@@ -18,7 +17,6 @@ from corporate.lib.stripe import (
|
|||||||
RealmBillingSession,
|
RealmBillingSession,
|
||||||
ensure_customer_does_not_have_active_plan,
|
ensure_customer_does_not_have_active_plan,
|
||||||
get_latest_seat_count,
|
get_latest_seat_count,
|
||||||
get_price_per_license,
|
|
||||||
is_free_trial_offer_enabled,
|
is_free_trial_offer_enabled,
|
||||||
process_initial_upgrade,
|
process_initial_upgrade,
|
||||||
sign_string,
|
sign_string,
|
||||||
@@ -28,7 +26,6 @@ from corporate.lib.stripe import (
|
|||||||
from corporate.lib.support import get_support_url
|
from corporate.lib.support import get_support_url
|
||||||
from corporate.models import (
|
from corporate.models import (
|
||||||
CustomerPlan,
|
CustomerPlan,
|
||||||
Session,
|
|
||||||
ZulipSponsorshipRequest,
|
ZulipSponsorshipRequest,
|
||||||
get_current_plan_by_customer,
|
get_current_plan_by_customer,
|
||||||
get_customer_by_realm,
|
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
|
@require_organization_member
|
||||||
@has_request_variables
|
@has_request_variables
|
||||||
def upgrade(
|
def upgrade(
|
||||||
@@ -170,15 +120,17 @@ def upgrade(
|
|||||||
schedule
|
schedule
|
||||||
]
|
]
|
||||||
if charge_automatically:
|
if charge_automatically:
|
||||||
stripe_checkout_session = setup_upgrade_checkout_session_and_payment_intent(
|
billing_session = RealmBillingSession(user)
|
||||||
user,
|
stripe_checkout_session = (
|
||||||
CustomerPlan.STANDARD,
|
billing_session.setup_upgrade_checkout_session_and_payment_intent(
|
||||||
seat_count,
|
CustomerPlan.STANDARD,
|
||||||
licenses,
|
seat_count,
|
||||||
license_management,
|
licenses,
|
||||||
billing_schedule,
|
license_management,
|
||||||
billing_modality,
|
billing_schedule,
|
||||||
onboarding,
|
billing_modality,
|
||||||
|
onboarding,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
return json_success(
|
return json_success(
|
||||||
request,
|
request,
|
||||||
|
|||||||
Reference in New Issue
Block a user