From 4e06ff583f3e85818668c1758d6eea1d72c101d8 Mon Sep 17 00:00:00 2001 From: "vladimir.buzalka" Date: Thu, 18 Jun 2026 11:20:52 +0200 Subject: [PATCH] z230 --- KPC/_find_kpc_attachments_v0.py | 46 ++++++++++++++++++++ KPC/_process_telco_v0.py | 77 +++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 KPC/_find_kpc_attachments_v0.py create mode 100644 KPC/_process_telco_v0.py diff --git a/KPC/_find_kpc_attachments_v0.py b/KPC/_find_kpc_attachments_v0.py new file mode 100644 index 0000000..a7465fc --- /dev/null +++ b/KPC/_find_kpc_attachments_v0.py @@ -0,0 +1,46 @@ +"""_find_kpc_attachments_v0.py — DOČASNÉ: najde e-maily s .kpc přílohou a vypíše obsah.""" +import sys, base64 +sys.stdout.reconfigure(encoding="utf-8") +import msal, requests + +TENANT="7d269944-37a4-43a1-8140-c7517dc426e9"; CID="4b222bfd-78c9-4239-a53f-43006b3ed07f" +SECRET="Txg8Q~MjhocuopxsJyJBhPmDfMxZ2r5WpTFj1dfk" +mailbox = sys.argv[1] if len(sys.argv) > 1 else "vladimir.buzalka@buzalka.cz" +BASE=f"https://graph.microsoft.com/v1.0/users/{mailbox}" + +app=msal.ConfidentialClientApplication(CID,authority=f"https://login.microsoftonline.com/{TENANT}",client_credential=SECRET) +tok=app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"]) +H={"Authorization":f"Bearer {tok['access_token']}"} +HS=dict(H); HS["ConsistencyLevel"]="eventual" + +# hledej e-maily zmiňující kpc (subject/body/příloha) +r=requests.get(f"{BASE}/messages",headers=HS,params={ + "$search":'"kpc"',"$top":50, + "$select":"id,subject,from,receivedDateTime,hasAttachments"},timeout=40) +if not r.ok: + print("search ERR",r.status_code,r.text[:300]); sys.exit(1) +msgs=[m for m in r.json().get("value",[]) if m.get("hasAttachments")] +print(f"[{mailbox}] e-mailů (search kpc) s přílohou: {len(msgs)}\n") + +found=0 +for m in msgs: + ra=requests.get(f"{BASE}/messages/{m['id']}/attachments",headers=H, + params={"$select":"id,name,size,contentType"},timeout=30) + if not ra.ok: continue + for a in ra.json().get("value",[]): + if (a.get("name","") or "").lower().endswith(".kpc"): + found+=1 + frm=m.get("from",{}).get("emailAddress",{}).get("address","") + print("="*78) + print(f"e-mail: {m.get('receivedDateTime','')[:10]} | od {frm} | {m.get('subject','')[:60]}") + print(f"příloha: {a.get('name')} ({a.get('size')} B)") + full=requests.get(f"{BASE}/messages/{m['id']}/attachments/{a['id']}",headers=H,timeout=30).json() + cb=full.get("contentBytes") + if cb: + raw=base64.b64decode(cb) + for enc in ("cp1250","utf-8","latin-1"): + try: txt=raw.decode(enc); break + except: txt=None + print("--- OBSAH ---") + print(txt if txt else repr(raw[:400])) +print(f"\nCelkem .kpc příloh: {found}") diff --git a/KPC/_process_telco_v0.py b/KPC/_process_telco_v0.py new file mode 100644 index 0000000..cca2905 --- /dev/null +++ b/KPC/_process_telco_v0.py @@ -0,0 +1,77 @@ +"""_process_telco_v0.py — DOČASNÉ: Vodafone + T-Mobile v jednom KPC (osobní účet). +Telegram potvrzení → ano → KPC → Dropbox → přehození kategorií obou e-mailů. +""" +import sys +from datetime import date +from pathlib import Path +sys.stdout.reconfigure(encoding="utf-8") +sys.path.insert(0, r"U:\ordinaceprojekt") +import dropbox, msal, requests +from Knihovny.telegram_notify import zeptej_se_telegram, posli_telegram + +today = date.today(); ddmmyy = today.strftime("%d%m%y"); fdate = today.strftime("%Y-%m-%d") +DEBIT = "2100046291" # osobní + +# položky: (účet_formát, haléře, VS, banka, KS, AV) +items = [ + ("117292", 384200, "1029503118", "0300", "0000", "Faktura Vodafone"), # bez SS (formát SS nemá) + ("19-2235210247", 47920, "9953395180", "0100", "0000", "faktura T-Mobile"), # /0100 dle historie +] +total = sum(h for _, h, *_ in items) + +CRLF = "\r\n" +lines = ["UHL1" + ddmmyy + " " * 20 + "0" * 28, "1 1501 000000 2010", + f"2 000000-{DEBIT} {str(total).zfill(14)} {ddmmyy}"] +for acc, hal, vs, bank, ks, av in items: + lines.append(f"{acc} {str(hal).zfill(12)} {vs} {bank}{ks} AV:{av}") +lines += ["3 +", "5 +"] +content = CRLF.join(lines) + CRLF +data = content.encode("ascii") +fname = f"{fdate} KPC k platbě [Vodafone + T-Mobile].kpc" + +print("=== NÁHLED KPC ==="); print(content.replace("\r\n", "\\r\\n\n"), end="") +print(f"=== {fname} ({len(data)} B) === Σ {total/100:.2f} Kč\n") + +msg = ( + "💳 Návrh platby (KPC agent) — telco, z osobního 2100046291\n\n" + "1) Vodafone 3 842,00 Kč → 117292/0300, VS 1029503118 (BEZ SS — formát SS nemá, páruje se dle VS)\n" + "2) T-Mobile 479,20 Kč → 19-2235210247/0100, VS 9953395180\n\n" + "FIO: obojí nezaplaceno ✅\n\n" + "Vytvořit jeden KPC a nahrát do Dropboxu? Odpověz: ano / ne" +) +odp = zeptej_se_telegram(msg, timeout=150) +print("TELEGRAM odpověď:", repr(odp)) +if not odp or odp.strip().lower() not in ("ano", "ano.", "yes", "ok"): + print(">> NEPOTVRZENO — nic nevytvářím."); sys.exit(0) + +out_dir = Path(__file__).parent / "output"; out_dir.mkdir(exist_ok=True) +(out_dir / fname).write_bytes(data); print("lokální kopie:", out_dir / fname) + +env = {} +for line in Path(r"U:\PythonProject\Janssen\EmailsImport\.env").read_text(encoding="utf-8").splitlines(): + line = line.strip() + if "=" in line and not line.startswith("#"): + k, v = line.split("=", 1); env[k.strip()] = v.strip() +dbx = dropbox.Dropbox(app_key=env["DROPBOX_APP_KEY"], app_secret=env["DROPBOX_APP_SECRET"], + oauth2_refresh_token=env["DROPBOX_APP_REFRESH_TOKEN"]) +res = dbx.files_upload(data, f"/!!!Days/Downloads Z230/{fname}", + mode=dropbox.files.WriteMode.add, autorename=True) +print("NAHRÁNO →", res.path_display) + +# přehození kategorií obou zdrojových e-mailů (tvoje schránka) +TENANT="7d269944-37a4-43a1-8140-c7517dc426e9"; CID="4b222bfd-78c9-4239-a53f-43006b3ed07f" +SECRET="Txg8Q~MjhocuopxsJyJBhPmDfMxZ2r5WpTFj1dfk" +app=msal.ConfidentialClientApplication(CID,authority=f"https://login.microsoftonline.com/{TENANT}",client_credential=SECRET) +tok=app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"]) +H={"Authorization":f"Bearer {tok['access_token']}","Content-Type":"application/json"} +BASE="https://graph.microsoft.com/v1.0/users/vladimir.buzalka@buzalka.cz" +EMAILS = { + "Vodafone": "AAMkADY2MzQ0N2JkLWE4NjAtNDNjYS05OTVlLTQxYjhkYWVlZmY1NQBGAAAAAACkV0glv2dZRLb1sPnwFvdvBwAzGo7b-cvrRoXjMGfWnzDsAAAAAAEMAAAzGo7b-cvrRoXjMGfWnzDsAALq4shJAAA=", + "T-Mobile": "AAMkADY2MzQ0N2JkLWE4NjAtNDNjYS05OTVlLTQxYjhkYWVlZmY1NQBGAAAAAACkV0glv2dZRLb1sPnwFvdvBwAzGo7b-cvrRoXjMGfWnzDsAAAAAAEMAAAzGo7b-cvrRoXjMGfWnzDsAALpDXp1AAA=", +} +for nm, mid in EMAILS.items(): + rp=requests.patch(f"{BASE}/messages/{mid}",headers=H,json={"categories":["KPCzpracovánoClaudem"]},timeout=30) + print(f"PATCH {nm}: {rp.status_code}", "" if rp.ok else rp.text[:200]) + +posli_telegram(f"✅ KPC vytvořeno a nahráno:\n{fname}\nVodafone 3 842 + T-Mobile 479,20 Kč, z osobního.\nV bankingu stačí podepsat.") +print(">> HOTOVO.")