|
|
|
from django.contrib.auth.models import User, Group
|
|
|
|
from rest_framework import serializers
|
|
|
|
from rest_framework.exceptions import ValidationError
|
|
|
|
from rest_auth.registration.serializers import RegisterSerializer
|
|
|
|
|
|
|
|
from . import models, old_models
|
|
|
|
|
|
|
|
#custom_error = lambda x: ValidationError(dict(non_field_errors=x))
|
|
|
|
|
|
|
|
class UserTrainingSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Training
|
|
|
|
exclude = ['user']
|
|
|
|
depth = 2
|
|
|
|
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
|
|
training = UserTrainingSerializer(many=True)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = User
|
|
|
|
fields = ['id', 'username', 'email', 'member', 'transactions', 'cards', 'training']
|
|
|
|
depth = 1
|
|
|
|
|
|
|
|
|
|
|
|
# member viewing member list or other member
|
|
|
|
class OtherMemberSerializer(serializers.ModelSerializer):
|
|
|
|
q = serializers.CharField(write_only=True, max_length=64)
|
|
|
|
seq = serializers.IntegerField(write_only=True, )
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.Member
|
|
|
|
fields = ['q', 'seq', 'preferred_name', 'last_name', 'status', 'current_start_date']
|
|
|
|
|
|
|
|
# member viewing himself
|
|
|
|
class MemberSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Member
|
|
|
|
fields = '__all__'
|
|
|
|
read_only_fields = ['user', 'application_date', 'current_start_date', 'vetted_date', 'monthly_fees', 'old_member_id']
|
|
|
|
|
|
|
|
# adming viewing member
|
|
|
|
class AdminMemberSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Member
|
|
|
|
fields = '__all__'
|
|
|
|
read_only_fields = ['id', 'user']
|
|
|
|
|
|
|
|
|
|
|
|
class TransactionSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Transaction
|
|
|
|
fields = '__all__'
|
|
|
|
|
|
|
|
|
|
|
|
class SessionDetailSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Training
|
|
|
|
exclude = ['user']
|
|
|
|
|
|
|
|
class SessionSerializer(serializers.ModelSerializer):
|
|
|
|
student_count = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
|
|
model = models.Session
|
|
|
|
fields = '__all__'
|
|
|
|
depth = 1
|
|
|
|
def get_student_count(self, obj):
|
|
|
|
return len(obj.students.all())
|
|
|
|
|
|
|
|
|
|
|
|
class CourseSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Course
|
|
|
|
fields = '__all__'
|
|
|
|
|
|
|
|
class CourseDetailSerializer(serializers.ModelSerializer):
|
|
|
|
sessions = SessionSerializer(many=True)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.Course
|
|
|
|
fields = '__all__'
|
|
|
|
depth = 1
|
|
|
|
|
|
|
|
class AdminCourseSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = models.Course
|
|
|
|
fields = '__all__'
|
|
|
|
|
|
|
|
|
|
|
|
class RegistrationSerializer(RegisterSerializer):
|
|
|
|
first_name = serializers.CharField(max_length=32)
|
|
|
|
last_name = serializers.CharField(max_length=32)
|
|
|
|
existing_member = serializers.ChoiceField(['true', 'false'])
|
|
|
|
|
|
|
|
def custom_signup(self, request, user):
|
|
|
|
data = request.data
|
|
|
|
|
|
|
|
if data['existing_member'] == 'true':
|
|
|
|
old_members = old_models.Members.objects.using('old_portal')
|
|
|
|
try:
|
|
|
|
old_member = old_members.get(email=data['email'])
|
|
|
|
except old_models.Members.DoesNotExist:
|
|
|
|
user.delete()
|
|
|
|
raise ValidationError(dict(email='Unable to find email in old database.'))
|
|
|
|
|
|
|
|
member = models.Member.objects.get(id=old_member.id)
|
|
|
|
|
|
|
|
if member.user:
|
|
|
|
raise ValidationError(dict(email='Old member already claimed.'))
|
|
|
|
|
|
|
|
member.user = user
|
|
|
|
member.first_name = data['first_name']
|
|
|
|
member.last_name = data['last_name']
|
|
|
|
member.preferred_name = data['first_name']
|
|
|
|
member.save()
|
|
|
|
|
|
|
|
transactions = models.Transaction.objects.filter(member_id=member.id)
|
|
|
|
for t in transactions:
|
|
|
|
t.user = user
|
|
|
|
t.save()
|
|
|
|
|
|
|
|
cards = models.Card.objects.filter(member_id=member.id)
|
|
|
|
for c in cards:
|
|
|
|
c.user = user
|
|
|
|
c.save()
|
|
|
|
|
|
|
|
training = models.Training.objects.filter(member_id=member.id)
|
|
|
|
for t in training:
|
|
|
|
t.user = user
|
|
|
|
t.save()
|
|
|
|
|
|
|
|
else:
|
|
|
|
models.Member.objects.create(
|
|
|
|
user=user,
|
|
|
|
first_name=data['first_name'],
|
|
|
|
last_name=data['last_name'],
|
|
|
|
preferred_name=data['first_name'],
|
|
|
|
)
|