new email text

This commit is contained in:
Martin Quarda 2024-08-17 13:27:28 +02:00
parent b0ecfc00bb
commit 6521cbd658
4 changed files with 37 additions and 9 deletions

View File

@ -71,6 +71,7 @@ TEMPLATES = [
WSGI_APPLICATION = 'alkator.wsgi.application' WSGI_APPLICATION = 'alkator.wsgi.application'
SESSION_COOKIE_SECURE = True
# Database # Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases # https://docs.djangoproject.com/en/4.2/ref/settings/#databases

View File

@ -3,7 +3,7 @@ from django.http import HttpResponse
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.decorators import staff_member_required
from django.core.mail import send_mail from django.core.mail import send_mail, mail_admins
from datetime import date, datetime, timedelta from datetime import date, datetime, timedelta
from urllib.parse import parse_qs from urllib.parse import parse_qs
import requests import requests
@ -36,6 +36,8 @@ def register(request):
return HttpResponse('{"reason":"Telefoní číslo je povinný!"}', status=400, content_type='application/json') return HttpResponse('{"reason":"Telefoní číslo je povinný!"}', status=400, content_type='application/json')
if User.objects.filter(email=request.POST['email'], alkator_class=ALKATOR_CLASS): if User.objects.filter(email=request.POST['email'], alkator_class=ALKATOR_CLASS):
return HttpResponse('{"reason":"Email je již registrován!"}', status=400, content_type='application/json') return HttpResponse('{"reason":"Email je již registrován!"}', status=400, content_type='application/json')
if User.objects.filter(alkator_class=ALKATOR_CLASS, paid=True).count() >= 50:
return HttpResponse('{"reason":"Kapacita závodu byla naplněna!"}', status=400, content_type='application/json')
try: try:
dat = datetime.strptime(request.POST['date_of_birth'], "%Y-%m-%d").date() dat = datetime.strptime(request.POST['date_of_birth'], "%Y-%m-%d").date()
if dat > date(2006, 10, 5): if dat > date(2006, 10, 5):
@ -65,7 +67,7 @@ def register(request):
address=request.POST['address'], address=request.POST['address'],
phone=request.POST['phone'], phone=request.POST['phone'],
alkator_class=ALKATOR_CLASS, alkator_class=ALKATOR_CLASS,
invoice_id=invoice_id invoice_id=invoice_id,
) )
user.save() user.save()
@ -76,8 +78,8 @@ def register(request):
'curr': 'CZK', 'curr': 'CZK',
'method': 'ALL', 'method': 'ALL',
'label': 'Startovné', 'label': 'Startovné',
'email': request.POST['email'], 'email': user.email,
'fullName': f"{request.POST['first_name']} {request.POST['last_name']}", 'fullName': f"{user.first_name} {user.last_name}",
'refId': f'{user.invoice_id}', 'refId': f'{user.invoice_id}',
'secret': COMGATE_SECRET, 'secret': COMGATE_SECRET,
'prepareOnly': 'true', 'prepareOnly': 'true',
@ -105,18 +107,41 @@ def payment_result(request):
test = result['test'][0] != 'false' test = result['test'][0] != 'false'
if not secret_match or test != COMGATE_TEST: if not secret_match or test != COMGATE_TEST:
return HttpResponse(status=400) return HttpResponse(status=400)
try:
user = User.objects.get(invoice_id=ref_id) user = User.objects.get(invoice_id=ref_id)
except User.DoesNotExist:
mail_admins('Chyba s platbou!', f'invoice_id={ref_id}&paid={paid}')
if paid == 'PAID': if paid == 'PAID':
user.paid = True user.paid = True
user.save() user.save()
send_mail( send_mail(
"úspěšná registrace do závodu Alkátor race Studené", "úspěšná registrace do závodu Alkátor race Studené",
f"body", f"""Zdravím tě Alkátore,
toto je potvrzovací email o tvé účasti v nezapomenutelném závodě Alkátor-race.
Prosíme kontrolujete si své hromadné schránky a spamy.
Závod se koná 5.10.2024 na Studeném v Orlických horách, hned u Podskaláku.
Zajištěno je stanování, občerstvení a také večerní after párty.
Připrav na zkoušku své tělo, játra a tvé mozkové buňky.
Budou čekat nevídané překážky.
O podrobnostech budeme informovat emailem.
Nezapomeň nás sledovat na Facebooku, Instagramu, YouTube a TikToku.
Na tento email není třeba odpovídat, prootže je generován automaticky s přijatou platbou. V případě potřeby psát na info@alkator.cz .
ALKÁTOR TEAM
email: info@alkator.cz
tel: + 420 728 018 088
web: alkator.cz""",
"info@alkator.cz", "info@alkator.cz",
[user.email], [user.email],
) )
elif paid == 'CANCELLED' and not user.paid: elif paid == 'CANCELLED' and not user.paid:
user.delete() #effectively disabling email adress as email address cannot contain ' '
user.email = '<!> '+user.email
user.save()
return HttpResponse(status=200) return HttpResponse(status=200)
@ -128,7 +153,7 @@ def payment_state(request):
else: else:
return HttpResponse('{"status":"failed", "reason":"Zatím nemáme informace o provedené platbě. Zkuste reload nebo zkontrolujte email."}', content_type='application/json') return HttpResponse('{"status":"failed", "reason":"Zatím nemáme informace o provedené platbě. Zkuste reload nebo zkontrolujte email."}', content_type='application/json')
except User.DoesNotExist as e: except User.DoesNotExist as e:
return HttpResponse('{"status":"failed", "reason":"Uživatel neexistuje, prosím registraci opakujte."}', content_type='application/json') return HttpResponse('{"status":"failed", "reason":"Uživatel neexistuje, registraci prosím opakujte."}', content_type='application/json')
def results(request): def results(request):

View File

@ -4,6 +4,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Alkátor Race</title> <title>Alkátor Race</title>
<meta name="description" content="Jedná se o překážkový závod u nás v Orlických horách s pivem a panáky." />
<meta name="author" content="Martin Quarda" />
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>

View File

@ -312,7 +312,7 @@ class Main extends Component {
</div> </div>
<div class="mb-3 form-check"> <div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="agreement" name="agreement" /> <input type="checkbox" class="form-check-input" id="agreement" name="agreement" />
<label class="form-check-label" for="agreement">Souhlas se <a href="/public/ochrana_osobnich_udaju.pdf">zpracováním osobních údajů</a> a <a href="/public/reverz.pdf">podmínkami závodu</a>.</label> <label class="form-check-label" for="agreement">Souhlas se <a href="/public/ochrana_osobnich_udaju.pdf">zpracováním osobních údajů</a>, <a href="/public/reverz.pdf">podmínkami závodu</a> a <a href="/public/obchodni_podminky_alkator.pdf">obchodníma podmínkami závodu</a>.</label>
</div> </div>
<button type="submit" class="btn btn-primary">Odeslat a zaplatit</button> <button type="submit" class="btn btn-primary">Odeslat a zaplatit</button>
</form> </form>