diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 139190fa..03724d3d 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -150,6 +150,7 @@ INSTALLED_APPS = ( 'personalni', 'soustredeni', 'treenode', + 'vyroci', # Admin upravy: diff --git a/mamweb/urls.py b/mamweb/urls.py index 3577c4f7..0855b6b6 100644 --- a/mamweb/urls.py +++ b/mamweb/urls.py @@ -68,6 +68,9 @@ urlpatterns = [ # REST API # path('api/', include(router.urls)), + # Výroční sraz + path('sraz/30-let/', include('vyroci.urls')), + ] # This is only needed when using runserver. diff --git a/vyroci/__init__.py b/vyroci/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/vyroci/admin.py b/vyroci/admin.py new file mode 100644 index 00000000..7bf94bef --- /dev/null +++ b/vyroci/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin + +from .models import UcastnikVyroci + +# Register your models here. + +admin.site.register(UcastnikVyroci) diff --git a/vyroci/apps.py b/vyroci/apps.py new file mode 100644 index 00000000..b30f5d73 --- /dev/null +++ b/vyroci/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class VyrociConfig(AppConfig): + name = 'vyroci' diff --git a/vyroci/forms.py b/vyroci/forms.py new file mode 100644 index 00000000..57e8ebc2 --- /dev/null +++ b/vyroci/forms.py @@ -0,0 +1,14 @@ +from django.forms import ModelForm +from .models import UcastnikVyroci + + +class UcastnikVyrociForm(ModelForm): + class Meta: + model = UcastnikVyroci + fields = "__all__" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + for field in ["kdy", "cojemam", "cislo", "dodat"]: + self.fields[field].widget.attrs['rows'] = 2 + self.fields[field].widget.attrs['cols'] = 22 diff --git a/vyroci/migrations/0001_initial.py b/vyroci/migrations/0001_initial.py new file mode 100644 index 00000000..7d3b7770 --- /dev/null +++ b/vyroci/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# Generated by Django 2.2.28 on 2023-06-02 18:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='UcastnikVyroci', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('jmeno', models.CharField(help_text='Občanská identifikace účastníka víkendovky', max_length=256, verbose_name='Jméno a příjmení')), + ('prezdivka', models.CharField(help_text='Zveřejňovaná identifikace účastníka víkendovky', max_length=256, verbose_name='Přezdívka (do seznamu účastníků, například Bětka N.)')), + ('email', models.EmailField(help_text='Kontakt na účastníka víkendovky', max_length=256, verbose_name='E-mail')), + ('kdy', models.TextField(verbose_name='Řešil nebo organizoval jsi M&M? Kdy?')), + ('cojemam', models.TextField(verbose_name='Co znamená M&M (a proč)?')), + ('cislo', models.TextField(verbose_name='Co v M&Mí historii značí číslo 265252859812191058636308480000000?')), + ('dodat', models.TextField(blank=True, null=True, verbose_name='Co chci ještě dodat?')), + ], + ), + ] diff --git a/vyroci/migrations/__init__.py b/vyroci/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/vyroci/models.py b/vyroci/models.py new file mode 100644 index 00000000..04fd2097 --- /dev/null +++ b/vyroci/models.py @@ -0,0 +1,40 @@ +from django.db import models + +# Create your models here. + + +class UcastnikVyroci(models.Model): + + jmeno = models.CharField( + "Jméno a příjmení", max_length=256, blank=False, null=False, + help_text="Občanská identifikace účastníka víkendovky" + ) + + prezdivka = models.CharField( + "Přezdívka (do seznamu účastníků, například Bětka N.)", max_length=256, blank=False, null=False, + help_text="Zveřejňovaná identifikace účastníka víkendovky" + ) + + email = models.EmailField( + "E-mail", max_length=256, blank=False, null=False, + help_text="Kontakt na účastníka víkendovky" + ) + + kdy = models.TextField( + "Řešil nebo organizoval jsi M&M? Kdy?", blank=False, + null=False, + ) + + cojemam = models.TextField( + "Co znamená M&M (a proč)?", blank=False, null=False, + ) + + cislo = models.TextField( + "Co v M&Mí historii značí číslo 265252859812191058636308480000000?", + blank=False, null=False, + ) + + dodat = models.TextField( + "Co chci ještě dodat?", blank=True, null=True, + ) + diff --git a/vyroci/templates/vyroci/vyroci.html b/vyroci/templates/vyroci/vyroci.html new file mode 100644 index 00000000..50c37c32 --- /dev/null +++ b/vyroci/templates/vyroci/vyroci.html @@ -0,0 +1,62 @@ +{% extends "base.html" %} + +{% block content %} + +
+ +

{% block nadpis1a %}M&Mí 30!*{% endblock nadpis1a %}

+ +
+ +

*plným názvem M&Mí 265252859812191058636308480000000.

+ +
+ +

Rádi bychom Tě pozvali na plánovaný M&Mí sraz, kde nalezneš možnost se setkat se současnými organizátory, minulými organizátory a účastníky, předminulými organizátory a účastníky, předpředminulými organizátory a účastníky a jinými M&Mími legendami.

+ +

Těšit se můžeš na zábavnou akci pro všechny věkové kategorie. Pokud máš chuť se zúčastnit, tak neváhej a vyplň přihlašovací formulář níže (pokud plánuješ přijet jen na část víkendu nebo s sebou někoho vzít – třeba děti, tak to napiš do poznámky). Podrobnější informace o akci budeme rozesílat přibližně dva týdny před akcí.

+ + + +

Přihlašovací formulář

+ +

Tučně popsaná pole jsou povinná.

+ +
+ + {{form.non_field_errors}} + {% for field in form %} + + + + + + + + + {% if field.errors %} + + + + {% endif %} + {% endfor %} +
+ + + + {{ field }} + {{ field.help_text|safe }} +
{{ field.errors }}
+ + {% csrf_token %} + + +
+ +{% endblock content %} diff --git a/vyroci/templates/vyroci/vyroci_list.html b/vyroci/templates/vyroci/vyroci_list.html new file mode 100644 index 00000000..efab5b0b --- /dev/null +++ b/vyroci/templates/vyroci/vyroci_list.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} + +{% block content %} + +

