Files
KPK/komentar_kivy.txt
2026-06-23 15:20:56 +02:00

285 lines
20 KiB
Plaintext

Verze s Kivy (dole popis principu)
v posdialogu ostava dorobit:
- doplnit do action_panela zlavu na polozku a zmenu spravy
Uzavierky
Jazyky
Prehlad spotreby
Zlavy na polozky
Vklady, vybery
Uhrada pohladavky
Nastavenie dostupnosti kariet
Okno na nastavenie dat v config.json - aby sa dala vybrat kasa, s ktorou chceme pracovat
Aktualizacia cennik bez restartu server a appky
Cook
Bazen
LoyalMan
Rajonovy rezim a uzavierky casnikov
Prava casnikov
pod s buttonem pod zpet, nevim co s tim
- pokud nechces uzaverku blokovat spustenym terminálem, oprav to zde
server_sqlite.py
@app.post("/closure/save/",response_model=server_clsrep.ClosureReportOut)
def save_closure_report(
- odstran chybu co popsal Milan v mailu (pro zuseni uzaverky kdyz vyberes stejny ucet k uzaverce to spadne)
- sleva na položku (cena, cena puv)
(do ceniku pridat slovnik atributu, atribut a hodnota, zde max sleva napr. 0)
- dopln na stale podrzeni butonu pro markovani do menu sleva na polozku
- dodělat bar rezim s automatickym odhlasenim po nastavene dobe
- otestuj spec. touche při markovani a editaci uctu
- v posdialog se pouziva _popup_info z controlleru a jsou tam ještě definovany nejaky spec. sjednot to
- menu uzaverky (uzaverka s doplnenim id_ucty), meziuzaverka, tisk kopie uzaverky, mazani poslední uzaverky, posun uzaverky?
- do posdialog a numpad udelej cteni RS232 a klavesnice pro vstup externich ctecek
- otestuj prihlaseni stejne id_kas se stejnym client_id
- zjistit při pokusu zablokovat ucet ke stornu když probiha jeho storno na jinem terminalu
- do config.json pridat parametry pro velikost accountselect a posdialog (zejména počet buttonu v matici)
- upravit format uctu a bonu na terminalu
- zobrazeni konfiguracnich parametru při neuspesnem startu
Hotovo:
===== 072_8_Kivy ====================================================================================================
Bar
Limity
- doplnena tabulka fooddat
Akceptujem parametre z def.suboru:
IS_LIMSPRA - ak je nastaveny connect na postgresql v centralnom setupe
===== 071_8_Kivy ====================================================================================================
- prvy nastrel tlace. Kasa uklada tlacove joby do fronty v tabulke print_jobs. Zapisuje tam vsetky joby, ktore nemaju tlacit na afs.
- k tlaciarni je mozne vo foode nadefinovat sablonu, cez ktoru sa maju tlacit bony aj ucty. su to podobne jinja2 subory ako pouzival foodie. kasa potom hlada bud nastavenu sablonu od tlaciarne, alebo default sablonu, alebo ked nic nenajde vytlaci jednoduchy bon bez formatovania. Rovnako sa postupuje pri tlaci uctov.
- komunikacia s bank terminalmi je podmienena nastavenim priznaku v druhu platby a v tlaciarni, na ktoru sa ide tlacit. potom podla toho aky terminal je k tlaciarni priradeny, vola sa obsluha terminalu. zatial som oskusal slovenske AFS a pripraveny je Besternom, tak, ako ho napisal Pepino. Ten som ale nevzskusal, lebo ho tu nemam
- pribudol local_print_agent ako samostatny script, ktory sa moze spustit na windowse/linuxe v lokalnej sieti, alebo moze byt urobeny ako samostatna androidova appka. ten bude zo servera vytahovat pripravene joby a tlacit ich. skusal som to u nas na raw printeroch. pocita aj s cups tlaciarnami
- tlace dotiahnute aj v okne na kopie a storna uctov
- storno uctu s platbou kartou je riadene parametrom terminal_storno rovnako ako bolo vo foodie
- pre nefiskalne ucty je nastavitelne v def.subore, ci sa ucet moze aj nevytlacit
- menu v accountselet (storno s vraceni na ucet, storno polozek z uctu)
- rozmysli tiskarny bonu (muzou byt v setupu sklad -> bon printer)
- zaokrouhlovani uctu, vracet sumu zaokrouhleni
- tisky bonu do kuchyne (musíš pridat tiskárnu do ceniku, vazbu sklad printer do setupu)
Akceptujem parametre z def.suboru:
DEF_CENHLA
OBJEDNAVKA_TLACITKO1
OBJEDNAVKA_TLACITKO2
OBJEDNAVKA_TLACITKO3
IS_CHOD
IS_HOST
IS_TRETINY
IS_STVRTINY
KC_SPART
MENU_SPART
CARD_PAY_NO_TERM
BAR_PAY_IN_CASH
ZKR_MENA
TERMINAL_STORNO
NKOP_EDIT
REPRINT_CURRENT_CLOSURE_BILL
REPRINT_PAST_CLOSURE_BILL
RASTR_HOT
IS_HORSKUP
POSTGRES_ENABLED
===== 070_8_Kivy ====================================================================================================
- v platobnom okne doplnena moznost vybrat viacero zliav. nasledne sa vola recalculate, ako metoda, ktora cely ucet prepocita. ide sa v poradi - zmena cenovej hladiny, absolutne zlavy, percentualne zlavy, a potom jednotlive platby
- dodělej logiku ke slevam (absolutni, procentuelni, na položku a atributy nodiscountv ceniku)
- do uctu/UcPol dodělat cena_puv, vyndat mena (markuje se jen zakladni mene). Nebo prepocet dle kurzu? Zatim to tam nechat.
- presun messages ze setupu do ceniku
- doplnena tabulka bankterm
- v tabulke prndef doplneny stlpec id_term
- do parametrov doplnene is_chod a is_host. Da sa nimi vypnut praca s chodmi a hostami)
- doplnena tabulka clients - applikacia si tu uklada cislo posledne vybranej tlaciarne a miestnosti pre kazdy terminal, aby to pri dalsom spusteni vedela pouzit
===== 069_8_Kivy ====================================================================================================
- doplnit predvolene sposoby platby nie iba hotovost
- Platba vybranych poloziek a Platba vsetkeho podla toho ci su naklikane nejake polozky, alebo nie
- niekde zobrazit predvolenu cenovu hladinu
- doplnit volbu tlaciarne, kam sa budu tlacit ucty
- upraveny platobny formular - najprv sa zadaju zlavy, potom sa vyberaju platby
- vyriesene dotaz_re, dotaz_st, dotaz_ho / oskusana platba na Hores, Fidelio, Previo. Pripravene aj Mews a Protel
v data:
doplnene tabulky na nastavenie recepcie a rastrov pre recepciu
v cenniku doplneny c_druh, aby som veel posielat na recepciu
v uctoch doplnene data uveru a hoteloveho uctu, doplneny stlpec c_uzaverka
===== 068_8_Kivy ====================================================================================================
- v PosDialogu je zjednotene otvaranie modalnych okien do jedneho modalmanagera, ktory spravuje aj vstupy z klavesnice
- prihlasenie klavesnicou, ked nemam numpad robi problem, lebo shift sa berie ako samostatna klavesa
- v hladani doplnit aj hladanie podla kodov a eanov
===== 067_8_Kivy ====================================================================================================
- v objednavke je mozne z klavesnice zadat kod, ci ean a ked sa najde, nablokuje sa. funguje aj 2050*10.
- tlacitko vyber vsetko nahradaene tlacitkom Hladaj. Ukaze sa klavesnica na zadanie retazca. Podla zadaneho textu sa filtruje cennik a dohladavaju sa kalkulacie, ktore obsahuju zadany text
- login screen - heslo je mozne zadat aj z klavesnice
===== 066_8_Kivy ====================================================================================================
- praca s chodmi a hostami, presuny medyi chodmi, hostami a stolmi. Oynacenie poloziek chodu, hosta, ...
- action panel ponuka pracu s oznacenymi polozkami objednavky
- jsou-li vyplneny ceny2 a cena3, pouzij ji pro 1/2 a 1/3 porce
- chody vyreseny (ještě do tisku)
- povinne zprávy při markovani kodem
- osetrene ceske aj slovenske hesla (12, resp. 20 znakov, aj adm hesla v oboch formatoch)
- doplnene spracovanie atributov polozky "volnacena","pohladavka","fstmenu","vazena"
- osetrene spravy - povinne/nepovinne priradene k itemu, aj vseobecne spravy zo setupu a manualna sprava vratane sw klavesnice
- long press na menu vyvola okno na zadanie poctu porcii, zlomkov a sprav
- doplnene chody a hostia - na long press aj s pomenovanim
- vpravo hore tlacitko na oznacenie/odznacenie vsetkeho
zmeny v data:
- UserLoginIn - doplneny kas
- Perm - doplnene jazykove mutacie
- doplnene PolozkyFstMenu, FstMenu, FstMenuKasa, UserPermission, PaymentPermission, DiscountPermission, LevelPermission
- UserIn - doplnene heslo_karta, user_id, is_admin, permits, payments, discounts, levels
- UserOut - doplnene user_id, is_admin, payments, discounts, levels - mozno tu chyba este permits
- UserLoginOut - doplnene user_id, is_admin, payments, discounts, levels, permits
- UCPol - pridane zpravy - budeme ich potrebovat kvoli cookovi, uhradam pohladavok, pripadne aj zmena spravy k uz nablokovanej polozke
- UcPolEdit - zpravy sa dedia od UcPol
===== 063_8_KivyRq/059_8_KivyAPI ====================================================================================================
- pokud udelas zpet z menu privátních zprav dlouhe, namarkuje se ti polozka
- vyber vse -> změna cenove hladiny -> uloz = položky zmizi z uctu (opraveno v Posdialog by Petr 21.4.)
- pokud při submenu na buttonu položky v leve casti objednávky (dlouhy stisk) (opraveno v PosDialog by Petr 22.4.)
===== 061,2_8_KivyRq/059_8_KivyAPI ====================================================================================================
- nektere obecne konstanty pro beh frontendu presunty do modulu konstanty
- pri neuspesnem startu umozni zadat IP API serveru
===== 060_8_KivyRq/059_8_KivyAPI ====================================================================================================
- pokud edituji definci stolu, nejde ulozit
===== 059_8_Kivy ====================================================================================================================
- dodělej endpoint pro nahrani uzivatelu a permision (Milan_users.py)
===== 058_8_Kivy ====================================================================================================================
- opravena chyba pri vyberu defaultni hladiny (front end havaroval pri pokusu nastavit hladinu na prazdne misto ci link na jinou stranku)
- opraveno menu pro vyber hladin, pridam scroll (u polozky i defaultni) pro zobrazeni neomezeneho poctu hladin
- editor mapy stolu nyni umistuje stul vlevo nahore
- doplneno menu editoru stolu (nova mistnost, smaz mistnost, do menu stolu doplnen delete stolu)
- menu mistnosti jak v editoru tak pri vyberu mistnosti je nyni scrollovaci (nemomezeny pocet mistnosti)
- defautni id stolu je nyni tvoreno kombinaci jmena mistnosti a cisla stolu (zabranuje to nechtenemu sdileni uctu v ruznych mistnostech)
- automaticke zarovnavani stolu do mrizky
===== 057_8_Kivy ====================================================================================================================
- vzorovy program pro nahrani mapy stolu z foodu Milan_mapastolu
- mapa stolu a jednoduchy editor, ktery ji ulozi na server primo v pokladne
- endpoint na mapu stolu
===== 056_8_Kivy ====================================================================================================================
- do info v menu uzaverky doplneny info o verzi serveru, frontendu a jmenu aktualni database pouzivane serverem
- endpoint na ucty co nejsou v uzaverce (test/vzor milan_ucty_notinclsrep)
- hotovo cena_puv
- v uctech je cislo skladu pro odtezovani
- dodělej endpoint pro nahrani mapy stolu (test/vzor milan_mapastolu)
- do info zobraz verzi front endu i serveru (server to muze vrátit při prihlaseni)
===== 055_8_Kivy ====================================================================================================================
- normalni platba, pokud je něco vybrano take zaplati jen vybrane (ale korektne, zbytek uctu tam zustane). Pak nemá smysl platba vybraneho?? nema
- vyndej ze server_sqlite heartbeat, at to muzes distribuovat oddelene
===== 054_8_Kivy ====================================================================================================================
- do serveru doplneny 2 endpointy pro nacteni uzaverky z FOODu. Vzor pouziti Milan_nacti_uzaverky
- mas-li oznacene nejake položky na uctu a udelas platbu vseho hotove, zaplati se vybrane a zbytek uctu zmizi
- lze definovat buttony pro ruzne sirky
- opravena migrace v DB pro pridani sirky button matice
- exituji 2 typy zprav. obecne (jdou pripojit ke kazde polozce) a privatni (jdou jen k te polozce, co je ma uvedene v ceniku). Privatni se mohou delit na povinne a ostatni. Obecne se aktivuji dlouhym stiskem na nazev v namarkovane polozce uctu (jsou tam i vsechy zpravy mazat s vyjimkou povinnych), povinne se musi automaticky zadat pri markovani. Pokud je aktivovano Fastitemmenu (dlouhy stisk na button v matici vlevo) a polozka obsahuje povinnou zpravu, nejprve se Zada povinna zprava a az potom se objevi FastItemMenu.
- povinne zprávy při markovani jsou vyreseny ale nemely by jit smazat a co s dlouhym stiskem?- implementuj do markovani nove data od Milana (Eany, povinne zprávy, permision pro markovani, atributy)
- uprav FastMenuItem pro smyslupne markovani (vic voleb), mazani zvoleného zvyrazneno
- vic zprav k jedne polozce, zprávy jdou i mazat (po jedne i všechny)
- na serveru je automaticka migrace jsonu v ceniku s propisem do DB (nemigracni verze je 048_8_kivy, kdyby to moc zdrzovalo). nove pole musi mit default hodnotu, aby Pydantic nezarval pred uskutecnenim migrace
- při prepnuti cenove hladiny nejsou na matici pro markovani aktualni ceny
- doplneny dluhy stisk na levou matici
- zmen markovani kodem dle atributu kod (nyní je to id_card)
- uprav cenik pro import z Food (jen rozsirit pro kod misto id_card, eany, spec zprávy prirazene k polozce (povinne/nepovinne) a atributy
- uprav dle vzoru z data.py rutiny pro zapis setupu (v setupu obecne zprávy)
- uprav dle vzoru z data.py rutiny pro zapis ceniku vcetne vzoru pro Milana
- při pocitani uzaverky musíš byt jediny zivy terminal (takze zadny ucet neni blokovan), nevim jestli je to nutne
- v ceniku je pos_pc resp. pos_mb misto prostého tuple list[tuple], coz umozni jednu položku umistit na libovolny počet stranek pomoci jednoho zaznamu v ceniku
- je-li vybran nejaky počet kusu (nejvic leve pole v položkách uctu), musíš při skrtani zprava do leva kontrolovat, aby vybrany počet kusu nebyl vetsi nez namarkovany
- zkontroluj, tisknou-li se bony do kuchyne nejen při operaci uloz, ale i při split, platba, castecna platba. Proste vždy když se objevi neodeslana položka na ucte. Když namarkujes nejake položky a soucasne nejake vyberes ke stornu a udelas storno polozek tak se opravdu vytisknou bony na neodeslane a storna na jiz předtím odeslane.
- na dlouhy stisk nove namarkovane polozky se pride message ze setupu
- uzaverkoveho reportu pridej seznam otevrenych uctu se sumou
- při uzaverce, když je pusteny jiny terminal, vznikne neosetreny runtimeerror
- cenova hladina jde menit i na odeslanych polozkach
- pri prepnuti defaultni hladiny se prepisi ceny na buttonech
- uzaverka zjevne pocita poslední ucet z minule uzaverky jako první nasledujici (prekryvaji se).
- serad uzavrene ucty v menu accountselect dle cisla uctu
- nabizej jen cisla uctu po poslední uzaverce
- ma generovani noveho cisla na serveru ochranu proti preteceni? Ma. Vyreseno.
- dodelana ochrana proti prihlaseni stejne id_ka se stejnym clientem, po logoutu se odstarni heartbeats
- uzaverka musí mit číslo uzaverky pro konkretni id_kas
- vylepsit popisky buttonu uctu jak v accountselect tak v closed_accountselect
- proved kontrolu odblokovani uctu po stornech (v closed_accountdialogu se to neobjevi, je to další atribut)
- funguje storno vcetne ochrany druhého stornovani a stornovani storna, funguje barevne rozliseni storen a stornovanych uctu
- hotova operace tisk kopie uctu, na serveru a v api_call je operace unblock dle ucisla
- operace v menu accountselect ted konci v controlleru v handle_closed_accountselect, zbyva dodělat jen z nej volane funkce
- spolecna rodicovska trida pro accountselect a closed_accountselect, na server pridano do jsonu uctu total_base_currency (pri sumdph spocte total v zakladni mene)
- hotove zobrazeni zaplacenych uctu k operacim v menu z accountselect
- pridan info pasek na TOP Posdialogu
- změna v refreshi accountselect, ted bezi porad dokud je activni i pod jinými okny
- do menu konfiguracni parametry (config.json) a take tisk vlastní IP adresy
- format uctu snesitelny
- doplneny všechny informace do uzavrenych uctu
- tisk uctu z Windows a RPI Debian na TCP printer funguje
- konfiguracni parametry (Android, Debian, Windows) -> vyzkouseno Windows, RPI Debian
- zablokovany ucet ma jinou barvu
- hotovy preview uctu
pouziva virtualni prostředí v_kivy nebo v311 na kivy UI (nutne zejmena na RPI debianu)
spousteni primo pod pythonem
v_kivy/Scripts/python.exe
idealni Python je v 3.11
pouzite externi moduly:
pydantic, pillow, qrcode, requests, fastapi, uvicorn, kivy
Zakladni princip.
Klient komunikuje s API serverem pomoci API callu. Všechny API calls jsou ulozeny v api_call.py
Je tam i mechanizmus pridelovani tokenu, autentifikace a identifikace privatnich tabulek zakazky.
System rozeznava dva typy prihlaseni. 1. k zakazce, jmenem a heslem. Při uspesnem prihlaseni
dostane klient od servera token a refresh token, který jiz obsahuje i identifinaci zakazky a tim
i pristup k privatnim tabulkam zakazky. Klient provádí heartbeet (na jinem socketu), server ho zapisuje do centralni
tabulky heartbeetu s aktuálním casem. Pokud server narazi na lock uctu, zkontroluje heartbeet (id_kas a
terminalu) kasy, pokud je expirovan, nebere ho v úvahu.
Aplikace pouziva stale stejne 2 sockety, dokud nevypadnou na timeout nebo je server nezahodi. Prvni je
pro heartbeet, druhy pro chod frontendu (i ten provadi periodicke dotazy na otevrene ucty, pokud pokladna
neni odhlasena (cisnik)
Dale se po startu prihlasuje cisnik (operator), jen PINem. Cisnik/user pak dostane seznam tzv. permitu, ktere
jsou pouzity pro autentifikaci operaci s omezenym pristupem. Funguje klasicke denni heslo Alta.
Nektere operace serveru defaultne lockuji ucty (v parametrech lze potlacit)
V budoucnu se na serveru da do extra modulu vse co souvisi s pristupem k DB (nyní SQLite), takze
budou v modulech striktne oddeleny endpointy (routy) od DB operaci.
Klient je rozdelen na spousteci modul, který obsahuje tridu controller. Zde je veskera obchodni
logika, ktera pracuje s daty ve forme, ve ktere jsou ulozeny na serveru. Server i klient pouzivaji stejny modul
data, kde jsou zakladni datove modely (cenik, ucet, setup...)
Z controlleru se vola modul accountselect (zde se zobrazuji otevrene ucty a zakladni menu pokladny, ve vrchni
casti je bud widget s otevrenymi stoly nebo mapa stolu zobrazene mistnosti.
Jeden stul muze byt zobrazen v nekolika mistnostech a mapa muze byt spolecna pro vice pokladen
Zatim neuzvazuji o sdileni stolu jednotlivymi pokladnami
Při vybrani uctu se z modulu posdialog instancuje trida posdialog. Ta pracuje s upravenymi definicemi
uctu, které jsou rozsireny o vlastnosti umožňující editaci (nektere jiné vlatnosti zase chybi)
Po ukonceni posdialogu se do controlleru vraci u_main, u_sec, a operace. Typicky u_main obsahuje
zbytek původního uctu po operaci, u_sec položky vybrane k operaci.
Po provedeni operace controller pomoci api calls ulozi novy stav na server.
Nektere operace (platba, prevody mezi ucty...), volaji další okna (widgety), jako například payment.
V soucasne chvili klient nepouziva k persistenci nic jiného, nez serverove API calls. Tzn., pokud se něco stane,
po restartu klienta dostaneme stav pred začátkem rozpracovane operace.
V budoucnu predpokladam po x vteřinách update rozpracovane operace na server. To ale trochu koliduje
s pravidlem, ze jediny kdo operuje s daty na serveru je controller. Nicmene Posdialog není modalni, nebude
to takovy problem screen managerem pustit update stavu. V podstate jde je o rozmarkovany ucet, mozna vyber
v posdialogu.
Krome accountselect dialogu pro vybrani otevreneho uctu existuje jeste closed_accountselect dialog, ktery
slouzi k vyberu uzavrenych uctu (kopie, storna apod.) Oba tyto dialogy maji stejneho rodice.
V soucasne chvili je vyzkousena portace na Windows, Linux (jak 86 tak ARM procesory) a MacOS. System vcetne servera dobře funguje na
Rabsberry, napr. P400. Samozrejme je vyzkousen i provoz přes HotSpot a VPN. Server na Hluce, klient v Motole.
Pro Android je s Kivy k dispozici dozer, jeste jsem nezkousel.
Ve chvili, kdy zacnes editovat ucet ktery neexistuje se serveru vytvori dummy a zablokuje se. Tim se predchazi aby nedoslo k soucasne
editaci stejneho noveho uctu.
ToDo:
- vyhazej ze serveru endpointy pro users, které nejsou potřeba
- rozdelit server na endpointy a DB operace
- implementuj pojmenovane stuly
- automaticky test
-vice pokladen, vice terminalu
-blokace, release
-relogin, refresh token
-start s novou databazi
- zkus jinou databazi (postgres nebo DuckDB)
- parametricky prohozeni ucty a matici v PosDialog z prave strany doleva nebo nahore a dole (vzajemne se prekryvajici)