diff --git a/contracts/admin.py b/contracts/admin.py
index d9027c2fc492c467aa18c3e2860611429835ef0c..e020611ab798557099a241de696b2aae3c94aea1 100644
--- a/contracts/admin.py
+++ b/contracts/admin.py
@@ -277,10 +277,7 @@ class ContractAdmin(
                 "publishing_rejection_comment",
             )
 
-        if (
-            obj is not None
-            and request.user.has_perm("approve", obj)
-        ):
+        if obj is not None and request.user.has_perm("approve", obj):
             fieldsets.insert(
                 5,
                 ("Schválení", {"fields": ["is_approved"]}),
diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py
index 57b16168d06ddf8ed4c362d817c94efb7b75b863..3c406a1d0aa7a7c7c9da158a65ccb77cc46c1473 100644
--- a/contracts/management/commands/import_old_contracts.py
+++ b/contracts/management/commands/import_old_contracts.py
@@ -1,17 +1,16 @@
 import io
 import os
 import string
-
 from datetime import date, datetime
 
 import yaml
-
-from ...models import Contract, ContractFilingArea, ContractType
-
 from django.conf import settings
 from django.core.management.base import BaseCommand
+
 from git import Repo
 
+from ...models import Contract, ContractFilingArea, ContractType
+
 
 class Command(BaseCommand):
     help = "Sync contract data from a remote Git repository."
@@ -65,12 +64,12 @@ class Command(BaseCommand):
         # Use Jan 1, 1970 as the default, if any defined year is 0.
         # Use Jan 1, 2100 as the default for infinitely valid contracts.
         split_contents[1] = (
-            split_contents[1].
-            replace("0000-00-00", "1970-01-01").
-            replace("2222-22-22", "2100-01-01").
-            replace("2222-00-00", "2100-01-01").
-            replace("-32", "-31").
-            replace("\t", " ")
+            split_contents[1]
+            .replace("0000-00-00", "1970-01-01")
+            .replace("2222-22-22", "2100-01-01")
+            .replace("2222-00-00", "2100-01-01")
+            .replace("-32", "-31")
+            .replace("\t", " ")
         )
 
         yaml_source = split_contents[1]
@@ -78,7 +77,9 @@ class Command(BaseCommand):
         try:
             parsed_metadata = yaml.safe_load(io.StringIO(yaml_source))
         except yaml.YAMLError as exc:
-            raise ValueError(f"Failed to parse {contract_root} metadata: {exc}.") from exc
+            raise ValueError(
+                f"Failed to parse {contract_root} metadata: {exc}."
+            ) from exc
 
         if parsed_metadata is None:
             raise ValueError(f"Got no metadata from {contract_root}.")
@@ -111,23 +112,28 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Špatně zadaný začátek platnosti: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} has a broken valid start date: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} has a broken valid start date: {value}."
+                                )
+                            )
                 case "datum ukončení":
                     if isinstance(value, date):
                         if date.year not in (1970, 2100):  # Ignore placeholder years
                             contract.valid_end_date = value
                     elif value is not None and (
-                        isinstance(value, str)
-                        and value.lower() != "na dobu neurčitou"
+                        isinstance(value, str) and value.lower() != "na dobu neurčitou"
                     ):
                         observed_issues_count += 1
                         contract.notes += f"Špatně zadaný konec platnosti: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} has a broken valid end date: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} has a broken valid end date: {value}."
+                                )
+                            )
                 case "title":
                     contract.name = value
 
@@ -136,7 +142,8 @@ class Command(BaseCommand):
 
                     if Contract.objects.filter(name=value).exists():
                         is_already_imported = True
-                        if self.verbosity >= 1: self.stdout.write(f"{slug} already exists, skipping.")
+                        if self.verbosity >= 1:
+                            self.stdout.write(f"{slug} already exists, skipping.")
 
                         break
                 case "použité smluvní typy":
@@ -155,9 +162,12 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Špatně zadané typy: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} is missing types - not a list: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} is missing types - not a list: {value}."
+                                )
+                            )
 
                         continue
 
@@ -166,9 +176,12 @@ class Command(BaseCommand):
                             observed_issues_count += 1
                             contract.notes += f"Nezaevidovaný typ: {type_name}\n"
 
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Contract {slug} is missing types - list item is not a string: {value}.")
-                            )
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Contract {slug} is missing types - list item is not a string: {value}."
+                                    )
+                                )
 
                             continue
 
@@ -203,16 +216,15 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Neznámý stav: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Contract {slug} has an invalid state: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Contract {slug} has an invalid state: {value}."
+                                )
+                            )
                 case "náklady":
                     if isinstance(value, str):
