From 67f2796ae9147becbaaa9128d8bc6700d7bfc15c Mon Sep 17 00:00:00 2001 From: Vladimir Buzalka Date: Wed, 12 Nov 2025 17:45:04 +0100 Subject: [PATCH] notebook --- 87 read open in same format as agenda.py | 117 +++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 87 read open in same format as agenda.py diff --git a/87 read open in same format as agenda.py b/87 read open in same format as agenda.py new file mode 100644 index 0000000..495e622 --- /dev/null +++ b/87 read open in same format as agenda.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +Read OPEN Medevio requests (požadavky) from local MySQL table `pozadavky` +and export to Excel in the same visual format as Agenda. +""" + +import pymysql +import pandas as pd +from datetime import datetime +from pathlib import Path +from openpyxl import Workbook +from openpyxl.styles import Font, Alignment, PatternFill, Border, Side +from openpyxl.utils import get_column_letter +from openpyxl.utils.dataframe import dataframe_to_rows + +# ============================== +# 🔧 CONFIGURATION +# ============================== +DB_CONFIG = { + "host": "192.168.1.76", + "port": 3307, + "user": "root", + "password": "Vlado9674+", + "database": "medevio", + "charset": "utf8mb4", + "cursorclass": pymysql.cursors.DictCursor, +} + +EXPORT_DIR = Path(r"u:\Dropbox\Ordinace\Reporty") +EXPORT_DIR.mkdir(parents=True, exist_ok=True) +xlsx_path = EXPORT_DIR / f"{datetime.now():%Y-%m-%d_%H-%M-%S} Otevřené požadavky.xlsx" + +# ============================== +# 📡 LOAD DATA +# ============================== +print("📡 Fetching open requests from MySQL...") + +conn = pymysql.connect(**DB_CONFIG) +with conn.cursor() as cur: + cur.execute(""" + SELECT id AS Request_ID, + displayTitle AS Title, + pacient_prijmeni AS Pacient_Prijmeni, + pacient_jmeno AS Pacient_Jmeno, + pacient_rodnecislo AS RodneCislo, + createdAt AS Created, + updatedAt AS Updated, + doneAt AS Done, + removedAt AS Removed + FROM pozadavky + WHERE doneAt IS NULL AND removedAt IS NULL + ORDER BY createdAt DESC + """) + rows = cur.fetchall() +conn.close() + +if not rows: + print("⚠️ No open requests found.") + raise SystemExit() + +df = pd.DataFrame(rows) +print(f"✅ Loaded {len(df)} open requests.") + +# ============================== +# 🧩 CLEAN + PREPARE +# ============================== +df["Patient"] = (df["Pacient_Prijmeni"].fillna("") + " " + df["Pacient_Jmeno"].fillna("")).str.strip() + +df = df.rename(columns={ + "RodneCislo": "Rodné číslo", + "Request_ID": "Request ID", +}) +df = df[["Created", "Title", "Patient", "Rodné číslo", "Request ID", "Updated"]] + +# ============================== +# 🧾 EXPORT TO EXCEL +# ============================== +wb = Workbook() +ws = wb.active +ws.title = "Otevřené požadavky" + +# === Styles === +header_fill = PatternFill("solid", fgColor="00FF99") +alt_fill = PatternFill("solid", fgColor="F2FFF2") +thin_border = Border( + left=Side(style="thin", color="000000"), + right=Side(style="thin", color="000000"), + top=Side(style="thin", color="000000"), + bottom=Side(style="thin", color="000000") +) + +# === Write DataFrame === +for r_idx, row in enumerate(dataframe_to_rows(df, index=False, header=True), start=1): + ws.append(row) + +# === Header styling === +for col_idx in range(1, len(df.columns) + 1): + c = ws.cell(row=1, column=col_idx) + c.font = Font(bold=True) + c.alignment = Alignment(horizontal="center", vertical="center") + c.fill = header_fill + c.border = thin_border + ws.column_dimensions[get_column_letter(col_idx)].width = 25 + +# === Data styling === +for r_idx, row in enumerate(ws.iter_rows(min_row=2, max_row=ws.max_row, max_col=ws.max_column), start=2): + for cell in row: + cell.border = thin_border + if r_idx % 2 == 0: + cell.fill = alt_fill + +ws.freeze_panes = "A2" +wb.save(xlsx_path) + +print(f"📘 Exported {len(df)} open requests → {xlsx_path}")