From 642ee0c202f99545600ec7a64ca30d4677d5c502 Mon Sep 17 00:00:00 2001
From: Zdenek Kubala <zdenek.kubala@pirati.cz>
Date: Mon, 30 Aug 2021 09:50:17 +0000
Subject: [PATCH] add sifrovacka detail page + models

---
 .gitignore                                    |  1 +
 django_apps/settings.py                       |  2 +-
 requirements.txt                              | 51 ++++++++++++++----
 sifrovacka/admin.py                           |  6 +++
 sifrovacka/migrations/0001_initial.py         | 37 +++++++++++++
 .../migrations/0002_auto_20210812_0714.py     | 25 +++++++++
 .../migrations/0003_auto_20210812_0733.py     | 23 ++++++++
 sifrovacka/migrations/0004_participants.py    | 25 +++++++++
 ...name_participate_participants_is_active.py | 18 +++++++
 ..._rename_is_active_participants_inactive.py | 18 +++++++
 ...0007_alter_participants_unique_together.py | 19 +++++++
 sifrovacka/models.py                          | 52 +++++++++++++++++++
 sifrovacka/templates/home.html                | 45 ++++++++++++++++
 sifrovacka/templates/index.html               | 16 +++---
 sifrovacka/templates/sifrovacka.html          | 20 +++++++
 sifrovacka/urls.py                            |  4 ++
 sifrovacka/views.py                           | 42 +++++++++++++--
 17 files changed, 382 insertions(+), 22 deletions(-)
 create mode 100644 sifrovacka/migrations/0001_initial.py
 create mode 100644 sifrovacka/migrations/0002_auto_20210812_0714.py
 create mode 100644 sifrovacka/migrations/0003_auto_20210812_0733.py
 create mode 100644 sifrovacka/migrations/0004_participants.py
 create mode 100644 sifrovacka/migrations/0005_rename_participate_participants_is_active.py
 create mode 100644 sifrovacka/migrations/0006_rename_is_active_participants_inactive.py
 create mode 100644 sifrovacka/migrations/0007_alter_participants_unique_together.py
 create mode 100644 sifrovacka/templates/home.html
 create mode 100644 sifrovacka/templates/sifrovacka.html

diff --git a/.gitignore b/.gitignore
index 5d534b5..b0af388 100644
--- a/.gitignore
+++ b/.gitignore
@@ -104,3 +104,4 @@ GitHub.sublime-settings
 !.vscode/launch.json
 !.vscode/extensions.json
 .history
+db.sqlite3
diff --git a/django_apps/settings.py b/django_apps/settings.py
index 41de1bc..2fca22b 100644
--- a/django_apps/settings.py
+++ b/django_apps/settings.py
@@ -129,5 +129,5 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 
 # Custom settings AUTH
 
-LOGIN_REDIRECT_URL = 'index'
+LOGIN_REDIRECT_URL = 'home'
 LOGOUT_REDIRECT_URL = 'index'
diff --git a/requirements.txt b/requirements.txt
index 7dd6fb4..83d6643 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,18 +1,49 @@
+appdirs==1.4.4
 asgiref==3.3.4
-asn1crypto==0.24.0
+asn1crypto==1.4.0
+backcall==0.2.0
+cffi==1.14.6
 confusable-homoglyphs==3.2.0
-cryptography==2.6.1
+cryptography==3.3.2
+dbus-python==1.2.16
+decorator==5.0.9
+distlib==0.3.1
 Django==3.2.3
-django-registration==3.1.2
+django-registration==3.2
 entrypoints==0.3
-keyring==17.1.1
-keyrings.alt==3.1.1
+filelock==3.0.12
+importlib-metadata==1.6.0
+ipython==7.27.0
+ipython-genutils==0.2.0
+jedi==0.18.0
+jeepney==0.6.0
+keyring==22.0.1
+keyrings.alt==4.0.2
+Mako==1.1.3
+Markdown==3.3.4
+MarkupSafe==1.1.1
+matplotlib-inline==0.1.2
+more-itertools==4.2.0
+parso==0.8.2
+pexpect==4.8.0
+pickleshare==0.7.5
+prompt-toolkit==3.0.20
+ptyprocess==0.7.0
+pycairo==1.20.1
+pycparser==2.20
 pycrypto==2.6.1
-PyGObject==3.30.4
+pycryptodomex==3.9.7
+Pygments==2.7.1
+PyGObject==3.38.0
 pytz==2021.1
-pyxdg==0.25
-SecretStorage==2.3.1
-six==1.12.0
+pyxdg==0.27
+PyYAML==5.3.1
+SecretStorage==3.3.1
+six==1.16.0
 sqlparse==0.4.1
