Skip to content

Commit

Permalink
refactor: separate registration receipt data from program data in the…
Browse files Browse the repository at this point in the history
… get-program-api
  • Loading branch information
AmooHashem committed Jul 9, 2024
1 parent 8c65213 commit fabd256
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 40 deletions.
3 changes: 2 additions & 1 deletion apps/fsm/serializers/answer_sheet_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,15 @@ class RegistrationReceiptSerializer(AnswerSheetSerializer):
academic_studentship = serializers.SerializerMethodField()

def get_school_studentship(self, obj):
print("@@@@@@@@@", obj)
return StudentshipSerializer(obj.user.school_studentship).data

def get_academic_studentship(self, obj):
return StudentshipSerializer(obj.user.academic_studentship).data

class Meta:
model = RegistrationReceipt
fields = ['id', 'user', 'answer_sheet_type', 'answer_sheet_of', 'answers', 'status', 'is_participating', 'team',
fields = ['id', 'user', 'answer_sheet_of', 'answers', 'status', 'is_participating', 'team',
'certificate', 'school_studentship', 'academic_studentship']
read_only_fields = ['id', 'user', 'status', 'answer_sheet_of',
'is_participating', 'team', 'certificate']
Expand Down
38 changes: 6 additions & 32 deletions apps/fsm/serializers/program_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,39 +87,13 @@ def validate(self, attrs):
def to_representation(self, instance):
representation = super(
ProgramSerializer, self).to_representation(instance)
user = self.context.get('request', None).user
receipt = RegistrationReceipt.objects.filter(user=user, answer_sheet_of=instance.registration_form).last(
) if not isinstance(user, AnonymousUser) else None
registration_form = instance.registration_form
representation['participants_count'] = len(instance.participants)
if instance.registration_form:
representation['has_certificate'] = instance.registration_form.has_certificate
representation['certificates_ready'] = instance.registration_form.certificates_ready
representation['registration_since'] = instance.registration_form.since
representation['registration_till'] = instance.registration_form.till
representation['audience_type'] = instance.registration_form.audience_type
if receipt:
representation[
'user_registration_status'] = instance.registration_form.check_time() if instance.registration_form.check_time() != 'ok' else receipt.status
representation['is_paid'] = receipt.is_paid
representation['is_user_participating'] = receipt.is_participating
representation['registration_receipt'] = receipt.id
else:
representation['user_registration_status'] = instance.registration_form.get_user_permission_status(
user) if instance.registration_form else None
representation['is_paid'] = False
representation['is_user_participating'] = False
representation['registration_receipt'] = None
if receipt and receipt.is_participating and instance.program_type == Program.ProgramType.Team:
if receipt.team:
representation['team'] = receipt.team.id
if receipt.team.team_head:
representation['team_head_name'] = receipt.team.team_head.user.full_name
representation['is_team_head'] = receipt.team.team_head.id == receipt.id
else:
representation['team'] = 'TeamNotCreatedYet'
representation['team_head_name'] = None
representation['is_team_head'] = False

representation['has_certificate'] = registration_form.has_certificate
representation['certificates_ready'] = registration_form.certificates_ready
representation['registration_since'] = registration_form.since
representation['registration_till'] = registration_form.till
representation['audience_type'] = registration_form.audience_type
return representation

class Meta:
Expand Down
2 changes: 1 addition & 1 deletion apps/fsm/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
router.register(r'fsm', FSMViewSet, basename='fsms')
router.register(r'article', ArticleViewSet, basename='articles')

router.register(r'registration', RegistrationViewSet, basename='registration_form')
router.register(r'form', RegistrationViewSet, basename='registration_form')
router.register(r'registration_form_admin', RegistrationFormAdminViewSet,
basename='registration_admin_form')
router.register(r'certificate_templates',
Expand Down
6 changes: 1 addition & 5 deletions apps/fsm/views/program_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

from apps.accounts.serializers.serializers import AccountSerializer
from apps.accounts.utils import find_user_in_website
from apps.fsm.utils import get_user_permission, register_user_in_program
from apps.fsm.utils import register_user_in_program
from errors.error_codes import serialize_error
from utilities.safe_auth import SafeTokenAuthentication

Expand Down Expand Up @@ -52,10 +52,6 @@ def get_permissions(self):
permission_classes = [ProgramAdminPermission]
return [permission() for permission in permission_classes]

# @method_decorator(cache_page(60 * 1, key_prefix="program"))
def list(self, request, *args, **kwargs):
return super().list(self, request, *args, **kwargs)

@action(detail=True, methods=['get'])
def get_admins(self, request, pk):
admins = self.get_object().admins
Expand Down
54 changes: 53 additions & 1 deletion apps/fsm/views/registration_receipt_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from rest_framework.viewsets import GenericViewSet

from errors.error_codes import serialize_error
from apps.fsm.models import RegistrationReceipt
from apps.fsm.models import RegistrationForm, RegistrationReceipt
from apps.fsm.permissions import IsRegistrationReceiptOwner, IsReceiptsFormModifier
from apps.fsm.serializers.answer_sheet_serializers import RegistrationReceiptSerializer, RegistrationStatusSerializer
from apps.fsm.serializers.certificate_serializer import create_certificate
Expand Down Expand Up @@ -114,3 +114,55 @@ def get_certificate(self, request, pk=None):
raise NotFound(serialize_error('4095'))
return Response(RegistrationReceiptSerializer(context=self.get_serializer_context()).to_representation(receipt),
status=status.HTTP_200_OK)


@action(detail=False, methods=['get'])
def my_receipt(self, request, pk=None):
form_id = request.GET.get('form')
user = request.user
receipt = None
try:
receipt = user.registration_receipts.get(answer_sheet_of__id=form_id)
return Response(RegistrationReceiptSerializer(receipt).data)
except:
return Response({})




# class ProgramPermissionSerializer(serializers.ModelSerializer):
# is_manager = serializers.SerializerMethodField()

# def get_is_manager(self, obj):
# user = self.context.get('user', None)
# if user in obj.modifiers:
# return True
# return False

# def to_representation(self, instance):
# representation = super(
# ProgramSerializer, self).to_representation(instance)
# user = self.context.get('request', None).user
# receipt = None
# try:
# receipt = RegistrationReceipt.objects.get(user=user, answer_sheet_of=instance.registration_form)
# except:
# pass
# if receipt:
# representation['user_registration_status'] = instance.registration_form.check_time() if instance.registration_form.check_time() != 'ok' else receipt.status
# representation['is_paid'] = receipt.is_paid
# representation['is_user_participating'] = receipt.is_participating
# representation['registration_receipt'] = receipt.id
# representation['team'] = receipt.team.id
# else:
# representation['user_registration_status'] = instance.registration_form.get_user_permission_status(
# user)
# representation['is_paid'] = False
# representation['is_user_participating'] = False
# representation['registration_receipt'] = None
# representation['team'] = 'TeamNotCreatedYet'
# return representation

# class Meta:
# model = Program
# fields = '__all__'

0 comments on commit fabd256

Please sign in to comment.