Skip to content

fix(multiseek): pusty wynik nie pokazuje nieaktualnego licznika (FD#503) - #951

Merged
mpasternak merged 1 commit into
devfrom
fix-fd503-multiseek-pusty-licznik
Nov 1, 2026
Merged

mpasternak merged 1 commit into
devfrom
fix-fd503-multiseek-pusty-licznik

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Fixes Freshdesk FD#503: https://iplweb.freshdesk.com/a/tickets/503

Problem

Multiseek pokazywał „Razem: 1" oraz „Wyświetl wszystkie" i „Drukuj" przy pustej liście, na której jedyną pozycją było „0. Brak elementów".

Przyczyna

  • Licznik: paginator_count pochodzi z cache agregatów (TTL 30 min), którego klucz zależy tylko od formularza. Gdy rekord zniknie z wyników w czasie życia wpisu, licznik zostaje stary, a lista jest świeża.
  • „0.": komunikat był elementem <li> w <ol>, a CSS numeruje każdy <li>. Numer „0." wynika z start_index równego 0: paginator liczy przez len(qs) i widzi świeże 0, czyli stan ze zrzutu klientki („Razem: 1" obok „0.").

Zmiany

  • src/bpp/views/mymultiseek.py: gdy wpis cache ma niezerowy licznik, a qset.exists() zwraca False, agregaty są przeliczane i nadpisywane. Koszt to jedno zapytanie LIMIT 1 przy trafieniu w cache.
  • report-body-list.html: „Brak elementów" poza <ol>, jako <p>. Dotyczy też strony „Wyszukiwanie zapytaniem" i eksportu dokumentu, które używają tego szablonu.

Zakres

Świadomie naprawiony jest tylko przypadek całkowicie pustego wyniku. Częściowa nieaktualność (np. licznik 5 przy 3 rekordach) zostaje, ograniczona przez TTL, tak jak zakłada komentarz przy cache.

Do osobnego zadania

object_list.count = lambda *args, **kw: ... w get_context_data nie działa: Django method_has_no_args odrzuca lambdę wariadyczną, więc paginator robi len(object_list), czyli pobiera cały queryset przy każdej stronie. Poprawka tego nie zmienia.

Testy

Testy test_fd503_* w test_mymultiseek_count_cache.py. Trzy padały przed poprawką; test_fd503_autor_bez_prac_ma_licznik_zero przechodzi od początku i wyklucza inne źródło rozjazdu niż cache. Lokalnie: src/bpp/tests -k multiseek bez Playwrighta, 317 passed. Testów Playwright nie uruchamiano.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Mr7s9on2cdYwgnDrRWrtHo

Licznik „Razem" pochodzi z 30-minutowego cache agregatów, a klucz zależy
tylko od formularza. Gdy rekord zniknął z wyników w czasie życia wpisu,
lista była pusta, a pasek dalej pokazywał „Razem: 1" i przyciski
wyświetlania/druku. Pusty wynik przy niezerowym wpisie przelicza teraz
agregaty.

Komunikat „Brak elementów" trafia poza <ol>, bo każdy <li> dostaje z CSS
numer i pusta lista wyglądała jak pozycja „0.".

Fixes Freshdesk FD#503

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mr7s9on2cdYwgnDrRWrtHo
@mpasternak
mpasternak merged commit dfbbaab into dev Nov 1, 2026
22 checks passed
@mpasternak
mpasternak deleted the fix-fd503-multiseek-pusty-licznik branch November 1, 2026 13:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant