Add refresh subscription button to admin backend

This commit is contained in:
Oliver Marks 2017-04-23 10:36:37 +01:00
parent f45af116f6
commit 22cd6c2397
5 changed files with 61 additions and 4 deletions

View File

@ -7,16 +7,47 @@ from mhackspace.subscriptions.payments import select_provider
from mhackspace.users.models import Membership, User
def update_subscriptions(provider_name):
provider = select_provider('gocardless')
Membership.objects.all().delete()
subscriptions = []
group = Group.objects.get(name='members')
for sub in provider.fetch_subscriptions():
try:
user_model = User.objects.get(email=sub.get('email'))
if sub.get('status') == 'active':
user_model.groups.add(group)
except User.DoesNotExist:
user_model = None
subscriptions.append(
Membership(
user=user_model,
email=sub.get('email'),
reference=sub.get('reference'),
payment=10.00,
date= sub.get('start_date'),
# date=timezone.now(),
status=Membership.lookup_status(name=sub.get('status'))
)
)
yield model_to_dict(subscriptions[-1])
class Command(BaseCommand):
help = 'Update user subscriptions'
def handle(self, *args, **options):
provider = select_provider('gocardless')
provider_name = 'gocardless'
self.stdout.write(
self.style.NOTICE(
'== Gocardless subscriptions =='))
'== %s subscriptions ==' % provider_name.capitalize()))
provider = select_provider('gocardless')
Membership.objects.all().delete()
subscriptions = []
@ -30,7 +61,6 @@ class Command(BaseCommand):
except User.DoesNotExist:
user_model = None
self.stdout.write(sub.get('status'))
subscriptions.append(
Membership(
user=user_model,

View File

@ -0,0 +1,7 @@
{% extends "admin/change_list.html" %}
{% block object-tools-items %}
<li>
<a href="refresh/payments/" class="grp-state-focus addlink">Refresh Subscriptions</a>
</li>
{{ block.super }}
{% endblock %}

View File

@ -6,13 +6,19 @@ from django import forms
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.conf.urls import url
from .models import User, Membership, MEMBERSHIP_STATUS_CHOICES
from mhackspace.subscriptions.management.commands.refresh_subscriptions import update_subscriptions
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = User
class MyUserCreationForm(UserCreationForm):
error_message = UserCreationForm.error_messages.update({
'duplicate_username': 'This username has already been taken.'
@ -40,6 +46,20 @@ class MyUserAdmin(AuthUserAdmin):
list_display = ('username', 'name', 'is_superuser')
search_fields = ['name']
def get_urls(self):
urls = super(MyUserAdmin, self).get_urls()
my_urls = [
url(r'^refresh/payments/$', self.admin_site.admin_view(self.refresh_payments))
]
return my_urls + urls
def refresh_payments(self, request):
for user in update_subscriptions(provider_name='gocardless'):
continue
self.message_user(request, 'Successfully imported refresh users payment status')
return HttpResponseRedirect(reverse('admin:feeds_article_changelist'))
@admin.register(Membership)
class MembershipAdmin(ModelAdmin):
list_display = ('user', 'payment', 'date', 'status')