Add refresh subscription button to admin backend
This commit is contained in:
parent
f45af116f6
commit
22cd6c2397
|
@ -7,16 +7,10 @@ from mhackspace.subscriptions.payments import select_provider
|
||||||
from mhackspace.users.models import Membership, User
|
from mhackspace.users.models import Membership, User
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
|
||||||
help = 'Update user subscriptions'
|
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def update_subscriptions(provider_name):
|
||||||
provider = select_provider('gocardless')
|
provider = select_provider('gocardless')
|
||||||
|
|
||||||
self.stdout.write(
|
|
||||||
self.style.NOTICE(
|
|
||||||
'== Gocardless subscriptions =='))
|
|
||||||
|
|
||||||
Membership.objects.all().delete()
|
Membership.objects.all().delete()
|
||||||
subscriptions = []
|
subscriptions = []
|
||||||
|
|
||||||
|
@ -30,7 +24,43 @@ class Command(BaseCommand):
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
user_model = None
|
user_model = None
|
||||||
|
|
||||||
self.stdout.write(sub.get('status'))
|
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_name = 'gocardless'
|
||||||
|
self.stdout.write(
|
||||||
|
self.style.NOTICE(
|
||||||
|
'== %s subscriptions ==' % provider_name.capitalize()))
|
||||||
|
|
||||||
|
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(
|
subscriptions.append(
|
||||||
Membership(
|
Membership(
|
||||||
user=user_model,
|
user=user_model,
|
||||||
|
|
|
@ -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 %}
|
|
@ -6,13 +6,19 @@ from django import forms
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
|
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
|
||||||
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
|
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 .models import User, Membership, MEMBERSHIP_STATUS_CHOICES
|
||||||
|
|
||||||
|
from mhackspace.subscriptions.management.commands.refresh_subscriptions import update_subscriptions
|
||||||
|
|
||||||
|
|
||||||
class MyUserChangeForm(UserChangeForm):
|
class MyUserChangeForm(UserChangeForm):
|
||||||
class Meta(UserChangeForm.Meta):
|
class Meta(UserChangeForm.Meta):
|
||||||
model = User
|
model = User
|
||||||
|
|
||||||
|
|
||||||
class MyUserCreationForm(UserCreationForm):
|
class MyUserCreationForm(UserCreationForm):
|
||||||
error_message = UserCreationForm.error_messages.update({
|
error_message = UserCreationForm.error_messages.update({
|
||||||
'duplicate_username': 'This username has already been taken.'
|
'duplicate_username': 'This username has already been taken.'
|
||||||
|
@ -40,6 +46,20 @@ class MyUserAdmin(AuthUserAdmin):
|
||||||
list_display = ('username', 'name', 'is_superuser')
|
list_display = ('username', 'name', 'is_superuser')
|
||||||
search_fields = ['name']
|
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)
|
@admin.register(Membership)
|
||||||
class MembershipAdmin(ModelAdmin):
|
class MembershipAdmin(ModelAdmin):
|
||||||
list_display = ('user', 'payment', 'date', 'status')
|
list_display = ('user', 'payment', 'date', 'status')
|
||||||
|
|
Loading…
Reference in New Issue