+traitlets==5.0.5
 typing-extensions==3.10.0.0
-virtualenv==15.1.0
+virtualenv==20.4.0+ds
+wcwidth==0.2.5
+xdg==5
+zipp==1.0.0
diff --git a/sifrovacka/admin.py b/sifrovacka/admin.py
index 8c38f3f..30aa866 100644
--- a/sifrovacka/admin.py
+++ b/sifrovacka/admin.py
@@ -1,3 +1,9 @@
 from django.contrib import admin
 
 # Register your models here.
+
+from . import models
+
+admin.site.register(models.Sifrovacka)
+admin.site.register(models.Stages)
+admin.site.register(models.Participants)
diff --git a/sifrovacka/migrations/0001_initial.py b/sifrovacka/migrations/0001_initial.py
new file mode 100644
index 0000000..169825d
--- /dev/null
+++ b/sifrovacka/migrations/0001_initial.py
@@ -0,0 +1,37 @@
+# Generated by Django 3.2.3 on 2021-08-12 06:56
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Sifrovacka',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('siftovacka_name', models.CharField(max_length=200)),
+                ('pub_date', models.DateTimeField(verbose_name='date published')),
+                ('startdate_sifrovacka', models.DateField()),
+                ('enddate_sifrovacka', models.DateField()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Stages',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('stage_number', models.IntegerField()),
+                ('choice_text', models.CharField(max_length=200)),
+                ('votes', models.IntegerField(default=0)),
+                ('startdate_stages', models.DateField()),
+                ('enddate_stages', models.DateField()),
+                ('sifrovacka', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sifrovacka.sifrovacka')),
+            ],
+        ),
+    ]
diff --git a/sifrovacka/migrations/0002_auto_20210812_0714.py b/sifrovacka/migrations/0002_auto_20210812_0714.py
new file mode 100644
index 0000000..9c60c06
--- /dev/null
+++ b/sifrovacka/migrations/0002_auto_20210812_0714.py
@@ -0,0 +1,25 @@
+# Generated by Django 3.2.3 on 2021-08-12 07:14
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('sifrovacka', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='stages',
+            name='enddate_stages',
+        ),
+        migrations.RemoveField(
+            model_name='stages',
+            name='startdate_stages',
+        ),
+        migrations.RemoveField(
+            model_name='stages',
+            name='votes',
+        ),
+    ]
diff --git a/sifrovacka/migrations/0003_auto_20210812_0733.py b/sifrovacka/migrations/0003_auto_20210812_0733.py
new file mode 100644
index 0000000..085127e
--- /dev/null
+++ b/sifrovacka/migrations/0003_auto_20210812_0733.py
@@ -0,0 +1,23 @@
+# Generated by Django 3.2.3 on 2021-08-12 07:33
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('sifrovacka', '0002_auto_20210812_0714'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='sifrovacka',
+            old_name='siftovacka_name',
+            new_name='sifrovacka_name',
+        ),
+        migrations.RenameField(
+            model_name='stages',
+            old_name='choice_text',
+            new_name='stage_name',
+        ),
+    ]
diff --git a/sifrovacka/migrations/0004_participants.py b/sifrovacka/migrations/0004_participants.py
new file mode 100644
index 0000000..c971b29
--- /dev/null
+++ b/sifrovacka/migrations/0004_participants.py
@@ -0,0 +1,25 @@
+# Generated by Django 3.2.3 on 2021-08-12 12:09
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('sifrovacka', '0003_auto_20210812_0733'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Participants',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('participate', models.BooleanField()),
+                ('sifrovacka', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sifrovacka.sifrovacka')),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]
diff --git a/sifrovacka/migrations/0005_rename_participate_participants_is_active.py b/sifrovacka/migrations/0005_rename_participate_participants_is_active.py
new file mode 100644
index 0000000..b8b9086
--- /dev/null
+++ b/sifrovacka/migrations/0005_rename_participate_participants_is_active.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.3 on 2021-08-30 10:41
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('sifrovacka', '0004_participants'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='participants',
+            old_name='participate',
+            new_name='is_active',
+        ),
+    ]
diff --git a/sifrovacka/migrations/0006_rename_is_active_participants_inactive.py b/sifrovacka/migrations/0006_rename_is_active_participants_inactive.py
new file mode 100644
index 0000000..30ea600
--- /dev/null
+++ b/sifrovacka/migrations/0006_rename_is_active_participants_inactive.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.3 on 2021-08-30 10:43
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('sifrovacka', '0005_rename_participate_participants_is_active'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='participants',
+            old_name='is_active',
+            new_name='Inactive',
+        ),
+    ]
diff --git a/sifrovacka/migrations/0007_alter_participants_unique_together.py b/sifrovacka/migrations/0007_alter_participants_unique_together.py
new file mode 100644
index 0000000..8178257
--- /dev/null
+++ b/sifrovacka/migrations/0007_alter_participants_unique_together.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.3 on 2021-08-30 10:52
+
+from django.conf import settings
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('sifrovacka', '0006_rename_is_active_participants_inactive'),
+    ]
+
+    operations = [
+        migrations.AlterUniqueTogether(
+            name='participants',
+            unique_together={('user', 'sifrovacka')},
+        ),
+    ]
diff --git a/sifrovacka/models.py b/sifrovacka/models.py
index 71a8362..fe5d66d 100644
--- a/sifrovacka/models.py
+++ b/sifrovacka/models.py
@@ -1,3 +1,55 @@
 from django.db import models
 
 # Create your models here.
