73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import absolute_import, unicode_literals
|
|
|
|
from django.contrib.admin import ModelAdmin
|
|
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, Rfid, Membership, MEMBERSHIP_STATUS_CHOICES
|
|
|
|
from mhackspace.subscriptions.management.commands.update_membership_status 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.'
|
|
})
|
|
|
|
class Meta(UserCreationForm.Meta):
|
|
model = User
|
|
|
|
def clean_username(self):
|
|
username = self.cleaned_data["username"]
|
|
try:
|
|
User.objects.get(username=username)
|
|
except User.DoesNotExist:
|
|
return username
|
|
raise forms.ValidationError(self.error_messages['duplicate_username'])
|
|
|
|
|
|
@admin.register(User)
|
|
class MyUserAdmin(AuthUserAdmin):
|
|
form = MyUserChangeForm
|
|
add_form = MyUserCreationForm
|
|
fieldsets = (
|
|
('User Profile', {'fields': ('name', '_image')}),
|
|
) + AuthUserAdmin.fieldsets
|
|
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_id', 'user', 'payment', 'date', 'status')
|
|
list_filter = ('status',)
|
|
|
|
|
|
@admin.register(Rfid)
|
|
class RfidAdmin(ModelAdmin):
|
|
list_display = ('code', 'description')
|
|
|