notebookvb

This commit is contained in:
Vladimir Buzalka
2026-04-29 06:51:47 +02:00
parent a1b9c93506
commit a9c143ba24
141 changed files with 30711 additions and 0 deletions
@@ -0,0 +1,117 @@
import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
import fdb
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment
from datetime import date, timedelta
import os
conn = fdb.connect(
dsn=r'localhost:c:\medicus 3\data\medicus.fdb',
user='SYSDBA', password='masterkey', charset='win1250'
)
cur = conn.cursor()
zacatek = date(2025, 1, 1)
konec = date.today()
dny = []
d = zacatek
while d <= konec:
dny.append(d)
d += timedelta(days=1)
print(f"Počítám {len(dny)} dní ({zacatek} {konec})...")
vysledky = []
for i, den in enumerate(dny):
# Počet registrovaných
cur.execute(f"""
SELECT COUNT(*) FROM KAR
WHERE vyrazen = 'N'
AND EXISTS (
SELECT id FROM registr r
JOIN icp i ON r.idicp = i.idicp
WHERE r.idpac = kar.idpac
AND r.datum <= '{den}'
AND (r.datum_zruseni IS NULL OR r.datum_zruseni >= '{den}')
AND r.priznak IN ('V','D','A')
AND i.icp = '09305001'
AND i.odb = '001'
)
""")
pocet = cur.fetchone()[0]
# Zaregistrovaní tento den
cur.execute(f"""
SELECT k.RODCIS, k.PRIJMENI, k.JMENO
FROM REGISTR r JOIN KAR k ON k.IDPAC = r.IDPAC
WHERE r.datum = '{den}'
AND r.priznak IN ('V','D','A')
ORDER BY k.PRIJMENI, k.JMENO
""")
zaregistrovani = [f"{row[0]} {row[1].strip()} {row[2]}" for row in cur.fetchall()]
# Odregistrovaní tento den
cur.execute(f"""
SELECT k.RODCIS, k.PRIJMENI, k.JMENO
FROM REGISTR r JOIN KAR k ON k.IDPAC = r.IDPAC
WHERE r.datum_zruseni = '{den}'
ORDER BY k.PRIJMENI, k.JMENO
""")
odregistrovani = [f"{row[0]} {row[1].strip()} {row[2]}" for row in cur.fetchall()]
vysledky.append((den, pocet, zaregistrovani, odregistrovani))
if (i + 1) % 30 == 0:
print(f" {i+1}/{len(dny)}: {den}{pocet}")
conn.close()
# Excel
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Registrace"
hlavicka_font = Font(bold=True, color="FFFFFF")
hlavicka_fill = PatternFill("solid", fgColor="2E75B6")
ws.column_dimensions['A'].width = 14
ws.column_dimensions['B'].width = 14
ws.column_dimensions['C'].width = 10
ws.column_dimensions['D'].width = 45
ws.column_dimensions['E'].width = 45
for col, nazev in enumerate(['Datum', 'Registrovaných', 'Změna', 'Zaregistrováno', 'Odregistrováno'], start=1):
cell = ws.cell(row=1, column=col, value=nazev)
cell.font = hlavicka_font
cell.fill = hlavicka_fill
cell.alignment = Alignment(horizontal='center')
predchozi = None
for row_i, (den, pocet, zaregistrovani, odregistrovani) in enumerate(vysledky, start=2):
ws.cell(row=row_i, column=1, value=den).number_format = 'DD.MM.YYYY'
ws.cell(row=row_i, column=2, value=pocet).alignment = Alignment(horizontal='center')
if predchozi is not None:
zmena = pocet - predchozi
cell = ws.cell(row=row_i, column=3, value=zmena)
cell.alignment = Alignment(horizontal='center')
if zmena > 0:
cell.font = Font(color="00AA00", bold=True)
elif zmena < 0:
cell.font = Font(color="CC0000", bold=True)
predchozi = pocet
if zaregistrovani:
cell = ws.cell(row=row_i, column=4, value="\n".join(zaregistrovani))
cell.alignment = Alignment(wrap_text=True, vertical='top')
cell.font = Font(color="00AA00")
if odregistrovani:
cell = ws.cell(row=row_i, column=5, value="\n".join(odregistrovani))
cell.alignment = Alignment(wrap_text=True, vertical='top')
cell.font = Font(color="CC0000")
ws.freeze_panes = 'A2'
vystup = os.path.join(os.path.dirname(__file__), 'registrace_2025_dnes.xlsx')
wb.save(vystup)
print(f"\nUloženo: {vystup}")