diff --git a/contracts/admin.py b/contracts/admin.py index a03ffbfad087e54c97d8d7aa4177329d4c52f29a..96e15ee2f52d9d6867afdf9b54797cd333ed76e7 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -1,11 +1,11 @@ import copy import json import logging +import threading import typing import uuid import requests -import threading from admin_auto_filters.filters import AutocompleteFilterFactory from django.conf import settings from django.contrib import admin diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py index ea613d292639a2e8ae8eb34d500b75071293df71..312f62523f4e3f7efd5d8020d72702f44fe87081 100644 --- a/contracts/management/commands/import_old_contracts.py +++ b/contracts/management/commands/import_old_contracts.py @@ -10,9 +10,10 @@ from django.conf import settings from django.core.files import File from django.core.management.base import BaseCommand from django.db import models -from git import Repo from postal.parser import parse_address +from git import Repo + from ...models import ( Contract, Contractee, diff --git a/contracts/templates/contracts/search.html b/contracts/templates/contracts/search.html index d80db8a5a0b4d1bf6221099312286e3668986cb1..078044aa9d295e26cfd19855d01bbce48a4890e0 100644 --- a/contracts/templates/contracts/search.html +++ b/contracts/templates/contracts/search.html @@ -11,55 +11,18 @@ <form method="get" class="mb-10"> <div class="flex flex-col gap-2"> <input - id="name" - name="name" + id="q" + name="q" class="border border-black bg-grey-150 h-10 px-4 text-lg xl:h-14 xl:px-5" type="text" - value="{% if name %}{{ name }}{% endif %}" - placeholder="Název" - aria-label="VyhledávacĂ box pro název" + value="{% if query %}{{ query }}{% endif %}" + placeholder="Hledej..." + aria-label="VyhledávacĂ box" > - <input - id="summary" - name="summary" - class="border border-black bg-grey-150 h-10 px-4 text-lg xl:h-14 xl:px-5" - type="text" - value="{% if summary %}{{ summary }}{% endif %}" - placeholder="Sumarizace" - aria-label="VyhledávacĂ box pro sumarizaci" - > - - <input - id="signing_party_ico_number" - name="signing_party_ico_number" - class="border border-black bg-grey-150 h-10 px-4 text-lg xl:h-14 xl:px-5" - type="number" - min="0" - value="{% if signing_party_ico_number %}{{ signing_party_ico_number }}{% endif %}" - placeholder="IÄŚO smluvnĂch stran" - aria-label="VyhledávacĂ box pro IÄŚO smluvnĂch stran" - > - - <input - id="signing_party_name" - name="signing_party_name" - class="border border-black bg-grey-150 h-10 px-4 text-lg xl:h-14 xl:px-5" - type="text" - value="{% if signing_party_name %}{{ signing_party_name }}{% endif %}" - placeholder="Název smluvnĂch stran" - aria-label="VyhledávacĂ box pro názvy smluvnĂch stran" - > - - <input - id="signing_party_representative_name" - name="signing_party_representative_name" - class="border border-black bg-grey-150 h-10 px-4 text-lg xl:h-14 xl:px-5" - type="text" - value="{% if signing_party_representative_name %}{{ signing_party_representative_name }}{% endif %}" - placeholder="Zástupce smluvnĂch stran" - aria-label="VyhledávacĂ box pro zástupce smluvnĂch stran" - > + <span class="text-gray-400 mb-4"> + Prohledávána jsou jmĂ©na, souhrny, jmĂ©na smluvnĂch stran a jejich zástupcĹŻ. + </span> <button type="submit" class="btn text-lg"> <div class="btn__body h-10 xl:h-14 flex gap-3"> @@ -69,7 +32,7 @@ </div> </form> - {% if any_query_is_set %} + {% if query %} {% if page|length != 0 %} {% include "contracts/includes/contract_list.html" with page=page paginator=paginator %} {% else %} diff --git a/contracts/views.py b/contracts/views.py index c67cd49a07bc11f403ffb4d3c7996242b0926b47..4c126c502644eddee7c81b25b3974dac533ce463 100644 --- a/contracts/views.py +++ b/contracts/views.py @@ -123,118 +123,55 @@ def view_contract(request, id: int): def search(request): - request_filter = {} - - for url_parameter in ( - "name", - "summary", - "signing_party_ico_number", - "signing_party_name", - "signing_party_representative_name", - ): - request_filter[url_parameter] = request.GET.get(url_parameter) - - any_query_is_set = False - - for url_parameter_key in request_filter.keys(): - if request_filter[url_parameter_key] is None: - continue - - if request_filter[url_parameter_key].replace(" ", "") == "": - request_filter[url_parameter_key] = None - else: - any_query_is_set = True - - if request_filter["signing_party_ico_number"] is not None: - if not request_filter["signing_party_ico_number"].isnumeric(): - raise HTTPExceptions.BAD_REQUEST - - request_filter["signing_party_ico_number"] = int( - request_filter["signing_party_ico_number"] - ) + original_query = request.GET.get("q", default="") + query = original_query.lower() + + if query.isnumeric(): + number_query = int(query) + else: + number_query = 0 page = paginator = None title = "VyhledávánĂ" - if any_query_is_set: - filter = models.Q() - annotations = {} - - if request_filter["name"] is not None: - filter = filter & models.Q( - lower_name__contains=request_filter["name"].lower() - ) - annotations["lower_name"] = Lower("name") - - if request_filter["summary"] is not None: - filter = filter & models.Q( - lower_summary__contains=request_filter["summary"].lower() - ) - annotations["lower_summary"] = Lower("summary") - - if request_filter["signing_party_ico_number"] is not None: - filter = filter & models.Q( - models.Q( - contractee_signatures__contractee__ico_number=request_filter[ - "signing_party_ico_number" - ] - ) - | models.Q( - signee_signatures__signee__ico_number=request_filter[ - "signing_party_ico_number" - ] - ) - ) - - if request_filter["signing_party_name"] is not None: - filter = filter & models.Q( - models.Q( - contractee_signatures__contractee__name_lower__contains=request_filter[ - "signing_party_name" - ].lower() - ) - | models.Q( - signee_signatures__signee__name_lower__contains=request_filter[ - "signing_party_name" - ].lower() - ) + if query: + filter = models.Q( + models.Q(lower_name__contains=query) + | models.Q(lower_summary__contains=query) + | models.Q( + models.Q(contractee_signatures__contractee__ico_number=number_query) + | models.Q(signee_signatures__signee__ico_number=number_query) ) - - annotations.update( - { - "contractee_signatures__contractee__name_lower": Lower( - "contractee_signatures__contractee__name" - ), - "signee_signatures__signee__name_lower": Lower( - "signee_signatures__signee__name" - ), - } + | models.Q( + models.Q(contractee_signatures__contractee__name_lower__contains=query) + | models.Q(signee_signatures__signee__name_lower__contains=query) ) - - if request_filter["signing_party_representative_name"] is not None: - filter = filter & models.Q( + | models.Q( models.Q( - contractee_signatures__representatives__name_lower__contains=request_filter[ - "signing_party_representative_name" - ].lower() + contractee_signatures__representatives__name_lower__contains=query ) | models.Q( - signee_signatures__representatives__name_lower__contains=request_filter[ - "signing_party_representative_name" - ].lower() + signee_signatures__representatives__name_lower__contains=query ) ) + ) - annotations.update( - { - "contractee_signatures__representatives__name_lower": Lower( - "contractee_signatures__representatives__name" - ), - "signee_signatures__representatives__name_lower": Lower( - "signee_signatures__representatives__name" - ), - } - ) + annotations = { + "lower_name": Lower("name"), + "lower_summary": Lower("summary"), + "contractee_signatures__contractee__name_lower": Lower( + "contractee_signatures__contractee__name" + ), + "signee_signatures__signee__name_lower": Lower( + "signee_signatures__signee__name" + ), + "contractee_signatures__representatives__name_lower": Lower( + "contractee_signatures__representatives__name" + ), + "signee_signatures__representatives__name_lower": Lower( + "signee_signatures__representatives__name" + ), + } # WARNING: PostgreSQL-dependent page, paginator = get_paginated_contracts( @@ -252,8 +189,7 @@ def search(request): "description": "", "page": page, "paginator": paginator, - "any_query_is_set": any_query_is_set, - **request_filter, + "query": original_query, }, )