+
+from django.conf import settings
+
+
+class Sifrovacka(models.Model):
+    '''
+    model which describes sifrovacka
+    '''
+    sifrovacka_name = models.CharField(max_length=200)
+    pub_date = models.DateTimeField('date published')
+    startdate_sifrovacka = models.DateField()
+    enddate_sifrovacka = models.DateField()
+
+    def __str__(self):
+        return self.sifrovacka_name
+
+
+class Stages(models.Model):
+    '''
+    model which describes how many stages are in particular sifrovacka
+    '''
+    stage_name = models.CharField(max_length=200)
+    sifrovacka = models.ForeignKey(Sifrovacka, on_delete=models.CASCADE)
+    stage_number = models.IntegerField()
+#    if not stage_name_text models:
+#        stage_name = getattr(Stages, sifrovacka_name)
+#            "-" + getattr(Stages, stage_number))
+#    else:
+#        stage_name = stage_name_text
+#    votes = models.IntegerField(default=0)
+#    startdate_stages = models.DateField()
+#    enddate_stages= models.DateField()
+
+    def __str__(self):
+        return str(self.sifrovacka) + " - Stage " + str(self.stage_number)
+
+
+class Participants(models.Model):
+    '''
+    table which connects sifrovacka with users who participate
+    '''
+    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
+    sifrovacka = models.ForeignKey(Sifrovacka, on_delete=models.CASCADE)
+    Inactive = models.BooleanField()
+
+    def __str__(self):
+        return str(self.user) + " - " + str(self.sifrovacka)
+
+
+    class Meta:
+        unique_together = [['user', 'sifrovacka']]
+
diff --git a/sifrovacka/templates/home.html b/sifrovacka/templates/home.html
new file mode 100644
index 0000000..e5ff0d0
--- /dev/null
+++ b/sifrovacka/templates/home.html
@@ -0,0 +1,45 @@
+{% extends "base.html" %}
+{% if request.user.is_authenticated %}
+ {% block content %}
+  <ul>
+   <p> <b>Dostupne sifrovacky: </b> <a href={% url 'index' %}a> Zde </a></p>
+{% comment %}
+ {% if available_sifrovacky_list %}
+
+  {% for sifrovacka in avalable_sifrovacky_list %}
+    <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka }}</a></li>
+   {% endfor %}
+  </ul>
+{% else %}
+ <p>Žádné šifrovačky nejsou aktivní.</p>
+ {% endif %}
+
+{% endcomment %}
+
+ {% if participation_sifrovacky_list %}
+  <ul>
+   <p> <b>Přihlášené sifrovacky: </b> </p>
+   {% for sifrovacka in participation_sifrovacky_list %}
+    <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka }}</a></li>
+   {% endfor %}
+  </ul>
+{% else %}
+ <p>Žádné šifrovačky nejsou aktivní.</p>
+{% endif %}
+{% endblock %}
+{{% endif %}
+
+{% comment %}
+{% block content %}
+  {% if active_sifrovacky_list %}
+   <ul>
+    <p> <b>Aktivni sifrovacky: </b> </p>
+    {% for sifrovacka in active_sifrovacky_list %}
+     <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li>
+    {% endfor %}
+   </ul>
+ {% else %}
+  <p>Žádné šifrovačky nejsou aktivní.</p>
+ {% endif %}
+ {% endblock %}
+{% endcomment %}
diff --git a/sifrovacka/templates/index.html b/sifrovacka/templates/index.html
index db74235..f58a1ae 100644
--- a/sifrovacka/templates/index.html
+++ b/sifrovacka/templates/index.html
@@ -1,12 +1,16 @@
 {% extends "base.html" %}
 
 {% block content %}
-{% if active_sifrovacka_list %}
- <ul>
- {% for sifrovacka in active_sifrovacka_list %}
-  <li><a href="/sifrovacka/{{ sifrovacka.id }}/">{{ sifrovacka.sifrovacka_name }}</a></li>
- {% endfor %}
- </ul>
+ {% if sifrovacky_list %}
+  <ul>
+   <p> <b>Aktivni sifrovacky: </b> </p>
+   {% for sifrovacka in sifrovacky_list %}
+    <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li>
+   {% endfor %}
+   {% for sifrovacka in participants.all %}
+    <li><a href="/sifrovacka/{{ sifrovacka.id }}">{{ sifrovacka.sifrovacka_name }}</a></li>
+   {% endfor %}
+  </ul>
 {% else %}
  <p>Žádné šifrovačky nejsou aktivní.</p>
 {% endif %}
diff --git a/sifrovacka/templates/sifrovacka.html b/sifrovacka/templates/sifrovacka.html
new file mode 100644
index 0000000..4e779f1
--- /dev/null
+++ b/sifrovacka/templates/sifrovacka.html
@@ -0,0 +1,20 @@
+{% extends "base.html" %}
+
+{% block content %}
+<p> Toto je detail sifrovacky se jmenem: <b>{{sifrovacka_detail}} </b> a id: {{sifrovacka_id}}. </p>
+</br>
+<p> Pocet ukolu: <b> {{ sifrovacka_stage_count }} </b> </br>
+    Obtiznost: NONE</br>
+    Casova narocnost: NONE</p>
+
+</br>
+</br>
+</br>
+</br>
+Debug:
+<div>
+{% for stage in sifrovacka_stages %}
+ {{ stage }}</br>
+{% endfor %}
+</div>
+{% endblock %}
diff --git a/sifrovacka/urls.py b/sifrovacka/urls.py
index aa564fb..fd54650 100644
--- a/sifrovacka/urls.py
+++ b/sifrovacka/urls.py
@@ -6,6 +6,10 @@ urlpatterns = [
     # accounts uls
     path('accounts/', include('django_registration.backends.one_step.urls')),
     path('accounts/', include('django.contrib.auth.urls')),
+    # the 'name' value as called by the {% url %} template tag
+    path('<int:sifrovacka_id>/', views.detail, name='detail'),
+    # home page
+    path('home/', views.home, name='home'),
     # /
     path('', views.index, name='index'),
 ]
diff --git a/sifrovacka/views.py b/sifrovacka/views.py
index d5b43ba..ddf73c5 100644
--- a/sifrovacka/views.py
+++ b/sifrovacka/views.py
@@ -4,14 +4,46 @@ from django.shortcuts import render
 from django.http import HttpResponse
 from django.template import loader
 from django.contrib.auth import login,logout
+from .models import Sifrovacka, Stages, Participants
+
+
+def detail(request, sifrovacka_id):
+    sifrovacka_detail = Sifrovacka.objects.get(id = sifrovacka_id)
+    sifrovacka_stages = Stages.objects.filter(sifrovacka__sifrovacka_name = sifrovacka_detail)
+    sifrovacka_stage_count = sifrovacka_stages.count()
+    context = {"sifrovacka_id": sifrovacka_id,
+               "sifrovacka_detail": sifrovacka_detail,
+               "sifrovacka_stages": sifrovacka_stages,
+               "sifrovacka_stage_count": sifrovacka_stage_count}
+    return render(request, 'sifrovacka.html', context)
+
+def home(request):
+    all_sifrovacky_list = Sifrovacka.objects.order_by('id')
+    # only for auth users
+    if request.user.is_authenticated:
+        participation_sifrovacky_list = Participants.objects.filter(user =
+                                        request.user).order_by('sifrovacka_id')
+                                        #request.user).order_by('sifrovacka_id')
+       # available_sifrovacky_list = all_sifrovacky_list.difference(
+                                    #participation_sifrovacky_list)
+    else:
+        participation_sifrovacky_list = None
+
+   # sifrovacka_name = Sifrovacka.objects.get(id = sifrovacka_id)
+
+    context = {"active_sifrovacky_list": all_sifrovacky_list,
+               "participation_sifrovacky_list": participation_sifrovacky_list}
+              
+#    import pdb
+#    pdb.set_trace()
+    return render(request, 'home.html', context)
 
-#def index(request):
-#        return HttpResponse("Hello, world. You're at the polls index.")
 def index(request):
-    template = loader.get_template('index.html')
-    context = {"": ""}
+    list_all_sifrovacky = Sifrovacka.objects.all()
+    context = {"sifrovacky_list": list_all_sifrovacky}
+    #context = {"": ""}
 
-    return HttpResponse(template.render(context, request))
+    return render(request, 'index.html', context)
 
 
 
-- 
GitLab