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 ...@@ -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()
...@@ -119,6 +125,47 @@ def view_contract(request, id: int): ...@@ -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 # BEGIN Filtered contract + submodel views
......
...@@ -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