-                        formatted_value = (
-                            value.
-                            replace(" ", "").
-                            replace(".00", ".0")
-                        )
+                        formatted_value = value.replace(" ", "").replace(".00", ".0")
 
                         if formatted_value.isnumeric():
                             value = float(formatted_value)
@@ -220,12 +232,17 @@ class Command(BaseCommand):
                     if isinstance(value, (int, float)):
                         if value < 0:
                             observed_issues_count += 1
-                            contract.notes += f"Původní, špatně zadané náklady: {value}\n"
-
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Contract {slug} has an invalid cost amount: {value}.")
+                            contract.notes += (
+                                f"Původní, špatně zadané náklady: {value}\n"
                             )
 
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Contract {slug} has an invalid cost amount: {value}."
+                                    )
+                                )
+
                             continue
 
                         if value != 0:
@@ -241,9 +258,12 @@ class Command(BaseCommand):
                             observed_issues_count += 1
                             contract.notes += f"Původní, neropoznané náklady: {value}\n"
 
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Could not parse cost for contract {slug}: {value}.")
-                            )
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Could not parse cost for contract {slug}: {value}."
+                                    )
+                                )
 
                             continue
 
@@ -253,9 +273,12 @@ class Command(BaseCommand):
                         observed_issues_count += 1
                         contract.notes += f"Původní, neropoznané náklady: {value}\n"
 
-                        if self.verbosity >= 2: self.stderr.write(
-                            self.style.NOTICE(f"Could not parse cost for contract {slug}: {value}.")
-                        )
+                        if self.verbosity >= 2:
+                            self.stderr.write(
+                                self.style.NOTICE(
+                                    f"Could not parse cost for contract {slug}: {value}."
+                                )
+                            )
                 case "místo uložení":
                     if isinstance(value, str):
                         value = string.capwords(value)  # Some normalization
@@ -269,9 +292,12 @@ class Command(BaseCommand):
                             observed_issues_count += 1
                             contract.notes += f"Špatně zadaná spisovna: {value}\n"
 
-                            if self.verbosity >= 2: self.stderr.write(
-                                self.style.NOTICE(f"Contract {slug} has an invalid filing area: {value}.")
-                            )
+                            if self.verbosity >= 2:
+                                self.stderr.write(
+                                    self.style.NOTICE(
+                                        f"Contract {slug} has an invalid filing area: {value}."
+                                    )
+                                )
 
                             continue
 
@@ -298,10 +324,7 @@ class Command(BaseCommand):
             self.already_imported_count += 1
 
     def import_contract_from_files(
-        self,
-        contract_root: str,
-        files: list[str],
-        valid_start_date: datetime
+        self, contract_root: str, files: list[str], valid_start_date: datetime
     ) -> None:
         contract = Contract(notes="")
 
@@ -311,7 +334,7 @@ class Command(BaseCommand):
                     contract_root,
                     file_,
                 ),
-                "r"
+                "r",
             ) as open_file:
                 if file_ == "index.html":
                     metadata_failed = True
@@ -319,11 +342,12 @@ class Command(BaseCommand):
                     try:
                         metadata = self.parse_index(contract_root, open_file)
                     except ValueError as exc:
-                        if self.verbosity >= 1: self.stderr.write(
-                            self.style.WARNING(
-                                f"Could not parse {contract_root} metadata: {exc}"
+                        if self.verbosity >= 1:
+                            self.stderr.write(
+                                self.style.WARNING(
+                                    f"Could not parse {contract_root} metadata: {exc}"
+                                )
                             )
-                        )
 
                         self.fatal_error_count += 1
 
@@ -377,11 +401,12 @@ class Command(BaseCommand):
                         )
 
                         if not os.path.isdir(this_contract_directory):
