diff --git a/mhackspace/subscriptions/management/__init_.py b/mhackspace/subscriptions/management/__init_.py new file mode 100644 index 0000000..e69de29 diff --git a/mhackspace/subscriptions/management/commands/__init__.py b/mhackspace/subscriptions/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mhackspace/subscriptions/management/commands/refresh_subscriptions.py b/mhackspace/subscriptions/management/commands/refresh_subscriptions.py index aeecff9..24cd193 100644 --- a/mhackspace/subscriptions/management/commands/refresh_subscriptions.py +++ b/mhackspace/subscriptions/management/commands/refresh_subscriptions.py @@ -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, diff --git a/mhackspace/templates/admin/users/user/change_list.html b/mhackspace/templates/admin/users/user/change_list.html new file mode 100644 index 0000000..1da159d --- /dev/null +++ b/mhackspace/templates/admin/users/user/change_list.html @@ -0,0 +1,7 @@ +{% extends "admin/change_list.html" %} +{% block object-tools-items %} +
  • + Refresh Subscriptions +
  • + {{ block.super }} +{% endblock %} diff --git a/mhackspace/users/admin.py b/mhackspace/users/admin.py index 5ec411f..45402b0 100644 --- a/mhackspace/users/admin.py +++ b/mhackspace/users/admin.py @@ -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')