snipt/teams/views.py

159 lines
4.6 KiB
Python
Raw Normal View History

2015-09-30 18:46:11 -07:00
import os
import stripe
2015-09-30 13:33:05 -07:00
import uuid
2015-09-22 07:29:29 -07:00
from annoying.decorators import render_to
2015-09-30 18:46:11 -07:00
from django.conf import settings
2015-10-18 12:46:21 -07:00
from django.contrib.auth.decorators import login_required
2015-09-22 07:29:29 -07:00
from django.contrib.auth.models import User
2015-10-15 19:37:54 -07:00
from django.http import Http404, HttpResponseRedirect, HttpResponseBadRequest
2015-09-30 13:33:05 -07:00
from django.shortcuts import get_object_or_404
2015-09-22 07:29:29 -07:00
from teams.models import Team
@render_to('teams/for-teams.html')
def for_teams(request):
if request.user.is_authenticated():
profile = request.user.profile
profile.teams_beta_seen = True
profile.save()
return {}
@login_required
@render_to('teams/for-teams-complete.html')
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['team-name'],
email=request.POST['email'],
plan=plan,
owner=request.user)
team.stripe_id = customer.id
team.save()
user = User.objects.create_user(team.slug,
team.email,
str(uuid.uuid4()))
team.user = user
team.save()
return {
'team': team
}
else:
return HttpResponseBadRequest()
2015-10-18 12:46:21 -07:00
@login_required
2015-10-15 19:37:54 -07:00
@render_to('teams/team-billing.html')
def team_billing(request, username):
team = get_object_or_404(Team, slug=username, disabled=False)
2015-10-16 05:34:52 -07:00
if team.owner != request.user:
raise Http404
stripe.api_key = os.environ.get('STRIPE_SECRET_KEY',
settings.STRIPE_SECRET_KEY)
customer = stripe.Customer.retrieve(team.stripe_id)
data = {
'last4': customer.active_card.last4,
'created': customer.created,
'email': customer.email,
'team': team
}
if customer.subscription:
data['amount'] = customer.subscription.plan.amount
data['interval'] = customer.subscription.plan.interval
data['name'] = customer.subscription.plan.name
data['status'] = customer.subscription.status
data['nextBill'] = customer.subscription.current_period_end
else:
data['status'] = 'inactive'
return data
2015-10-15 19:37:54 -07:00
return {
'team': team
}
2015-10-18 12:46:21 -07:00
@login_required
2015-09-30 13:33:05 -07:00
@render_to('teams/team-members.html')
def team_members(request, username):
team = get_object_or_404(Team, slug=username, disabled=False)
2015-10-18 12:46:21 -07:00
if not team.user_is_member(request.user):
raise Http404
2015-09-30 13:33:05 -07:00
return {
'team': team
}
2015-10-18 12:46:21 -07:00
@login_required
2015-10-17 11:46:37 -07:00
def add_team_member(request, username, member):
team = get_object_or_404(Team, slug=username, disabled=False)
2015-10-17 11:46:37 -07:00
user = get_object_or_404(User, username=member)
if (team.owner != request.user):
raise Http404
if ((team.members.all().count() + 1) > team.member_limit):
return HttpResponseRedirect('/' + team.slug +
'/members/?limit-reached')
else:
team.members.add(user)
return HttpResponseRedirect('/' + team.slug + '/members/')
2015-10-17 11:58:43 -07:00
2015-10-18 12:46:21 -07:00
@login_required
2015-10-17 11:58:43 -07:00
def remove_team_member(request, username, member):
team = get_object_or_404(Team, slug=username, disabled=False)
2015-10-17 11:58:43 -07:00
user = get_object_or_404(User, username=member)
if (team.owner != request.user):
raise Http404
team.members.remove(user)
2015-10-17 11:46:37 -07:00
return HttpResponseRedirect('/' + team.slug + '/members/')
2015-10-18 12:46:21 -07:00
@login_required
def cancel_team_subscription(request, username):
2015-09-30 18:46:11 -07:00
if request.method != 'POST':
raise Http404
2015-09-30 18:46:11 -07:00
team = get_object_or_404(Team, slug=username, disabled=False)
if team.owner != request.user:
raise Http404
2015-09-22 07:29:29 -07:00
stripe.api_key = os.environ.get('STRIPE_SECRET_KEY',
settings.STRIPE_SECRET_KEY)
customer = stripe.Customer.retrieve(team.stripe_id)
customer.delete()
2015-09-22 07:29:29 -07:00
team.disabled = True
team.stripe_id = None
2015-10-25 19:53:16 -07:00
team.plan = None
team.save()
2015-09-22 07:29:29 -07:00
return HttpResponseRedirect('/' + team.slug + '/?team-cancelled=true')