Files
medevio/87 read open in same format as agenda.py
2025-11-12 17:45:21 +01:00

118 lines
3.4 KiB
Python

#!/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}")