diff --git a/contracts/migrations/0001_initial.py b/contracts/migrations/0001_initial.py
index c15a6d40347952982d5cb1ede3b071ead300bd5c..0b7815c6521b4330d918a890686f72dec104630d 100644
--- a/contracts/migrations/0001_initial.py
+++ b/contracts/migrations/0001_initial.py
@@ -1,6 +1,5 @@
-# Generated by Django 4.1.4 on 2023-02-21 20:57
+# Generated by Django 4.1.4 on 2023-03-15 12:22
 
-import colorfield.fields
 import contracts.models
 from django.conf import settings
 from django.db import migrations, models
@@ -23,20 +22,20 @@ class Migration(migrations.Migration):
             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')),
-                ('identifier', models.CharField(max_length=128, verbose_name='Identifikační číslo')),
-                ('summary', models.CharField(blank=True, max_length=256, null=True, verbose_name='Sumarizace obsahu smlouvy')),
-                ('is_approved', models.BooleanField(help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, zaškrtnutím se vypustí ven.', verbose_name='Je schválená')),
-                ('valid_start_date', models.DateField(verbose_name='Začátek účinnosti')),
-                ('valid_end_date', models.DateField(verbose_name='Konec účinnosti')),
-                ('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í')),
+                ('approval_state', models.CharField(blank=True, choices=[('no', 'Neschválená'), ('yes', 'Schválená')], help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, se stavem "Schválená" se vypustí ven.', max_length=7, null=True, verbose_name='Stav schválení')),
+                ('name', models.CharField(max_length=128, verbose_name='Název')),
+                ('id_number', models.CharField(blank=True, max_length=128, null=True, verbose_name='Identifikační číslo')),
+                ('summary', models.TextField(blank=True, max_length=256, null=True, verbose_name='Sumarizace obsahu smlouvy')),
+                ('valid_start_date', models.DateField(blank=True, null=True, verbose_name='Začátek účinnosti')),
+                ('valid_end_date', models.DateField(blank=True, null=True, verbose_name='Konec účinnosti')),
+                ('legal_state', models.CharField(choices=[('valid', 'Platná'), ('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')),
+                ('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 fyzického dokumentu')),
                 ('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í')),
-                ('expected_cost_year', models.IntegerField(blank=True, 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, verbose_name='Očekávané výdaje (hodina)')),
+                ('cost_amount', models.PositiveIntegerField(blank=True, null=True, verbose_name='Náklady (Kč)')),
+                ('cost_unit', models.CharField(blank=True, choices=[('hour', 'Hodina'), ('month', 'Měsíc'), ('year', 'Rok'), ('total', 'Celkem')], max_length=5, null=True, verbose_name='Jednotka nákladů')),
                 ('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')),
                 ('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')),
             ],
@@ -45,12 +44,12 @@ class Migration(migrations.Migration):
                 'verbose_name_plural': 'Smlouvy',
                 'permissions': (('approve', 'Schválit / zrušit schválení'),),
             },
