52 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from django.db import models
 | 
						|
from membership.models import StripeCustomer, CustomUser
 | 
						|
from utils.models import BillingAddress
 | 
						|
 | 
						|
 | 
						|
class DonatorStatus(models.Model):
 | 
						|
    ACTIVE = 'active'
 | 
						|
    CANCELED = 'canceled'
 | 
						|
 | 
						|
    STATUS_CHOICES = (
 | 
						|
        (ACTIVE, 'Active'),
 | 
						|
        (CANCELED, 'Canceled')
 | 
						|
    )
 | 
						|
    user = models.OneToOneField(CustomUser)
 | 
						|
    status = models.CharField(choices=STATUS_CHOICES, max_length=10, default=ACTIVE)
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "%s - %s " % (self.user.email, self.status)
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def create(cls, user):
 | 
						|
        cls.objects.get_or_create(user=user)
 | 
						|
 | 
						|
    def set_active(self):
 | 
						|
        self.status = DonatorStatus.ACTIVE
 | 
						|
        self.save()
 | 
						|
 | 
						|
 | 
						|
class Donation(models.Model):
 | 
						|
 | 
						|
    donation = models.FloatField()
 | 
						|
    donator = models.ForeignKey(StripeCustomer)
 | 
						|
    created_at = models.DateTimeField(auto_now_add=True)
 | 
						|
    billing_address = models.ForeignKey(BillingAddress)
 | 
						|
    last4 = models.CharField(max_length=4)
 | 
						|
    cc_brand = models.CharField(max_length=10)
 | 
						|
    stripe_charge_id = models.CharField(max_length=100, null=True)
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def create(cls, data):
 | 
						|
        obj = cls.objects.create(**data)
 | 
						|
        return obj
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def get_total_donations_amount(cls):
 | 
						|
        return sum(cls.objects.all().values_list('donation', flat=True))
 | 
						|
 | 
						|
    def set_stripe_charge(self, stripe_charge):
 | 
						|
        self.stripe_charge_id = stripe_charge.id
 | 
						|
        self.last4 = stripe_charge.source.last4
 | 
						|
        self.cc_brand = stripe_charge.source.brand
 | 
						|
        self.save
 |