From 4c68c095dba711d7d92e111d75e695c142031cd1 Mon Sep 17 00:00:00 2001 From: "vladimir.buzalka" Date: Fri, 5 Dec 2025 09:49:59 +0100 Subject: [PATCH] Z230 --- ...uest do nejnovějšího otevřeného požadavku.py | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 30 ManipulacePoznámek/102 Zapiš ID request do nejnovějšího otevřeného požadavku.py diff --git a/30 ManipulacePoznámek/102 Zapiš ID request do nejnovějšího otevřeného požadavku.py b/30 ManipulacePoznámek/102 Zapiš ID request do nejnovějšího otevřeného požadavku.py new file mode 100644 index 0000000..ec3254e --- /dev/null +++ b/30 ManipulacePoznámek/102 Zapiš ID request do nejnovějšího otevřeného požadavku.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import requests +import mysql.connector +from pathlib import Path +import sys + +# UTF-8 handling +try: + sys.stdout.reconfigure(encoding='utf-8') +except: + pass + +# === KONFIGURACE === + +# --- Medevio API --- +TOKEN_PATH = Path("token.txt") +GRAPHQL_URL = "https://api.medevio.cz/graphql" + +# --- MySQL DB --- +DB_CONFIG = { + "host": "192.168.1.76", + "port": 3307, + "user": "root", + "password": "Vlado9674+", + "database": "medevio", +} + + +# === Helpers === + +def read_token(p: Path) -> str: + """Načte Bearer token z textového souboru.""" + t = p.read_text().strip() + if t.startswith("Bearer "): + return t.split(" ", 1)[1] + return t + + +# === DB Funkce === + +def get_latest_open_request_id_from_db(): + """ + Získá ID, Titul, Jméno a Příjmení nejnovějšího otevřeného požadavku z MySQL. + """ + print("🔍 Připojuji se k MySQL a hledám ID nejnovějšího otevřeného požadavku...") + try: + conn = mysql.connector.connect(**DB_CONFIG) + cursor = conn.cursor() + + # SQL dotaz: Nyní vybíráme navíc jméno a příjmení pacienta + query = """ + SELECT id, displayTitle, pacient_jmeno, pacient_prijmeni + FROM pozadavky + WHERE doneAt IS NULL + ORDER BY updatedAt DESC + LIMIT 1; + """ + + cursor.execute(query) + result = cursor.fetchone() + + cursor.close() + conn.close() + + if result: + request_id, display_title, jmeno, prijmeni = result + print(f"✅ Nalezen požadavek ID: {request_id} (Titul: {display_title})") + print(f" Pacient: **{prijmeni} {jmeno}**") # Vypíšeme pro snadnou kontrolu + return { + "id": request_id, + "displayTitle": display_title, + "jmeno": jmeno, + "prijmeni": prijmeni + } + + print("❌ Nebyl nalezen žádný otevřený požadavek v DB.") + return None + + except mysql.connector.Error as err: + print(f"❌ Chyba při připojení/dotazu MySQL: {err}") + return None + + +# === GraphQL Operace === +# Tyto GraphQL dotazy jsou beze změny + +QUERY_GET_NOTE = r""" +query ClinicRequestNotes_Get($patientRequestId: String!) { + notes: getClinicPatientRequestNotes(requestId: $patientRequestId) { + id + content + } +} +""" + +MUTATION_UPDATE_NOTE = r""" +mutation ClinicRequestNotes_Update($noteInput: UpdateClinicPatientRequestNoteInput!) { + updateClinicPatientRequestNote(noteInput: $noteInput) { + id + } +} +""" + + +def gql(query, variables, token): + """Obecná funkce pro volání GraphQL endpointu.""" + headers = { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json", + "Accept": "application/json", + } + payload = {"query": query, "variables": variables} + + r = requests.post(GRAPHQL_URL, json=payload, headers=headers) + r.raise_for_status() + return r.json() + + +def get_internal_note(request_id, token): + """Získá jedinou interní poznámku (obsah a ID) pro daný požadavek.""" + print(f"🔍 Načítám poznámku z Medevia k požadavku {request_id}...") + data = gql(QUERY_GET_NOTE, {"patientRequestId": request_id}, token) + notes = data.get("data", {}).get("notes", []) + + if notes: + print("✅ Interní poznámka nalezena.") + return notes[0] + + print(f"⚠️ Interní poznámka pro požadavek {request_id} neexistuje.") + return None + + +def update_internal_note(note_id, new_content, token): + """Aktualizuje obsah poznámky v Medeviu.""" + variables = {"noteInput": {"id": note_id, "content": new_content}} + print(f"📝 Odesílám aktualizaci poznámky {note_id}...") + return gql(MUTATION_UPDATE_NOTE, variables, token) + + +# === MAIN === + +def main(): + token = read_token(TOKEN_PATH) + + # 1. Zjistit ID a jméno pacienta z TVÉ DB + latest_request = get_latest_open_request_id_from_db() + if not latest_request: + return + + request_id = latest_request["id"] + + # 2. Získat existující interní poznámku z Medevia + note = get_internal_note(request_id, token) + if not note: + return + + note_id = note["id"] + old_content = note["content"] or "" + + # 3. Vytvořit nový obsah (ID požadavku jako první řádek) + # Text, který vložíme na začátek + prepend_text = f"ID DB Synchronizace: {request_id}\n" + new_content = prepend_text + old_content + + print("--- Nový obsah který odešlu (začátek) ---") + print(f"-> {prepend_text.strip()}") + print("------------------------------------------") + + # 4. Aktualizovat poznámku v Medeviu + try: + update_internal_note(note_id, new_content, token) + print(f"\n✅ Úspěch! Poznámka {note_id} k požadavku {request_id} byla aktualizována v Medeviu.") + print(f" **Zkontroluj požadavek pacienta: {latest_request['prijmeni']} {latest_request['jmeno']}**") + except requests.exceptions.HTTPError as e: + print(f"\n❌ Chyba při aktualizaci Medevio API: {e}") + except Exception as e: + print(f"\n❌ Neočekávaná chyba: {e}") + + +if __name__ == "__main__": + main() \ No newline at end of file