diff --git a/alkatorapi/forms.py b/alkatorapi/forms.py new file mode 100644 index 0000000..e69de29 diff --git a/alkatorapi/migrations/0017_racer_register_date.py b/alkatorapi/migrations/0017_racer_register_date.py new file mode 100644 index 0000000..a14f34e --- /dev/null +++ b/alkatorapi/migrations/0017_racer_register_date.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.12 on 2024-10-11 08:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('alkatorapi', '0016_profile_alter_user_alkator_class_racer'), + ] + + operations = [ + migrations.AddField( + model_name='racer', + name='register_date', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/alkatorapi/models.py b/alkatorapi/models.py index b29d2e7..e9f36fc 100644 --- a/alkatorapi/models.py +++ b/alkatorapi/models.py @@ -63,6 +63,7 @@ class Racer(models.Model): team = models.CharField(max_length=120, null=True, blank=True) phone = models.CharField(max_length=120, null=True, blank=True) date_of_birth = models.DateField(null=True, blank=True) + register_date = models.DateTimeField(auto_now=True) duration = models.DurationField(null=True, blank=True) starting_number = models.IntegerField(null=True, blank=True) alkator_category = models.IntegerField(choices=ALKATOR_CHOICES, default=1) diff --git a/alkatorapi/templates/invoice.html b/alkatorapi/templates/invoice.html index fb6808e..b0d3256 100644 --- a/alkatorapi/templates/invoice.html +++ b/alkatorapi/templates/invoice.html @@ -21,7 +21,7 @@ Číslo faktury - {{user.invoice_id}} + {{racer.invoice_id}} Dodavatel @@ -51,7 +51,7 @@ Jméno - {{user.first_name}} {{user.last_name}} + {{user.profile.first_name}} {{user.profile.last_name}} @@ -67,7 +67,7 @@ Adresa - {{user.address}} + {{user.profile.address}} @@ -166,7 +166,7 @@ 131-2219860207/0100 Datum vystavení - {{user.register_date|date:"d/m/Y"}} + {{racer.register_date|date:"d/m/Y"}} Variabilní symbol @@ -217,9 +217,9 @@ 1 - {{user.price}},00 Kč + {{racer.price}},00 Kč - {{user.price}},00 Kč + {{racer.price}},00 Kč @@ -272,7 +272,7 @@ Celkem - {{user.price}},00 Kč + {{racer.price}},00 Kč diff --git a/alkatorapi/views.py b/alkatorapi/views.py index 903731d..20f557c 100644 --- a/alkatorapi/views.py +++ b/alkatorapi/views.py @@ -7,7 +7,7 @@ from django.contrib.admin.views.decorators import staff_member_required from django.contrib.auth.models import User as DjangoUser from django.contrib.auth import authenticate from django.contrib.auth import login as auth_login, logout as auth_logout -from django.core.mail import send_mail, mail_admins +from django.core.mail import send_mail, mail_admins, EmailMessage from django.utils.datastructures import MultiValueDictKeyError from datetime import date, datetime, timedelta from urllib.parse import parse_qs @@ -317,9 +317,9 @@ def payment_result(request): if paid == 'PAID': racer.paid = True racer.save() - send_mail( - f"úspěšná registrace do závodu Alkátor race Dolní Čermná ({racer.first_name} {racer.last_name})", - f"""Zdravím tě Alkátore, + mail = EmailMessage( + subject=f"úspěšná registrace do závodu Alkátor race Dolní Čermná ({racer.first_name} {racer.last_name})", + body=f"""Zdravím tě Alkátore, toto je potvrzovací email o účasti v nezapomenutelném závodě Alkátor-race. Prosíme kontrolujete si své hromadné schránky a spamy. @@ -338,9 +338,30 @@ ALKÁTOR TEAM email: info@alkator.cz tel: + 420 728 018 088 web: https://alkator.cz""", - "info@alkator.cz", - [racer.profile.user.email, racer.email] if racer.email else [racer.profile.user.email], + from_email="info@alkator.cz", + to=[racer.profile.user.email, racer.email] if racer.email else [racer.profile.user.email], + bcc=[], + cc=[] ) + + user = request.user + + template = TemplateResponse( + None, + 'invoice.html', + { + 'user': user, + 'racer': racer, + 'paid_date': racer.register_date + timedelta(days=1), + } + ) + template.render() + pdf_name = f"invoices/{user.profile.last_name}_{user.profile.first_name}.pdf" + HTML(string=template.content).write_pdf(pdf_name) + + attach = open(pdf_name, 'rb') + mail.attach('faktura.pdf', attach.read(), 'application/pdf') + mail.send() elif paid == 'CANCELLED' and not user.paid: racer.delete() return HttpResponse(status=200) diff --git a/invoices/.gitkeep b/invoices/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/send_mail.py b/send_mail.py new file mode 100644 index 0000000..5abb0a8 --- /dev/null +++ b/send_mail.py @@ -0,0 +1,26 @@ +from alkatorapi.models import User +from django.core.mail import send_mail + +for user in User.objects.all(): + if user.starting_number and user.email: + send_mail( + "Díky ALKÁTORE!", + f"""Milý Alkátore, + +kdo zvládne nejen běžet, ale i přemoci pár trestných panáků a piv na trati, zaslouží naše hluboké uznání! Bylo skvělé, že jsi se k nám přidal na tento nezapomenutelný závod. Jsi skutečný šampion – nejen na nohách, ale i při zdolávání těch tekutých výzev! + +Pokud jsi během závodu pořídil nějaké fotky nebo videa, budeme rádi, když nám je nahraješ přes tento odkaz: https://alkator.cz/#upload_files. Rádi se podíváme na tvoje zážitky a možná je i nasdílíme! + +Tak na zdraví a na trénink nezapomínej – další běh a panáky čekají! + +S pozdravem, +Tým organizátorů + +ALKÁTOR TEAM +email: info@alkator.cz +tel: + 420 728 018 088 +web: https://alkator.cz""", + "info@alkator.cz", + [user.email], + ) + print(f"sent to: {user.email}") \ No newline at end of file