From 74bc6674e54c9c779d9e7bfdb0ca2eb6e6208349 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Tue, 21 Feb 2023 21:27:59 +0100
Subject: [PATCH] run hooks

---
 contracts/admin.py                            |   5 +-
 contracts/migrations/0001_initial.py          | 675 ++++++++++++++----
 ..._approved_alter_contract_valid_end_date.py |  19 +-
 ...03_contract_expected_cost_hour_and_more.py |  27 +-
 .../migrations/0004_alter_contract_options.py |  11 +-
 .../0005_alter_contract_primary_contract.py   |  19 +-
 ..._contract_issues_alter_contract_summary.py |  25 +-
 ...ter_contractee_address_country_and_more.py |  15 +-
 contracts/models.py                           |  36 +-
 contracts/templates/contracts/index.html      |  18 +-
 .../templates/contracts/view_contract.html    |  28 +-
 contracts/templatetags/subtract.py            |   2 +-
 contracts/views.py                            |  28 +-
 shared/templates/shared/includes/base.html    |  20 +-
 14 files changed, 690 insertions(+), 238 deletions(-)

diff --git a/contracts/admin.py b/contracts/admin.py
index 2c934f7..d943e02 100644
--- a/contracts/admin.py
+++ b/contracts/admin.py
@@ -2,10 +2,7 @@ from django.contrib import admin
 
 from shared.admin import MarkdownxGuardedModelAdmin
 
