From b8659a4b4b722591f56dd3f9af7c7f96baa7ba49 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Fri, 24 Feb 2023 09:26:13 +0100
Subject: [PATCH] bigger summary field, fix select2 autocomplete, wip frontend
 categorization

---
 contracts/forms.py                            |  9 +++++-
 .../migrations/0005_alter_contract_summary.py | 18 ++++++++++++
 ..._alter_contract_approval_state_and_more.py | 28 +++++++++++++++++++
 contracts/models.py                           | 16 +++++------
 contracts/templates/contracts/index.html      |  9 ++++--
 .../templates/contracts/view_contract.html    | 17 ++++++-----
 contracts/views.py                            |  6 ++--
 package.json                                  |  1 +
 tailwind.config.js                            |  4 ++-
 9 files changed, 85 insertions(+), 23 deletions(-)
 create mode 100644 contracts/migrations/0005_alter_contract_summary.py
 create mode 100644 contracts/migrations/0006_alter_contract_approval_state_and_more.py

diff --git a/contracts/forms.py b/contracts/forms.py
index 4fc9958..5ed21fb 100644
--- a/contracts/forms.py
+++ b/contracts/forms.py
@@ -15,6 +15,13 @@ class ContractAdminForm(forms.ModelForm):
             "shared/admin_contract_form.js",
         )
 
+    class Meta:
+        widgets = {
+            "summary": forms.Textarea(attrs={
+                "rows": 2
+            }),
+        }
+
 
 class SigneeAdminForm(forms.ModelForm):
     class Media:
