From 5cac8f3fdef659c085a2c94e421bc9920bf6ab8f Mon Sep 17 00:00:00 2001 From: Nick Sergeant Date: Wed, 30 Sep 2015 21:46:11 -0400 Subject: [PATCH] Teams pricing. --- teams/migrations/0005_auto_20150930_2124.py | 24 +++++++ teams/models.py | 9 +-- teams/templates/teams/for-teams.html | 78 ++++++++++++++++++++- teams/views.py | 22 +++++- 4 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 teams/migrations/0005_auto_20150930_2124.py diff --git a/teams/migrations/0005_auto_20150930_2124.py b/teams/migrations/0005_auto_20150930_2124.py new file mode 100644 index 0000000..c5e146a --- /dev/null +++ b/teams/migrations/0005_auto_20150930_2124.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('teams', '0004_auto_20150930_1526'), + ] + + operations = [ + migrations.AddField( + model_name='team', + name='stripe_id', + field=models.CharField(max_length=100, null=True, blank=True), + ), + migrations.AlterField( + model_name='team', + name='name', + field=models.CharField(max_length=30), + ), + ] diff --git a/teams/models.py b/teams/models.py index 01d409d..1e9cc53 100644 --- a/teams/models.py +++ b/teams/models.py @@ -4,12 +4,13 @@ from snipts.utils import slugify_uniquely class Team(models.Model): - user = models.OneToOneField(User, blank=True, null=True) - owner = models.ForeignKey(User, related_name='owner') - name = models.CharField(max_length=30) email = models.EmailField(max_length=255) - slug = models.SlugField(max_length=255, blank=True) members = models.ManyToManyField(User, related_name='member', blank=True) + name = models.CharField(max_length=30) + owner = models.ForeignKey(User, related_name='owner') + slug = models.SlugField(max_length=255, blank=True) + stripe_id = models.CharField(max_length=100, null=True, blank=True) + user = models.OneToOneField(User, blank=True, null=True) created = models.DateTimeField(auto_now_add=True, editable=False) modified = models.DateTimeField(auto_now=True, editable=False) diff --git a/teams/templates/teams/for-teams.html b/teams/templates/teams/for-teams.html index 5830157..51e328d 100644 --- a/teams/templates/teams/for-teams.html +++ b/teams/templates/teams/for-teams.html @@ -9,6 +9,11 @@ {% endblock %} {% block content %} + {% if request.GET.declined %} +
+ {{ request.GET.declined }} You have not been charged. Please try again. +
+ {% endif %}
@@ -39,10 +44,81 @@

+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + Visa + MasterCard + Discover + American Express +
+
+
+ +
+ + +
+
+
+ +
+ +
+
{% csrf_token %} - +
diff --git a/teams/views.py b/teams/views.py index 1080f9d..4e19d03 100644 --- a/teams/views.py +++ b/teams/views.py @@ -1,8 +1,11 @@ +import os +import stripe import uuid from annoying.decorators import render_to +from django.conf import settings from django.contrib.auth.models import User -from django.http import HttpResponseBadRequest +from django.http import HttpResponseRedirect, HttpResponseBadRequest from django.shortcuts import get_object_or_404 from teams.models import Team @@ -28,9 +31,26 @@ def team_members(request, username): def for_teams_complete(request): if request.method == 'POST' and request.user.is_authenticated(): + token = request.POST['token'] + stripe.api_key = os.environ.get('STRIPE_SECRET_KEY', + settings.STRIPE_SECRET_KEY) + + plan = request.POST['plan'] + + try: + customer = stripe.Customer.create(card=token, + plan=plan, + email=request.user.email) + except stripe.CardError, e: + error_message = e.json_body['error']['message'] + return HttpResponseRedirect('/for-teams/?declined=%s' % + error_message or + 'Your card was declined.') + team = Team(name=request.POST['name'], email=request.POST['email'], owner=request.user) + team.stripe_id = customer.id team.save() user = User.objects.create_user(team.slug,