-from .forms import (
-    ContractAdminForm,
-    SigneeAdminForm,
-)
+from .forms import ContractAdminForm, SigneeAdminForm
 from .models import (
     Contract,
     Contractee,
diff --git a/contracts/migrations/0001_initial.py b/contracts/migrations/0001_initial.py
index c7ad739..5b23e59 100644
--- a/contracts/migrations/0001_initial.py
+++ b/contracts/migrations/0001_initial.py
@@ -1,17 +1,17 @@
 # Generated by Django 4.1.4 on 2023-02-20 11:46
 
 import colorfield.fields
-import contracts.models
-from django.conf import settings
-from django.db import migrations, models
 import django.db.models.deletion
 import django_countries.fields
 import markdownx.models
+from django.conf import settings
+from django.db import migrations, models
+
+import contracts.models
 import shared.models
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
@@ -20,211 +20,640 @@ class Migration(migrations.Migration):
 
     operations = [
         migrations.CreateModel(
-            name='Contract',
+            name="Contract",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('all_parties_sign_date', models.DateField(blank=True, null=True, verbose_name='Datum podpisu všech stran')),
-                ('valid_start_date', models.DateField(verbose_name='Začátek účinnosti')),
-                ('valid_end_date', models.DateField(verbose_name='Konec platnosti')),
-                ('legal_state', models.CharField(choices=[('valid', 'Platná'), ('effective', 'Účinná'), ('not_effective', 'Neúčinná'), ('invalid', 'Neplatná')], max_length=13, verbose_name='Stav právního ujednání')),
-                ('public_state', models.CharField(choices=[('yes', 'Veřejná'), ('no', 'Neveřejná')], max_length=7, verbose_name='Veřejnost smlouvy')),
-                ('paper_form_state', models.CharField(choices=[('sent', 'Odeslaná'), ('stored', 'Uložená'), ('to_shred', 'Ke skartaci'), ('shredded', 'Skartovaná'), ('lost', 'Ztracená')], max_length=8, verbose_name='Stav papírové formy')),
-                ('publishing_rejection_comment', models.CharField(blank=True, help_text='Obsah není veřejně přístupný.', max_length=65536, null=True, verbose_name='Důvod nezveřejnění')),
-                ('tender_url', models.URLField(blank=True, max_length=256, null=True, verbose_name='Odkaz na výběrové řízení')),
-                ('agreement_url', models.URLField(blank=True, max_length=256, null=True, verbose_name='Odkaz na schválení')),
-                ('identifier', models.CharField(max_length=128, verbose_name='Identifikační číslo')),
-                ('notes', markdownx.models.MarkdownxField(blank=True, help_text='Poznámky jsou viditelné pro všechny, kteří mohou smlouvu spravovat.', null=True, verbose_name='Poznámky')),
-                ('summary', markdownx.models.MarkdownxField(blank=True, help_text='Obsah není veřejně přístupný.', null=True, verbose_name='Rekapitulace')),
-                ('created_by', models.ForeignKey(blank=True, help_text='Informace není veřejně přístupná. Pokud vytváříš novou smlouvu, budeš to ty.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_contracts', to=settings.AUTH_USER_MODEL, verbose_name='Vytvořena uživatelem')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "all_parties_sign_date",
+                    models.DateField(
+                        blank=True, null=True, verbose_name="Datum podpisu všech stran"
+                    ),
+                ),
+                (
+                    "valid_start_date",
+                    models.DateField(verbose_name="Začátek účinnosti"),
+                ),
+                ("valid_end_date", models.DateField(verbose_name="Konec platnosti")),
+                (
+                    "legal_state",
+                    models.CharField(
+                        choices=[
+                            ("valid", "Platná"),
+                            ("effective", "Účinná"),
+                            ("not_effective", "Neúčinná"),
+                            ("invalid", "Neplatná"),
+                        ],
+                        max_length=13,
+                        verbose_name="Stav právního ujednání",
+                    ),
+                ),
+                (
+                    "public_state",
+                    models.CharField(
+                        choices=[("yes", "Veřejná"), ("no", "Neveřejná")],
+                        max_length=7,
+                        verbose_name="Veřejnost smlouvy",
+                    ),
+                ),
+                (
+                    "paper_form_state",
+                    models.CharField(
+                        choices=[
+                            ("sent", "Odeslaná"),
+                            ("stored", "Uložená"),
+                            ("to_shred", "Ke skartaci"),
+                            ("shredded", "Skartovaná"),
+                            ("lost", "Ztracená"),
+                        ],
+                        max_length=8,
+                        verbose_name="Stav papírové formy",
+                    ),
+                ),
+                (
+                    "publishing_rejection_comment",
+                    models.CharField(
+                        blank=True,
+                        help_text="Obsah není veřejně přístupný.",
+                        max_length=65536,
+                        null=True,
+                        verbose_name="Důvod nezveřejnění",
+                    ),
+                ),
+                (
+                    "tender_url",
+                    models.URLField(
+                        blank=True,
+                        max_length=256,
+                        null=True,
+                        verbose_name="Odkaz na výběrové řízení",
+                    ),
+                ),
+                (
+                    "agreement_url",
+                    models.URLField(
+                        blank=True,
+                        max_length=256,
+                        null=True,
+                        verbose_name="Odkaz na schválení",
+                    ),
+                ),
+                (
+                    "identifier",
+                    models.CharField(
+                        max_length=128, verbose_name="Identifikační číslo"
+                    ),
+                ),
+                (
+                    "notes",
+                    markdownx.models.MarkdownxField(
+                        blank=True,
+                        help_text="Poznámky jsou viditelné pro všechny, kteří mohou smlouvu spravovat.",
+                        null=True,
+                        verbose_name="Poznámky",
+                    ),
+                ),
+                (
+                    "summary",
+                    markdownx.models.MarkdownxField(
+                        blank=True,
+                        help_text="Obsah není veřejně přístupný.",
+                        null=True,
+                        verbose_name="Rekapitulace",
+                    ),
+                ),
+                (
+                    "created_by",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Informace není veřejně přístupná. Pokud vytváříš novou smlouvu, budeš to ty.",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="uploaded_contracts",
+                        to=settings.AUTH_USER_MODEL,
+                        verbose_name="Vytvořena uživatelem",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Smlouva',
-                'verbose_name_plural': 'Smlouvy',
+                "verbose_name": "Smlouva",
+                "verbose_name_plural": "Smlouvy",
             },
         ),
         migrations.CreateModel(
-            name='Contractee',
+            name="Contractee",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(default='Česká pirátská strana', max_length=256, verbose_name='Jméno')),
-                ('address_street_with_number', models.CharField(default='Na Moráni 360/3', max_length=256, verbose_name='Ulice, č.p.')),
-                ('address_district', models.CharField(default='Praha 2', max_length=256, verbose_name='Obec')),
-                ('address_zip', models.CharField(default='128 00', max_length=16, verbose_name='PSČ')),
-                ('address_country', django_countries.fields.CountryField(default='CZ', max_length=2, verbose_name='Země')),
-                ('ico_number', models.CharField(blank=True, default='71339698', max_length=16, null=True, verbose_name='IČO')),
-                ('department', models.CharField(blank=True, max_length=128, null=True, verbose_name='Organizační složka')),
-                ('color', colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "name",
+                    models.CharField(
+                        default="Česká pirátská strana",
+                        max_length=256,
+                        verbose_name="Jméno",
+                    ),
+                ),
+                (
+                    "address_street_with_number",
+                    models.CharField(
+                        default="Na Moráni 360/3",
+                        max_length=256,
+                        verbose_name="Ulice, č.p.",
+                    ),
+                ),
+                (
+                    "address_district",
+                    models.CharField(
+                        default="Praha 2", max_length=256, verbose_name="Obec"
+                    ),
+                ),
+                (
+                    "address_zip",
+                    models.CharField(
+                        default="128 00", max_length=16, verbose_name="PSČ"
+                    ),
+                ),
+                (
+                    "address_country",
+                    django_countries.fields.CountryField(
+                        default="CZ", max_length=2, verbose_name="Země"
+                    ),
+                ),
+                (
+                    "ico_number",
+                    models.CharField(
+                        blank=True,
+                        default="71339698",
+                        max_length=16,
+                        null=True,
+                        verbose_name="IČO",
+                    ),
+                ),
+                (
+                    "department",
+                    models.CharField(
+                        blank=True,
+                        max_length=128,
+                        null=True,
+                        verbose_name="Organizační složka",
+                    ),
+                ),
+                (
+                    "color",
+                    colorfield.fields.ColorField(
+                        blank=True,
+                        default=None,
+                        image_field=None,
+                        max_length=18,
+                        null=True,
+                        samples=None,
+                        verbose_name="Barva",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Naše smluvní strana',
-                'verbose_name_plural': 'Naše smluvní strany',
+                "verbose_name": "Naše smluvní strana",
+                "verbose_name_plural": "Naše smluvní strany",
             },
         ),
         migrations.CreateModel(
-            name='ContractFilingArea',
+            name="ContractFilingArea",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=32, verbose_name='Jméno')),
-                ('person_responsible', models.CharField(max_length=256, verbose_name='Odpovědná osoba')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=32, verbose_name="Jméno")),
+                (
+                    "person_responsible",
+                    models.CharField(max_length=256, verbose_name="Odpovědná osoba"),
+                ),
             ],
             options={
-                'verbose_name': 'Spisovna',
-                'verbose_name_plural': 'Spisovny',
+                "verbose_name": "Spisovna",
+                "verbose_name_plural": "Spisovny",
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name='ContractIssue',
+            name="ContractIssue",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=32, verbose_name='Jméno')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=32, verbose_name="Jméno")),
             ],
             options={
-                'verbose_name': 'Problém se smlouvou',
-                'verbose_name_plural': 'Problémy se smlouvami',
+                "verbose_name": "Problém se smlouvou",
+                "verbose_name_plural": "Problémy se smlouvami",
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name='ContractType',
+            name="ContractType",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=32, verbose_name='Jméno')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=32, verbose_name="Jméno")),
             ],
             options={
-                'verbose_name': 'Typ smlouvy',
-                'verbose_name_plural': 'Typy smlouvy',
+                "verbose_name": "Typ smlouvy",
+                "verbose_name_plural": "Typy smlouvy",
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name='Signee',
+            name="Signee",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=256, verbose_name='Jméno')),
-                ('is_legal_entity', models.BooleanField(help_text='Důležité označit správně! Pokud není osoba právnická, zveřejňujeme pouze obec a zemi.', verbose_name='Je právnická osoba')),
-                ('address_street_with_number', models.CharField(help_text='Viditelné pouze u právnických osob.', max_length=256, verbose_name='Ulice, č.p.')),
-                ('address_district', models.CharField(max_length=256, verbose_name='Obec')),
-                ('address_zip', models.CharField(help_text='Viditelné pouze u právnických osob.', max_length=16, verbose_name='PSČ')),
-                ('address_country', django_countries.fields.CountryField(max_length=2, verbose_name='Země')),
-                ('ico_number', models.CharField(blank=True, max_length=16, null=True, verbose_name='IČO')),
-                ('date_of_birth', models.DateField(blank=True, null=True, verbose_name='Datum narození')),
-                ('department', models.CharField(blank=True, max_length=128, null=True, verbose_name='Organizační složka')),
-                ('color', colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=256, verbose_name="Jméno")),
+                (
+                    "is_legal_entity",
+                    models.BooleanField(
+                        help_text="Důležité označit správně! Pokud není osoba právnická, zveřejňujeme pouze obec a zemi.",
+                        verbose_name="Je právnická osoba",
+                    ),
+                ),
+                (
+                    "address_street_with_number",
+                    models.CharField(
+                        help_text="Viditelné pouze u právnických osob.",
+                        max_length=256,
+                        verbose_name="Ulice, č.p.",
+                    ),
+                ),
+                (
+                    "address_district",
+                    models.CharField(max_length=256, verbose_name="Obec"),
+                ),
+                (
+                    "address_zip",
+                    models.CharField(
+                        help_text="Viditelné pouze u právnických osob.",
+                        max_length=16,
+                        verbose_name="PSČ",
+                    ),
+                ),
+                (
+                    "address_country",
+                    django_countries.fields.CountryField(
+                        max_length=2, verbose_name="Země"
+                    ),
+                ),
+                (
+                    "ico_number",
+                    models.CharField(
+                        blank=True, max_length=16, null=True, verbose_name="IČO"
+                    ),
+                ),
+                (
+                    "date_of_birth",
+                    models.DateField(
+                        blank=True, null=True, verbose_name="Datum narození"
+                    ),
+                ),
+                (
+                    "department",
+                    models.CharField(
+                        blank=True,
+                        max_length=128,
+                        null=True,
+                        verbose_name="Organizační složka",
+                    ),
+                ),
+                (
+                    "color",
+                    colorfield.fields.ColorField(
+                        blank=True,
+                        default=None,
+                        image_field=None,
+                        max_length=18,
+                        null=True,
+                        samples=None,
+                        verbose_name="Barva",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Jiná smluvní strana',
-                'verbose_name_plural': 'Ostatní smluvní strany',
+                "verbose_name": "Jiná smluvní strana",
+                "verbose_name_plural": "Ostatní smluvní strany",
             },
         ),
         migrations.CreateModel(
-            name='SigneeSignature',
+            name="SigneeSignature",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('date', models.DateField(verbose_name='Datum podpisu')),
-                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='signee_signatures', to='contracts.contract', verbose_name='Podpisy jiných smluvních stran')),
-                ('signee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='signatures', to='contracts.signee', verbose_name='Smluvní strana')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("date", models.DateField(verbose_name="Datum podpisu")),
+                (
+                    "contract",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="signee_signatures",
+                        to="contracts.contract",
+                        verbose_name="Podpisy jiných smluvních stran",
+                    ),
+                ),
+                (
+                    "signee",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="signatures",
+                        to="contracts.signee",
+                        verbose_name="Smluvní strana",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Podpis jiné smluvní strany',
-                'verbose_name_plural': 'Podpisy ostatních smluvních stran',
+                "verbose_name": "Podpis jiné smluvní strany",
+                "verbose_name_plural": "Podpisy ostatních smluvních stran",
             },
         ),
         migrations.CreateModel(
-            name='SigneeRepresentative',
+            name="SigneeRepresentative",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=256, verbose_name='Jméno')),
-                ('function', models.CharField(blank=True, max_length=256, null=True, verbose_name='Funkce')),
-                ('role', models.CharField(blank=True, max_length=256, null=True, verbose_name='Role')),
-                ('signee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='representatives', to='contracts.signee', verbose_name='Smluvní strana')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=256, verbose_name="Jméno")),
+                (
+                    "function",
+                    models.CharField(
+                        blank=True, max_length=256, null=True, verbose_name="Funkce"
+                    ),
+                ),
+                (
+                    "role",
+                    models.CharField(
+                        blank=True, max_length=256, null=True, verbose_name="Role"
+                    ),
+                ),
+                (
+                    "signee",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="representatives",
+                        to="contracts.signee",
+                        verbose_name="Smluvní strana",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Zástupce',
-                'verbose_name_plural': 'Zástupci',
+                "verbose_name": "Zástupce",
+                "verbose_name_plural": "Zástupci",
             },
             bases=(contracts.models.RepresentativeMixin, models.Model),
         ),
         migrations.CreateModel(
-            name='ContractIntent',
+            name="ContractIntent",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=128, verbose_name='Jméno')),
-                ('url', models.URLField(max_length=256, verbose_name='Odkaz')),
-                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='intents', to='contracts.contract', verbose_name='Smlouva')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=128, verbose_name="Jméno")),
+                ("url", models.URLField(max_length=256, verbose_name="Odkaz")),
+                (
+                    "contract",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="intents",
+                        to="contracts.contract",
+                        verbose_name="Smlouva",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Záměr',
-                'verbose_name_plural': 'Záměry',
+                "verbose_name": "Záměr",
+                "verbose_name_plural": "Záměry",
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name='ContractFile',
+            name="ContractFile",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(blank=True, max_length=128, null=True, verbose_name='Jméno')),
-                ('is_public', models.BooleanField(default=False, verbose_name='Veřejně dostupný')),
-                ('file', models.FileField(upload_to='', verbose_name='Soubor')),
-                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='contracts.contract', verbose_name='Soubory')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "name",
+                    models.CharField(
+                        blank=True, max_length=128, null=True, verbose_name="Jméno"
+                    ),
+                ),
+                (
+                    "is_public",
+                    models.BooleanField(default=False, verbose_name="Veřejně dostupný"),
+                ),
+                ("file", models.FileField(upload_to="", verbose_name="Soubor")),
+                (
+                    "contract",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="files",
+                        to="contracts.contract",
+                        verbose_name="Soubory",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Soubor',
-                'verbose_name_plural': 'Soubory',
+                "verbose_name": "Soubor",
+                "verbose_name_plural": "Soubory",
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name='ContracteeSignature',
+            name="ContracteeSignature",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('date', models.DateField(verbose_name='Datum podpisu')),
-                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contractee_signatures', to='contracts.contract', verbose_name='Podpisy našich smluvních stran')),
-                ('contractee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='signatures', to='contracts.contractee', verbose_name='Smluvní strana')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("date", models.DateField(verbose_name="Datum podpisu")),
+                (
+                    "contract",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="contractee_signatures",
+                        to="contracts.contract",
+                        verbose_name="Podpisy našich smluvních stran",
+                    ),
+                ),
+                (
+                    "contractee",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="signatures",
+                        to="contracts.contractee",
+                        verbose_name="Smluvní strana",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Podpis naší smluvní strany',
-                'verbose_name_plural': 'Podpisy našich smluvních stran',
+                "verbose_name": "Podpis naší smluvní strany",
+                "verbose_name_plural": "Podpisy našich smluvních stran",
             },
         ),
         migrations.CreateModel(
-            name='ContracteeRepresentative',
+            name="ContracteeRepresentative",
             fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=256, verbose_name='Jméno')),