@@ -46,7 +53,7 @@ for many_to_many_field in (
 ):
     djhacker.formfield(
         many_to_many_field,
-        forms.ModelChoiceField,
+        forms.ModelMultipleChoiceField,
         widget=dal.autocomplete.ModelSelect2Multiple(
             url="contracts:select2_djhacker_contract_autocomplete"
         )
diff --git a/contracts/migrations/0005_alter_contract_summary.py b/contracts/migrations/0005_alter_contract_summary.py
new file mode 100644
index 0000000..b9561a4
--- /dev/null
+++ b/contracts/migrations/0005_alter_contract_summary.py
@@ -0,0 +1,18 @@
+# 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
new file mode 100644
index 0000000..161e5dc
--- /dev/null
+++ b/contracts/migrations/0006_alter_contract_approval_state_and_more.py
@@ -0,0 +1,28 @@
+# 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/models.py b/contracts/models.py
index b7f8179..08970ef 100644
--- a/contracts/models.py
+++ b/contracts/models.py
@@ -317,8 +317,8 @@ class Contract(models.Model):
     # BEGIN Approval fields
 
     class ApprovalStates(models.TextChoices):
-        NO = "no", "Odmítnutá"
-        YES = "yes", "Přijatá"
+        NO = "no", "Neschválená"
+        YES = "yes", "Schválená"
 
     approval_state = models.CharField(
         max_length=7,
@@ -351,7 +351,7 @@ class Contract(models.Model):
         verbose_name="Typ",
     )
 
-    summary = models.CharField(
+    summary = models.TextField(
         max_length=256,
         blank=True,
         null=True,
@@ -378,11 +378,11 @@ class Contract(models.Model):
         NO = "no", "Neveřejná"
 
     class PaperFormStates(models.TextChoices):
-        SENT = "sent", "Odeslaná"
-        STORED = "stored", "Uložená"
+        SENT = "sent", "Odeslaný"
+        STORED = "stored", "Uložený"
         TO_SHRED = "to_shred", "Ke skartaci"
-        SHREDDED = "shredded", "Skartovaná"
-        LOST = "lost", "Ztracená"
+        SHREDDED = "shredded", "Skartovaný"
+        LOST = "lost", "Ztracený"
 
     legal_state = models.CharField(
         max_length=13,
@@ -437,7 +437,7 @@ class Contract(models.Model):
         YEAR = "year", "Rok"
         TOTAL = "total", "Celkem"
 
-    cost_amount = models.IntegerField(
+    cost_amount = models.PositiveIntegerField(
         blank=True,
         null=True,
         verbose_name="Náklady (Kč)"
diff --git a/contracts/templates/contracts/index.html b/contracts/templates/contracts/index.html
index de90661..a9a20c1 100644
--- a/contracts/templates/contracts/index.html
+++ b/contracts/templates/contracts/index.html
@@ -2,7 +2,12 @@
 {% load subtract %}
 
 {% block content %}
-    <h1 class="head-alt-lg mb-10">{{ title }}</h1>
+    <div class="prose max-w-none mb-10">
+        <p>
+            <strong>Magni cumque debitis illo molestiae vitae.</strong> Laudantium et nihil magni rem. Aliquid aperiam minima aspernatur repudiandae quidem. Voluptatem consequatur voluptas aperiam consequatur. Et et dolor libero ut in est voluptate. Libero <a href="#">beatae temporibus itaque</a> est.
+            Temporibus <i>voluptatum commodi delectus est</i>. Commodi et voluptatem dolor odit occaecati dolore aut. Qui dolor nihil excepturi id. Qui deleniti <i>cupiditate voluptatem aut</i> est dolores eum aliquid. Molestiae blanditiis reiciendis odio provident ipsam voluptas enim suscipit.
+        </p>
+    </div>
     <table class="table table-auto w-full table--striped table--bordered">
         <thead>
             <tr>
@@ -31,7 +36,7 @@
                         </ul>
                     </td>
                     <td>
-                        <i class="{% if contract.legal_state == contract.PublicStates.YES.0 %}ico--checkmark{% else %}ico--cross{% endif %}"></i>
+                        <i class="{% if contract.legal_state == contract.LegalStates.VALID %}ico--checkmark{% else %}ico--cross{% endif %}"></i>
                     </td>
                     <td class="whitespace-nowrap">{{ contract.valid_start_date }}</td>
                     <td class="whitespace-nowrap">{{ contract.valid_end_date }}</td>
diff --git a/contracts/templates/contracts/view_contract.html b/contracts/templates/contracts/view_contract.html
index 94a06ce..a098105 100644
--- a/contracts/templates/contracts/view_contract.html
+++ b/contracts/templates/contracts/view_contract.html
@@ -4,10 +4,13 @@
 {% block content %}
     <h1 class="head-alt-lg mb-10">{{ contract.name }}</h1>
 
-    <h2 class="text-xl font-bold mb-5"><i class="ico--info mr-3"></i>Základní informace</h2>
-
     <table class="table table-auto w-full table--striped table--bordered mb-10">
         <tbody>
+            <tr>
+                <td colspan="2" class="text-lg font-bold">
+                    <i class="ico--info mr-3"></i>Základní informace
+                </td>
+            </tr>
             {% if contract.id_number %}
                 <tr>
                     <td class="w-1/5 !p-2.5">Identifikační číslo</td>
@@ -40,7 +43,7 @@
                 </tr>
             {% endif %}
             <tr>
-                <td class="w-1/5 !p-2.5">Souhrn obsahu</td>
+                <td class="w-1/5 !p-2.5">Souhrn</td>
                 <td class="w-4/5 !p-2.5">{{ contract.summary }}</td>
             </tr>
             <tr>
@@ -127,7 +130,7 @@
                     <td class="w-1/5 !p-2.5">Náklady</td>
                     <td class="w-4/5 !p-2.5">
                         {{ contract.cost_amount }} Kč
-                        {% if contract.cost_unit != contract.CostUnits.TOTAL.0 %}
+                        {% if contract.cost_unit != contract.CostUnits.TOTAL %}
                             / {{ contract.get_cost_unit_display }}
                         {% else %}
                             celkem
@@ -238,12 +241,12 @@
                             <div class="mb-1">
                                 {{ signature.signee.get_entity_type_display }}
 
-                                {% if signature.signee.entity_type == signature.signee.EntityTypes.NATURAL_PERSON.0 %}
+                                {% if signature.signee.entity_type == signature.signee.EntityTypes.NATURAL_PERSON %}
                                     <span class="text-gray-300">(zobrazujeme pouze obec)</span>
-                                {% elif %}
+                                {% endif %}
                             </div>
 
-                            {% if signature.signee.entity_type == signature.signee.EntityTypes.NATURAL_PERSON.0 %}
+                            {% if signature.signee.entity_type == signature.signee.EntityTypes.NATURAL_PERSON %}
                                 {{ signature.signee.address_street_with_number }}<br>
                                 {{ signature.signee.address_zip }} {{ signature.signee.address_district }}<br>
                                 {{ signature.signee.get_address_country_display }}<br>
diff --git a/contracts/views.py b/contracts/views.py
index ecaf2da..8aa3d57 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -10,7 +10,7 @@ from .models import Contract
 def index(request):
     contracts = (
         Contract.objects.filter(
-            is_approved=True,
+            approval_state=Contract.ApprovalStates.YES,
             public_state=Contract.PublicStates.YES,
         )
         .order_by("valid_start_date")
@@ -20,8 +20,6 @@ def index(request):
 
     page = paginator.get_page(request.GET.get("page"))
 
-    print(request.user)
-
     return render(
         request,
         "contracts/index.html",
@@ -38,7 +36,7 @@ def index(request):
 
 def view_contract(request, id: int):
     contract = Contract.objects.filter(
-        is_approved=True,
+        approval_state=Contract.ApprovalStates.YES,
         public_state=Contract.PublicStates.YES,
     ).get(id=id)
 
diff --git a/package.json b/package.json
index 83f28d5..eea8208 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
   "author": "Tomáš Valenta",
   "license": "AGPL-3.0-or-later",
   "dependencies": {
+    "@tailwindcss/typography": "^0.5.9",
     "css-loader": "^6.7.3",
     "jquery": "^3.6.3",
     "style-loader": "^3.3.1",
diff --git a/tailwind.config.js b/tailwind.config.js
index 882ff8f..ca793d2 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -14,5 +14,7 @@ module.exports = {
       },
     },
   },
-  plugins: [],
+  plugins: [
+    require('@tailwindcss/typography'),
+  ],
 }
-- 
GitLab