-                            if self.verbosity >= 1: self.stderr.write(
-                                self.style.WARNING(
-                                    f"{this_contract_directory} is not a directory and thus invalid, skipping."
+                            if self.verbosity >= 1:
+                                self.stderr.write(
+                                    self.style.WARNING(
+                                        f"{this_contract_directory} is not a directory and thus invalid, skipping."
+                                    )
                                 )
-                            )
 
                             self.fatal_error_count += 1
 
@@ -390,7 +415,7 @@ class Command(BaseCommand):
                         valid_start_date = datetime(
                             year=int(year_directory),
                             month=int(month_directory),
-                            day=int(day_directory)
+                            day=int(day_directory),
                         )
 
                         self.import_contract_from_files(
@@ -399,44 +424,44 @@ class Command(BaseCommand):
                             valid_start_date,
                         )
 
-        if self.verbosity >= 1: self.stdout.write(
-            self.style.SUCCESS(
-                "\n"
-                f"Saved a total of {self.normal_import_count + self.partial_import_count} contracts.\n"
-                f"    {self.partial_import_count} contained a total of {self.issue_count} issues.\n"
-                f"    {self.already_imported_count} were already saved previously and skipped.\n"
-                f"    {self.fatal_error_count} potential contracts were unparseable."
+        if self.verbosity >= 1:
+            self.stdout.write(
+                self.style.SUCCESS(
+                    "\n"
+                    f"Saved a total of {self.normal_import_count + self.partial_import_count} contracts.\n"
+                    f"    {self.partial_import_count} contained a total of {self.issue_count} issues.\n"
+                    f"    {self.already_imported_count} were already saved previously and skipped.\n"
+                    f"    {self.fatal_error_count} potential contracts were unparseable."
+                )
             )
-        )
 
     def handle(self, *args, **options) -> None:
         self.verbosity = options["verbosity"]
 
         git_dir = os.path.join(
             os.getcwd(),
-            (
-                options["directory"]
-                if options["directory"] is not None
-                else "git"
-            )
+            (options["directory"] if options["directory"] is not None else "git"),
         )
 
         if os.path.exists(git_dir):
             if not options["existing"]:
-                if self.verbosity >= 1: self.stderr.write(
-                    self.style.ERROR(
-                        f"Temporary git storage directory ({git_dir}) already exists.\n"
-                        "As it could contain other data, it will not be removed.\n"
-                        "Please remove it manually and try again or use the '--existing' "
-                        "argument."
+                if self.verbosity >= 1:
+                    self.stderr.write(
+                        self.style.ERROR(
+                            f"Temporary git storage directory ({git_dir}) already exists.\n"
+                            "As it could contain other data, it will not be removed.\n"
+                            "Please remove it manually and try again or use the '--existing' "
+                            "argument."
+                        )
                     )
-                )
 
                 return
             else:
-                if self.verbosity >= 2: self.stdout.write("Using existing git storage directory.")
+                if self.verbosity >= 2:
+                    self.stdout.write("Using existing git storage directory.")
         else:
-            if self.verbosity >= 2: self.stdout.write("Cloning repository.")
+            if self.verbosity >= 2:
+                self.stdout.write("Cloning repository.")
 
             Repo.clone_from(
                 options["repo_url"],
@@ -444,20 +469,18 @@ class Command(BaseCommand):
                 branch=options["branch"],
             )
 
-            if self.verbosity >= 1: self.stdout.write(
-                self.style.SUCCESS("Finished cloning repository.")
-            )
+            if self.verbosity >= 1:
+                self.stdout.write(self.style.SUCCESS("Finished cloning repository."))
 
         if options["purge"]:
             Contract.objects.filter().delete()
 
-            if self.verbosity >= 1: self.stdout.write(
-                self.style.SUCCESS("Deleted all previous records.")
-            )
+            if self.verbosity >= 1:
+                self.stdout.write(self.style.SUCCESS("Deleted all previous records."))
 
-        if self.verbosity >= 2: self.stdout.write("\n")
+        if self.verbosity >= 2:
+            self.stdout.write("\n")
         self.import_all_contracts(git_dir)
 
-        if self.verbosity >= 1: self.stdout.write(
-            self.style.SUCCESS("\nGit repository sync complete.")
-        )
+        if self.verbosity >= 1:
+            self.stdout.write(self.style.SUCCESS("\nGit repository sync complete."))
diff --git a/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py b/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py
index a83603908add22789c47efcadbfa3842869c0e40..b5a5a0badba759805b4bbb158d270184a18037ce 100644
--- a/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py
+++ b/contracts/migrations/0050_alter_contractfilingarea_name_and_more.py
@@ -4,25 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0049_alter_contract_options'),
+        ("contracts", "0049_alter_contract_options"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contractfilingarea',
-            name='name',
-            field=models.CharField(max_length=128, verbose_name='Jméno'),
+            model_name="contractfilingarea",
+            name="name",
+            field=models.CharField(max_length=128, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractissue',
-            name='name',
-            field=models.CharField(max_length=128, verbose_name='Jméno'),
+            model_name="contractissue",
+            name="name",
+            field=models.CharField(max_length=128, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contracttype',
-            name='name',
-            field=models.CharField(max_length=128, verbose_name='Jméno'),
+            model_name="contracttype",
+            name="name",
+            field=models.CharField(max_length=128, verbose_name="Jméno"),
         ),
     ]
diff --git a/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py b/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py
index a139cef7b2c7d7486ee72d2aa983a1718b6d1710..ce2753c7f91a986eafd9dda6e325700c16ae57a2 100644
--- a/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py
+++ b/contracts/migrations/0051_alter_contract_cost_unit_other_and_more.py
@@ -4,65 +4,81 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0050_alter_contractfilingarea_name_and_more'),
+        ("contracts", "0050_alter_contractfilingarea_name_and_more"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contract',
-            name='cost_unit_other',
-            field=models.CharField(blank=True, help_text='Je nutno vyplnit v případě, že máš vybranou možnost "jiné" v jednotce nákladů.', max_length=256, null=True, verbose_name='Jednotka nákladů (jiné)'),
+            model_name="contract",
+            name="cost_unit_other",
+            field=models.CharField(
+                blank=True,
+                help_text='Je nutno vyplnit v případě, že máš vybranou možnost "jiné" v jednotce nákladů.',
+                max_length=256,
+                null=True,
+                verbose_name="Jednotka nákladů (jiné)",
+            ),
         ),
         migrations.AlterField(
-            model_name='contract',
-            name='id_number',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Identifikační číslo'),
+            model_name="contract",
+            name="id_number",
+            field=models.CharField(
+                blank=True,
+                max_length=256,
+                null=True,
+                verbose_name="Identifikační číslo",
+            ),
         ),
         migrations.AlterField(
-            model_name='contract',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Název'),
+            model_name="contract",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Název"),
         ),
         migrations.AlterField(
-            model_name='contractapproval',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractapproval",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractee',
-            name='department',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Organizační složka'),
+            model_name="contractee",
+            name="department",
+            field=models.CharField(
+                blank=True, max_length=256, null=True, verbose_name="Organizační složka"
+            ),
         ),
         migrations.AlterField(
-            model_name='contractfile',
-            name='name',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Jméno'),
+            model_name="contractfile",
+            name="name",
+            field=models.CharField(
+                blank=True, max_length=256, null=True, verbose_name="Jméno"
+            ),
         ),
         migrations.AlterField(
-            model_name='contractfilingarea',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractfilingarea",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractintent',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractintent",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contractissue',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contractissue",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='contracttype',
-            name='name',
-            field=models.CharField(max_length=256, verbose_name='Jméno'),
+            model_name="contracttype",
+            name="name",
+            field=models.CharField(max_length=256, verbose_name="Jméno"),
         ),
         migrations.AlterField(
-            model_name='signee',
-            name='department',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Organizační složka'),
+            model_name="signee",
+            name="department",
+            field=models.CharField(
+                blank=True, max_length=256, null=True, verbose_name="Organizační složka"
+            ),
         ),
     ]
diff --git a/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py b/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py
index d0bdf00cfc8778b692dfd94574ce643bc4f6c8ab..281c71866cc844e54ced94d66bafb5924c9da357 100644
--- a/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py
+++ b/contracts/migrations/0052_remove_contract_legal_state_contract_is_valid.py
@@ -4,19 +4,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contracts', '0051_alter_contract_cost_unit_other_and_more'),
+        ("contracts", "0051_alter_contract_cost_unit_other_and_more"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='contract',
-            name='legal_state',
+            model_name="contract",
+            name="legal_state",
         ),
         migrations.AddField(
-            model_name='contract',
-            name='is_valid',
-            field=models.BooleanField(default=False, verbose_name='Je právně platná'),
+            model_name="contract",
+            name="is_valid",
+            field=models.BooleanField(default=False, verbose_name="Je právně platná"),
         ),
     ]
diff --git a/contracts/views.py b/contracts/views.py
index 21f3a5c34bdd90305152d06b66697172480dff1a..26005355dff10e3dd80d3c7b58f1cc862afba7ee 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -441,5 +441,5 @@ def handle_404(request, exception):
             "description": "",
             "archive_page_exists": archive_response.ok,
             "archive_url": archive_url,
-        }
+        },
     )
diff --git a/shared/templatetags/admin_extras.py b/shared/templatetags/admin_extras.py
index 3840491519498fc0719501b89dee56fb6828b946..d184e7c9a2211417d248476d19e97cf0454e73e0 100644
--- a/shared/templatetags/admin_extras.py
+++ b/shared/templatetags/admin_extras.py
@@ -30,7 +30,9 @@ def get_fieldsets_and_inlines(context):
                     (FieldsetInlineOrder.FIELDSET, next(adminform))
                 )
             elif choice == FieldsetInlineOrder.INLINE:
-                fieldsets_and_inlines.append((FieldsetInlineOrder.INLINE, next(inlines)))
+                fieldsets_and_inlines.append(
+                    (FieldsetInlineOrder.INLINE, next(inlines))
+                )
         except StopIteration:
             # Missing permissions, ignore and move on
             continue