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
 |