mirror of https://github.com/zulip/zulip.git
billing: Extract out validate_licenses function.
This commit is contained in:
parent
d9baa681b2
commit
c9f4439850
|
@ -71,6 +71,26 @@ def unsign_string(signed_string: str, salt: str) -> str:
|
||||||
return signer.unsign(signed_string)
|
return signer.unsign(signed_string)
|
||||||
|
|
||||||
|
|
||||||
|
def validate_licenses(charge_automatically: bool, licenses: Optional[int], seat_count: int) -> None:
|
||||||
|
min_licenses = seat_count
|
||||||
|
max_licenses = None
|
||||||
|
if not charge_automatically:
|
||||||
|
min_licenses = max(seat_count, MIN_INVOICED_LICENSES)
|
||||||
|
max_licenses = MAX_INVOICED_LICENSES
|
||||||
|
|
||||||
|
if licenses is None or licenses < min_licenses:
|
||||||
|
raise BillingError(
|
||||||
|
"not enough licenses", _("You must invoice for at least {} users.").format(min_licenses)
|
||||||
|
)
|
||||||
|
|
||||||
|
if max_licenses is not None and licenses > max_licenses:
|
||||||
|
message = _(
|
||||||
|
"Invoices with more than {} licenses can't be processed from this page. To complete "
|
||||||
|
"the upgrade, please contact {}."
|
||||||
|
).format(max_licenses, settings.ZULIP_ADMINISTRATOR)
|
||||||
|
raise BillingError("too many licenses", message)
|
||||||
|
|
||||||
|
|
||||||
# Be extremely careful changing this function. Historical billing periods
|
# Be extremely careful changing this function. Historical billing periods
|
||||||
# are not stored anywhere, and are just computed on the fly using this
|
# 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
|
# function. Any change you make here should return the same value (or be
|
||||||
|
|
|
@ -1363,7 +1363,7 @@ class StripeTest(StripeTestCase):
|
||||||
# Invoice with licenses < MIN_INVOICED_LICENSES
|
# Invoice with licenses < MIN_INVOICED_LICENSES
|
||||||
check_min_licenses_error(True, MIN_INVOICED_LICENSES - 1, MIN_INVOICED_LICENSES)
|
check_min_licenses_error(True, MIN_INVOICED_LICENSES - 1, MIN_INVOICED_LICENSES)
|
||||||
# Invoice with licenses < seat count
|
# Invoice with licenses < seat count
|
||||||
with patch("corporate.views.MIN_INVOICED_LICENSES", 3):
|
with patch("corporate.lib.stripe.MIN_INVOICED_LICENSES", 3):
|
||||||
check_min_licenses_error(True, 4, self.seat_count)
|
check_min_licenses_error(True, 4, self.seat_count)
|
||||||
# Invoice with not setting licenses
|
# Invoice with not setting licenses
|
||||||
check_min_licenses_error(True, None, MIN_INVOICED_LICENSES)
|
check_min_licenses_error(True, None, MIN_INVOICED_LICENSES)
|
||||||
|
|
|
@ -14,7 +14,6 @@ from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from corporate.lib.stripe import (
|
from corporate.lib.stripe import (
|
||||||
DEFAULT_INVOICE_DAYS_UNTIL_DUE,
|
DEFAULT_INVOICE_DAYS_UNTIL_DUE,
|
||||||
MAX_INVOICED_LICENSES,
|
|
||||||
MIN_INVOICED_LICENSES,
|
MIN_INVOICED_LICENSES,
|
||||||
STRIPE_PUBLISHABLE_KEY,
|
STRIPE_PUBLISHABLE_KEY,
|
||||||
BillingError,
|
BillingError,
|
||||||
|
@ -31,6 +30,7 @@ from corporate.lib.stripe import (
|
||||||
stripe_get_customer,
|
stripe_get_customer,
|
||||||
unsign_string,
|
unsign_string,
|
||||||
update_sponsorship_status,
|
update_sponsorship_status,
|
||||||
|
validate_licenses,
|
||||||
)
|
)
|
||||||
from corporate.models import (
|
from corporate.models import (
|
||||||
CustomerPlan,
|
CustomerPlan,
|
||||||
|
@ -78,27 +78,13 @@ def check_upgrade_parameters(
|
||||||
if license_management not in VALID_LICENSE_MANAGEMENT_VALUES: # nocoverage
|
if license_management not in VALID_LICENSE_MANAGEMENT_VALUES: # nocoverage
|
||||||
raise BillingError("unknown license_management")
|
raise BillingError("unknown license_management")
|
||||||
|
|
||||||
|
charge_automatically = False
|
||||||
if billing_modality == "charge_automatically":
|
if billing_modality == "charge_automatically":
|
||||||
|
charge_automatically = True
|
||||||
if not has_stripe_token:
|
if not has_stripe_token:
|
||||||
raise BillingError("autopay with no card")
|
raise BillingError("autopay with no card")
|
||||||
|
|
||||||
min_licenses = seat_count
|
validate_licenses(charge_automatically, licenses, seat_count)
|
||||||
max_licenses = None
|
|
||||||
if billing_modality == "send_invoice":
|
|
||||||
min_licenses = max(seat_count, MIN_INVOICED_LICENSES)
|
|
||||||
max_licenses = MAX_INVOICED_LICENSES
|
|
||||||
|
|
||||||
if licenses is None or licenses < min_licenses:
|
|
||||||
raise BillingError(
|
|
||||||
"not enough licenses", _("You must invoice for at least {} users.").format(min_licenses)
|
|
||||||
)
|
|
||||||
|
|
||||||
if max_licenses is not None and licenses > max_licenses:
|
|
||||||
message = _(
|
|
||||||
"Invoices with more than {} licenses can't be processed from this page. To complete "
|
|
||||||
"the upgrade, please contact {}."
|
|
||||||
).format(max_licenses, settings.ZULIP_ADMINISTRATOR)
|
|
||||||
raise BillingError("too many licenses", message)
|
|
||||||
|
|
||||||
|
|
||||||
# Should only be called if the customer is being charged automatically
|
# Should only be called if the customer is being charged automatically
|
||||||
|
|
Loading…
Reference in New Issue