-                ('function', models.CharField(blank=True, max_length=256, null=True, verbose_name='Funkce')),
-                ('role', models.CharField(blank=True, max_length=256, null=True, verbose_name='Role')),
-                ('contractee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='representatives', to='contracts.contractee', verbose_name='Smluvní strana')),
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=256, verbose_name="Jméno")),
+                (
+                    "function",
+                    models.CharField(
+                        blank=True, max_length=256, null=True, verbose_name="Funkce"
+                    ),
+                ),
+                (
+                    "role",
+                    models.CharField(
+                        blank=True, max_length=256, null=True, verbose_name="Role"
+                    ),
+                ),
+                (
+                    "contractee",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="representatives",
+                        to="contracts.contractee",
+                        verbose_name="Smluvní strana",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Zástupce',
-                'verbose_name_plural': 'Zástupci',
+                "verbose_name": "Zástupce",
+                "verbose_name_plural": "Zástupci",
             },
             bases=(contracts.models.RepresentativeMixin, models.Model),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='filing_area',
-            field=models.ForeignKey(blank=True, help_text='Obsah není veřejně přístupný.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filed_contracts', to='contracts.contractfilingarea', verbose_name='Spisovna'),
+            model_name="contract",
+            name="filing_area",
+            field=models.ForeignKey(
+                blank=True,
+                help_text="Obsah není veřejně přístupný.",
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="filed_contracts",
+                to="contracts.contractfilingarea",
+                verbose_name="Spisovna",
+            ),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='issues',
-            field=models.ManyToManyField(blank=True, to='contracts.contractissue', verbose_name='Problémy'),
+            model_name="contract",
+            name="issues",
+            field=models.ManyToManyField(
+                blank=True, to="contracts.contractissue", verbose_name="Problémy"
+            ),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='primary_contract',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subcontracts', to='contracts.contract', verbose_name='Primární smlouva'),
+            model_name="contract",
+            name="primary_contract",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="subcontracts",
+                to="contracts.contract",
+                verbose_name="Primární smlouva",
+            ),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='public_status_set_by',
-            field=models.ForeignKey(blank=True, help_text='Obsah není veřejně přístupný.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='public_status_altered_contracts', to=settings.AUTH_USER_MODEL, verbose_name='Zveřejněno / nezveřejněno uživatelem'),
+            model_name="contract",
+            name="public_status_set_by",
+            field=models.ForeignKey(
+                blank=True,
+                help_text="Obsah není veřejně přístupný.",
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="public_status_altered_contracts",
+                to=settings.AUTH_USER_MODEL,
+                verbose_name="Zveřejněno / nezveřejněno uživatelem",
+            ),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='types',
-            field=models.ManyToManyField(to='contracts.contracttype', verbose_name='Typ'),
+            model_name="contract",
+            name="types",
+            field=models.ManyToManyField(
+                to="contracts.contracttype", verbose_name="Typ"
+            ),
         ),
     ]
