Project

General

Profile

Chyba #1129

Zobrazení převodů člena

Added by Michal Kliment 15 days ago. Updated 3 days ago.

Status:
Odeslaný
Priority:
Vysoká
Category:
Finance
Target version:
Start date:
10/30/2019
Due date:
% Done:

90%

Estimated time:

Description

Zobrazení převodů člena je velmi pomalé a navíc ve špatném pořadí. Zřejmě souvisí s #959


Related issues

Related to Požadavek #959: Mezisoučet u seznamu převodu členaUzavřený02/17/2015

Actions

History

#1

Updated by Michal Kliment 15 days ago

#2

Updated by Jakub Juračka 8 days ago

  • Assignee changed from Jakub Juračka to Filip Miškařík
#3

Updated by Filip Miškařík 8 days ago

  • Status changed from Nový to Odeslaný
  • % Done changed from 0 to 90
#4

Updated by Ondřej Fibich 3 days ago

Patch se mi nelíbí. Kvůli takové blbosti se tam musí dělat takové hnusy..

Osobně bych navrhoval funkcionalitu předělat:
- Sloupec "Mezisoučet" nezobrazovat pokud je aktivní filtr.
- Díky tomu je možné mezisoučet počítat ze současného balance účtu (tj. ze současnosti počítám minulost). Tj. bez dalších SQL příkazů.

Zvažte prosím zda by to takto nebylo přijatelné. Osobně si myslím, že na filtrovaných datech to není natolik zajímavá informace.

P.S. Filipe, prosím o kontrolu nastavení odsazení kódu v NetBeans. Stále to není optimální, v commitech jsou odsazení s 8 mezerami (má b 1 TAB). Také prosím o nastavení NetBeans tak, aby namísto CRLF zapisoval pouze LF (tedy Unix zakončení řádků namísto Windows).

#5

Updated by Jakub Juračka 3 days ago

Pokud se k tomu můžu taky vyjádřit, tak bych to nenazval hnusem v porovnání s tím jak to bylo řešeno před updatem. Pokud si dobře vzpomínám tak pro 500 transakcí se provádělo v callbacku 500 SQL dotazů, při kterých se propočítával celý mezisoučet znova a znova, takže načítání trvalo někdy i přes 20 sekund...

Já si naopak myslím, že když už tam mezisoučet je, tak není na škodu ho mít dostupný i při filtrování (třeba podle data), aby člověk věděl stav účtu v určité době. Tudíž za tuto cenu provádět jen 2 SQL dotazy a pak mezisoučty propočítat v PHPku je podle mě asi nejefektivnější řešení.

K tomu propočítávání ze současného balance:
- Není mi jasná jedna věc. Když mám 500 transakcí a mám třeba 50 transakcí na stránku, tak když si zobrazím třeba stranu 3, tak se to bude propočítávat jak? :)

#6

Updated by Ondřej Fibich 3 days ago

Ahoj,

On to ten update moc nevylepšil. Pro účet s mnoha převody to dokáže klidně shodit DB. Vybírá se tam až 100 000 záznamů.
Už ani neřeším, že to celé nefunguje, pokud má účet 100 001 převodů..

Jediné možné optimální řešení s podporou filtrování je cachování mezisoučtu v DB. Podobně jako balance účtu nepočítáme online. To je ale kvůli takové okrajové funkcionalitě kanón na vrabce. Ono totiž je jedna věc to nacachovat, ale druhá je tu cache udržovat (přepočtení příspěvků a podobné funkcionality to značně komplikují).

Proto navrhuji jednoduché funkční řešení, které má ale omezení ve filtru. Myslím si ale, že omezení není nijak závažné.

Stránkování lze vyřešit pro stranu 3 SQL dotazem účtu ID 4:

SELECT (
    (SELECT SUM(t.amount) FROM transfers t WHERE t.destination_id = 4 ORDER BY ... LIMIT 0 150) - 
    (SELECT SUM(t.amount) FROM transfers t WHERE t.origin_id = 4 ORDER BY ... LIMIT 0 150)
) AS start_balance

Tedy dopočítám si počáteční balance pro záznamy tabluky.

Also available in: Atom PDF