+            bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
             name='Contractee',
             fields=[
                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('color', colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva')),
                 ('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')),
@@ -58,6 +57,7 @@ class Migration(migrations.Migration):
                 ('address_country', models.CharField(default='CZ', max_length=256, 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')),
+                ('role', models.CharField(blank=True, max_length=256, null=True, verbose_name='Role')),
             ],
             options={
                 'verbose_name': 'Naše smluvní strana',
@@ -105,16 +105,16 @@ class Migration(migrations.Migration):
             name='Signee',
             fields=[
                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('color', colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva')),
                 ('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.')),
+                ('entity_type', models.CharField(choices=[('natural_person', 'Fyzická osoba'), ('legal_entity', 'Právnická osoba'), ('business_natural_person', 'Podnikající fyzická osoba'), ('other', 'Jiné')], default='legal_entity', help_text='Důležité označit správně! Fyzickým osobám nepublikujeme adresu.', max_length=23, verbose_name='Typ')),
+                ('address_street_with_number', models.CharField(help_text='Veřejné pouze, když typ není nastaven na fyzickou osobu.', 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_zip', models.CharField(help_text='Veřejné pouze, když typ není nastaven na fyzickou osobu.', max_length=16, verbose_name='PSČ')),
                 ('address_country', models.CharField(default='CZ', max_length=256, verbose_name='Země')),
-                ('ico_number', models.CharField(blank=True, max_length=16, null=True, verbose_name='IČO')),
+                ('ico_number', models.CharField(blank=True, help_text='Vyplněním můžeš automaticky načíst data z ARES.', 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')),
+                ('role', models.CharField(blank=True, max_length=256, null=True, verbose_name='Role')),
             ],
             options={
                 'verbose_name': 'Jiná smluvní strana',
@@ -140,7 +140,6 @@ class Migration(migrations.Migration):
                 ('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={
@@ -197,7 +196,6 @@ class Migration(migrations.Migration):
                 ('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={
diff --git a/contracts/migrations/0002_remove_contract_expected_cost_hour_and_more.py b/contracts/migrations/0002_remove_contract_expected_cost_hour_and_more.py
deleted file mode 100644
index 61a217881bca12519909de39169eb76a32ff494f..0000000000000000000000000000000000000000
--- a/contracts/migrations/0002_remove_contract_expected_cost_hour_and_more.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-23 19:44
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='contract',
-            name='expected_cost_hour',
-        ),
-        migrations.RemoveField(
-            model_name='contract',
-            name='expected_cost_month',
-        ),
-        migrations.RemoveField(
-            model_name='contract',
-            name='expected_cost_year',
-        ),
-        migrations.RemoveField(
-            model_name='contract',
-            name='identifier',
-        ),
-        migrations.RemoveField(
-            model_name='contract',
-            name='is_approved',
-        ),
-        migrations.RemoveField(
-            model_name='contractee',
-            name='color',
-        ),
-        migrations.RemoveField(
-            model_name='contracteerepresentative',
-            name='role',
-        ),
-        migrations.RemoveField(
-            model_name='signee',
-            name='color',
-        ),
-        migrations.RemoveField(
-            model_name='signee',
-            name='is_legal_entity',
-        ),
-        migrations.RemoveField(
-            model_name='signeerepresentative',
-            name='role',
-        ),
-        migrations.AddField(
-            model_name='contract',
-            name='approval_state',
-            field=models.CharField(choices=[('unknown', 'Nová'), ('no', 'Odmítnutá'), ('yes', 'Přijatá')], default='unknown', help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, se stavem "Přijatá" se vypustí ven.', max_length=7, verbose_name='Stav schválení'),
-        ),
-        migrations.AddField(
-            model_name='contract',
-            name='cost_amount',
-            field=models.IntegerField(blank=True, null=True, verbose_name='Náklady (Kč)'),
-        ),
-        migrations.AddField(
-            model_name='contract',
-            name='cost_type',
-            field=models.CharField(blank=True, choices=[('hour', 'Hodina'), ('month', 'Měsíc'), ('year', 'Rok'), ('total', 'Celkem')], max_length=5, null=True, verbose_name='Jednotka nákladů'),
-        ),
-        migrations.AddField(
-            model_name='contract',
-            name='id_number',
-            field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Identifikační číslo'),
-        ),
-        migrations.AddField(
-            model_name='contract',
-            name='name',
-            field=models.CharField(default='', max_length=128, verbose_name='Název'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='contractee',
-            name='role',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Role'),
-        ),
-        migrations.AddField(
-            model_name='signee',
-            name='entity_type',
-            field=models.CharField(choices=[('physical_person', 'Fyzická osoba'), ('legal_entity', 'Právnická osoba'), ('business_natural_person', 'Podnikající fyzická osoba')], default='legal_entity', help_text='Důležité označit správně! Fyzickým osobám nepublikujeme adresu.', max_length=23, verbose_name='Typ'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='signee',
-            name='role',
-            field=models.CharField(blank=True, max_length=256, null=True, verbose_name='Role'),
-        ),
-        migrations.AlterField(
-            model_name='contract',
-            name='legal_state',
-            field=models.CharField(choices=[('valid', 'Platná'), ('invalid', 'Neplatná')], max_length=13, verbose_name='Stav právního ujednání'),
-        ),
-        migrations.AlterField(
-            model_name='contract',
-            name='paper_form_state',
-            field=models.CharField(choices=[('sent', 'Odeslaná'), ('stored', 'Uložená'), ('to_shred', 'Ke skartaci'), ('shredded', 'Skartovaná'), ('lost', 'Ztracená')], max_length=8, verbose_name='Stav fyzického dokumentu'),
-        ),
-        migrations.AlterField(
-            model_name='contract',
-            name='valid_end_date',
-            field=models.DateField(blank=True, null=True, verbose_name='Konec účinnosti'),
-        ),
-        migrations.AlterField(
-            model_name='contract',
-            name='valid_start_date',
-            field=models.DateField(blank=True, null=True, verbose_name='Začátek účinnosti'),
-        ),
-        migrations.AlterField(
-            model_name='signee',
-            name='address_street_with_number',
-            field=models.CharField(help_text='Veřejné pouze, když typ není nastaven na fyzickou osobu.', max_length=256, verbose_name='Ulice, č.p.'),
-        ),
-        migrations.AlterField(
-            model_name='signee',
-            name='address_zip',
-            field=models.CharField(help_text='Veřejné pouze, když typ není nastaven na fyzickou osobu.', max_length=16, verbose_name='PSČ'),
-        ),
-    ]
diff --git a/contracts/migrations/0003_rename_cost_type_contract_cost_unit.py b/contracts/migrations/0003_rename_cost_type_contract_cost_unit.py
deleted file mode 100644
index 4c866da887cb552c33be12ba814737cb9002b090..0000000000000000000000000000000000000000
--- a/contracts/migrations/0003_rename_cost_type_contract_cost_unit.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-23 21:08
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0002_remove_contract_expected_cost_hour_and_more'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='contract',
-            old_name='cost_type',
-            new_name='cost_unit',
-        ),
-    ]
diff --git a/contracts/migrations/0004_alter_contract_approval_state.py b/contracts/migrations/0004_alter_contract_approval_state.py
deleted file mode 100644
index 15b71cd8d15c0778d94ba8fae4109468315ad043..0000000000000000000000000000000000000000
--- a/contracts/migrations/0004_alter_contract_approval_state.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-23 21:33
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0003_rename_cost_type_contract_cost_unit'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='contract',
-            name='approval_state',
-            field=models.CharField(blank=True, choices=[('no', 'Odmítnutá'), ('yes', 'Přijatá')], help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, se stavem "Přijatá" se vypustí ven.', max_length=7, null=True, verbose_name='Stav schválení'),
-        ),
-    ]
diff --git a/contracts/migrations/0005_alter_contract_summary.py b/contracts/migrations/0005_alter_contract_summary.py
deleted file mode 100644
index b9561a4d82cec0241d37a85e5ad7abf4d05ce07a..0000000000000000000000000000000000000000
--- a/contracts/migrations/0005_alter_contract_summary.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-24 07:34
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0004_alter_contract_approval_state'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='contract',
-            name='summary',
-            field=models.TextField(blank=True, max_length=256, null=True, verbose_name='Sumarizace obsahu smlouvy'),
-        ),
-    ]
diff --git a/contracts/migrations/0006_alter_contract_approval_state_and_more.py b/contracts/migrations/0006_alter_contract_approval_state_and_more.py
deleted file mode 100644
index 161e5dc30390b4e3627773dbc529acc389e1df84..0000000000000000000000000000000000000000
--- a/contracts/migrations/0006_alter_contract_approval_state_and_more.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-24 08:13
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0005_alter_contract_summary'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='contract',
-            name='approval_state',
-            field=models.CharField(blank=True, choices=[('no', 'Neschválená'), ('yes', 'Schválená')], help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, se stavem "Přijatá" se vypustí ven.', max_length=7, null=True, verbose_name='Stav schválení'),
-        ),
-        migrations.AlterField(
-            model_name='contract',
-            name='cost_amount',
-            field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Náklady (Kč)'),
-        ),
-        migrations.AlterField(
-            model_name='contract',
-            name='paper_form_state',
-            field=models.CharField(choices=[('sent', 'Odeslaný'), ('stored', 'Uložený'), ('to_shred', 'Ke skartaci'), ('shredded', 'Skartovaný'), ('lost', 'Ztracený')], max_length=8, verbose_name='Stav fyzického dokumentu'),
-        ),
-    ]
diff --git a/contracts/migrations/0007_alter_contract_approval_state_and_more.py b/contracts/migrations/0007_alter_contract_approval_state_and_more.py
deleted file mode 100644
index a06596b7a80d016b5dd22f478a9b98f4e5709248..0000000000000000000000000000000000000000
--- a/contracts/migrations/0007_alter_contract_approval_state_and_more.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Generated by Django 4.1.4 on 2023-03-06 14:20
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0006_alter_contract_approval_state_and_more'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='contract',
-            name='approval_state',
-            field=models.CharField(blank=True, choices=[('no', 'Neschválená'), ('yes', 'Schválená')], help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, se stavem "Schválená" se vypustí ven.', max_length=7, null=True, verbose_name='Stav schválení'),
-        ),
-        migrations.AlterField(
-            model_name='contractee',
-            name='address_country',
-            field=models.CharField(default='Česká Republika', max_length=256, verbose_name='Země'),
-        ),
-        migrations.AlterField(
-            model_name='signee',
-            name='address_country',
-            field=models.CharField(default='Česká Republika', max_length=256, verbose_name='Země'),
-        ),
-        migrations.AlterField(
-            model_name='signee',
-            name='entity_type',
-            field=models.CharField(choices=[('natural_person', 'Fyzická osoba'), ('legal_entity', 'Právnická osoba'), ('business_natural_person', 'Podnikající fyzická osoba'), ('other', 'Jiné')], help_text='Důležité označit správně! Fyzickým osobám nepublikujeme adresu.', max_length=23, verbose_name='Typ'),
-        ),
-        migrations.AlterField(
-            model_name='signee',
-            name='ico_number',
-            field=models.CharField(blank=True, help_text='Vyplněním můžeš automaticky načíst data z ARES.', max_length=16, null=True, verbose_name='IČO'),
-        ),
-    ]
diff --git a/contracts/migrations/0008_alter_signee_entity_type.py b/contracts/migrations/0008_alter_signee_entity_type.py
deleted file mode 100644
index 269aa8e64b039d23cf0ea574974ca49bf0aecd77..0000000000000000000000000000000000000000
--- a/contracts/migrations/0008_alter_signee_entity_type.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 4.1.4 on 2023-03-06 22:27
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0007_alter_contract_approval_state_and_more'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='signee',
-            name='entity_type',
-            field=models.CharField(choices=[('natural_person', 'Fyzická osoba'), ('legal_entity', 'Právnická osoba'), ('business_natural_person', 'Podnikající fyzická osoba'), ('other', 'Jiné')], default='legal_entity', help_text='Důležité označit správně! Fyzickým osobám nepublikujeme adresu.', max_length=23, verbose_name='Typ'),
-        ),
-    ]
diff --git a/contracts/migrations/0009_alter_contractee_address_country_and_more.py b/contracts/migrations/0009_alter_contractee_address_country_and_more.py
deleted file mode 100644
index 5848293396df367486e8f991bd2b5539b3540f9a..0000000000000000000000000000000000000000
--- a/contracts/migrations/0009_alter_contractee_address_country_and_more.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 4.1.4 on 2023-03-10 09:12
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0008_alter_signee_entity_type'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            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ě'),
-        ),
-    ]
diff --git a/contracts/migrations/0010_alter_contractee_address_country_and_more.py b/contracts/migrations/0010_alter_contractee_address_country_and_more.py
deleted file mode 100644
index 0848e91104082359695d27e41baef63a9b284113..0000000000000000000000000000000000000000
--- a/contracts/migrations/0010_alter_contractee_address_country_and_more.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 4.1.4 on 2023-03-10 19:16
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0009_alter_contractee_address_country_and_more'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='contractee',
-            name='address_country',
-            field=models.CharField(default='Česká Republika', max_length=256, verbose_name='Země'),
-        ),
-        migrations.AlterField(
-            model_name='signee',
-            name='address_country',
-            field=models.CharField(default='Česká Republika', max_length=256, verbose_name='Země'),
-        ),
-    ]
diff --git a/contracts/migrations/0011_alter_contractee_address_country_and_more.py b/contracts/migrations/0011_alter_contractee_address_country_and_more.py
deleted file mode 100644
index f6f1793cf8e5cd97063ad17d997c1faa809a5158..0000000000000000000000000000000000000000
--- a/contracts/migrations/0011_alter_contractee_address_country_and_more.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 4.1.4 on 2023-03-15 12:14
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contracts', '0010_alter_contractee_address_country_and_more'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            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ě'),
-        ),
-    ]
diff --git a/requirements/base.txt b/requirements/base.txt
index 9fd8bfa52a579ef340992f7d117b5ac379d74d29..2a871c2c4e3d02b5b457c59355ce3a9fd4d57c74 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -7,6 +7,7 @@ django-autocomplete-light==3.9.4
 django-database-url==1.0.3
 django-import-export==3.1.0
 djhacker==0.2.3