diff --git a/contracts/migrations/0002_contract_is_approved_alter_contract_valid_end_date.py b/contracts/migrations/0002_contract_is_approved_alter_contract_valid_end_date.py
index 43e4b59..a01c8f3 100644
--- a/contracts/migrations/0002_contract_is_approved_alter_contract_valid_end_date.py
+++ b/contracts/migrations/0002_contract_is_approved_alter_contract_valid_end_date.py
@@ -4,21 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0001_initial'),
+        ("contracts", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='contract',
-            name='is_approved',
-            field=models.BooleanField(default=False, help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, zaškrtnutím se vypustí ven.', verbose_name='Je schválená'),
+            model_name="contract",
+            name="is_approved",
+            field=models.BooleanField(
+                default=False,
+                help_text="Může měnit jen schvalovatel. Pokud je smlouva veřejná, zaškrtnutím se vypustí ven.",
+                verbose_name="Je schválená",
+            ),
             preserve_default=False,
         ),
         migrations.AlterField(
-            model_name='contract',
-            name='valid_end_date',
-            field=models.DateField(verbose_name='Konec účinnosti'),
+            model_name="contract",
+            name="valid_end_date",
+            field=models.DateField(verbose_name="Konec účinnosti"),
         ),
     ]
diff --git a/contracts/migrations/0003_contract_expected_cost_hour_and_more.py b/contracts/migrations/0003_contract_expected_cost_hour_and_more.py
index c098ed3..e25cd45 100644
--- a/contracts/migrations/0003_contract_expected_cost_hour_and_more.py
+++ b/contracts/migrations/0003_contract_expected_cost_hour_and_more.py
@@ -4,25 +4,30 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0002_contract_is_approved_alter_contract_valid_end_date'),
+        ("contracts", "0002_contract_is_approved_alter_contract_valid_end_date"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='contract',
-            name='expected_cost_hour',
-            field=models.IntegerField(blank=True, null=True, verbose_name='Očekávané výdaje (hodina)'),
+            model_name="contract",
+            name="expected_cost_hour",
+            field=models.IntegerField(
+                blank=True, null=True, verbose_name="Očekávané výdaje (hodina)"
+            ),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='expected_cost_month',
-            field=models.IntegerField(blank=True, null=True, verbose_name='Očekávané výdaje (měsíc)'),
+            model_name="contract",
+            name="expected_cost_month",
+            field=models.IntegerField(
+                blank=True, null=True, verbose_name="Očekávané výdaje (měsíc)"
+            ),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='expected_cost_year',
-            field=models.IntegerField(blank=True, null=True, verbose_name='Očekávané výdaje (rok)'),
+            model_name="contract",
+            name="expected_cost_year",
+            field=models.IntegerField(
+                blank=True, null=True, verbose_name="Očekávané výdaje (rok)"
+            ),
         ),
     ]
