Stav 23.06.2026

This commit is contained in:
2026-06-23 15:20:56 +02:00
commit 6d91e83e8c
5670 changed files with 1145969 additions and 0 deletions
+166
View File
@@ -0,0 +1,166 @@
from kivy.uix.popup import Popup
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.metrics import dp
from kivy.clock import Clock
import data
def _popup_info(title: str, text: str, *, monospace: bool = False):
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.button import Button
from kivy.metrics import dp
from kivy.clock import Clock
POP_W = dp(520)
MIN_H = dp(220)
MAX_H = dp(900)
PAD = dp(12)
SP = dp(10)
BTN_H = dp(52)
FONT = dp(18)
LINE_H = FONT * 1.35
TEXT_PAD_X = dp(10)
# 🔹 výběr fontu
font_name = "RobotoMono-Regular.ttf" if monospace else "Roboto-Regular.ttf"
root = BoxLayout(
orientation="vertical",
spacing=SP,
padding=(PAD, PAD, PAD, PAD),
)
# --- Scroll + text wrapper ---
scroll = ScrollView(
do_scroll_x=False,
do_scroll_y=True,
bar_width=dp(8),
)
text_box = BoxLayout(
orientation="vertical",
size_hint=(1, None),
padding=(TEXT_PAD_X, 0, TEXT_PAD_X, 0),
)
text_box.bind(minimum_height=text_box.setter("height"))
lbl = Label(
text=text or "",
halign="left" if monospace else "center",
valign="top",
font_size=FONT,
font_name=font_name,
size_hint=(1, None),
)
# --- synchronizace šířky ---
def _sync_text_size(*_):
inner_w = max(text_box.width - (TEXT_PAD_X * 2), dp(10))
lbl.text_size = (inner_w, None)
# --- synchronizace výšky ---
def _sync_label_height(*_):
lbl.height = max(lbl.texture_size[1], dp(10))
lbl.bind(texture_size=_sync_label_height)
text_box.bind(width=lambda *_: _sync_text_size())
text_box.add_widget(lbl)
scroll.add_widget(text_box)
btn = Button(
text="OK",
size_hint_y=None,
height=BTN_H,
)
popup = Popup(
title=title,
content=root,
size_hint=(None, None),
size=(POP_W, MIN_H),
auto_dismiss=False,
)
def _dismiss_after_touch(*_):
Clock.schedule_once(lambda *_: popup.dismiss(), 0)
btn.bind(on_release=_dismiss_after_touch)
root.add_widget(scroll)
root.add_widget(btn)
# --- odhad výšky ---
lines = (text or "").splitlines() or [""]
est_text_h = max(len(lines) * LINE_H, dp(80))
est_total_h = est_text_h + BTN_H + 2 * PAD + SP
popup.height = min(max(est_total_h, MIN_H), MAX_H)
# --- doladění po otevření ---
def _after_open(*_):
_sync_text_size()
def _measure(*_):
real_text_h = lbl.texture_size[1]
real_total_h = real_text_h + BTN_H + 2 * PAD + SP
popup.height = min(max(real_total_h, MIN_H), MAX_H)
Clock.schedule_once(_measure, 0)
Clock.schedule_once(_after_open, 0)
popup.open()
# =====================================================
# BARVY PODLE TYPU ÚČTU
# =====================================================
UCET_COLORS = {
"open": (0.36, 0.36, 0.36, 1),
"normal": (0.0, 0.2, 0.0, 1), #zelena
"blocked": (0.5, 0.0, 0.35, 1), #tmave cervena
"storno": (0.7, 0.2, 0.2, 1),
"is_storno": (0.6, 0.6, 0.6, 1),
"paymentchg": (0.2, 0.4, 0.8, 1),
"occupied": (0.05, 0.1, 0.25, 1) #tmave modra
}
def ucet_ui_type(u: data.UcetSelect, my_client_id: str | None = None) -> str:
# --- změna platby ---
if u.origin == "Zmena_Platby":
return "paymentchg"
# --- jsem storno ---
if u.is_storno:
return "is_storno"
# --- byl stornován ---
if u.storno:
return "storno"
# --- otevřený účet ---
is_open = (not u.closed_at and not u.ucislo)
# --- má položky? ---
has_items = bool(getattr(u, "poloz", None))
# --- blokovaný ---
if u.blocked_by:
if my_client_id:
owner = u.blocked_by.split("|", 1)[0]
if owner != my_client_id:
return "blocked"
else:
return "occupied" if has_items else "open"
return "blocked"
# --- otevřený účet ---
if is_open:
if has_items:
return "occupied"
else:
return "open" # prázdný účet = volný stůl
# --- fallback ---
return "open"