mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
stripe: Don't approve sponsorship for customers on paid plan.
This would avoid us accidentally approving sponsorship for customers on paid plan.
This commit is contained in:
@@ -1159,6 +1159,20 @@ class BillingSession(ABC):
|
|||||||
f"Cannot upgrade from {plan.name} to {CustomerPlan.name_from_tier(new_plan_tier)}"
|
f"Cannot upgrade from {plan.name} to {CustomerPlan.name_from_tier(new_plan_tier)}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def check_customer_not_on_paid_plan(self, customer: Customer) -> str: # nocoverage
|
||||||
|
current_plan = get_current_plan_by_customer(customer)
|
||||||
|
if current_plan is not None:
|
||||||
|
# Check if the customer is scheduled for an upgrade.
|
||||||
|
next_plan = self.get_next_plan(current_plan)
|
||||||
|
if next_plan is not None:
|
||||||
|
return f"Customer scheduled for upgrade to {next_plan.name}. Please cancel upgrade before approving sponsorship!"
|
||||||
|
|
||||||
|
# It is fine to end legacy plan not scheduled for an upgrade.
|
||||||
|
if current_plan.tier != CustomerPlan.TIER_SELF_HOSTED_LEGACY:
|
||||||
|
return f"Customer on plan {current_plan.name}. Please end current plan before approving sponsorship!"
|
||||||
|
|
||||||
|
return ""
|
||||||
|
|
||||||
@catch_stripe_errors
|
@catch_stripe_errors
|
||||||
def process_initial_upgrade(
|
def process_initial_upgrade(
|
||||||
self,
|
self,
|
||||||
@@ -2849,10 +2863,15 @@ class RealmBillingSession(BillingSession):
|
|||||||
# Sponsorship approval is only a support admin action.
|
# Sponsorship approval is only a support admin action.
|
||||||
assert self.support_session
|
assert self.support_session
|
||||||
|
|
||||||
|
customer = self.get_customer()
|
||||||
|
if customer is not None:
|
||||||
|
error_message = self.check_customer_not_on_paid_plan(customer)
|
||||||
|
if error_message != "": # nocoverage
|
||||||
|
return error_message
|
||||||
|
|
||||||
from zerver.actions.message_send import internal_send_private_message
|
from zerver.actions.message_send import internal_send_private_message
|
||||||
|
|
||||||
self.do_change_plan_type(tier=None, is_sponsored=True)
|
self.do_change_plan_type(tier=None, is_sponsored=True)
|
||||||
customer = self.get_customer()
|
|
||||||
if customer is not None and customer.sponsorship_pending:
|
if customer is not None and customer.sponsorship_pending:
|
||||||
customer.sponsorship_pending = False
|
customer.sponsorship_pending = False
|
||||||
customer.save(update_fields=["sponsorship_pending"])
|
customer.save(update_fields=["sponsorship_pending"])
|
||||||
@@ -3178,8 +3197,13 @@ class RemoteRealmBillingSession(BillingSession):
|
|||||||
# Sponsorship approval is only a support admin action.
|
# Sponsorship approval is only a support admin action.
|
||||||
assert self.support_session
|
assert self.support_session
|
||||||
|
|
||||||
self.do_change_plan_type(tier=None, is_sponsored=True)
|
|
||||||
customer = self.get_customer()
|
customer = self.get_customer()
|
||||||
|
if customer is not None:
|
||||||
|
error_message = self.check_customer_not_on_paid_plan(customer)
|
||||||
|
if error_message != "":
|
||||||
|
return error_message
|
||||||
|
|
||||||
|
self.do_change_plan_type(tier=None, is_sponsored=True)
|
||||||
if customer is not None and customer.sponsorship_pending:
|
if customer is not None and customer.sponsorship_pending:
|
||||||
customer.sponsorship_pending = False
|
customer.sponsorship_pending = False
|
||||||
customer.save(update_fields=["sponsorship_pending"])
|
customer.save(update_fields=["sponsorship_pending"])
|
||||||
@@ -3567,8 +3591,13 @@ class RemoteServerBillingSession(BillingSession):
|
|||||||
# Sponsorship approval is only a support admin action.
|
# Sponsorship approval is only a support admin action.
|
||||||
assert self.support_session
|
assert self.support_session
|
||||||
|
|
||||||
self.do_change_plan_type(tier=None, is_sponsored=True)
|
|
||||||
customer = self.get_customer()
|
customer = self.get_customer()
|
||||||
|
if customer is not None:
|
||||||
|
error_message = self.check_customer_not_on_paid_plan(customer)
|
||||||
|
if error_message != "":
|
||||||
|
return error_message
|
||||||
|
|
||||||
|
self.do_change_plan_type(tier=None, is_sponsored=True)
|
||||||
if customer is not None and customer.sponsorship_pending:
|
if customer is not None and customer.sponsorship_pending:
|
||||||
customer.sponsorship_pending = False
|
customer.sponsorship_pending = False
|
||||||
customer.save(update_fields=["sponsorship_pending"])
|
customer.save(update_fields=["sponsorship_pending"])
|
||||||
|
|||||||
Reference in New Issue
Block a user