Merge branch 'beta'
This commit is contained in:
commit
6833eb0a7c
@ -71,6 +71,7 @@ TEMPLATES = [
|
||||
|
||||
WSGI_APPLICATION = 'alkator.wsgi.application'
|
||||
|
||||
SESSION_COOKIE_SECURE = True
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
|
||||
@ -88,7 +89,10 @@ COMGATE_TEST = False
|
||||
COMGATE_SECRET = '4c36b7faf40575073b26570066ca2a9f'
|
||||
|
||||
|
||||
ADMINS = [('Martin Quarda', 'martin@quarda.cz')]
|
||||
|
||||
# Email
|
||||
SERVER_EMAIL = 'info@alkator.cz'
|
||||
DEFAULT_FROM_EMAIL = 'info@alkator.cz'
|
||||
EMAIL_HOST = 'smtp.seznam.cz'
|
||||
EMAIL_PORT = 465
|
||||
|
@ -3,6 +3,7 @@ from django.http import HttpResponse
|
||||
from django.template.response import TemplateResponse
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.contrib.admin.views.decorators import staff_member_required
|
||||
from django.core.mail import send_mail, mail_admins
|
||||
from datetime import date, datetime, timedelta
|
||||
from urllib.parse import parse_qs
|
||||
import requests
|
||||
@ -35,6 +36,8 @@ def register(request):
|
||||
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):
|
||||
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:
|
||||
dat = datetime.strptime(request.POST['date_of_birth'], "%Y-%m-%d").date()
|
||||
if dat > date(2006, 10, 5):
|
||||
@ -64,19 +67,24 @@ def register(request):
|
||||
address=request.POST['address'],
|
||||
phone=request.POST['phone'],
|
||||
alkator_class=ALKATOR_CLASS,
|
||||
invoice_id=invoice_id
|
||||
invoice_id=invoice_id,
|
||||
)
|
||||
user.save()
|
||||
|
||||
if date.today() >= date(2024, 9, 21):
|
||||
price = 79000
|
||||
else:
|
||||
price = 69000
|
||||
|
||||
payment_data = {
|
||||
'merchant': COMGATE_MERCHANT,
|
||||
'test': 'true' if COMGATE_TEST else 'false',
|
||||
'price': 69000,
|
||||
'price': price,
|
||||
'curr': 'CZK',
|
||||
'method': 'ALL',
|
||||
'label': 'Startovné',
|
||||
'email': request.POST['email'],
|
||||
'fullName': f"{request.POST['first_name']} {request.POST['last_name']}",
|
||||
'label': 'Startovné na závod Alkátor Race Studené 2024',
|
||||
'email': user.email,
|
||||
'fullName': f"{user.first_name} {user.last_name}",
|
||||
'refId': f'{user.invoice_id}',
|
||||
'secret': COMGATE_SECRET,
|
||||
'prepareOnly': 'true',
|
||||
@ -87,7 +95,7 @@ def register(request):
|
||||
|
||||
if result['code'][0] != '0':
|
||||
user.delete()
|
||||
return HttpResponse('{"reason":"Chyba na straně platební brány: ' + result['message'][0] + '"}', status=400, content_type='application/json')
|
||||
return HttpResponse('{"reason":"Chyba na straně platební brány: ' + result['message'][0] + ', zkuste prosím registraci později."}', status=400, content_type='application/json')
|
||||
|
||||
user.trans_id = result['transId'][0]
|
||||
user.save()
|
||||
@ -104,21 +112,54 @@ def payment_result(request):
|
||||
test = result['test'][0] != 'false'
|
||||
if not secret_match or test != COMGATE_TEST:
|
||||
return HttpResponse(status=400)
|
||||
try:
|
||||
user = User.objects.get(invoice_id=ref_id)
|
||||
except User.DoesNotExist:
|
||||
mail_admins('Chyba s platbou!', f'invoice_id={ref_id}&paid={paid}')
|
||||
return HttpResponse(status=404)
|
||||
if paid == 'PAID':
|
||||
user.paid = True
|
||||
user.save()
|
||||
send_mail(
|
||||
"úspěšná registrace do závodu Alkátor race Studené",
|
||||
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 tě čekat nevídané překážky.
|
||||
|
||||
O podrobnostech tě budeme informovat emailem.
|
||||
Nezapomeň nás sledovat na Facebooku, Instagramu, YouTube a TikToku.
|
||||
|
||||
Na tento email není třeba odpovídat, protože je generován automaticky s přijatou platbou. V případě potřeby pište na info@alkator.cz .
|
||||
|
||||
ALKÁTOR TEAM
|
||||
email: info@alkator.cz
|
||||
tel: + 420 728 018 088
|
||||
web: https://alkator.cz""",
|
||||
"info@alkator.cz",
|
||||
[user.email],
|
||||
)
|
||||
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)
|
||||
|
||||
|
||||
def payment_state(request):
|
||||
invoice_id = request.GET['refId']
|
||||
try:
|
||||
if User.objects.get(invoice_id=invoice_id).paid:
|
||||
return HttpResponse('{"status":"success", "reason":"Úspěšná platba"}', content_type='application/json')
|
||||
else:
|
||||
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:
|
||||
return HttpResponse('{"status":"failed", "reason":"Uživatel neexistuje, registraci prosím opakujte."}', content_type='application/json')
|
||||
|
||||
|
||||
def results(request):
|
||||
@ -156,11 +197,12 @@ def photos(request):
|
||||
|
||||
@staff_member_required
|
||||
def invoice(request):
|
||||
user = User.objects.get(invoice_id=request.GET['invoice_id'])
|
||||
return TemplateResponse(
|
||||
request,
|
||||
'invoice.html',
|
||||
{
|
||||
'user': User.objects.get(invoice_id=request.GET['invoice_id']),
|
||||
'user': user,
|
||||
'paid_date': user.register_date + timedelta(days=1),
|
||||
}
|
||||
)
|
||||
|
BIN
frontend/public/footer.png
Normal file
BIN
frontend/public/footer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
frontend/public/obchodni_podminky_alkator.pdf
Normal file
BIN
frontend/public/obchodni_podminky_alkator.pdf
Normal file
Binary file not shown.
Binary file not shown.
@ -4,6 +4,8 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<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>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
@ -31,10 +31,15 @@ class Main extends Component {
|
||||
this.setState({photos: json})
|
||||
})
|
||||
if(window.location.search){
|
||||
fetch(addr_prefix + "/api/payment_state" + window.location.search).then(resp => resp.json()).then(json =>{
|
||||
let searchParams = new URLSearchParams(window.location.search);
|
||||
for(const [key, value] of searchParams){
|
||||
if (key == "refId"){
|
||||
fetch(addr_prefix + "/api/payment_state?refId=" + value).then(resp => resp.json()).then(json =>{
|
||||
this.setState({status: json.status, text: json.reason})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
window.addEventListener("hashchange", (e) => {this.onHashChange(e)})
|
||||
}
|
||||
closePhoto = () => {
|
||||
@ -117,9 +122,21 @@ class Main extends Component {
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#gallery">Galerie</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#payment">Platba</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
{this.state.page == "#payment" &&
|
||||
<div class="container text">
|
||||
Platební bránu poskytuje firma <a href="https://www.comgate.cz/cz/platebni-brana">Comgate, a.s</a>. Platit je možné pomocí <a href="https://help.comgate.cz/v1/docs/cs/platby-kartou">platební karty</a> nebo <a href="https://help.comgate.cz/docs/bankovni-prevody">bankovním převodem</a>. Podrobnosti a přesný postup platby včetně animací najdete v odkazech.<br />
|
||||
Kontakt na Comgate, a.s.<br />
|
||||
Gočárova třída 1754 / 48b, Hradec Králové<br />
|
||||
E-mail: platby-podpora@comgate.cz<br />
|
||||
Tel: +420 228 224 267<br />
|
||||
</div>
|
||||
}
|
||||
{this.state.page == "#gallery" &&
|
||||
<div class="container">
|
||||
<Gallery photos={photos_gallery} onClick={this.openPhoto}/>
|
||||
@ -209,7 +226,7 @@ class Main extends Component {
|
||||
<h1 class="col val">
|
||||
<b>CENA</b>
|
||||
<br />
|
||||
690 kč
|
||||
Do 20.9. 690 kč*
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
@ -232,6 +249,8 @@ class Main extends Component {
|
||||
|
||||
<p>Start závodu je v 10:00, ale check-in se zahájením akce je již od 8:30.</p>
|
||||
|
||||
<p>* S blížícím se závodem bude 21.9. zvednuta cena na 790 kč.</p>
|
||||
|
||||
<p>Rozhodně se podívej na FAQ sekci, zde na stránce, kde najdeš důležité informace týkající se závodu ALKÁTOR RACE.</p>
|
||||
<p>Sportem ku chlastu!</p>
|
||||
</div>
|
||||
@ -296,7 +315,7 @@ class Main extends Component {
|
||||
</div>
|
||||
<div class="mb-3 form-check">
|
||||
<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>
|
||||
<button type="submit" class="btn btn-primary">Odeslat a zaplatit</button>
|
||||
</form>
|
||||
@ -317,7 +336,7 @@ class Main extends Component {
|
||||
<div class="container text">
|
||||
<a href="/public/reverz.pdf">Reverz</a><br />
|
||||
<a href="/public/ochrana_osobnich_udaju.pdf">Ochrana osobních údajů</a><br />
|
||||
<a href="/public/ochrana_osobnich_udaju_zhoor.pdf">Ochrana osobních údajů ve firmě Zhoor s.r.o.</a><br />
|
||||
<a href="/public/obchodni_podminky_alkator.pdf">Obchodní podmínky závodu alkátor</a><br />
|
||||
Název společnosti: Zhoor s.r.o.<br />
|
||||
IČ: 212 44 863<br />
|
||||
DIČ: Nejsme plátci DPH.<br />
|
||||
@ -325,6 +344,7 @@ class Main extends Component {
|
||||
Číslo účtu: 131-2219860207/0100<br />
|
||||
E-mail: info@alkator.cz<br />
|
||||
Tel: +420 728 018 088<br />
|
||||
<img src="/public/footer.png" style={{"width":"100%","height":"auto"}} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user