diff --git a/contracts/migrations/0004_alter_contract_options.py b/contracts/migrations/0004_alter_contract_options.py
index 5b6fd8a..5b0c4b9 100644
--- a/contracts/migrations/0004_alter_contract_options.py
+++ b/contracts/migrations/0004_alter_contract_options.py
@@ -4,14 +4,17 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0003_contract_expected_cost_hour_and_more'),
+        ("contracts", "0003_contract_expected_cost_hour_and_more"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='contract',
-            options={'permissions': (('approve', 'Schválit / zrušit schválení'),), 'verbose_name': 'Smlouva', 'verbose_name_plural': 'Smlouvy'},
+            name="contract",
+            options={
+                "permissions": (("approve", "Schválit / zrušit schválení"),),
+                "verbose_name": "Smlouva",
+                "verbose_name_plural": "Smlouvy",
+            },
         ),
     ]
diff --git a/contracts/migrations/0005_alter_contract_primary_contract.py b/contracts/migrations/0005_alter_contract_primary_contract.py
index b777807..fa8184a 100644
--- a/contracts/migrations/0005_alter_contract_primary_contract.py
+++ b/contracts/migrations/0005_alter_contract_primary_contract.py
@@ -1,19 +1,26 @@
 # Generated by Django 4.1.4 on 2023-02-21 06:07
 
-from django.db import migrations, models
 import django.db.models.deletion
+from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0004_alter_contract_options'),
+        ("contracts", "0004_alter_contract_options"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contract',
-            name='primary_contract',
-            field=models.ForeignKey(blank=True, help_text='Např. pro dodatky nebo objednávky u rámcových smluv.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subcontracts', to='contracts.contract', verbose_name='Primární smlouva'),
+            model_name="contract",
+            name="primary_contract",
+            field=models.ForeignKey(
+                blank=True,
+                help_text="Např. pro dodatky nebo objednávky u rámcových smluv.",
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="subcontracts",
+                to="contracts.contract",
+                verbose_name="Primární smlouva",
+            ),
         ),
     ]
