from django.db import models from accounts.models import BaseModel, IAmPrincipal, IAmPrincipalType from django.utils.translation import gettext_lazy as _ # Create your models here. class Plan(BaseModel): title = models.CharField(max_length=255) days = models.PositiveIntegerField() class Meta: db_table = "plan" def __str__(self): return self.title class Subscription(BaseModel): title = models.CharField(max_length=255) plan = models.ForeignKey( Plan, related_name="subscription_plan", on_delete=models.CASCADE ) amount = models.DecimalField(max_digits=14, decimal_places=2, default=0.00) class Meta: db_table = "subscription" def __str__(self): return self.title class SubscriptionStatus(models.TextChoices): ACTIVE = 'active', _('Active') EXPIRED = 'expired', _('Expired') INACTIVE = 'inactive', _('Inactive') class PrincipalSubscription(BaseModel): subscription = models.ForeignKey( Subscription, related_name="subscription_reference", on_delete=models.CASCADE ) principal = models.ForeignKey( IAmPrincipal, related_name="principal_subscription", on_delete=models.CASCADE ) is_paid = models.BooleanField(default=False) auto_renew = models.BooleanField(default=False) status = models.CharField( max_length=255, choices=SubscriptionStatus.choices, default=SubscriptionStatus.ACTIVE, ) start_date = models.DateField() end_date = models.DateField() order_id = models.CharField(max_length=255, null=True, blank=True) cancelled = models.BooleanField(default=False) cancelled_date_time = models.DateTimeField(null=True, blank=True) grace_period_end_date = models.DateField(null=True, blank=True) stripe_customer_id = models.CharField(max_length=255, null=True, blank=True) payment_intent_id = models.CharField(max_length=255, null=True, blank=True) payment_intent_client_secret = models.CharField(max_length=255, null=True, blank=True) class Meta: db_table = "principal_subscription" def __str__(self): return f"{self.subscription} - {self.principal.first_name}"