You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.3 KiB
137 lines
4.3 KiB
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'], |
|
)
|
|
|