Browse Source

verejny kontaktnicek

pull/73/head
ticvac 1 week ago
parent
commit
0f6f6a85b6
  1. 18
      soustredeni/migrations/0011_soustredeni_kontaktnicek_pdf.py
  2. 23
      soustredeni/migrations/0012_soustredeni_kontaktnicek_vcf_and_more.py
  3. 13
      soustredeni/models.py
  4. 8
      soustredeni/templates/soustredeni/seznam_soustredeni.html
  5. 10
      soustredeni/urls.py
  6. 29
      soustredeni/views.py

18
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'),
),
]

23
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'),
),
]

13
soustredeni/models.py

@ -11,6 +11,16 @@ from personalni.models import Resitel, Organizator
from various.models import SeminarModelBase from various.models import SeminarModelBase
from tvorba.models import Rocnik, Problem, aux_generate_filename 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__) logger = logging.getLogger(__name__)
@ -65,6 +75,9 @@ class Soustredeni(SeminarModelBase):
exportovat = models.BooleanField('export do AESOPa', db_column='exportovat', default=False, exportovat = models.BooleanField('export do AESOPa', db_column='exportovat', default=False,
help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)') 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): def __str__(self):
return '{} ({})'.format(self.misto, self.datum_zacatku) return '{} ({})'.format(self.misto, self.datum_zacatku)

8
soustredeni/templates/soustredeni/seznam_soustredeni.html

@ -35,6 +35,14 @@
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% for i in soustredeni.ucastnici.all %}
{% if i.osoba.user == user %}
<li><a href="../{{soustredeni.pk}}/kontaktnicek_pdf">kontaktnicek pdf</a></li>
<li><a href="../{{soustredeni.pk}}/kontaktnicek_vcf">kontaktnicek vcf</a></li>
{% endif %}
{% endfor %}
</ul> </ul>
{% if user.je_org %} {% if user.je_org %}
<div class="mam-org-only"> <div class="mam-org-only">

10
soustredeni/urls.py

@ -44,6 +44,16 @@ urlpatterns = [
org_required(views.SoustredeniAbstraktyView.as_view()), org_required(views.SoustredeniAbstraktyView.as_view()),
name='soustredeni_abstrakty' name='soustredeni_abstrakty'
), ),
path(
'kontaktnicek_pdf',
views.soustredeniKontaktnicekPdfView,
name='soustredeni_kontaktnicek'
),
path(
'kontaktnicek_vcf',
views.soustredeniKontaktnicekVcfView,
name='soustredeni_kontaktnicek'
),
path( path(
'fotogalerie/', 'fotogalerie/',
include('galerie.urls') include('galerie.urls')

29
soustredeni/views.py

@ -106,3 +106,32 @@ class SoustredeniAbstraktyView(generic.DetailView):
model = Soustredeni model = Soustredeni
template_name = 'soustredeni/export_do_abstraktu.html' template_name = 'soustredeni/export_do_abstraktu.html'
pk_url_kwarg = 'soustredeni' # v url bude <int:soustredeni> místo defaultně požadovaného <int:pk> pk_url_kwarg = 'soustredeni' # v url bude <int:soustredeni> místo defaultně požadovaného <int:pk>
# 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")
Loading…
Cancel
Save