Fix agenda report and add MySQL sync for open requests
- 871 test.py: Switch auth from medevio_storage.json to token.txt, update MySQL port to 3306, add hyperlinks to Request_ID column, add better API error handling - sync_open_requests.py: New script to sync doneAt/removedAt/updatedAt from Medevio API to MySQL for requests incorrectly marked as open - check_request.py: Diagnostic script to inspect a single request via API - check_mysql.py: Diagnostic script to inspect a single request in MySQL Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -30,7 +30,7 @@ CLINIC_SLUG = "mudr-buzalkova"
|
||||
|
||||
DB_CONFIG = {
|
||||
"host": "192.168.1.76",
|
||||
"port": 3307,
|
||||
"port": 3306,
|
||||
"user": "root",
|
||||
"password": "Vlado9674+",
|
||||
"database": "medevio",
|
||||
@@ -44,22 +44,12 @@ timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
||||
xlsx_path = EXPORT_DIR / f"{timestamp} Agenda + Pozadavky (Merged).xlsx"
|
||||
|
||||
# ==================== LOAD TOKEN ====================
|
||||
def load_gateway_token(storage_path="medevio_storage.json"):
|
||||
path = Path(storage_path)
|
||||
if not path.exists():
|
||||
raise SystemExit(f"❌ Storage file not found: {path}")
|
||||
with path.open("r", encoding="utf-8") as f:
|
||||
state = json.load(f)
|
||||
token = next(
|
||||
(c["value"] for c in state["cookies"] if c["name"] == "gateway-access-token"),
|
||||
None,
|
||||
)
|
||||
if not token:
|
||||
raise SystemExit("❌ gateway-access-token not found in storage file.")
|
||||
return token
|
||||
|
||||
|
||||
gateway_token = load_gateway_token()
|
||||
TOKEN_PATH = Path("token.txt")
|
||||
if not TOKEN_PATH.exists():
|
||||
TOKEN_PATH = Path(__file__).parent / "token.txt"
|
||||
if not TOKEN_PATH.exists():
|
||||
raise SystemExit(f"❌ token.txt not found")
|
||||
gateway_token = TOKEN_PATH.read_text(encoding="utf-8").strip()
|
||||
|
||||
headers = {
|
||||
"content-type": "application/json",
|
||||
@@ -80,8 +70,18 @@ thin_border = Border(
|
||||
)
|
||||
|
||||
|
||||
REQUEST_URL_TEMPLATE = "https://my.medevio.cz/mudr-buzalkova/klinika/pozadavky?pozadavek={}"
|
||||
link_font = Font(color="0563C1", underline="single")
|
||||
|
||||
|
||||
def format_ws(ws, df):
|
||||
"""Apply unified formatting to a worksheet."""
|
||||
# Find Request_ID column index (1-based)
|
||||
req_id_col = None
|
||||
columns = list(df.columns)
|
||||
if "Request_ID" in columns:
|
||||
req_id_col = columns.index("Request_ID") + 1
|
||||
|
||||
for col_idx in range(1, len(df.columns) + 1):
|
||||
col_letter = get_column_letter(col_idx)
|
||||
cell = ws.cell(row=1, column=col_idx)
|
||||
@@ -96,6 +96,10 @@ def format_ws(ws, df):
|
||||
cell.border = thin_border
|
||||
if r_idx % 2 == 0:
|
||||
cell.fill = alt_fill
|
||||
# Add hyperlink to Request_ID cells
|
||||
if req_id_col and cell.column == req_id_col and cell.value:
|
||||
cell.hyperlink = REQUEST_URL_TEMPLATE.format(cell.value)
|
||||
cell.font = link_font
|
||||
ws.freeze_panes = "A2"
|
||||
|
||||
|
||||
@@ -138,7 +142,12 @@ payload = {
|
||||
|
||||
r = requests.post(GRAPHQL_URL, headers=headers, data=json.dumps(payload))
|
||||
r.raise_for_status()
|
||||
reservations = r.json()["data"]["reservations"]
|
||||
resp = r.json()
|
||||
if "errors" in resp or "data" not in resp:
|
||||
print("❌ API response:")
|
||||
print(json.dumps(resp, indent=2, ensure_ascii=False))
|
||||
raise SystemExit("API call failed - check token or query.")
|
||||
reservations = resp["data"]["reservations"]
|
||||
|
||||
rows = []
|
||||
for r in reservations:
|
||||
|
||||
Reference in New Issue
Block a user