Private
Public Access
1
0

updated models to add paid plan complexity

This commit is contained in:
Sander Roosendaal
2018-12-19 09:25:28 +01:00
parent 75261118c2
commit 0b79b0de98
4 changed files with 82 additions and 23 deletions

View File

@@ -22,9 +22,9 @@ class RowerInline(admin.StackedInline):
fieldsets = (
('Billing Details',
{'fields':('street_address','city','postal_code','country',)}),
{'fields':('street_address','city','postal_code','country','paymentprocessor','customer_id')}),
('Rower Plan',
{'fields':('rowerplan','paymenttype','planexpires','teamplanexpires','clubsize','protrialexpires','plantrialexpires',)}),
{'fields':('paidplan','rowerplan','paymenttype','planexpires','teamplanexpires','clubsize','protrialexpires','plantrialexpires',)}),
('Rower Settings',
{'fields':
('gdproptin','gdproptindate','weightcategory','sex','adaptiveclass','birthdate','getemailnotifications',
@@ -124,7 +124,7 @@ class VirtualRaceResultAdmin(admin.ModelAdmin):
search_fields = ['race__name','username']
class PaidPlanAdmin(admin.ModelAdmin):
list_display = ('name','shortname','price','paymenttype')
list_display = ('name','shortname','price','paymenttype','paymentprocessor','clubsize')
admin.site.unregister(User)
admin.site.register(User,UserAdmin)

View File

@@ -42,11 +42,11 @@ def get_client_token(rower):
def get_plans_costs():
plans = gateway.plan.all()
localplans = PaidPlan.object.all()
localplans = PaidPlan.object.filter(paymentprocessor='braintree')
for plan in localplans:
for btplan in btplans:
if int(btplan.id) == plan.braintree_id:
if int(btplan.id) == plan.external_id:
plan.price = float(x)
plan.save()

View File

@@ -550,14 +550,36 @@ paymenttypes = (
('recurring','recurring')
)
paymentprocessors = (
('paypal','PayPal'),
('braintree','BrainTree')
)
class PaidPlan(models.Model):
shortname = models.CharField(max_length=50,choices=plans)
name = models.CharField(max_length=200)
braintree_id = models.IntegerField(blank=True,null=True,default=None)
external_id = models.IntegerField(blank=True,null=True,default=None)
price = models.FloatField(blank=True,null=True,default=None)
paymenttype = models.CharField(max_length=50,choices=paymenttypes)
paymentprocessor = models.CharField(
max_length=50,choices=paymentprocessors,default='braintree')
paymenttype = models.CharField(
default='single',max_length=30,
verbose_name='Payment Type',
choices=paymenttypes,
)
clubsize = models.IntegerField(default=0)
def __unicode__(self):
return '{name} - {shortname} at {price} EURO ({paymenttype} payment) / {paymentprocessor}'.format(
name = self.name,
shortname = self.shortname,
price = self.price,
paymenttype = self.paymenttype,
paymentprocessor = self.paymentprocessor,
)
# Extension of User with rowing specific data
class Rower(models.Model):
adaptivetypes = mytypes.adaptivetypes
@@ -599,12 +621,33 @@ class Rower(models.Model):
street_address = models.CharField(default='',blank=True,null=True,max_length=200)
city = models.CharField(default='',blank=True,null=True,max_length=200)
postal_code = models.CharField(default='',blank=True,null=True,max_length=200)
customer_id = models.CharField(default=None,null=True,blank=True,max_length=200)
rowerplan = models.CharField(default='basic',max_length=30,
choices=plans)
paymenttype = models.CharField(
default='single',max_length=30,
verbose_name='Payment Type',
choices=paymenttypes,
)
paymentprocessor = models.CharField(max_length=50,
choices=paymentprocessors,
default='braintree')
paidplan = models.ForeignKey(PaidPlan,null=True,default=None)
planexpires = models.DateField(default=timezone.now)
teamplanexpires = models.DateField(default=timezone.now)
clubsize = models.IntegerField(default=0)
protrialexpires = models.DateField(blank=True,null=True)
plantrialexpires = models.DateField(blank=True,null=True)
# Privacy Data
gdproptin = models.BooleanField(default=False)
gdproptindate = models.DateTimeField(blank=True,null=True)
# customer data
customer_id = models.IntegerField(default=None,null=True,blank=True)
# Heart Rate Zone data
max = models.IntegerField(default=192,verbose_name="Max Heart Rate")
@@ -729,20 +772,6 @@ class Rower(models.Model):
getimportantemails = models.BooleanField(default=True,
verbose_name='Get Important Emails')
rowerplan = models.CharField(default='basic',max_length=30,
choices=plans)
paymenttype = models.CharField(
default='single',max_length=30,
verbose_name='Payment Type',
choices=paymenttypes,
)
planexpires = models.DateField(default=timezone.now)
teamplanexpires = models.DateField(default=timezone.now)
clubsize = models.IntegerField(default=0)
protrialexpires = models.DateField(blank=True,null=True)
plantrialexpires = models.DateField(blank=True,null=True)
# Friends/Team
friends = models.ManyToManyField("self",blank=True)

30
rowers/payments.py Normal file
View File

@@ -0,0 +1,30 @@
from rowers.models import Rower,PaidPlan
# run once - copies plans to paypal
def planstopaypal():
plans = PaidPlan.objects.all()
for plan in plans:
plan.pk = None
plan.paymentprocessor = 'paypal'
plan.external_id = None
plan.save()
def setrowerplans():
rowers = Rower.objects.all()
for r in rowers:
if r.rowerplan != 'basic':
paidplans = PaidPlan.objects.filter(
shortname = r.rowerplan,
paymenttype = r.paymenttype,
clubsize = r.clubsize)
if paidplans:
r.paidplan = paidplans[0]
r.paymenttype = 'paypal'
r.save()
else:
print 'Could not set plan for ',r