mirror of
https://github.com/Rushilwiz/launchx.git
synced 2025-04-04 20:20:18 -04:00
131 lines
4.7 KiB
Python
131 lines
4.7 KiB
Python
from django.shortcuts import render, redirect
|
|
|
|
from .forms import CompetitorFormset, CompetitorForm, TeamForm, ScoreForm
|
|
from .models import Competitor, Team, Judge, Score
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from django.template.loader import render_to_string
|
|
from django.utils.html import strip_tags
|
|
from django.core.mail import EmailMultiAlternatives, send_mail
|
|
|
|
from config.settings import EMAIL_HOST_USER
|
|
|
|
# Create your views here.
|
|
def home(request):
|
|
return render(request, 'innovate/index.html')
|
|
|
|
def signup(request):
|
|
formset = CompetitorFormset(queryset=Competitor.objects.none())
|
|
team_form = TeamForm()
|
|
|
|
if request.method == 'POST':
|
|
formset = CompetitorFormset(request.POST)
|
|
team_form = TeamForm(request.POST, request.FILES)
|
|
if formset.is_valid() and team_form.is_valid():
|
|
team = team_form.save()
|
|
is_leader = True
|
|
members = []
|
|
for form in formset:
|
|
name = form.cleaned_data.get('name')
|
|
email = form.cleaned_data.get('email')
|
|
school = form.cleaned_data.get('school')
|
|
county = form.cleaned_data.get('school')
|
|
if name and email and school and county:
|
|
m = Competitor(name=name, email=email, school=school, county=county, is_leader=is_leader, team=team)
|
|
is_leader = False
|
|
members.append(m)
|
|
send_confirmation(request, team, members)
|
|
for m in members:
|
|
m.save()
|
|
return redirect('landing')
|
|
|
|
return render(request, 'innovate/signup.html', {'formset': formset, 'team_form': team_form})
|
|
|
|
|
|
def send_confirmation(request, team, members):
|
|
subject = "🥳 InnovateTJ Signup Confirmation"
|
|
recepients = []
|
|
for member in members:
|
|
recepients.append(member.email)
|
|
|
|
context = {
|
|
'team': team,
|
|
'members': members
|
|
}
|
|
|
|
html_message = render_to_string('innovate/email_template.html', context=context)
|
|
plain_message = strip_tags(html_message)
|
|
sender = [EMAIL_HOST_USER]
|
|
email = EmailMultiAlternatives(
|
|
subject,
|
|
plain_message,
|
|
EMAIL_HOST_USER,
|
|
recepients,
|
|
reply_to=sender
|
|
)
|
|
email.attach_alternative(html_message, "text/html")
|
|
email.send(fail_silently=False)
|
|
|
|
def confirm(request):
|
|
return render(request, 'innovate/confirm.html')
|
|
|
|
@login_required
|
|
def portal(request):
|
|
judge = Judge.objects.get(user=request.user)
|
|
team_numbers = [team.number for team in Team.objects.all() if ((team.number % 2 == 0 and judge.isEven) or (team.number % 2 != 0 and not judge.isEven))]
|
|
teams, completed_teams = [], []
|
|
for number in team_numbers:
|
|
if Score.objects.filter(team=Team.objects.get(number=number), judge=judge).count() == 0:
|
|
teams.append(Team.objects.get(number=number))
|
|
else:
|
|
completed_teams.append((Team.objects.get(number=number), Score.objects.get(team=Team.objects.get(number=number), judge=judge)))
|
|
|
|
context = {
|
|
'teams': teams,
|
|
'completed_teams': completed_teams,
|
|
'completed_teams_count': len(completed_teams),
|
|
'teams_count': len(team_numbers)
|
|
}
|
|
|
|
return render(request, 'innovate/portal.html', context=context)
|
|
|
|
@login_required
|
|
def feedback(request):
|
|
form = ScoreForm()
|
|
judge = Judge.objects.get(user=request.user)
|
|
if type(judge) != Judge:
|
|
print('no team or judge')
|
|
return redirect('judges-portal')
|
|
|
|
if request.method == 'POST':
|
|
form = ScoreForm(request.POST)
|
|
if form.is_valid():
|
|
team = Team.objects.get(number=request.POST['team_number'])
|
|
if ((team.number % 2 != 0 and judge.isEven) or (team.number % 2 == 0 and not judge.isEven)):
|
|
print('judge not approved')
|
|
return redirect('judges-portal')
|
|
score = form.save(commit=False)
|
|
score.judge = judge
|
|
score.team = team
|
|
score.feedback = form.cleaned_data['feedback']
|
|
score.save()
|
|
return redirect('judges-portal')
|
|
elif request.GET.get('team'):
|
|
team = Team.objects.get(number=request.GET['team'])
|
|
if team == None:
|
|
print('no team or judge')
|
|
elif ((team.number % 2 != 0 and judge.isEven) or (team.number % 2 == 0 and not judge.isEven)):
|
|
print('judge not approved')
|
|
elif Score.objects.filter(team=team, judge=judge).count() != 0:
|
|
print('feedback already exists')
|
|
else:
|
|
context = {
|
|
'team': team,
|
|
'judge': judge,
|
|
'form': form,
|
|
}
|
|
return render(request, 'innovate/feedback.html', context=context)
|
|
return redirect('judges-portal')
|
|
|