diff --git a/contracts/migrations/0006_alter_contract_issues_alter_contract_summary.py b/contracts/migrations/0006_alter_contract_issues_alter_contract_summary.py
index c6ae7b9..6be6759 100644
--- a/contracts/migrations/0006_alter_contract_issues_alter_contract_summary.py
+++ b/contracts/migrations/0006_alter_contract_issues_alter_contract_summary.py
@@ -4,20 +4,29 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0005_alter_contract_primary_contract'),
+        ("contracts", "0005_alter_contract_primary_contract"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contract',
-            name='issues',
-            field=models.ManyToManyField(blank=True, help_text='Veřejně nazváno "Poznámky".', to='contracts.contractissue', verbose_name='Problémy'),
+            model_name="contract",
+            name="issues",
+            field=models.ManyToManyField(
+                blank=True,
+                help_text='Veřejně nazváno "Poznámky".',
+                to="contracts.contractissue",
+                verbose_name="Problémy",
+            ),
         ),
         migrations.AlterField(
-            model_name='contract',
-            name='summary',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Sumarizace obsahu smlouvy'),
+            model_name="contract",
+            name="summary",
+            field=models.CharField(
+                blank=True,
+                max_length=256,
+                null=True,
+                verbose_name="Sumarizace obsahu smlouvy",
+            ),
         ),
     ]
diff --git a/contracts/migrations/0007_alter_contractee_address_country_and_more.py b/contracts/migrations/0007_alter_contractee_address_country_and_more.py
index 1c2a4b4..97fba09 100644
--- a/contracts/migrations/0007_alter_contractee_address_country_and_more.py
+++ b/contracts/migrations/0007_alter_contractee_address_country_and_more.py
@@ -4,20 +4,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0006_alter_contract_issues_alter_contract_summary'),
+        ("contracts", "0006_alter_contract_issues_alter_contract_summary"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contractee',
-            name='address_country',
-            field=models.CharField(default='CZ', max_length=256, verbose_name='Země'),
+            model_name="contractee",
+            name="address_country",
+            field=models.CharField(default="CZ", max_length=256, verbose_name="Země"),
         ),
         migrations.AlterField(
-            model_name='signee',
-            name='address_country',
-            field=models.CharField(default='CZ', max_length=256, verbose_name='Země'),
+            model_name="signee",
+            name="address_country",
+            field=models.CharField(default="CZ", max_length=256, verbose_name="Země"),
         ),
     ]
diff --git a/contracts/models.py b/contracts/models.py
index 529f85a..685240a 100644
--- a/contracts/models.py
+++ b/contracts/models.py
@@ -1,8 +1,8 @@
 import math
 
+from colorfield.fields import ColorField
 from django.conf import settings
 from django.db import models
-from colorfield.fields import ColorField
 from markdownx.models import MarkdownxField
 
 from shared.models import NameStrMixin
@@ -48,12 +48,12 @@ class ColorMixin(models.Model):
 
         # https://stackoverflow.com/a/29643643 - Thanks to John1024 and vallentin!
         # https://stackoverflow.com/a/58270890 - Thanks to Kardi Teknomo!
-        
+
         hex_color = self.color.lstrip("#")
-        rgb_color = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
-        
+        rgb_color = tuple(int(hex_color[i : i + 2], 16) for i in (0, 2, 4))
+
         [r, g, b] = rgb_color
-        
+
         hsp = math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b))
 
         if hsp > 127.5:
@@ -368,7 +368,7 @@ class Contract(models.Model):
         help_text=(
             "Může měnit jen schvalovatel. Pokud je smlouva "
             "veřejná, zaškrtnutím se vypustí ven."
-        )
+        ),
     )
 
     valid_start_date = models.DateField(
@@ -427,7 +427,7 @@ class Contract(models.Model):
         null=True,
         verbose_name="Odkaz na výběrové řízení",
     )
-    
+
     agreement_url = models.URLField(
         max_length=256,
         blank=True,
@@ -439,7 +439,7 @@ class Contract(models.Model):
         ContractIssue,
         blank=True,
         verbose_name="Problémy",
-        help_text="Veřejně nazváno \"Poznámky\".",
+        help_text='Veřejně nazváno "Poznámky".',
     )
 
     # NOTE: Could we make this into expected_cost_type and expected_cost_amount?
@@ -449,13 +449,13 @@ class Contract(models.Model):
         null=True,
         verbose_name="Očekávané výdaje (rok)",
     )
-    
+
     expected_cost_month = models.IntegerField(
         blank=True,
         null=True,
         verbose_name="Očekávané výdaje (měsíc)",
     )
