From e2be0029390a87d986bafe3a8489079d552ef478 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Sun, 19 Feb 2023 11:31:55 +0100
Subject: [PATCH] finish index viewing, pagination

---
 .gitignore                                 |   1 +
 contracts/models.py                        |   4 +-
 contracts/templates/contracts/index.html   | 121 +++++++++++++++++++--
 contracts/templatetags/__init__.py         |   0
 contracts/templatetags/subtract.py         |   7 ++
 contracts/views.py                         |   3 +-
 shared/templates/shared/includes/base.html |   6 +
 7 files changed, 132 insertions(+), 10 deletions(-)
 create mode 100644 contracts/templatetags/__init__.py
 create mode 100644 contracts/templatetags/subtract.py

diff --git a/.gitignore b/.gitignore
index 19bda59..31c8d8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ shared/static/shared/*.css
 webpack-stats.json
 package-lock.json
 .venv
+media/*
diff --git a/contracts/models.py b/contracts/models.py
index 375b08d..aa8b93c 100644
--- a/contracts/models.py
+++ b/contracts/models.py
@@ -519,7 +519,7 @@ class ContracteeSignature(models.Model):
         result = self.contractee.name
 
         if len(representatives) != 0:
-            result += f"zastoupena {representatives}"
+            result += f" - zastoupena {representatives}"
 
         result += f", {self.date}"
 
@@ -559,7 +559,7 @@ class SigneeSignature(models.Model):
         result = self.signee.name
 
         if len(representatives) != 0:
-            result += f"zastoupena {representatives}"
+            result += f" - zastoupena {representatives}"
 
         result += f", {self.date}"
 
diff --git a/contracts/templates/contracts/index.html b/contracts/templates/contracts/index.html
index 982d4e4..f25553a 100644
--- a/contracts/templates/contracts/index.html
+++ b/contracts/templates/contracts/index.html
@@ -1,31 +1,138 @@
 {% extends "shared/includes/base.html" %}
+{% load subtract %}
 
 {% block content %}
     <h1 class="head-alt-lg mb-10">{{ title }}</h1>
-    <table class="table table--striped table--bordered">
+    <table class="table table-auto w-full table--striped table--bordered">
         <thead>
             <tr>
-                <td>Identifikátor</td>
+                <td class="font-bold">Identifikace</td>
                 <td>Typ</td>
                 <td>Právní stav</td>
                 <td>Účinná od</td>
                 <td>Platná do</td>
-                <td>Naše smluvní strana</td>
-                <td>Ostatní smluvní strany</td>
+                <td>Naše podpisy</td>
+                <td>Cizí podpisy</td>
             </tr>
         </thead>
         <tbody>
             {% for contract in page %}
                 <tr>
-                    <td>{{ contract.identifier }}</td>
+                    <td>
+                        <a
+                            class="underline"
+                            href="#"
+                        >{{ contract.identifier }}</a>
+                    </td>
                     <td>{{ contract.get_type_display }}</td>
                     <td>{{ contract.get_legal_state_display }}</td>
                     <td>{{ contract.valid_start_date }}</td>
                     <td>{{ contract.valid_end_date }}</td>
-                    <td></td>
-                    <td></td>
+                    <td>
+                        <ul class="flex flex-col gap-1">
+                            {% for signature in contract.contractee_signatures.all %}
+                                <li
+                                    class="p-2 rounded-sm cursor-pointer text-center {% 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>
+                        <ul class="flex flex-col gap-1">
+                            {% for signature in contract.signee_signatures.all %}
+                                <li
+                                    class="p-2 rounded-sm cursor-pointer text-center {% 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.signee.name }}</li>
+                            {% endfor %}
+                        </ul>
+                    </td>
                 </tr>
             {% endfor %}
         </tbody>
     </table>
+    
+    {% if page.has_other_pages %}
+        <div class="pagination-container">
+            <nav class="pagination space-x-1">
+                <a
+                    class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed btn--inverted-icon"
+                    {% if not page.has_previous %}disabled{% endif %}
+                    {% if page.has_previous %}href="{% url "contracts:index" %}?page={{ page.previous_page_number }}"{% endif %}
+                >
+                    <div class="btn__body-wrap">
+                        <div class="btn__body">Předchozí</div>
+                        <div class="btn__icon">
+                            <i class="ico--chevron-left"></i>
+                        </div>
+                    </div>
+                </a>
+                
+                {% if page.previous_page_number != 1 %}
+                    <a
+                        class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"
+                        href="{% url "contracts:index" %}?page=1"
+                    >
+                        <div class="btn__body">1</div>
+                    </a>
+                {% endif %}
+                
+                {% if page.has_previous and page.previous_page_number != 2 %}
+                    <span class="text-grey-500 hidden md:flex flex-col px-2 justify-center">...</span>
+                {% endif %}
+                
+                {% if page.has_previous %}
+                    <a
+                        class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"
+                        href="{% url "contracts:index" %}?page={{ page.previous_page_number }}"
+                    >
+                        <div class="btn__body ">{{ page.previous_page_number }}</div>
+                    </a>
+                {% endif %}
+
+                <button class="btn btn--grey-500 btn--condensed hidden md:inline-block">
+                    <div class="btn__body">{{ page.number }}</div>
+                </button>
+                
+                {% if page.has_next %}
+                    <a
+                        class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"
+                        href="{% url "contracts:index" %}?page={{ page.next_page_number }}"
+                    >
+                        <div class="btn__body ">{{ page.next_page_number }}</div>
+                    </a>
+                {% endif %}
+                
+                {% if paginator.num_pages != page.next_page_number and paginator.num_pages|subtract:1 != page.next_page_number %}
+                    <span class="text-grey-500 hidden md:flex flex-col px-2 justify-center">...</span>
+                {% endif %}
+                
+                {% comment %}num_pages is equivalent to the last page number{% endcomment %}
+                
+                {% if paginator.num_pages != page.next_page_number %}
+                    <a
+                        role="button"
+                        class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"
+                        href="{% url "contracts:index" %}?page={{ paginator.num_pages }}"
+                    >
+                        <div class="btn__body">{{ paginator.num_pages }}</div>
+                    </a>
+                {% endif %}
+                
+                <a
+                    class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed"
+                    {% if not page.has_next %}disabled{% endif %}
+                    {% if page.has_next %}href="{% url "contracts:index" %}?page={{ page.next_page_number }}"{% endif %}
+                >
+                    <div class="btn__body-wrap">
+                        <div class="btn__body">Další</div>
+                        <div class="btn__icon">
+                            <i class="ico--chevron-right"></i>
+                        </div>
+                    </div>
+                </a>
+            </nav>
+        </div>
+    {% endif %}
 {% endblock %}
diff --git a/contracts/templatetags/__init__.py b/contracts/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/contracts/templatetags/subtract.py b/contracts/templatetags/subtract.py
new file mode 100644
index 0000000..076ef2c
--- /dev/null
+++ b/contracts/templatetags/subtract.py
@@ -0,0 +1,7 @@
+from django import template
+
+register = template.Library()
+
+@register.filter(name='subtract')
+def subtract(value, arg):
+    return value - arg 
diff --git a/contracts/views.py b/contracts/views.py
index 369c042..226b333 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -8,7 +8,7 @@ from .models import Contract
 
 
 def index(request):
-    contracts = Contract.objects.all()
+    contracts = Contract.objects.order_by("valid_start_date").all()
     paginator = Paginator(contracts, 25)
     
     page = paginator.get_page(
@@ -23,6 +23,7 @@ def index(request):
             "user": request.user,
             "title": "Seznam smluv",
             "description": "Description",
+            "paginator": paginator,
             "page": page,
         }
     )
diff --git a/shared/templates/shared/includes/base.html b/shared/templates/shared/includes/base.html
index 93d15aa..f90d107 100644
--- a/shared/templates/shared/includes/base.html
+++ b/shared/templates/shared/includes/base.html
@@ -29,6 +29,12 @@
             href="{% static "shared/favicon.png" %}"
         >
         
+        <link
+            href="{% static "shared/style.css" %}"
+            rel="stylesheet"
+            media="all"
+        >
+        
         <link
             href="https://styleguide.pirati.cz/2.11.x/css/styles.css"
             rel="stylesheet"
-- 
GitLab