From cd6b51c5e721392043d47c4b28b434c80b14923d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Sat, 11 Feb 2023 18:13:06 +0900
Subject: [PATCH] multiple representatives for each signer, migrations

---
 .gitignore                                    |   1 +
 ...rrepresentative_contractintent_and_more.py | 189 ++++++++++++++++++
 contracts/models.py                           |  72 ++++---
 3 files changed, 234 insertions(+), 28 deletions(-)
 create mode 100644 contracts/migrations/0003_contractexternalsignerrepresentative_contractintent_and_more.py

diff --git a/.gitignore b/.gitignore
index e5a12d8..0a533b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ staticfiles
 node_modules/*
 shared/static/*
 webpack-stats.json
+.venv
diff --git a/contracts/migrations/0003_contractexternalsignerrepresentative_contractintent_and_more.py b/contracts/migrations/0003_contractexternalsignerrepresentative_contractintent_and_more.py
new file mode 100644
index 0000000..7353a65
--- /dev/null
+++ b/contracts/migrations/0003_contractexternalsignerrepresentative_contractintent_and_more.py
@@ -0,0 +1,189 @@
+# Generated by Django 4.1.4 on 2023-02-11 09:11
+
+import django.db.models.deletion
+import markdownx.models
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("contracts", "0002_initial"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="ContractExternalSignerRepresentative",
+            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")),
+                ("role", models.CharField(max_length=256, verbose_name="Funkce")),
+            ],
+            options={
+                "verbose_name": "Zástupce druhé smluvní strany",
+                "verbose_name_plural": "Zástupci druhé smluvní strany",
+            },
+        ),
+        migrations.CreateModel(
+            name="ContractIntent",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "url",
+                    models.URLField(
+                        blank=True, max_length=256, null=True, verbose_name="Odkaz"
+                    ),
+                ),
+            ],
+            options={
+                "verbose_name": "Záměr",
+                "verbose_name_plural": "Záměry",
+            },
+        ),
+        migrations.CreateModel(
+            name="ContractLocalSignerRepresentative",
+            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")),
+                ("role", models.CharField(max_length=256, verbose_name="Funkce")),
+            ],
+            options={
+                "verbose_name": "Zástupce naší smluvní strany",
+                "verbose_name_plural": "Zástupci naší smluvní strany",
+            },
+        ),
+        migrations.RemoveField(
+            model_name="contract",
+            name="intent_url",
+        ),
+        migrations.RemoveField(
+            model_name="contractexternalsigner",
+            name="representative_name",
+        ),
+        migrations.RemoveField(
+            model_name="contractexternalsigner",
+            name="representative_role",
+        ),
+        migrations.RemoveField(
+            model_name="contractlocalsigner",
+            name="representative_name",
+        ),
+        migrations.RemoveField(
+            model_name="contractlocalsigner",
+            name="representative_role",
+        ),
+        migrations.AddField(
+            model_name="contract",
+            name="notes",
+            field=markdownx.models.MarkdownxField(
+                blank=True,
+                help_text="Poznámky jsou viditelné pro všechny, kteří mohou smlouvu spravovat.",
+                null=True,
+                verbose_name="Obsah",
+            ),
+        ),
+        migrations.AlterField(
+            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.CASCADE,
+                related_name="filed_contracts",
+                to="contracts.contractfilingarea",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="contract",
+            name="primary_contract",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="subcontracts",
+                to="contracts.contract",
+                verbose_name="Hlavní smlouva",
+            ),
+        ),
+        migrations.RemoveField(
+            model_name="contract",
+            name="subtype",
+        ),
+        migrations.AlterField(
+            model_name="contractexternalsignature",
+            name="signer",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="signatures",
+                to="contracts.contractexternalsigner",
+            ),
+        ),
+        migrations.AlterField(
+            model_name="contractlocalsignature",
+            name="signer",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="signatures",
+                to="contracts.contractlocalsigner",
+            ),
+        ),
+        migrations.DeleteModel(
+            name="ContractNote",
+        ),
+        migrations.AddField(
+            model_name="contractlocalsignerrepresentative",
+            name="signer",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="representatives",
+                to="contracts.contractlocalsigner",
+            ),
+        ),
+        migrations.AddField(
+            model_name="contractintent",
+            name="contract",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="intents",
+                to="contracts.contract",
+            ),
+        ),
+        migrations.AddField(
+            model_name="contractexternalsignerrepresentative",
+            name="signer",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="representatives",
+                to="contracts.contractexternalsigner",
+            ),
+        ),
+        migrations.AddField(
+            model_name="contract",
+            name="subtype",
+            field=models.ManyToManyField(to="contracts.contractsubtype"),
+        ),
+    ]
diff --git a/contracts/models.py b/contracts/models.py
index 0a6098f..ade81bb 100644
--- a/contracts/models.py
+++ b/contracts/models.py
@@ -51,20 +51,6 @@ class ContractExternalSigner(models.Model):
         verbose_name="Datum narození",
     )  # WARNING: Legal entity status dependent!
 
-    representative_name = models.CharField(
-        max_length=256,
-        blank=True,
-        null=True,
-        verbose_name="Zástupce",
-    )
-
-    representative_role = models.CharField(
-        max_length=256,
-        blank=True,
-        null=True,
-        verbose_name="Funkce zástupce",
-    )
-
     department = models.CharField(
         max_length=128,
         blank=True,
@@ -77,6 +63,28 @@ class ContractExternalSigner(models.Model):
         verbose_name_plural = "Druhé smluvní strany"
 
 
+class ContractExternalSignerRepresentative(models.Model):
+    signer = models.ForeignKey(
+        ContractExternalSigner,
+        on_delete=models.CASCADE,
+        related_name="representatives",
+    )
+
+    name = models.CharField(
+        max_length=256,
+        verbose_name="Jméno",
+    )
+
+    role = models.CharField(
+        max_length=256,
+        verbose_name="Funkce",
+    )
+
+    class Meta:
+        verbose_name = "Zástupce druhé smluvní strany"
+        verbose_name_plural = "Zástupci druhé smluvní strany"
+
+
 class ContractExternalSignature(models.Model):
     signer = models.ForeignKey(
         ContractExternalSigner,
@@ -127,20 +135,6 @@ class ContractLocalSigner(models.Model):
         verbose_name="IČO",
     )
 
-    representative_name = models.CharField(
-        max_length=256,
-        blank=True,
-        null=True,
-        verbose_name="Zástupce",
-    )
-
-    representative_role = models.CharField(
-        max_length=256,
-        blank=True,
-        null=True,
-        verbose_name="Funkce zástupce",
-    )
-
     department = models.CharField(
         max_length=128,
         blank=True,
@@ -159,6 +153,28 @@ class ContractLocalSigner(models.Model):
         verbose_name_plural = "Naše smlouvní strany"
 
 
+class ContractLocalSignerRepresentative(models.Model):
+    signer = models.ForeignKey(
+        ContractLocalSigner,
+        on_delete=models.CASCADE,
+        related_name="representatives",
+    )
+
+    name = models.CharField(
+        max_length=256,
+        verbose_name="Jméno",
+    )
+
+    role = models.CharField(
+        max_length=256,
+        verbose_name="Funkce",
+    )
+
+    class Meta:
+        verbose_name = "Zástupce naší smluvní strany"
+        verbose_name_plural = "Zástupci naší smluvní strany"
+
+
 class ContractLocalSignature(models.Model):
     signer = models.ForeignKey(
         ContractLocalSigner,
-- 
GitLab