Skip to content

Commit

Permalink
Feat: add new api for confirm registration
Browse files Browse the repository at this point in the history
  • Loading branch information
AmooHashem committed Jan 22, 2025
1 parent 5362d48 commit 0802c8d
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 44 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.3 on 2025-01-22 16:54

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('accounts', '0046_alter_verificationcode_verification_type'),
]

operations = [
migrations.AlterField(
model_name='verificationcode',
name='verification_type',
field=models.CharField(choices=[('create-user-account', 'Createuseraccount'), ('change-user-password', 'Changeuserpassword'), ('change-user-phone-number', 'Changeuserphonenumber')], max_length=30, null=True),
),
]
16 changes: 8 additions & 8 deletions apps/fsm/models/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,14 @@ class AnswerSheetType(models.TextChoices):
StateAnswerSheet = "StateAnswerSheet"
General = "General"

class CorrectionStatus(models.TextChoices):
CORRECT = "Correct", "Correct"
INCORRECT = "Wrong", "Incorrect"
MANUAL_REVIEW_REQUIRED = "ManualCorrectionRequired", "Manual Review Required"
NO_REVIEW_NEEDED = "NoCorrectionRequired", "No Review Needed"
NO_SOLUTION_PROVIDED = "NoSolutionAvailable", "No Solution Provided"
OTHER = "Other", "Other"

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
answer_sheet_type = models.CharField(
Expand Down Expand Up @@ -211,14 +219,6 @@ class RegistrationStatus(models.TextChoices):
Rejected = "Rejected"
Waiting = "Waiting"

class CorrectionStatus(models.TextChoices):
Correct = "Correct"
Wrong = "Wrong"
ManualCorrectionRequired = "ManualCorrectionRequired"
NoCorrectionRequired = "NoCorrectionRequired"
NoSolutionAvailable = "NoSolutionAvailable"
Other = "Other"

status = models.CharField(max_length=25, blank=False,
default='Waiting', choices=RegistrationStatus.choices)
is_participating = models.BooleanField(default=False)
Expand Down
68 changes: 32 additions & 36 deletions apps/fsm/views/registration_receipt_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,48 +51,44 @@ def get_serializer_context(self):
return context

@swagger_auto_schema(responses={200: RegistrationReceiptSerializer})
@action(detail=True, methods=['post'], serializer_class=RegistrationStatusSerializer)
@action(detail=True, methods=['post'], serializer_class=RegistrationStatusSerializer, url_path='update-registration-status')
@transaction.atomic
def validate(self, request, pk=None):
def update_registration_status(self, request, pk=None):
receipt = self.get_object()
if self.request.user not in receipt.form.program_or_fsm.modifiers:

if request.user not in receipt.form.program_or_fsm.modifiers:
raise PermissionDenied(serialize_error('4061'))
# if not self.request.user.school_studentship.is_document_verified:
# raise PermissionDenied(serialize_error('4062'))
status_serializer = RegistrationStatusSerializer(
data=self.request.data)
if status_serializer.is_valid(raise_exception=True):
registration_status = status_serializer.data.get(
'status', RegistrationReceipt.RegistrationStatus.Waiting)

if registration_status == RegistrationReceipt.RegistrationStatus.Accepted:
program = receipt.form.program
if program.is_free:
receipt.is_participating = True
else:
receipt.is_participating = False

older_status = receipt.status

receipt.status = registration_status
receipt.save()

# todo: fix sending sms on registration receipt status change
# # todo: fix academy name
# if older_status != receipt.status:
# sms_service_proxy = SMSServiceProxy(provider='kavenegar')
# sms_service_proxy.send_otp(
# receptor_phone_number=receipt.user.phone_number,
# action=sms_service_proxy.RegularSMSTypes.UpdateRegistrationReceiptState,
# # todo: get real academy name from mps
# token='کاموا',
# token2=receipt.form.program_or_fsm.name
# )
status_serializer = RegistrationStatusSerializer(data=request.data)

status_serializer.is_valid(raise_exception=True)

registration_status = status_serializer.data.get('status')

receipt.status = registration_status
receipt.save()

return Response(status=status.HTTP_200_OK)

@swagger_auto_schema(responses={200: RegistrationReceiptSerializer})
@action(detail=True, methods=['post'], url_path='confirm-registration')
@transaction.atomic
def confirm_registration(self, request, pk=None):
receipt = self.get_object()

if request.user not in receipt.form.program_or_fsm.modifiers:
raise PermissionDenied(serialize_error('4061'))

if receipt.status != RegistrationReceipt.RegistrationStatus.Accepted:
return Response(
RegistrationReceiptSerializer(
context=self.get_serializer_context()).to_representation(receipt),
status=status.HTTP_200_OK)
{'detail': 'REGISTRATION_NOT_ACCEPTED'},
status=status.HTTP_400_BAD_REQUEST
)

receipt.is_participating = True
receipt.save()

return Response(status=status.HTTP_200_OK)

@swagger_auto_schema(tags=my_tags + ['certificates'])
@action(detail=True, methods=['get'])
Expand Down

0 comments on commit 0802c8d

Please sign in to comment.