From c230a766029577e88d070a03a96cc5c3c4b5c9b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Mon, 20 Feb 2023 12:46:24 +0100 Subject: [PATCH] squash migrations, finish single contract view for the most part --- contracts/migrations/0001_initial.py | 712 ++++-------------- ...ve_contract_expected_cost_hour_and_more.py | 28 - ...name_subtype_contract_subtypes_and_more.py | 29 - ...ttype_remove_contract_subtypes_and_more.py | 48 -- .../0005_rename_type_contract_types.py | 18 - .../0006_remove_contract_contains_nda.py | 17 - contracts/models.py | 12 +- contracts/templates/contracts/index.html | 17 +- .../templates/contracts/view_contract.html | 131 +++- 9 files changed, 254 insertions(+), 758 deletions(-) delete mode 100644 contracts/migrations/0002_remove_contract_expected_cost_hour_and_more.py delete mode 100644 contracts/migrations/0003_rename_subtype_contract_subtypes_and_more.py delete mode 100644 contracts/migrations/0004_contracttype_remove_contract_subtypes_and_more.py delete mode 100644 contracts/migrations/0005_rename_type_contract_types.py delete mode 100644 contracts/migrations/0006_remove_contract_contains_nda.py diff --git a/contracts/migrations/0001_initial.py b/contracts/migrations/0001_initial.py index 00dd0b8..c7ad739 100644 --- a/contracts/migrations/0001_initial.py +++ b/contracts/migrations/0001_initial.py @@ -1,15 +1,17 @@ -# Generated by Django 4.1.4 on 2023-02-16 03:36 +# 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 shared.models class Migration(migrations.Migration): + initial = True dependencies = [ @@ -18,669 +20,211 @@ 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", - ), - ), - ( - "type", - models.CharField( - choices=[ - ("primary", "Hlavní"), - ("amendment", "Dodatek"), - ("framework_order", "Objednávka u rámcové smlouvy"), - ], - default="primary", - max_length=15, - verbose_name="Typ", - ), - ), - ( - "contains_nda", - models.BooleanField(default=False, verbose_name="Obsahuje NDA"), - ), - ( - "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á"), - ], - 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í", - ), - ), - ( - "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", - ), - ), - ( - "expected_cost_total", - models.IntegerField( - blank=True, null=True, verbose_name="Očekáváná celková cena" - ), - ), - ( - "expected_cost_year", - models.IntegerField( - blank=True, null=True, verbose_name="Očekáváná cena za rok" - ), - ), - ( - "expected_cost_month", - models.IntegerField( - blank=True, null=True, verbose_name="Očekáváná cena za měsíc" - ), - ), - ( - "expected_cost_hour", - models.IntegerField( - blank=True, null=True, verbose_name="Očekáváná cena za hodinu" - ), - ), - ( - "agreement_url", - models.URLField( - blank=True, - max_length=256, - null=True, - verbose_name="Odkaz na schválení", - ), - ), - ( - "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", - models.CharField( - blank=True, max_length=6, null=True, 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="ContractSubtype", + 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": "Podtyp smlouvy", - "verbose_name_plural": "Podtypy 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", - models.CharField( - blank=True, max_length=6, null=True, 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", - ), - ), - ( - "url", - models.URLField( - blank=True, max_length=256, null=True, 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="Hlavní 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="subtype", - field=models.ManyToManyField( - blank=True, to="contracts.contractsubtype", verbose_name="Podtypy" - ), + model_name='contract', + name='types', + field=models.ManyToManyField(to='contracts.contracttype', verbose_name='Typ'), ), ] 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 2eb5524..0000000 --- a/contracts/migrations/0002_remove_contract_expected_cost_hour_and_more.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 4.1.4 on 2023-02-17 03:00 - -from django.db import migrations - - -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_total", - ), - migrations.RemoveField( - model_name="contract", - name="expected_cost_year", - ), - ] diff --git a/contracts/migrations/0003_rename_subtype_contract_subtypes_and_more.py b/contracts/migrations/0003_rename_subtype_contract_subtypes_and_more.py deleted file mode 100644 index fa1788d..0000000 --- a/contracts/migrations/0003_rename_subtype_contract_subtypes_and_more.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 4.1.4 on 2023-02-19 12:40 - -import colorfield.fields -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='subtype', - new_name='subtypes', - ), - migrations.AlterField( - model_name='contractee', - name='color', - field=colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva'), - ), - migrations.AlterField( - model_name='signee', - name='color', - field=colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva'), - ), - ] diff --git a/contracts/migrations/0004_contracttype_remove_contract_subtypes_and_more.py b/contracts/migrations/0004_contracttype_remove_contract_subtypes_and_more.py deleted file mode 100644 index 1048d44..0000000 --- a/contracts/migrations/0004_contracttype_remove_contract_subtypes_and_more.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 4.1.4 on 2023-02-19 13:08 - -from django.db import migrations, models -import django.db.models.deletion -import shared.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('contracts', '0003_rename_subtype_contract_subtypes_and_more'), - ] - - operations = [ - migrations.CreateModel( - 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')), - ], - options={ - 'verbose_name': 'Typ smlouvy', - 'verbose_name_plural': 'Typy smlouvy', - }, - bases=(shared.models.NameStrMixin, models.Model), - ), - migrations.RemoveField( - model_name='contract', - name='subtypes', - ), - migrations.AlterField( - 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.RemoveField( - model_name='contract', - name='type', - ), - migrations.DeleteModel( - name='ContractSubtype', - ), - migrations.AddField( - model_name='contract', - name='type', - field=models.ManyToManyField(to='contracts.contracttype', verbose_name='Typ'), - ), - ] diff --git a/contracts/migrations/0005_rename_type_contract_types.py b/contracts/migrations/0005_rename_type_contract_types.py deleted file mode 100644 index 6e55348..0000000 --- a/contracts/migrations/0005_rename_type_contract_types.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.4 on 2023-02-19 13:09 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('contracts', '0004_contracttype_remove_contract_subtypes_and_more'), - ] - - operations = [ - migrations.RenameField( - model_name='contract', - old_name='type', - new_name='types', - ), - ] diff --git a/contracts/migrations/0006_remove_contract_contains_nda.py b/contracts/migrations/0006_remove_contract_contains_nda.py deleted file mode 100644 index a9a9f4d..0000000 --- a/contracts/migrations/0006_remove_contract_contains_nda.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.1.4 on 2023-02-19 13:13 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('contracts', '0005_rename_type_contract_types'), - ] - - operations = [ - migrations.RemoveField( - model_name='contract', - name='contains_nda', - ), - ] diff --git a/contracts/models.py b/contracts/models.py index 975098f..c0b2abd 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -549,11 +549,14 @@ class SigneeSignature(models.Model): return result -class ContractIntent(models.Model): +class ContractIntent(NameStrMixin, models.Model): + name = models.CharField( + max_length=128, + verbose_name="Jméno", + ) + url = models.URLField( max_length=256, - blank=True, - null=True, verbose_name="Odkaz", ) @@ -567,6 +570,3 @@ class ContractIntent(models.Model): class Meta: verbose_name = "Záměr" verbose_name_plural = "Záměry" - - def __str__(self) -> str: - return self.url diff --git a/contracts/templates/contracts/index.html b/contracts/templates/contracts/index.html index 9f51d4a..c7fd3f0 100644 --- a/contracts/templates/contracts/index.html +++ b/contracts/templates/contracts/index.html @@ -11,8 +11,7 @@ <td>Právní stav</td> <td>Účinná od</td> <td>Platná do</td> - <td>Naše podpisy</td> - <td>Cizí podpisy</td> + <td>Podepsána s</td> </tr> </thead> <tbody> @@ -32,18 +31,8 @@ </ul> </td> <td>{{ contract.get_legal_state_display }}</td> - <td>{{ contract.valid_start_date }}</td> - <td>{{ contract.valid_end_date }}</td> - <td> - <ul class="flex flex-wrap gap-1.5"> - {% for signature in contract.contractee_signatures.all %} - <li - class="p-1.5 rounded-sm whitespace-nowrap cursor-pointer {% if not signature.signee.color %}bg-gray-200 duration-100 hover:bg-gray-300{% endif %}" - {% if signature.signee.color %}style="background-color:{{ signature.signee.color }}"{% endif %} - >{{ signature.contractee.name }}</li> - {% endfor %} - </ul> - </td> + <td class="whitespace-nowrap">{{ contract.valid_start_date }}</td> + <td class="whitespace-nowrap">{{ contract.valid_end_date }}</td> <td> <ul class="flex flex-wrap gap-1.5"> {% for signature in contract.signee_signatures.all %} diff --git a/contracts/templates/contracts/view_contract.html b/contracts/templates/contracts/view_contract.html index 29f7c3a..db76960 100644 --- a/contracts/templates/contracts/view_contract.html +++ b/contracts/templates/contracts/view_contract.html @@ -18,6 +18,14 @@ </ul> </td> </tr> + <tr> + <td class="w-1/5 !p-2.5">Začátek účinnosti</td> + <td class="w-4/5 !p-2.5">{{ contract.valid_start_date }}</td> + </tr> + <tr> + <td class="w-1/5 !p-2.5">Konec platnosti</td> + <td class="w-4/5 !p-2.5">{{ contract.valid_end_date }}</td> + </tr> <tr> <td class="w-1/5 !p-2.5">Právní stav</td> <td class="w-4/5 !p-2.5">{{ contract.get_legal_state_display }}</td> @@ -52,6 +60,27 @@ {% endif %} </td> </tr> + <tr> + <td class="w-1/5 !p-2.5">Záměry</td> + <td class="w-4/5 !p-2.5"> + {% with contract.intents.all as intents %} + {% if intents|length != 0 %} + <ul class="flex gap-2"> + {% for intent in intents %} + <li class="flex"> + <a + class="p-1.5 rounded-sm text-ellipsis bg-gray-200 duration-100 hover:bg-gray-300 hover:no-underline" + href="{{ intent.url }}" + ><i class="ico--link mr-2"></i>{{ intent.name }}</a> + </li> + {% endfor %} + </ul> + {% else %} + <span class="text-grey-200">Žádné</span> + {% endif %} + {% endwith %} + </td> + </tr> <tr> <td class="w-1/5 !p-2.5">Problémy</td> <td class="w-4/5 !p-2.5"> @@ -59,7 +88,7 @@ {% if issues|length != 0 %} <ul class="flex gap-2"> {% for issue in issues %} - <li class="p-1.5 rounded-sm bg-grey-200">{{ issue.name }}</li> + <li class="p-1.5 rounded-sm bg-gray-200">{{ issue.name }}</li> {% endfor %} </ul> {% else %} @@ -85,8 +114,9 @@ {% if files|length != 0 %} <ul class="flex gap-2"> {% for file in files %} - <li class="p-1.5 rounded-sm bg-gray-200"> + <li class="flex"> <a + class="p-1.5 rounded-sm bg-gray-200 duration-100 hover:bg-gray-300 hover:no-underline" href="{{ file.file.url }}" ><i class="ico--attachment mr-2"></i>{{ file.name }}</a> </li> @@ -103,18 +133,24 @@ <h2 class="text-xl font-bold mb-5"><i class="ico--pencil mr-3"></i>Podpisy</h2> - <h3 class="text-lg font-bold mb-5">Naší smluvní strany</h3> + <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"> + <ul class="mb-5 grid grid-cols-3 gap-2"> {% for signature in signatures %} - <li class="py-2 {% if not forloop.last %}border-b border-grey-200{% endif %}"> - <address> - <strong>{{ signature.contractee.name }}</strong> - {% if signature.contractee.department %} - - {{ signature.contractee.department }} - {% endif %}<br> + <li class="p-3 border border-gray-300 rounded-md"> + <address class="mb-3"> + <div class="mb-1"> + <a + class="inline-block p-1.5 mb-1 rounded-sm whitespace-nowrap cursor-pointer not-italic hover:no-underline bg-gray-200 duration-100 hover:bg-gray-300" + > + <strong>{{ signature.contractee.name }}</strong> + {% if signature.contractee.department %} + - {{ signature.contractee.department }} + {% endif %} + </a> + </div> {{ signature.contractee.address_street_with_number }}<br> {{ signature.contractee.address_zip }} {{ signature.contractee.address_district }}<br> @@ -124,6 +160,20 @@ IČO: {{ signature.contractee.ico_number }}<br> {% endif %} </address> + + <div class="block mb-2"> + <p class="block mb-2"> + <strong>Zástupci:</strong> + </p> + <ul class="list-disc ml-6"> + {% for representative in signature.contractee.representatives.all %} + <li>{{ representative.name }}, {{ representative.function }}</li> + {% endfor %} + </ul> + </div> + <p> + <strong>Datum podpisu:</strong> {{ signature.date }} + </p> </li> {% endfor %} </ul> @@ -132,9 +182,62 @@ {% endif %} {% endwith %} - <h3 class="text-lg font-bold mb-5">Ostatních smluvní stran</h3> + <h3 class="text-lg font-bold mb-5">Ostatních smluvních stran</h3> - <ul> - - </ul> + {% with contract.signee_signatures.all as signatures %} + {% if signatures|length != 0 %} + <ul class="mb-5 grid grid-cols-3 gap-2"> + {% for signature in signatures %} + <li class="p-3 border border-gray-300 rounded-md"> + <address class="mb-3"> + <div class="mb-1"> + <a + class="inline-block p-1.5 mb-1 rounded-sm whitespace-nowrap cursor-pointer not-italic hover:no-underline bg-gray-200 duration-100 hover:bg-gray-300" + > + <strong>{{ signature.signee.name }}</strong> + {% if signature.signee.department %} + - {{ signature.signee.department }} + {% endif %} + </a> + </div> + + {% if signee.is_legal_entity %} + {{ signature.signee.address_street_with_number }}<br> + {{ signature.signee.address_zip }} {{ signature.signee.address_district }}<br> + {{ signature.signee.get_address_country_display }}<br> + {% else %} + {{ signature.signee.address_district }}<br> + {% endif %} + + {% if signature.signee.ico_number %} + IČO: {{ signature.signee.ico_number }}<br> + {% endif %} + + {% if not 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> + </p> + <ul class="list-disc ml-6"> + {% for representative in signature.signee.representatives.all %} + <li>{{ representative.name }}, {{ representative.function }}</li> + {% endfor %} + </ul> + </div> + <p> + <strong>Datum podpisu:</strong> {{ signature.date }} + </p> + </li> + {% endfor %} + </ul> + {% else %} + <div class="mb-5 text-grey-200">Žádné podpisy.</div> + {% endif %} + {% endwith %} {% endblock %} -- GitLab