From 0f6f6a85b63a6a6bdf056a28d52ae2abd666066d Mon Sep 17 00:00:00 2001 From: ticvac Date: Tue, 5 Nov 2024 22:47:18 +0100 Subject: [PATCH] verejny kontaktnicek --- .../0011_soustredeni_kontaktnicek_pdf.py | 18 ++++++++++++ ...2_soustredeni_kontaktnicek_vcf_and_more.py | 23 +++++++++++++++ soustredeni/models.py | 13 +++++++++ .../soustredeni/seznam_soustredeni.html | 8 +++++ soustredeni/urls.py | 10 +++++++ soustredeni/views.py | 29 +++++++++++++++++++ 6 files changed, 101 insertions(+) create mode 100644 soustredeni/migrations/0011_soustredeni_kontaktnicek_pdf.py create mode 100644 soustredeni/migrations/0012_soustredeni_kontaktnicek_vcf_and_more.py diff --git a/soustredeni/migrations/0011_soustredeni_kontaktnicek_pdf.py b/soustredeni/migrations/0011_soustredeni_kontaktnicek_pdf.py new file mode 100644 index 00000000..7432f296 --- /dev/null +++ b/soustredeni/migrations/0011_soustredeni_kontaktnicek_pdf.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.13 on 2024-11-05 21:02 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('soustredeni', '0010_tvorba_post'), + ] + + operations = [ + migrations.AddField( + model_name='soustredeni', + name='kontaktnicek_pdf', + field=models.FileField(blank=True, upload_to='kontaktnicky', verbose_name='kontaktníček'), + ), + ] diff --git a/soustredeni/migrations/0012_soustredeni_kontaktnicek_vcf_and_more.py b/soustredeni/migrations/0012_soustredeni_kontaktnicek_vcf_and_more.py new file mode 100644 index 00000000..18767632 --- /dev/null +++ b/soustredeni/migrations/0012_soustredeni_kontaktnicek_vcf_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.13 on 2024-11-05 21:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('soustredeni', '0011_soustredeni_kontaktnicek_pdf'), + ] + + operations = [ + migrations.AddField( + model_name='soustredeni', + name='kontaktnicek_vcf', + field=models.FileField(blank=True, upload_to='kontaktnicky', verbose_name='kontaktníček vcf'), + ), + migrations.AlterField( + model_name='soustredeni', + name='kontaktnicek_pdf', + field=models.FileField(blank=True, upload_to='kontaktnicky', verbose_name='kontaktníček pdf'), + ), + ] diff --git a/soustredeni/models.py b/soustredeni/models.py index 57e3741f..c456aacd 100644 --- a/soustredeni/models.py +++ b/soustredeni/models.py @@ -11,6 +11,16 @@ from personalni.models import Resitel, Organizator from various.models import SeminarModelBase from tvorba.models import Rocnik, Problem, aux_generate_filename +import secrets +import string +from django.utils import timezone + +def generate_filename_kontaktnicek(self, filename): + # generate random string + length = 32 + fname = "kontaktnicky/" + timezone.now().strftime('%Y-%m-%d-%H_%M') + fname += ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(length)) + return os.path.join(settings.KOREKTURY_PDF_DIR, fname) logger = logging.getLogger(__name__) @@ -65,6 +75,9 @@ class Soustredeni(SeminarModelBase): exportovat = models.BooleanField('export do AESOPa', db_column='exportovat', default=False, help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)') + + kontaktnicek_vcf = models.FileField('kontaktníček vcf', upload_to=generate_filename_kontaktnicek, blank=True,) + kontaktnicek_pdf = models.FileField('kontaktníček pdf', upload_to=generate_filename_kontaktnicek, blank=True,) def __str__(self): return '{} ({})'.format(self.misto, self.datum_zacatku) diff --git a/soustredeni/templates/soustredeni/seznam_soustredeni.html b/soustredeni/templates/soustredeni/seznam_soustredeni.html index fb79a7a0..fe64a871 100644 --- a/soustredeni/templates/soustredeni/seznam_soustredeni.html +++ b/soustredeni/templates/soustredeni/seznam_soustredeni.html @@ -35,6 +35,14 @@ {% endif %} {% endfor %} {% endif %} + + {% for i in soustredeni.ucastnici.all %} + {% if i.osoba.user == user %} +
  • kontaktnicek pdf
  • +
  • kontaktnicek vcf
  • + {% endif %} + {% endfor %} + {% if user.je_org %}
    diff --git a/soustredeni/urls.py b/soustredeni/urls.py index 181700f5..a194218c 100644 --- a/soustredeni/urls.py +++ b/soustredeni/urls.py @@ -44,6 +44,16 @@ urlpatterns = [ org_required(views.SoustredeniAbstraktyView.as_view()), name='soustredeni_abstrakty' ), + path( + 'kontaktnicek_pdf', + views.soustredeniKontaktnicekPdfView, + name='soustredeni_kontaktnicek' + ), + path( + 'kontaktnicek_vcf', + views.soustredeniKontaktnicekVcfView, + name='soustredeni_kontaktnicek' + ), path( 'fotogalerie/', include('galerie.urls') diff --git a/soustredeni/views.py b/soustredeni/views.py index 67a0305f..b0145ff0 100644 --- a/soustredeni/views.py +++ b/soustredeni/views.py @@ -106,3 +106,32 @@ class SoustredeniAbstraktyView(generic.DetailView): model = Soustredeni template_name = 'soustredeni/export_do_abstraktu.html' pk_url_kwarg = 'soustredeni' # v url bude místo defaultně požadovaného + +# kontaktnicek +def soustredeniKontaktnicekPdfView(request, soustredeni): + return soustredeniKontaktnicekView(request, soustredeni, "pdf") + +def soustredeniKontaktnicekVcfView(request, soustredeni): + return soustredeniKontaktnicekView(request, soustredeni, "vcf") + +def soustredeniKontaktnicekView(request, soustredeni, typ): + soustredeni = get_object_or_404(Soustredeni, id=soustredeni) + + if (not request.user in [u.osoba.user for u in soustredeni.ucastnici.all()]): + if not request.user.je_org: + return HttpResponse("Nebyl jsi tam nebo nejsi org") + if not soustredeni.kontaktnicek_pdf and typ == "pdf": + return HttpResponse("Kontaktníček není k dispozici") + elif not soustredeni.kontaktnicek_vcf and typ == "vcf": + return HttpResponse("Kontaktníček není k dispozici") + + if typ == "pdf": + with open(soustredeni.kontaktnicek_pdf.path, 'rb') as pdf: + response = HttpResponse(pdf.read(), content_type='application/pdf') + return response + elif typ == "vcf": + with open(soustredeni.kontaktnicek_vcf.path, 'rb') as vcf: + response = HttpResponse(vcf.read(), content_type='text/vcard') + return response + else: + return HttpResponse("Neplatný typ kontaktníčku") \ No newline at end of file