import braintree
|
|
from django.contrib.auth.models import User
|
|
from django.db import models
|
|
|
|
|
|
class Subscription(models.Model):
|
|
user = models.OneToOneField(User, blank=True, null=True)
|
|
customer_id = models.CharField(max_length=36, blank=True)
|
|
payment_method_token = models.CharField(max_length=35, blank=True)
|
|
subscription_id = models.CharField(max_length=10, blank=True)
|
|
|
|
def _get_braintree_sub(self):
|
|
if not hasattr(self, "_sub"):
|
|
print("getting subscription over network")
|
|
self._sub = braintree.Subscription.find(self.subscription_id)
|
|
|
|
return self._sub
|
|
|
|
def _get_braintree_payment_method(self):
|
|
if not hasattr(self, "_pm"):
|
|
print("getting payment method over network")
|
|
self._pm = braintree.PaymentMethod.find(self.payment_method_token)
|
|
|
|
return self._pm
|
|
|
|
def is_active(self):
|
|
if not self.subscription_id:
|
|
return False
|
|
|
|
o = self._get_braintree_sub()
|
|
return o.status == "Active"
|
|
|
|
def price(self):
|
|
o = self._get_braintree_sub()
|
|
return int(o.price)
|
|
|
|
def next_billing_date(self):
|
|
o = self._get_braintree_sub()
|
|
return o.next_billing_date
|
|
|
|
def pm_is_credit_card(self):
|
|
return isinstance(self._get_braintree_payment_method(),
|
|
braintree.credit_card.CreditCard)
|
|
|
|
def pm_is_paypal(self):
|
|
return isinstance(self._get_braintree_payment_method(),
|
|
braintree.paypal_account.PayPalAccount)
|
|
|
|
def card_type(self):
|
|
o = self._get_braintree_payment_method()
|
|
return o.card_type
|
|
|
|
def last_4(self):
|
|
o = self._get_braintree_payment_method()
|
|
return o.last_4
|
|
|
|
def paypal_email(self):
|
|
o = self._get_braintree_payment_method()
|
|
return o.email
|