-    
+
     expected_cost_hour = models.IntegerField(
         blank=True,
         null=True,
@@ -479,7 +479,7 @@ class Contract(models.Model):
         null=True,
         related_name="subcontracts",
         verbose_name="Primární smlouva",
-        help_text="Např. pro dodatky nebo objednávky u rámcových smluv."
+        help_text="Např. pro dodatky nebo objednávky u rámcových smluv.",
     )  # WARNING: Dependent on the type!
 
     notes = MarkdownxField(
@@ -492,10 +492,8 @@ class Contract(models.Model):
     class Meta:
         verbose_name = "Smlouva"
         verbose_name_plural = "Smlouvy"
-        
-        permissions = (
-            ("approve", "Schválit / zrušit schválení"),
-        )
+
+        permissions = (("approve", "Schválit / zrušit schválení"),)
 
     def __str__(self) -> str:
         return self.identifier
@@ -555,10 +553,10 @@ class ContracteeSignature(models.Model):
 
     def __str__(self) -> str:
         representative_names = []
-        
+
         for representative in self.contractee.representatives.all():
             representative_names.append(representative.name)
-        
+
         representatives = ", ".join(representative_names)
         result = self.contractee.name
 
@@ -595,10 +593,10 @@ class SigneeSignature(models.Model):
 
     def __str__(self) -> str:
         representative_names = []
-        
+
         for representative in self.signee.representatives.all():
             representative_names.append(representative.name)
-        
+
         representatives = ", ".join(representative_names)
         result = self.signee.name
 
diff --git a/contracts/templates/contracts/index.html b/contracts/templates/contracts/index.html
index 9771b74..b71d4d8 100644
--- a/contracts/templates/contracts/index.html
+++ b/contracts/templates/contracts/index.html
@@ -47,7 +47,7 @@
             {% endfor %}
         </tbody>
     </table>
-    
+
     {% if page.has_other_pages %}
         <div class="pagination-container">
             <nav class="pagination space-x-1">
@@ -63,7 +63,7 @@
                         </div>
                     </div>
                 </a>
-                
+
                 {% if page.previous_page_number != 1 %}
                     <a
                         class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"
@@ -72,11 +72,11 @@
                         <div class="btn__body">1</div>
                     </a>
                 {% endif %}
-                
+
                 {% if page.has_previous and page.previous_page_number != 2 %}
                     <span class="text-grey-500 hidden md:flex flex-col px-2 justify-center">...</span>
                 {% endif %}
-                
+
                 {% if page.has_previous %}
                     <a
                         class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"
@@ -89,7 +89,7 @@
                 <button class="btn btn--grey-500 btn--condensed hidden md:inline-block">
                     <div class="btn__body">{{ page.number }}</div>
                 </button>
-                
+
                 {% if page.has_next %}
                     <a
                         class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"
@@ -98,13 +98,13 @@
                         <div class="btn__body ">{{ page.next_page_number }}</div>
                     </a>
                 {% endif %}
-                
+
                 {% if paginator.num_pages != page.next_page_number and paginator.num_pages|subtract:1 != page.next_page_number %}
                     <span class="text-grey-500 hidden md:flex flex-col px-2 justify-center">...</span>
                 {% endif %}
-                
+
                 {% comment %}num_pages is equivalent to the last page number{% endcomment %}
-                
+
                 {% if paginator.num_pages != page.next_page_number %}
                     <a
                         role="button"
@@ -114,7 +114,7 @@
                         <div class="btn__body">{{ paginator.num_pages }}</div>
                     </a>
                 {% endif %}
-                
+
                 <a
                     class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed"
                     {% if not page.has_next %}disabled{% endif %}
diff --git a/contracts/templates/contracts/view_contract.html b/contracts/templates/contracts/view_contract.html
index 8b084a0..1a77825 100644
--- a/contracts/templates/contracts/view_contract.html
+++ b/contracts/templates/contracts/view_contract.html
@@ -3,9 +3,9 @@
 
 {% block content %}
     <h1 class="head-alt-lg mb-10">{{ contract.identifier }}</h1>
-    
+
     <h2 class="text-xl font-bold mb-5"><i class="ico--info mr-3"></i>Základní informace</h2>
-    
+
     <table class="table table-auto w-full table--striped table--bordered mb-10">
         <tbody>
             <tr>
@@ -163,11 +163,11 @@
             </tr>
         </tbody>
     </table>
-    
+
     <h2 class="text-xl font-bold mb-5"><i class="ico--pencil mr-3"></i>Podpisy</h2>
-    
+
     <h3 class="text-lg font-bold mb-4">Naší smluvní strany</h3>
-    
+
     {% with contract.contractee_signatures.all as signatures %}
         {% if signatures|length != 0 %}
             <ul class="mb-5 grid grid-cols-3 gap-2">
@@ -185,16 +185,16 @@
                                     {% endif %}
                                 </a>
                             </div>
-                            
+
                             {{ signature.contractee.address_street_with_number }}<br>
                             {{ signature.contractee.address_zip }} {{ signature.contractee.address_district }}<br>
                             {{ signature.contractee.get_address_country_display }}<br>
-                            
+
                             {% if signature.contractee.ico_number %}
                                 IČO: {{ signature.contractee.ico_number }}<br>
                             {% endif %}
                         </address>
-                        
+
                         <div class="block mb-2">
                             <p class="block mb-2">
                                 <strong>Zástupci:</strong>
@@ -215,9 +215,9 @@
             <div class="mb-5 text-grey-200">Žádné podpisy.</div>
         {% endif %}
     {% endwith %}
-    
+
     <h3 class="text-lg font-bold mb-5">Ostatních smluvních stran</h3>
-    
+
     {% with contract.signee_signatures.all as signatures %}
         {% if signatures|length != 0 %}
             <ul class="mb-5 grid grid-cols-3 gap-2">
@@ -235,7 +235,7 @@
                                     {% endif %}
                                 </a>
                             </div>
-                            
+
                             {% if signature.signee.is_legal_entity %}
                                 {{ signature.signee.address_street_with_number }}<br>
                                 {{ signature.signee.address_zip }} {{ signature.signee.address_district }}<br>
@@ -243,18 +243,18 @@
                             {% else %}
                                 {{ signature.signee.address_district }}<br>
                             {% endif %}
-                            
+
                             {% if signature.signee.ico_number %}
                                 IČO: {{ signature.signee.ico_number }}<br>
                             {% endif %}
-                            
+
                             {% if not signature.signee.is_legal_entity %}
                                 <span class="block mt-2">
                                     <small class="font-thin">(Fyzická osoba, ukazujeme pouze obec.)</small><br>
                                 </span>
                             {% endif %}
                         </address>
-                        
+
                         <div class="block mb-2">
                             <p class="block mb-2">
                                 <strong>Zástupci:</strong>
diff --git a/contracts/templatetags/subtract.py b/contracts/templatetags/subtract.py
index 6faf0b9..baf7853 100644
--- a/contracts/templatetags/subtract.py
+++ b/contracts/templatetags/subtract.py
@@ -5,4 +5,4 @@ register = template.Library()
 
 @register.filter(name="subtract")
 def subtract(value, arg):
-    return value - arg 
+    return value - arg
diff --git a/contracts/views.py b/contracts/views.py
index 79b5814..fd204c4 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -1,6 +1,6 @@
 from django.conf import settings
-from django.shortcuts import render
 from django.core.paginator import Paginator
+from django.shortcuts import render
 
 from .models import Contract
 
@@ -8,18 +8,20 @@ from .models import Contract
 
 
 def index(request):
-    contracts = Contract.objects.filter(
-        is_approved=True,
-        public_state=Contract.PublicStates.YES,  
-    ).order_by("valid_start_date").all()
-    paginator = Paginator(contracts, 25)
-    
-    page = paginator.get_page(
-        request.GET.get('page')
+    contracts = (
+        Contract.objects.filter(
+            is_approved=True,
+            public_state=Contract.PublicStates.YES,
+        )
+        .order_by("valid_start_date")
+        .all()
     )
-    
+    paginator = Paginator(contracts, 25)
+
+    page = paginator.get_page(request.GET.get("page"))
+
     print(request.user)
-    
+
     return render(
         request,
         "contracts/index.html",
@@ -30,7 +32,7 @@ def index(request):
             "description": "Description",
             "paginator": paginator,
             "page": page,
-        }
+        },
     )
 
 
