corporate/models: Modify Customer to accommodate self-hosted customers.

This is a part of our efforts to introduce billing for our on-premise
customers.
This commit is contained in:
Eeshan Garg
2021-11-20 19:20:14 +05:30
committed by Tim Abbott
parent f760850993
commit a3095331eb
4 changed files with 62 additions and 2 deletions

View File

@@ -8,6 +8,7 @@ from django.db import models
from django.db.models import CASCADE
from zerver.models import Realm, UserProfile
from zilencer.models import RemoteZulipServer
class Customer(models.Model):
@@ -17,7 +18,10 @@ class Customer(models.Model):
and the active plan, if any.
"""
realm: Realm = models.OneToOneField(Realm, on_delete=CASCADE)
realm: Optional[Realm] = models.OneToOneField(Realm, on_delete=CASCADE, null=True)
remote_server: Optional[RemoteZulipServer] = models.OneToOneField(
RemoteZulipServer, on_delete=CASCADE, null=True
)
stripe_customer_id: Optional[str] = models.CharField(max_length=255, null=True, unique=True)
sponsorship_pending: bool = models.BooleanField(default=False)
# A percentage, like 85.
@@ -30,6 +34,20 @@ class Customer(models.Model):
# they purchased.
exempt_from_from_license_number_check: bool = models.BooleanField(default=False)
@property
def is_self_hosted(self) -> bool:
is_self_hosted = self.remote_server is not None
if is_self_hosted:
assert self.realm is None
return is_self_hosted
@property
def is_cloud(self) -> bool:
is_cloud = self.realm is not None
if is_cloud:
assert self.remote_server is None
return is_cloud
def __str__(self) -> str:
return f"<Customer {self.realm} {self.stripe_customer_id}>"