|
@@ -5,7 +5,7 @@ from django.shortcuts import render, get_object_or_404
|
|
|
from django.contrib import admin
|
|
|
from django.contrib import messages
|
|
|
from django.contrib.auth.admin import UserAdmin
|
|
|
-from django.contrib.auth.models import Group
|
|
|
+from django.contrib.auth.models import Group, Permission
|
|
|
from django.http import HttpResponseRedirect
|
|
|
from django.conf.urls import url
|
|
|
from django.db.models.query import QuerySet
|
|
@@ -13,7 +13,7 @@ from django.core.urlresolvers import reverse
|
|
|
from django.utils.html import format_html
|
|
|
|
|
|
from coin.members.models import (
|
|
|
- Member, CryptoKey, LdapUser, MembershipFee, OfferSubscription)
|
|
|
+ Member, CryptoKey, LdapUser, MembershipFee, OfferSubscription, RowLevelPermission)
|
|
|
from coin.members.membershipfee_filter import MembershipFeeFilter
|
|
|
from coin.members.forms import MemberChangeForm, MemberCreationForm
|
|
|
from coin.utils import delete_selected
|
|
@@ -68,42 +68,46 @@ class MemberAdmin(UserAdmin):
|
|
|
form = MemberChangeForm
|
|
|
add_form = MemberCreationForm
|
|
|
|
|
|
- fieldsets = (
|
|
|
- ('Adhérent', {'fields': (
|
|
|
- ('status', 'resign_date'),
|
|
|
- 'type',
|
|
|
- ('first_name', 'last_name', 'nickname'),
|
|
|
- 'organization_name',
|
|
|
- 'comments')}),
|
|
|
- ('Coordonnées', {'fields': (
|
|
|
+ def get_fieldsets(self, request, obj=None):
|
|
|
+ coord_fieldset = ('Coordonnées', {'fields': (
|
|
|
'email',
|
|
|
('home_phone_number', 'mobile_phone_number'),
|
|
|
'address',
|
|
|
- ('postal_code', 'city', 'country'))}),
|
|
|
- ('Authentification', {'fields': (
|
|
|
- ('username', 'password'))}),
|
|
|
- ('Permissions', {'fields': (
|
|
|
- ('is_active', 'is_staff', 'is_superuser'))}),
|
|
|
- (None, {'fields': ('date_last_call_for_membership_fees_email',)})
|
|
|
- )
|
|
|
-
|
|
|
- add_fieldsets = (
|
|
|
- ('Adhérent', {'fields': (
|
|
|
- 'status',
|
|
|
- 'type',
|
|
|
- ('first_name', 'last_name', 'nickname'),
|
|
|
- 'organization_name',
|
|
|
- 'comments')}),
|
|
|
- ('Coordonnées', {'fields': (
|
|
|
- 'email',
|
|
|
- ('home_phone_number', 'mobile_phone_number'),
|
|
|
- 'address',
|
|
|
- ('postal_code', 'city', 'country'))}),
|
|
|
- ('Authentification', {'fields': (
|
|
|
- ('username', 'password'),)}),
|
|
|
- ('Permissions', {'fields': (
|
|
|
- ('is_active', 'is_staff', 'is_superuser', 'date_joined'))})
|
|
|
- )
|
|
|
+ ('postal_code', 'city', 'country'))})
|
|
|
+ if request.user.is_superuser:
|
|
|
+ auth_fieldset = ('Authentification', {'fields': (
|
|
|
+ ('username', 'password'))})
|
|
|
+ else:
|
|
|
+ auth_fieldset = ('Authentification', {'fields': (
|
|
|
+ ('username',))})
|
|
|
+ perm_fieldset = ('Permissions', {'fields': (
|
|
|
+ ('is_active', 'is_staff', 'is_superuser', 'groups'))})
|
|
|
+
|
|
|
+ if obj:
|
|
|
+ return (
|
|
|
+ ('Adhérent', {'fields': (
|
|
|
+ ('status', 'date_joined', 'resign_date'),
|
|
|
+ 'type',
|
|
|
+ ('first_name', 'last_name', 'nickname'),
|
|
|
+ 'organization_name',
|
|
|
+ 'comments')}),
|
|
|
+ coord_fieldset,
|
|
|
+ auth_fieldset,
|
|
|
+ perm_fieldset,
|
|
|
+ (None, {'fields': ('date_last_call_for_membership_fees_email',)})
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ return (
|
|
|
+ ('Adhérent', {'fields': (
|
|
|
+ ('status', 'date_joined'),
|
|
|
+ 'type',
|
|
|
+ ('first_name', 'last_name', 'nickname'),
|
|
|
+ 'organization_name',
|
|
|
+ 'comments')}),
|
|
|
+ coord_fieldset,
|
|
|
+ auth_fieldset,
|
|
|
+ perm_fieldset
|
|
|
+ )
|
|
|
|
|
|
radio_fields = {"type": admin.HORIZONTAL}
|
|
|
|
|
@@ -111,16 +115,27 @@ class MemberAdmin(UserAdmin):
|
|
|
|
|
|
inlines = [CryptoKeyInline, MembershipFeeInline, OfferSubscriptionInline]
|
|
|
|
|
|
+ def get_queryset(self, request):
|
|
|
+ qs = super(MemberAdmin, self).get_queryset(request)
|
|
|
+ if request.user.is_superuser:
|
|
|
+ return qs
|
|
|
+ else:
|
|
|
+ offers = RowLevelPermission.get_manageable_offers(request.user)
|
|
|
+ return qs.filter(offersubscription__offer__in=offers).distinct()
|
|
|
+
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
|
+ readonly_fields = []
|
|
|
if obj:
|
|
|
# Remove help_text for readonly field (can't do that in the Form
|
|
|
# django seems to user help_text from model for readonly fields)
|
|
|
username_field = [
|
|
|
f for f in obj._meta.fields if f.name == 'username']
|
|
|
username_field[0].help_text = ''
|
|
|
- return ['username', ]
|
|
|
- else:
|
|
|
- return []
|
|
|
+
|
|
|
+ readonly_fields.append('username')
|
|
|
+ if not request.user.is_superuser:
|
|
|
+ readonly_fields += ['is_active', 'is_staff', 'is_superuser', 'groups', 'date_last_call_for_membership_fees_email']
|
|
|
+ return readonly_fields
|
|
|
|
|
|
def set_as_member(self, request, queryset):
|
|
|
rows_updated = queryset.update(status='member')
|
|
@@ -218,7 +233,13 @@ class MembershipFeeAdmin(admin.ModelAdmin):
|
|
|
'payment_date')
|
|
|
form = autocomplete_light.modelform_factory(MembershipFee, fields='__all__')
|
|
|
|
|
|
+
|
|
|
+class PermisionAdmin(admin.ModelAdmin):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
admin.site.register(Member, MemberAdmin)
|
|
|
admin.site.register(MembershipFee, MembershipFeeAdmin)
|
|
|
-admin.site.unregister(Group)
|
|
|
+# admin.site.unregister(Group)
|
|
|
# admin.site.register(LdapUser, LdapUserAdmin)
|
|
|
+admin.site.register(RowLevelPermission)
|