Project

General

Profile

Statistics
| Branch: | Revision:

root / crm / robocrm / admin.py @ 4d22fe8e

History | View | Annotate | Download (2.6 KB)

1 4d22fe8e Tom Mullins
import string
2 3e2fcd4e Tom Mullins
from robocrm.models import Machine, Event, Project, RoboResource
3 4d22fe8e Tom Mullins
from django.core.mail import send_mail
4 3e2fcd4e Tom Mullins
from django.forms import ModelForm, ValidationError
5 7646a522 Julian Binder
from django.contrib import admin
6
from django.contrib.auth.admin import UserAdmin
7
from django.contrib.auth.models import User
8 3e2fcd4e Tom Mullins
from django.contrib.auth.forms import UserCreationForm
9 7646a522 Julian Binder
from robocrm.models import RoboUser
10
11 3e2fcd4e Tom Mullins
class UserProfileInline(admin.StackedInline):
12 7646a522 Julian Binder
  model = RoboUser
13 3e2fcd4e Tom Mullins
  can_delete = False
14 7646a522 Julian Binder
  verbose_name_plural = 'profile'
15 75228955 Julian Binder
  filter_horizontal = ('machines',)
16 7646a522 Julian Binder
17 3e2fcd4e Tom Mullins
  def get_fieldsets(self, request, obj=None):
18
    if obj:
19
      # change user form
20
      return super(UserProfileInline, self).get_fieldsets(request, obj)
21
    else:
22
      # add user form
23
      return (
24
          (None, {'fields':
25
            ('cell', 'class_level', 'grad_year', 'major', 'sec_major_one',
26
              'sec_major_two', 'club_rank', 'dues_paid', 'tshirt_rec',
27
              'bench_status', 'shop_status')
28
          }),)
29
30 4d22fe8e Tom Mullins
def subscribe_to_list(first_name, last_name, email, listname):
31
  if email == '':
32
    return
33
34
  name = string.strip(first_name + ' ' + last_name)
35
  if name == '':
36
    from_addr = email
37
  else:
38
    from_addr = '"' + name + '" <' + email + '>'
39
40
  to_addr = listname + '-subscribe@lists.andrew.cmu.edu'
41
42
  send_mail('', '', from_addr, [to_addr])
43
44 3e2fcd4e Tom Mullins
class RoboUserCreationForm(ModelForm):
45
  # This is modelled directly after django.contrib.auth.forms.UserCreationForm 
46
47
  error_messages = UserCreationForm.error_messages
48
  username = UserCreationForm.declared_fields['username']
49
  Meta = UserCreationForm.Meta
50
51
  def clean_username(self):
52
    username = self.cleaned_data['username']
53
    try:
54
      User.objects.get(username=username)
55
    except User.DoesNotExist:
56
      return username
57
    raise ValidationError(self.error_messages['duplicate_username'])
58
59
  def save(self, commit=True):
60
    user = super(RoboUserCreationForm, self).save(commit=False)
61
    user.set_password('geek6811')
62
    if commit:
63
      user.save()
64 4d22fe8e Tom Mullins
    subscribe_to_list(user.first_name, user.last_name, user.email, 'roboclub-gb')
65 3e2fcd4e Tom Mullins
    return user
66
67
class RoboUserAdmin(UserAdmin):
68
  inlines = (UserProfileInline, )
69
  add_fieldsets = (
70
      (None, {'fields': ('username',)}),
71
      ('Personal info', {
72
          'fields': ('first_name', 'last_name', 'email')}),
73
  )
74
  add_form = RoboUserCreationForm
75 95250ecf Julian Binder
  list_display = ('username', 'email', 'first_name', 'last_name')
76 75228955 Julian Binder
  search_fields = ['username', 'email', 'first_name', 'last_name']
77
78 7646a522 Julian Binder
79
admin.site.unregister(User)
80 3e2fcd4e Tom Mullins
admin.site.register(User, RoboUserAdmin)
81 7646a522 Julian Binder
admin.site.register(Machine)
82
admin.site.register(Event)
83
admin.site.register(Project)
84
admin.site.register(RoboResource)