Skip to content
Snippets Groups Projects
Commit 5ba8282d authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

Merge branch 'master' of gitlab.pirati.cz:/to/contract-registry

parents f0f6f799 fe2ad04f
No related branches found
No related tags found
No related merge requests found
Pipeline #12355 failed
{% extends "shared/includes/base.html" %}
{% load add %}
{% block content %}
{% if not query_is_set %}
{% include "contracts/includes/double_heading.html" with icon="ico--search" heading="Vyhledávání" subheading="dle názvu smlouvy" %}
{% else %}
{% include "contracts/includes/double_heading.html" with icon="ico--search" heading="Vyhledávání" subheading="„"|add:query|add:"“" %}
{% endif %}
<form method="get" class="flex justify-center mb-10">
<div class="flex flex-row border border-black">
{% csrf_token %}
<input
id="q"
name="q"
class="bg-grey-150 w-56 h-10 px-4 text-lg xl:h-14 xl:px-5"
type="text"
value="{% if query_is_set %}{{ query }}{% endif %}"
placeholder="Hledaný název"
aria-label="Vyhledávací box"
>
<button type="submit" class="btn text-lg">
<div class="btn__body h-10 w-12 min-h-0 min-w-0 xl:h-14 xl:w-14">
<i class="ico--search"></i>
</div>
</button>
</div>
</form>
{% if query_is_set %}
{% if page|length != 0 %}
{% include "contracts/includes/contract_list.html" with page=page paginator=paginator %}
{% else %}
<span class="text-gray-400">Žádné výsledky.</span>
{% endif %}
{% endif %}
{% endblock %}
......@@ -5,6 +5,11 @@ from . import models, views
app_name = "contracts"
urlpatterns = [
path("", views.index, name="index"),
path(
"contracts/search",
views.search,
name="search",
),
path("contracts/<int:id>", views.view_contract, name="view_contract"),
path(
"contracts/filing-areas/<int:id>",
......
......@@ -4,6 +4,7 @@ import requests
from django.conf import settings
from django.core.paginator import Paginator
from django.db import models
from django.db.models.functions import Lower
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from django_downloadview import ObjectDownloadView
......@@ -47,11 +48,11 @@ def get_pagination(request, objects) -> tuple:
return page, paginator
def get_paginated_contracts(request, filter=None) -> tuple:
def get_paginated_contracts(request, filter=None, annotations=None) -> tuple:
if filter is None:
filter = models.Q()
filter = models.Q(is_approved=True)
filter = filter & models.Q(is_approved=True)
if not request.user.has_perm("contracts.view_confidential"):
additional_filter = models.Q(is_public=True)
......@@ -61,8 +62,13 @@ def get_paginated_contracts(request, filter=None) -> tuple:
filter = filter & additional_filter
contracts = get_objects_for_user(request.user, "contracts.view_contract")
if annotations is not None:
contracts = contracts.annotate(**annotations)
contracts = (
get_objects_for_user(request.user, "contracts.view_contract")
contracts
.filter(filter)
.order_by("-valid_start_date")
.all()
......@@ -119,6 +125,47 @@ def view_contract(request, id: int):
)
def search(request):
query = request.GET.get("q")
page = paginator = None
title = "Vyhledávání"
# Query is defined and is more than spaces
query_is_set = query is not None and len(query.replace(" ", "")) != 0
if query_is_set:
title = f"Vyhledávání - „{query}"
lower_query = query.lower()
# WARNING: PostgreSQL-dependent
page, paginator = get_paginated_contracts(
request,
(
models.Q(lower_name__contains=lower_query)
| models.Q(lower_summary__contains=lower_query)
),
{
"lower_name": Lower("name"),
"lower_summary": Lower("summary"),
}
)
return render(
request,
"contracts/search.html",
{
**get_base_context(request),
"title": title,
"description": "Vyhledávání smluv v registru České Pirátské Strany.",
"page": page,
"paginator": paginator,
"query": query,
"query_is_set": query_is_set,
}
)
# BEGIN Filtered contract + submodel views
......
......@@ -59,7 +59,7 @@
<div class="container container--default navbar__content" :class="{'navbar__content--initialized': true}">
<div class="navbar__brand my-4 flex items-center lg:pr-8 lg:my-0">
<a href="/">
<img src="https://styleguide.pirati.cz/2.11.x/images/logo-round-white.svg" class="w-8" />
<img src="https://styleguide.pirati.cz/2.12.x/images/logo-round-white.svg" class="w-8" />
</a>
<a href="/" class="pl-4 font-bold text-xl hover:no-underline lg:border-r lg:border-grey-300 lg:pr-8">Registr smluv</a>
</div>
......@@ -85,8 +85,8 @@
{% endif %}
<li class="navbar-menu__item">
<a
href="#TODO"
data-href="#TODO"
href="{% url "contracts:search" %}"
data-href="{% url "contracts:search" %}"
class="navbar-menu__link flex items-center gap-2"
>
<i class="ico--search text-sm"></i>Hledat
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment