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

add searching

parent dfd9aa6d
No related branches found
No related tags found
No related merge requests found
Pipeline #12344 passed
...@@ -4,25 +4,27 @@ ...@@ -4,25 +4,27 @@
{% block content %} {% block content %}
{% include "contracts/includes/double_heading.html" with icon="ico--search" heading="Vyhledávání" subheading="dle názvu smlouvy" %} {% include "contracts/includes/double_heading.html" with icon="ico--search" heading="Vyhledávání" subheading="dle názvu smlouvy" %}
<div class="flex flex-row justify-center"> <form method="get" class="flex justify-center mb-10">
<form method="post"> <div class="flex flex-row border border-black">
{% csrf_token %} {% csrf_token %}
<input <input
id="q"
name="q"
class="bg-grey-150 w-56 h-10 px-4 text-lg xl:h-14 xl:px-5" class="bg-grey-150 w-56 h-10 px-4 text-lg xl:h-14 xl:px-5"
type="text" type="text"
value="{% if query %}{{ query }}{% endif %}" value="{% if query_is_set %}{{ query }}{% endif %}"
placeholder="Hledaný název" placeholder="Hledaný název"
aria-label="Vyhledávací box" aria-label="Vyhledávací box"
> >
<button type="submit" class="btn text-lg"> <button type="submit" class="btn text-lg">
<div class="btn__body"> <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> <i class="ico--search"></i>
</div> </div>
</button> </button>
</form>
</div> </div>
</form>
{% if query %} {% if query_is_set %}
<h2 class="text-lg font-bold mb-10"> <h2 class="text-lg font-bold mb-10">
Výsledky vyhledávání Výsledky vyhledávání
</h2> </h2>
......
...@@ -5,6 +5,11 @@ from . import models, views ...@@ -5,6 +5,11 @@ from . import models, views
app_name = "contracts" app_name = "contracts"
urlpatterns = [ urlpatterns = [
path("", views.index, name="index"), path("", views.index, name="index"),
path(
"contracts/search",
views.search,
name="search",
),
path("contracts/<int:id>", views.view_contract, name="view_contract"), path("contracts/<int:id>", views.view_contract, name="view_contract"),
path( path(
"contracts/filing-areas/<int:id>", "contracts/filing-areas/<int:id>",
......
...@@ -4,6 +4,7 @@ import requests ...@@ -4,6 +4,7 @@ import requests
from django.conf import settings from django.conf import settings
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db import models from django.db import models
from django.db.models.functions import Lower
from django.http import HttpResponse from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django_downloadview import ObjectDownloadView from django_downloadview import ObjectDownloadView
...@@ -47,11 +48,11 @@ def get_pagination(request, objects) -> tuple: ...@@ -47,11 +48,11 @@ def get_pagination(request, objects) -> tuple:
return page, paginator 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: if filter is None:
filter = models.Q() 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"): if not request.user.has_perm("contracts.view_confidential"):
additional_filter = models.Q(is_public=True) additional_filter = models.Q(is_public=True)
...@@ -61,8 +62,13 @@ def get_paginated_contracts(request, filter=None) -> tuple: ...@@ -61,8 +62,13 @@ def get_paginated_contracts(request, filter=None) -> tuple:
filter = filter & additional_filter filter = filter & additional_filter
contracts = get_objects_for_user(request.user, "contracts.view_contract")
if annotations is not None:
contracts = contracts.annotate(**annotations)
contracts = ( contracts = (
get_objects_for_user(request.user, "contracts.view_contract") contracts
.filter(filter) .filter(filter)
.order_by("-valid_start_date") .order_by("-valid_start_date")
.all() .all()
...@@ -124,16 +130,29 @@ def search(request): ...@@ -124,16 +130,29 @@ def search(request):
page = paginator = None page = paginator = None
title = "Vyhledávání" title = "Vyhledávání"
if query is not None: # Query is defined and is more than spaces
title = f"Vyhledávání - {query}" 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 # WARNING: PostgreSQL-dependent
page, paginator = get_paginated_contracts( page, paginator = get_paginated_contracts(
request, request,
models.Q(name__search=query) (
models.Q(lower_name__contains=lower_query)
| models.Q(lower_summary__contains=lower_query)
),
{
"lower_name": Lower("name"),
"lower_summary": Lower("summary"),
}
) )
return render( return render(
request,
"contracts/search.html", "contracts/search.html",
{ {
**get_base_context(request), **get_base_context(request),
...@@ -142,6 +161,7 @@ def search(request): ...@@ -142,6 +161,7 @@ def search(request):
"page": page, "page": page,
"paginator": paginator, "paginator": paginator,
"query": query, "query": query,
"query_is_set": query_is_set,
} }
) )
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
<div class="container container--default navbar__content" :class="{'navbar__content--initialized': true}"> <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"> <div class="navbar__brand my-4 flex items-center lg:pr-8 lg:my-0">
<a href="/"> <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>
<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> <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> </div>
...@@ -85,8 +85,8 @@ ...@@ -85,8 +85,8 @@
{% endif %} {% endif %}
<li class="navbar-menu__item"> <li class="navbar-menu__item">
<a <a
href="#TODO" href="{% url "contracts:search" %}"
data-href="#TODO" data-href="{% url "contracts:search" %}"
class="navbar-menu__link flex items-center gap-2" class="navbar-menu__link flex items-center gap-2"
> >
<i class="ico--search text-sm"></i>Hledat <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