z230
This commit is contained in:
@@ -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')})")
|
||||
@@ -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})")
|
||||
@@ -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"))
|
||||
@@ -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.2026–12.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 +
|
||||
Reference in New Issue
Block a user