{% block nadpis1a %}M&Mí 30! odpovědi{% endblock nadpis1a %}

+ + + + + + + + + + + + + {% for u in object_list %} + + + + + + + + + + {% endfor %} +
JménoPřezdívkaE-mailKdy účastník/orgCo znamená M&M?Co znamená číslo?Něco dodat?
{{ u.jmeno }}{{ u.prezdivka }}{{ u.email }}{{ u.kdy }}{{ u.cojemam }}{{ u.cislo }}{{ u.dodat }}
+ +{% endblock content %} diff --git a/vyroci/urls.py b/vyroci/urls.py new file mode 100644 index 00000000..69132f45 --- /dev/null +++ b/vyroci/urls.py @@ -0,0 +1,17 @@ +from django.urls import path + +from seminar.utils import org_required +from .views import VyrociView, VyrociListView + +urlpatterns = [ + path( + '', + VyrociView.as_view(), + name='vyrocni_sraz' + ), + path( + 'ucastnici/', + org_required(VyrociListView.as_view()), + name='vyrocni_sraz_ucastnici' + ), +] diff --git a/vyroci/views.py b/vyroci/views.py new file mode 100644 index 00000000..a2f4767d --- /dev/null +++ b/vyroci/views.py @@ -0,0 +1,36 @@ +from django.views.generic import FormView, ListView + +from seminar.models import Osoba +from seminar.views import formularOKView +from .forms import UcastnikVyrociForm +from .models import UcastnikVyroci + + +# Create your views here. + +class VyrociView(FormView): + template_name = 'vyroci/vyroci.html' + form_class = UcastnikVyrociForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['ucastnici'] = UcastnikVyroci.objects.all() + return context + + def form_valid(self, form): + form.save() + + return formularOKView(self.request, "Úspěšně ses přihlásil na sraz") + def get_initial(self): + initial = super().get_initial() + if self.request.user.is_authenticated: + osoba = Osoba.objects.filter(user=self.request.user).first() + if osoba is not None: + initial["jmeno"] = osoba.plne_jmeno() + initial["email"] = osoba.email + return initial + + +class VyrociListView(ListView): + template_name = 'vyroci/vyroci_list.html' + model = UcastnikVyroci