diff --git a/rowers/admin.py b/rowers/admin.py index 5e77e04f..f5907059 100644 --- a/rowers/admin.py +++ b/rowers/admin.py @@ -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) diff --git a/rowers/braintreestuff.py b/rowers/braintreestuff.py index 863b512d..7efd6345 100644 --- a/rowers/braintreestuff.py +++ b/rowers/braintreestuff.py @@ -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() diff --git a/rowers/models.py b/rowers/models.py index 04de22f5..a6d84e94 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -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) diff --git a/rowers/payments.py b/rowers/payments.py new file mode 100644 index 00000000..da477b0b --- /dev/null +++ b/rowers/payments.py @@ -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 + +