+django-ordered-model==3.7.1
 psycopg2-binary==2.9.5
 django-webpack-loader==1.8.0
 nodeenv==1.7.0
diff --git a/users/migrations/0001_initial.py b/users/migrations/0001_initial.py
index e975e4f7c2e0d4271cc7f3e7312d29168503a70a..194972146a01a8f9f4fbb10755a005b905a4ab17 100644
--- a/users/migrations/0001_initial.py
+++ b/users/migrations/0001_initial.py
@@ -1,115 +1,36 @@
-# Generated by Django 4.1.4 on 2023-02-03 15:25
+# Generated by Django 4.1.4 on 2023-03-15 12:22
 
-import django.utils.timezone
 from django.db import migrations, models
+import django.utils.timezone
 
 
 class Migration(migrations.Migration):
+
     initial = True
 
     dependencies = [
-        ("auth", "0012_alter_user_first_name_max_length"),
+        ('auth', '0012_alter_user_first_name_max_length'),
     ]
 
     operations = [
         migrations.CreateModel(
-            name="User",
+            name='User',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "is_superuser",
-                    models.BooleanField(
-                        default=False,
-                        help_text="Designates that this user has all permissions without explicitly assigning them.",
-                        verbose_name="superuser status",
-                    ),
-                ),
-                (
-                    "sso_id",
-                    models.CharField(
-                        error_messages={
-                            "unique": "A user with that SSO ID already exists."
-                        },
-                        max_length=150,
-                        unique=True,
-                        verbose_name="SSO ID",
-                    ),
-                ),
-                (
-                    "first_name",
-                    models.CharField(
-                        blank=True, max_length=150, verbose_name="first name"
-                    ),
-                ),
-                (
-                    "last_name",
-                    models.CharField(
-                        blank=True, max_length=150, verbose_name="last name"
-                    ),
-                ),
-                (
-                    "email",
-                    models.EmailField(
-                        blank=True, max_length=254, verbose_name="email address"
-                    ),
-                ),
-                (
-                    "is_staff",
-                    models.BooleanField(
-                        default=False,
-                        help_text="Designates whether the user can log into this admin site.",
-                        verbose_name="staff status",
-                    ),
-                ),
-                (
-                    "is_active",
-                    models.BooleanField(
-                        default=True,
-                        help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
-                        verbose_name="active",
-                    ),
-                ),
-                (
-                    "date_joined",
-                    models.DateTimeField(
-                        default=django.utils.timezone.now, verbose_name="date joined"
-                    ),
-                ),
-                (
-                    "groups",
-                    models.ManyToManyField(
-                        blank=True,
-                        help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
-                        related_name="user_set",
-                        related_query_name="user",
-                        to="auth.group",
-                        verbose_name="groups",
-                    ),
-                ),
-                (
-                    "user_permissions",
-                    models.ManyToManyField(
-                        blank=True,
-                        help_text="Specific permissions for this user.",
-                        related_name="user_set",
-                        related_query_name="user",
-                        to="auth.permission",
-                        verbose_name="user permissions",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
+                ('sso_id', models.CharField(error_messages={'unique': 'A user with that SSO ID already exists.'}, max_length=150, unique=True, verbose_name='SSO ID')),
+                ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
+                ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
+                ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
+                ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
+                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
+                ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
+                ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
+                ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
             ],
             options={
-                "verbose_name": "user",
-                "verbose_name_plural": "users",
-                "abstract": False,
+                'verbose_name': 'Uživatel',
+                'verbose_name_plural': 'Uživatelé',
             },
         ),
     ]
diff --git a/users/migrations/0002_alter_user_options.py b/users/migrations/0002_alter_user_options.py
deleted file mode 100644
index 2de062f1b4382f8323c5e4ed0eac1e32cf4d7442..0000000000000000000000000000000000000000
--- a/users/migrations/0002_alter_user_options.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 4.1.4 on 2023-03-10 20:07
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('users', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='user',
-            options={},
-        ),
-    ]
diff --git a/users/migrations/0003_alter_user_options.py b/users/migrations/0003_alter_user_options.py
deleted file mode 100644
index 43085218f30c4f6f76b6e22f06ab1d0540d87626..0000000000000000000000000000000000000000
--- a/users/migrations/0003_alter_user_options.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 4.1.4 on 2023-03-15 12:14
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('users', '0002_alter_user_options'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='user',
-            options={'verbose_name': 'Uživatel', 'verbose_name_plural': 'Uživatelé'},
-        ),
-    ]