notebookvb
This commit is contained in:
@@ -19,6 +19,9 @@ import xml.etree.ElementTree as ET
|
||||
import pymysql
|
||||
import pymysql.cursors
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
from Knihovny.najdi_dropbox import get_dropbox_root
|
||||
|
||||
if hasattr(sys.stdout, "reconfigure"):
|
||||
sys.stdout.reconfigure(errors="replace")
|
||||
|
||||
@@ -32,7 +35,14 @@ DB = dict(
|
||||
cursorclass = pymysql.cursors.DictCursor,
|
||||
)
|
||||
|
||||
XML_DIR = Path(__file__).parent / "xml_archive"
|
||||
XML_DIR = (
|
||||
Path(get_dropbox_root())
|
||||
/ "Ordinace"
|
||||
/ "Dokumentace_ke_zpracování"
|
||||
/ "Zúčtovací zprávy"
|
||||
/ "NačteníPředpisuWithClaude"
|
||||
/ "xml_archive"
|
||||
)
|
||||
NS = "http://www.sukl.cz/erp/201704"
|
||||
|
||||
# ── Parametry spuštění (uprav zde, nebo nech None = celý archiv) ──────────────
|
||||
@@ -154,11 +164,41 @@ def parsuj_xml(xml_text, xml_soubor):
|
||||
prekroceni = prekroceni,
|
||||
))
|
||||
|
||||
return doklad_dict, plp_list
|
||||
# ── Vydej ─────────────────────────────────────────────────────────────────
|
||||
vydej_list = []
|
||||
for vydej_el in doklad.findall(f"{{{NS}}}Vydej"):
|
||||
id_vydeje = t(vydej_el, "ID_Dokladu")
|
||||
datum_vydeje = t(vydej_el, "DatumVydeje")
|
||||
nazev_pzs = t(vydej_el, "NazevPZS")
|
||||
jmeno_raw = t(vydej_el, "JmenoVydavajiciho")
|
||||
jmeno_vydavajiciho = jmeno_raw if jmeno_raw and jmeno_raw.lower() != "skryto" else None
|
||||
vydej_zalozeni = ts(t(vydej_el, "Zalozeni"))
|
||||
vydej_zmena = ts(t(vydej_el, "Zmena"))
|
||||
|
||||
for vlp_el in vydej_el.findall(f"{{{NS}}}VLP"):
|
||||
id_lp_predpis = t(vlp_el, "IdLpErp")
|
||||
if not id_lp_predpis or not id_vydeje:
|
||||
continue
|
||||
vydej_list.append(dict(
|
||||
id_vydeje = id_vydeje,
|
||||
id_lp_predpis = id_lp_predpis,
|
||||
id_dokladu = id_dokladu,
|
||||
datum_vydeje = datum_vydeje,
|
||||
nazev_pzs = nazev_pzs,
|
||||
jmeno_vydavajiciho = jmeno_vydavajiciho,
|
||||
mnozstvi = t(vlp_el, "Mnozstvi"),
|
||||
nazev_vlp = t(vlp_el, "Nazev"),
|
||||
kod_vlp = t(vlp_el, "Kod"),
|
||||
navod = t(vlp_el, "Navod"),
|
||||
zalozeni = vydej_zalozeni,
|
||||
zmena = vydej_zmena,
|
||||
))
|
||||
|
||||
return doklad_dict, plp_list, vydej_list
|
||||
|
||||
|
||||
def uloz(conn, doklad, plp_list):
|
||||
"""UPSERT dokladu a INSERT IGNORE PLP položek."""
|
||||
def uloz(conn, doklad, plp_list, vydej_list):
|
||||
"""UPSERT dokladu, INSERT IGNORE PLP a vydej položek."""
|
||||
with conn.cursor() as cur:
|
||||
# recept_doklad — ON DUPLICATE KEY UPDATE (stav se může změnit)
|
||||
cur.execute("""
|
||||
@@ -199,6 +239,19 @@ def uloz(conn, doklad, plp_list):
|
||||
VALUES (%(id_lp)s, %(id_dokladu)s, %(uhrada)s, %(prekroceni)s)
|
||||
""", plp)
|
||||
|
||||
# recept_vydej — INSERT IGNORE (výdej se nemění)
|
||||
for v in vydej_list:
|
||||
cur.execute("""
|
||||
INSERT IGNORE INTO recept_vydej
|
||||
(id_vydeje, id_lp_predpis, id_dokladu, datum_vydeje,
|
||||
nazev_pzs, jmeno_vydavajiciho, mnozstvi, nazev_vlp,
|
||||
kod_vlp, navod, zalozeni, zmena)
|
||||
VALUES
|
||||
(%(id_vydeje)s, %(id_lp_predpis)s, %(id_dokladu)s, %(datum_vydeje)s,
|
||||
%(nazev_pzs)s, %(jmeno_vydavajiciho)s, %(mnozstvi)s, %(nazev_vlp)s,
|
||||
%(kod_vlp)s, %(navod)s, %(zalozeni)s, %(zmena)s)
|
||||
""", v)
|
||||
|
||||
conn.commit()
|
||||
|
||||
|
||||
@@ -284,10 +337,10 @@ def main():
|
||||
chyb += 1
|
||||
continue
|
||||
|
||||
doklad, plp_list = vysledek
|
||||
doklad, plp_list, vydej_list = vysledek
|
||||
try:
|
||||
uloz(conn, doklad, plp_list)
|
||||
print(f"{doklad['stav']:20s} terminal={doklad['stav_terminal']} PLP={len(plp_list)}")
|
||||
uloz(conn, doklad, plp_list, vydej_list)
|
||||
print(f"{doklad['stav']:20s} terminal={doklad['stav_terminal']} PLP={len(plp_list)} vydej={len(vydej_list)}")
|
||||
ok += 1
|
||||
except Exception as e:
|
||||
print(f"CHYBA DB {e}")
|
||||
|
||||
Reference in New Issue
Block a user