"""Punct de intrare: de la sursa (PDF / foaie SAGA / Firebird) la contractul intern. Dispecerizeaza catre cititoarele existente, fara sa le dubleze logica: pdf -> extract_balanta.parse_pdf (raportul tiparit SAGA) xlsx -> citire_xlsx.citeste_balanta (.xls / .xlsx SAGA) fdb -> citire_fdb.produce (copia unei baze CONT_BAZA.FDB) Scrie balanta_.csv si, pe drumul fdb, parteneri_.csv si facturi_.csv. Daca --sursa lipseste, se deduce din extensie; o extensie necunoscuta da eroare, nu ghicit. Utilizare: py extrage.py --sursa pdf --fisier "" --firma FIRMA --an 2025 --luna 12 py extrage.py --sursa xlsx --fisier "" --firma FIRMA --an 2026 --luna 9 py extrage.py --sursa fdb --fisier "" --firma FIRMA --an 2026 --luna 9 """ import argparse import os import citire_fdb import citire_xlsx import extract_balanta SURSE_DUPA_EXTENSIE = { ".pdf": "pdf", ".xls": "xlsx", ".xlsx": "xlsx", ".fdb": "fdb", ".fbk": "fdb", # backup gbak; se restaureaza in temporar (citire_fdb.copie_online) } def deduce_sursa(fisier): ext = os.path.splitext(fisier)[1].lower() sursa = SURSE_DUPA_EXTENSIE.get(ext) if sursa is None: raise SystemExit( "extensie necunoscuta pentru %s: %r (astept .pdf, .xls/.xlsx, .fdb sau .fbk)" % (fisier, ext)) return sursa def extrage_pdf(fisier, cale): rows = extract_balanta.parse_pdf(fisier) citire_xlsx.scrie_csv(rows, cale) return len(rows) def extrage_xlsx(fisier, cale): rows = citire_xlsx.citeste_balanta(fisier) citire_xlsx.scrie_csv(rows, cale) return len(rows) def extrage_fdb(fisier, firma, an, luna, dir_iesire): if an is None or luna is None: raise SystemExit("--sursa fdb cere --an si --luna") rez = citire_fdb.produce(fisier, firma, an, luna, dir_iesire) return len(rez["balanta"]) def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--sursa", choices=("pdf", "xlsx", "fdb"), help="lipsa = dedusa din extensia --fisier") parser.add_argument("--fisier", required=True) parser.add_argument("--firma", required=True) parser.add_argument("--an", type=int) parser.add_argument("--luna", type=int) parser.add_argument("--dir", default="date", help="unde se scrie contractul intern (implicit date/)") a = parser.parse_args() sursa = a.sursa or deduce_sursa(a.fisier) os.makedirs(a.dir, exist_ok=True) if sursa == "fdb": n = extrage_fdb(a.fisier, a.firma, a.an, a.luna, a.dir) else: cale = os.path.join(a.dir, "balanta_%s.csv" % a.firma) n = extrage_pdf(a.fisier, cale) if sursa == "pdf" \ else extrage_xlsx(a.fisier, cale) print("scris balanta_%s.csv: %d randuri (sursa %s)" % (a.firma, n, sursa)) if __name__ == "__main__": main()