notebookvb
This commit is contained in:
@@ -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}")
|
||||
Reference in New Issue
Block a user