@@ -49,5 +51,5 @@ def view_contract(request, id: int):
             "title": contract.identifier,
             "description": "",  # TODO
             "contract": contract,
-        }
+        },
     )
diff --git a/shared/templates/shared/includes/base.html b/shared/templates/shared/includes/base.html
index c38dae1..8e1d971 100644
--- a/shared/templates/shared/includes/base.html
+++ b/shared/templates/shared/includes/base.html
@@ -5,7 +5,7 @@
 <html lang="cs">
     <head>
         <meta charset="utf-8">
-        
+
         <meta name="title" content="{{ title }} | Registr smluv Pirátské strany">
         <meta name="description" content="{{ description }}">
 
@@ -28,13 +28,13 @@
             type="image/png"
             href="{% static "shared/favicon.png" %}"
         >
-        
+
         <link
             href="{% static "shared/style.css" %}"
             rel="stylesheet"
             media="all"
         >
-        
+
         <link
             href="https://styleguide.pirati.cz/2.11.x/css/styles.css"
             rel="stylesheet"
@@ -45,10 +45,10 @@
             rel="stylesheet"
             media="all"
         >
-        
+
         {% render_bundle "shared" %}
         {% render_bundle "base" %}
-        
+
         <title>{{ title }} | Registr smluv Pirátské strany</title>
     </head>
     <body>
@@ -63,13 +63,13 @@
                                 </a>
                                 <a href="/" class="pl-4 font-bold text-xl hover:no-underline lg:border-r lg:border-grey-300 lg:pr-8">Registr smluv</a>
                             </div>
-                            
+
                             <div class="navbar__menutoggle my-4 flex justify-end lg:hidden">
                                 <a href="#" @click="show = !show" class="no-underline hover:no-underline">
                                     <i class="ico--menu text-3xl"></i>
                                 </a>
                             </div>
-                            
+
                             <div v-if="show || isLgScreenSize" class="navbar__main navbar__section navbar__section--expandable container-padding--zero lg:container-padding--auto">
                                 <ul class="navbar-menu text-white">
                                     <li class="navbar-menu__item">
@@ -85,7 +85,7 @@
                                     {% endif %}
                                 </ul>
                             </div>
-                            
+
                             <div v-if="show || isLgScreenSize" class="navbar__actions navbar__section navbar__section--expandable container-padding--zero lg:container-padding--auto self-start flex flex-col sm:flex-row lg:flex-col sm:space-x-4 space-y-2 sm:space-y-0 lg:space-y-2 xl:flex-row xl:space-x-2 xl:space-y-0">
                                 {% if user and not user.is_anonymous %}
                                     <div class="flex items-center space-x-4">
@@ -119,13 +119,13 @@
                 </ui-navbar>
             </ui-app>
         </nav>
-        
+
         <div class="container container--default py-8 lg:py-24">
             <main>
                 {% block content %}{% endblock %}
             </main>
         </div>
-        
+
         <script
             src="https://styleguide.pirati.cz/2.11.x/js/main.bundle.js"
         ></script>
-- 
GitLab