-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #54 from Nettverksdagen/fix/participant_count
Fixed participant count. Only registers participant if email sent.
- Loading branch information
Showing
2 changed files
with
55 additions
and
91 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,8 +4,7 @@ | |
from .models import Listing, Business, Sponsor, TeamMember, Form, Participant, Program | ||
from .serializers import ListingSerializer, BusinessSerializer, SponsorSerializer, TeamMemberSerializer, FormSerializer, ParticipantSerializer, ProgramSerializer | ||
from django.core.mail import send_mail | ||
from django.template.loader import render_to_string | ||
from django.utils.html import strip_tags | ||
|
||
|
||
class ListingViewSet(viewsets.ModelViewSet): | ||
queryset = Listing.objects.all() | ||
|
@@ -43,106 +42,79 @@ class ParticipantViewSet(viewsets.ModelViewSet): | |
|
||
|
||
def create(self, request): | ||
#Data to be used | ||
data = {'year': request.data.get('year'), 'study': request.data.get('study'), 'email': request.data.get('email'), 'name': request.data.get('name'), 'event': request.data.get('event'), 'code': request.data.get('code')} | ||
ParticipantValidationList = Participant.objects.filter(email=data['email'], event=data['event']) | ||
ProgramToBeAdded = Program.objects.filter(id=data['event'])[0] | ||
|
||
#Validates that a new Participant can enter the event | ||
if (len(ParticipantValidationList) == 0): | ||
#Using the default django-create function | ||
super().create(request) | ||
|
||
#Updating the registrationlist on event | ||
ProgramToBeAdded.registered += 1 | ||
ProgramToBeAdded.save() | ||
data = request.data | ||
notRegistered = Participant.objects.filter(email=data['email'], event=data['event']).count() == 0 | ||
program = Program.objects.get(id=data['event']) | ||
|
||
if (notRegistered): | ||
currentlyRegistered = program.participant_set.all().count() | ||
try: | ||
# If program is full, send waiting list email | ||
if (ProgramToBeAdded.registered > ProgramToBeAdded.maxRegistered): | ||
waitingListIndex = ProgramToBeAdded.registered - ProgramToBeAdded.maxRegistered | ||
|
||
#Sending the mail | ||
if (currentlyRegistered >= program.maxRegistered): | ||
waitingListIndex = currentlyRegistered - program.maxRegistered + 1 | ||
send_mail('Nettverksdagene - Du står på venteliste', | ||
'Vi bekrefter herved at du står på venteliste til ' + ProgramToBeAdded.header + '. Din plass på ventelisten er ' + str(waitingListIndex) + '. Dersom du skulle ønske å melde deg av, vennligst gjør det via nettverksdagene.no/program. Tusen takk for din interesse i Nettverksdagene!', | ||
'Vi bekrefter herved at du står på venteliste til ' + program.header + '. Din plass på ventelisten er ' + str(waitingListIndex) + '. Dersom du skulle ønske å melde deg av, vennligst gjør det via nettverksdagene.no/program. Tusen takk for din interesse i Nettverksdagene!', | ||
'[email protected]', | ||
[data.get('email')], | ||
[data['email']], | ||
fail_silently=False) | ||
|
||
#returning a response | ||
response = {'message': 'It works!!'} | ||
return Response(response, status = status.HTTP_200_OK) | ||
# If program not full, send confirmation email | ||
else: | ||
#Sending the mail | ||
send_mail('Nettverksdagene - Påmelding bekreftet for ' + data.get('name'), | ||
'Vi bekrefter herved at du er påmeldt ' + ProgramToBeAdded.header + '. Dersom du skulle ønske å melde deg av, vennligst gjør det via nettverksdagene.no/program. Tusen takk for din interesse i Nettverksdagene!', | ||
send_mail('Nettverksdagene - Påmelding bekreftet for ' + data['name'], | ||
'Vi bekrefter herved at du er påmeldt ' + program.header + '. Dersom du skulle ønske å melde deg av, vennligst gjør det via nettverksdagene.no/program. Tusen takk for din interesse i Nettverksdagene!', | ||
'[email protected]', | ||
[data.get('email')], | ||
[data['email']], | ||
fail_silently=False) | ||
|
||
#returning a response | ||
response = {'message': 'It works!!'} | ||
return Response(response, status = status.HTTP_200_OK) | ||
except: | ||
#An error to be raised if the send_mail function doesn't work | ||
print("ERROR: Konfigurer email-settings i mail_settings.py") | ||
raise Exception('ERROR: Konfigurer email-settings i mail_settings.py') | ||
print("ERROR: Could not send email. Is mail_settings.py correct?") | ||
response = {'message': 'Could not send email'} | ||
return Response(response, status = status.HTTP_500_INTERNAL_SERVER_ERROR) | ||
|
||
return super().create(request) | ||
|
||
else: | ||
#returning a response | ||
response = {'message': 'Invalid input, check Participant list. Should not be duplicated'} | ||
response = {'message': 'Invalid input. Is participant already registered?'} | ||
return Response(response, status = status.HTTP_400_BAD_REQUEST) | ||
|
||
def retrieve(self, request, pk): | ||
participant = Participant.objects.get(id=pk) | ||
program_id = participant.event | ||
program = Program.objects.get(id=program_id) | ||
program = participant.event | ||
|
||
try: | ||
send_mail('Nettverksdagene - Avmeldingskode for ' + participant.name, | ||
'Din avmeldingskode for ' + program.header + ' er: ' + participant.code + '. Tusen takk for din interesse i Nettverksdagene!', | ||
'[email protected]', | ||
[participant.email], | ||
fail_silently=False) | ||
#returning a response | ||
response = {'message': 'It works!!'} | ||
return Response(response, status = status.HTTP_200_OK) | ||
except: | ||
#An error to be raised if the send_mail function doesn't work | ||
print("ERROR: Konfigurer email-settings i mail_settings.py") | ||
raise Exception('ERROR: Konfigurer email-settings i mail_settings.py') | ||
print("ERROR: Could not send email. Is mail_settings.py correct?") | ||
response = {'message': 'Could not send email'} | ||
return Response(response, status = status.HTTP_500_INTERNAL_SERVER_ERROR) | ||
|
||
response = {'message': 'Participant code sent successfully'} | ||
return Response(response, status = status.HTTP_200_OK) | ||
|
||
def destroy(self, request, pk): | ||
|
||
participant = Participant.objects.get(id=pk) | ||
program_id = participant.event | ||
|
||
response = super().destroy(request) | ||
|
||
if status.is_success(response.status_code): | ||
program = Program.objects.get(id=program_id) | ||
program.registered -= 1 | ||
program.save() | ||
|
||
if program.registered >= program.maxRegistered: | ||
new_participant = Participant.objects.order_by('id')[program.maxRegistered-1] | ||
try: | ||
#Sending the mail | ||
send_mail('Nettverksdagene - Påmelding bekreftet for ' + new_participant.name, | ||
'Du sto på ventelisten for ' + program.header + ', og har nå fått plass. Dersom du skulle ønske å melde deg av, vennligst gjør det via nettverksdagene.no/program. Tusen takk for din interesse i Nettverksdagene!', | ||
'[email protected]', | ||
[new_participant.email], | ||
fail_silently=False) | ||
program = participant.event | ||
registered = program.participant_set.all().count() | ||
|
||
if registered >= program.maxRegistered: # If last participant exists | ||
lastParticipant = program.participant_set.all().order_by('id')[program.maxRegistered-1] | ||
if participant.id < lastParticipant.id: # If lastParticipant is new | ||
try: | ||
send_mail('Nettverksdagene - Påmelding bekreftet for ' + lastParticipant.name, | ||
'Du sto på ventelisten for ' + program.header + ', og har nå fått plass. Dersom du skulle ønske å melde deg av, vennligst gjør det via nettverksdagene.no/program. Tusen takk for din interesse i Nettverksdagene!', | ||
'[email protected]', | ||
[lastParticipant.email], | ||
fail_silently=False) | ||
except: | ||
print("ERROR: Could not send email. Is mail_settings.py correct?") | ||
response = {'message': 'Could not send email'} | ||
return Response(response, status = status.HTTP_500_INTERNAL_SERVER_ERROR) | ||
|
||
#returning a response | ||
response = {'message': 'It works!!'} | ||
return Response(response, status = status.HTTP_200_OK) | ||
except: | ||
#An error to be raised if the send_mail function doesn't work | ||
print("ERROR: Konfigurer email-settings i mail_settings.py") | ||
raise Exception('ERROR: Konfigurer email-settings i mail_settings.py') | ||
else: | ||
raise Exception(f'ERROR: DELETE request returned {response.status_code}.') | ||
|
||
return response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters