This commit is contained in:
2026-06-17 15:05:10 +02:00
parent de959d849d
commit 4884117227
85 changed files with 34611 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
"""
_explore_email_v0.py — DOČASNÝ read-only průzkum
Najde e-maily s kategorií 'ForKPCGeneration' ve schránce vladimir.buzalka@buzalka.cz
přes Graph API a vypíše subject + tělo + seznam příloh. Nic nemění.
"""
import sys
sys.stdout.reconfigure(encoding="utf-8")
import msal
import requests
TENANT_ID = "7d269944-37a4-43a1-8140-c7517dc426e9"
CLIENT_ID = "4b222bfd-78c9-4239-a53f-43006b3ed07f"
CLIENT_SECRET = "Txg8Q~MjhocuopxsJyJBhPmDfMxZ2r5WpTFj1dfk"
MAILBOX = "vladimir.buzalka@buzalka.cz"
AUTHORITY = f"https://login.microsoftonline.com/{TENANT_ID}"
SCOPE = ["https://graph.microsoft.com/.default"]
BASE = f"https://graph.microsoft.com/v1.0/users/{MAILBOX}"
CATEGORY = "ForKPCGeneration"
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)
r.raise_for_status()
msgs = r.json().get("value", [])
print(f"Nalezeno 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" kateg.: {m.get('categories')}")
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')})")
+67
View File
@@ -0,0 +1,67 @@
"""_make_and_upload_v0.py — DOČASNÉ: postaví Pillow KPC a nahraje přes Dropbox API.
Po odsouhlasení přes Telegram (ano). Diakritika v názvu OK (Dropbox API = UTF-8).
"""
import sys
from datetime import date
from pathlib import Path
sys.stdout.reconfigure(encoding="utf-8")
import dropbox
# ── data platby (z e-mailu + pravidel playbooku) ──────────────────────────
today = date.today()
ddmmyy = today.strftime("%d%m%y") # splatnost + UHL = dnešek
fname_date = today.strftime("%Y-%m-%d")
DEBIT = ("", "2100046291") # osobní účet (plátce) /2010
CREDIT = ("", "501401304") # Pillow /2010
CREDIT_BANK = "2010"
VS = "100112956"
KS = "0000"
AMOUNT_HALER = 46800 # 468,00 Kč
AV = "povinne ruceni karavan 13.07.2026-12.07.2027"
SUMMARY = "Pillow pojištění karavanu"
def acct(pre, num):
return f"{str(pre).zfill(6)}-{str(num).zfill(10)}"
CRLF = "\r\n"
lines = [
"UHL1" + ddmmyy + " " * 20 + "0" * 28,
"1 1501 000000 2010",
f"2 {acct(*DEBIT)} {str(AMOUNT_HALER).zfill(14)} {ddmmyy}",
f"{acct(*CREDIT)} {str(AMOUNT_HALER).zfill(12)} {VS} {CREDIT_BANK}{KS} AV:{AV}",
"3 +",
"5 +",
]
content = CRLF.join(lines) + CRLF
data = content.encode("ascii")
fname = f"{fname_date} KPC k platbě [{SUMMARY}].kpc"
print("=== OBSAH KPC ===")
print(content.replace("\r\n", "\\r\\n\n"), end="")
print(f"\n=== NÁZEV: {fname} ({len(data)} B) ===")
# ── lokální archivní kopie ────────────────────────────────────────────────
out_dir = Path(__file__).parent / "output"
out_dir.mkdir(exist_ok=True)
(out_dir / fname).write_bytes(data)
print(f"lokální kopie: {out_dir / fname}")
# ── upload přes Dropbox API ───────────────────────────────────────────────
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"],
)
path = f"/!!!Days/Downloads Z230/{fname}"
res = dbx.files_upload(data, path, mode=dropbox.files.WriteMode.add, autorename=True)
print(f"NAHRÁNO → {res.path_display} (rev {res.rev})")
+30
View File
@@ -0,0 +1,30 @@
"""_set_category_v0.py — DOČASNÉ: přehodí kategorii zpracovaného e-mailu."""
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"
MAILBOX = "vladimir.buzalka@buzalka.cz"
AUTHORITY = f"https://login.microsoftonline.com/{TENANT_ID}"
SCOPE = ["https://graph.microsoft.com/.default"]
BASE = f"https://graph.microsoft.com/v1.0/users/{MAILBOX}"
MSG_ID = "AAMkADY2MzQ0N2JkLWE4NjAtNDNjYS05OTVlLTQxYjhkYWVlZmY1NQBGAAAAAACkV0glv2dZRLb1sPnwFvdvBwAzGo7b-cvrRoXjMGfWnzDsAAAAAAEMAAAzGo7b-cvrRoXjMGfWnzDsAALKfSYQAAA="
NEW_CATS = ["KPCzpracovánoClaudem"]
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']}", "Content-Type": "application/json"}
r = requests.patch(f"{BASE}/messages/{MSG_ID}", headers=H, json={"categories": NEW_CATS}, timeout=30)
print("PATCH:", r.status_code)
if not r.ok:
print("CHYBA:", r.text[:600])
else:
g = requests.get(f"{BASE}/messages/{MSG_ID}", headers=H,
params={"$select": "subject,categories"}, timeout=30).json()
print("subject :", g.get("subject"))
print("categories:", g.get("categories"))
+19
View File
@@ -0,0 +1,19 @@
"""_tg_confirm_v0.py — DOČASNÝ test Telegram potvrzení (znovupoužívá hotový bot)."""
import sys
sys.stdout.reconfigure(encoding="utf-8")
sys.path.insert(0, r"U:\ordinaceprojekt")
from Knihovny.telegram_notify import zeptej_se_telegram
msg = (
"💳 Návrh platby (KPC agent — test)\n\n"
"Pillow — povinné ručení karavan SWIFT (SPZ 2ST4934)\n"
"Období: 13.07.202612.07.2027\n"
"Částka: 468 Kč\n"
"Účet příjemce: 501401304/2010, VS 100112956\n"
"Z účtu: osobní 2100046291/2010\n"
"Splatnost: dnes (17.06.2026)\n\n"
"FIO kontrola: poslední krytí končí 12.07.2026 → nové období placené není ✅\n\n"
"Vytvořit KPC a nahrát do Dropboxu? Odpověz: ano / ne"
)
odp = zeptej_se_telegram(msg, timeout=150)
print("ODPOVED:", repr(odp))
@@ -0,0 +1,6 @@
UHL1170626 0000000000000000000000000000
1 1501 000000 2010
2 000000-2100046291 00000000046800 170626
000000-0501401304 000000046800 100112956 20100000 AV:povinne ruceni karavan 13.07.2026-12.07.2027
3 +
5 +