z230
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
"""_list_cats_v0.py — DOČASNÉ: vypíše nedávné e-maily mailboxu (argv[1]) + jejich kategorie."""
|
||||
import sys
|
||||
sys.stdout.reconfigure(encoding="utf-8")
|
||||
import msal, requests
|
||||
|
||||
TENANT_ID="7d269944-37a4-43a1-8140-c7517dc426e9"
|
||||
CLIENT_ID="4b222bfd-78c9-4239-a53f-43006b3ed07f"
|
||||
CLIENT_SECRET="Txg8Q~MjhocuopxsJyJBhPmDfMxZ2r5WpTFj1dfk"
|
||||
AUTHORITY=f"https://login.microsoftonline.com/{TENANT_ID}"
|
||||
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(CLIENT_ID,authority=AUTHORITY,client_credential=CLIENT_SECRET)
|
||||
tok=app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
|
||||
H={"Authorization":f"Bearer {tok['access_token']}"}
|
||||
|
||||
# 1) nejnovějších 20 e-mailů (napříč schránkou)
|
||||
r=requests.get(f"{BASE}/messages",headers=H,params={
|
||||
"$top":20,"$orderby":"receivedDateTime desc",
|
||||
"$select":"subject,from,receivedDateTime,categories"},timeout=30)
|
||||
print(f"[{mailbox}] nejnovějších {len(r.json().get('value',[]))}:")
|
||||
for m in r.json().get("value",[]):
|
||||
cats=m.get("categories") or []
|
||||
frm=m.get("from",{}).get("emailAddress",{}).get("address","")
|
||||
flag=" <<< KATEGORIE" if cats else ""
|
||||
print(f" {m.get('receivedDateTime','')[:10]} | {frm:28.28} | {str(cats):28} | {m.get('subject','')[:50]}{flag}")
|
||||
|
||||
# 2) cokoliv s kategorií obsahující KPC/Claude (zkus víc názvů)
|
||||
print("\nHledám kategorie ~ KPC/Claude:")
|
||||
for cat in ["ForKPCGeneration","KPCzpracovánoClaudem","KPC","ForKPC","Claude","Pro Tebe","ProClaude"]:
|
||||
rr=requests.get(f"{BASE}/messages",headers=H,params={
|
||||
"$filter":f"categories/any(c:c eq '{cat}')","$select":"subject","$top":5},timeout=30)
|
||||
n=len(rr.json().get("value",[])) if rr.ok else f"ERR{rr.status_code}"
|
||||
print(f" '{cat}': {n}")
|
||||
@@ -0,0 +1,92 @@
|
||||
"""_process_clk_v0.py — DOČASNÉ: zpracuje manželčin ČLK příspěvek (mini-agent).
|
||||
Telegram potvrzení → ano → KPC (plátce ordinace) → Dropbox → přehození kategorie.
|
||||
"""
|
||||
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
|
||||
|
||||
# ── data platby ───────────────────────────────────────────────────────────
|
||||
today = date.today()
|
||||
ddmmyy = today.strftime("%d%m%y")
|
||||
fdate = today.strftime("%Y-%m-%d")
|
||||
|
||||
DEBIT_NUM = "2800046620" # ordinace (plátce)
|
||||
CREDIT_NUM = "244484339" # ČLK, bez předčíslí → holé číslo
|
||||
CREDIT_BANK = "0800"
|
||||
VS = "5141811171"; KS = "0000"
|
||||
AMOUNT = 400000 # 4000,00 Kč v haléřích
|
||||
AV = "clensky prispevek OS CLK 2026 Buzalkova"
|
||||
SUMMARY = "ČLK příspěvek Buzalková 2026"
|
||||
|
||||
# e-mail ke zpracování (manželčina schránka)
|
||||
MAILBOX = "michaela.buzalkova@buzalka.cz"
|
||||
MSG_ID = "AAMkADFkMzE3NDlmLTg3NjQtNDQwNy05Nzc2LWJjYWJkNmNjMjIxZABGAAAAAABEaZtIoWAPQbVWi-ATA8XVBwB8gYSLibM0Q7crRJXlxBlcAAAAAAEMAAB8gYSLibM0Q7crRJXlxBlcAALrbxJcAAA="
|
||||
|
||||
# ── KPC ───────────────────────────────────────────────────────────────────
|
||||
CRLF = "\r\n"
|
||||
lines = [
|
||||
"UHL1" + ddmmyy + " " * 20 + "0" * 28,
|
||||
"1 1501 000000 2010",
|
||||
f"2 000000-{DEBIT_NUM} {str(AMOUNT).zfill(14)} {ddmmyy}",
|
||||
f"{CREDIT_NUM} {str(AMOUNT).zfill(12)} {VS} {CREDIT_BANK}{KS} AV:{AV}",
|
||||
"3 +",
|
||||
"5 +",
|
||||
]
|
||||
content = CRLF.join(lines) + CRLF
|
||||
data = content.encode("ascii")
|
||||
fname = f"{fdate} KPC k platbě [{SUMMARY}].kpc"
|
||||
|
||||
print("=== NÁHLED KPC ===")
|
||||
print(content.replace("\r\n", "\\r\\n\n"), end="")
|
||||
print(f"=== {fname} ({len(data)} B) ===\n")
|
||||
|
||||
# ── Telegram potvrzení ────────────────────────────────────────────────────
|
||||
msg = (
|
||||
"💳 Návrh platby (KPC agent)\n\n"
|
||||
"ČLK členský příspěvek 2026 — MUDr. Buzalková\n"
|
||||
"4 000 Kč → 244484339/0800, VS 5141811171\n"
|
||||
"Z účtu: ordinace 2800046620\n"
|
||||
"Splatnost: dnes (17.06.2026)\n\n"
|
||||
"FIO: 2026 zatím nezaplaceno (poslední 2025-04-09) ✅\n\n"
|
||||
"Vytvořit 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 (ano nepřišlo) — nic nevytvářím.")
|
||||
sys.exit(0)
|
||||
|
||||
# ── lokální archiv + Dropbox upload ───────────────────────────────────────
|
||||
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í kategorie na manželčině e-mailu ─────────────────────────────
|
||||
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=f"https://graph.microsoft.com/v1.0/users/{MAILBOX}"
|
||||
rp=requests.patch(f"{BASE}/messages/{MSG_ID}",headers=H,json={"categories":["KPCzpracovánoClaudem"]},timeout=30)
|
||||
print("PATCH kategorie:", rp.status_code, "" if rp.ok else rp.text[:300])
|
||||
|
||||
posli_telegram(f"✅ KPC vytvořeno a nahráno:\n{fname}\n4 000 Kč → 244484339/0800 (ČLK Buzalková), z ordinace.\nV bankingu stačí podepsat.")
|
||||
print(">> HOTOVO.")
|
||||
@@ -0,0 +1,51 @@
|
||||
"""_read_v0.py — DOČASNÉ: přečte ForKPCGeneration e-maily z mailboxu (argv[1])."""
|
||||
import sys
|
||||
sys.stdout.reconfigure(encoding="utf-8")
|
||||
import msal, requests
|
||||
|
||||
TENANT_ID = "7d269944-37a4-43a1-8140-c7517dc426e9"
|
||||
CLIENT_ID = "4b222bfd-78c9-4239-a53f-43006b3ed07f"
|
||||
CLIENT_SECRET = "Txg8Q~MjhocuopxsJyJBhPmDfMxZ2r5WpTFj1dfk"
|
||||
AUTHORITY = f"https://login.microsoftonline.com/{TENANT_ID}"
|
||||
SCOPE = ["https://graph.microsoft.com/.default"]
|
||||
CATEGORY = "ForKPCGeneration"
|
||||
|
||||
mailbox = sys.argv[1] if len(sys.argv) > 1 else "vladimir.buzalka@buzalka.cz"
|
||||
CATEGORY = sys.argv[2] if len(sys.argv) > 2 else CATEGORY
|
||||
BASE = f"https://graph.microsoft.com/v1.0/users/{mailbox}"
|
||||
|
||||
app = msal.ConfidentialClientApplication(CLIENT_ID, authority=AUTHORITY, client_credential=CLIENT_SECRET)
|
||||
tok = app.acquire_token_for_client(scopes=SCOPE)
|
||||
assert "access_token" in tok, tok
|
||||
H = {"Authorization": f"Bearer {tok['access_token']}"}
|
||||
|
||||
params = {
|
||||
"$filter": f"categories/any(c:c eq '{CATEGORY}')",
|
||||
"$select": "id,subject,from,receivedDateTime,categories,hasAttachments,body,bodyPreview",
|
||||
"$top": 25,
|
||||
}
|
||||
r = requests.get(f"{BASE}/messages", headers=H, params=params, timeout=30)
|
||||
if not r.ok:
|
||||
print(f"CHYBA [{r.status_code}] pro {mailbox}: {r.text[:400]}")
|
||||
sys.exit(1)
|
||||
msgs = r.json().get("value", [])
|
||||
print(f"[{mailbox}] e-mailů s kategorií '{CATEGORY}': {len(msgs)}\n")
|
||||
|
||||
for i, m in enumerate(msgs, 1):
|
||||
frm = m.get("from", {}).get("emailAddress", {})
|
||||
print("=" * 78)
|
||||
print(f"[{i}] {m.get('subject')}")
|
||||
print(f" od: {frm.get('name')} <{frm.get('address')}>")
|
||||
print(f" datum: {m.get('receivedDateTime')}")
|
||||
print(f" přílohy: {m.get('hasAttachments')}")
|
||||
print(f" id: {m.get('id')}")
|
||||
body = m.get("body", {})
|
||||
print(f" --- TĚLO ({body.get('contentType')}) ---")
|
||||
print(body.get("content", ""))
|
||||
if m.get("hasAttachments"):
|
||||
ra = requests.get(f"{BASE}/messages/{m['id']}/attachments",
|
||||
headers=H, params={"$select": "id,name,size,contentType,isInline"}, timeout=30)
|
||||
if ra.ok:
|
||||
print(" --- PŘÍLOHY ---")
|
||||
for a in ra.json().get("value", []):
|
||||
print(f" • {a.get('name')} ({a.get('size')} B, {a.get('contentType')}, inline={a.get('isInline')})")
|
||||
@@ -0,0 +1,6 @@
|
||||
UHL1170626 0000000000000000000000000000
|
||||
1 1501 000000 2010
|
||||
2 000000-2800046620 00000000400000 170626
|
||||
244484339 000000400000 5141811171 08000000 AV:clensky prispevek OS CLK 2026 Buzalkova
|
||||
3 +
|
||||
5 +
|
||||
Reference in New Issue
Block a user