def zaúčtuji_položky_bankovního_výpisu(): global TABULKA_BANKOVNÍ_VÝPISY global ČÍSLO_ÚČTU db = davaj_připojení(JMÉNO_DATABÁZE) dotaz = 'SELECT "id", "id_bankovního_účtu", "datum", "částka", "variabilní_symbol", "specifický_symbol", "poznámka", "druh_platby", "protiúčet_číslo_účtu", "protiúčet_kód_banky" FROM "{}" WHERE "zaúčtováno" is null'.format(TABULKA_BANKOVNÍ_VÝPISY) pitanje = db.prepare(dotaz) sloupce = ["datum", "částka", "popis", "má_dáti", "dal", "druh_dokladu"] insert = INSERT(db = db, tabulka = TABULKA_ÚČETNÍ_DENÍK) insert.sloupce(*sloupce) šablona_sql_update = 'UPDATE "{}" SET "zaúčtováno" = (SELECT currval(pg_get_serial_sequence(\'účetní_deník\', \'id\'))) WHERE "id" = {{}}'.format(TABULKA_BANKOVNÍ_VÝPISY) for řádek in pitanje(): popis = řádek["poznámka"] or "výpis z účtu" druh_platby = řádek["druh_platby"] účet_md, účet_dal = běžné_účetní_postupy(**řádek) if účet_md and účet_dal: print('účtuji {} {} - {}'.format(řádek["id"], popis, druh_platby)) with db.xact(): insert.vyčisti_hodnoty() insert.hodnoty(řádek["datum"], kladný(řádek["částka"]), popis, účet_md, účet_dal, druh_platby) sql_update = šablona_sql_update.format(řádek["id"]) insert.vykonej() update = db.prepare(sql_update) update() import sys sys.exit()
def zapíšu_výpis_do_databáze(tabulka): global TABULKA_BANKOVNÍ_VÝPISY global ČÍSLO_ÚČTU záhlaví = tabulka.pop(0) # záhlaví výpisu má jiné názvy, než sloupce v tabulce záhlaví_na_sloupce = { "Datum" : "datum", "Objem" : "částka", "Převod" : "číslo_převodu", "Protiúčet" : "protiúčet_číslo_účtu", "Kód banky" : "protiúčet_kód_banky", "KS" : "konstantní_symbol", "VS" : "variabilní_symbol", "SS" : "specifický_symbol", "Uživatelská identifikace" : "poznámka", "Typ" : "druh_platby", "Provedl" : "platbu_provedl", "Název protiúčtu" : "protiúčet_název_účtu", "Název banky" : "protiúčet_název_banky" } # a ve výpisu je vše text, to sa mosí upravit upravím_hodnoty_sloupců = { "Datum" : _str_to_datum, "Objem" : _str_to_decimal } # takže správná jména sloupců budou hen jména_sloupců = [záhlaví_na_sloupce[jméno] for jméno in záhlaví] # včetně názvu účtu, který tam není jména_sloupců.append('číslo_účtu') # a tímto budeme upravovat hodnoty dále funkce_hodnot = [upravím_hodnoty_sloupců.get(jméno, None) for jméno in záhlaví] db = davaj_připojení(JMÉNO_DATABÁZE) insert = INSERT(db = db, tabulka = TABULKA_BANKOVNÍ_VÝPISY) insert.sloupce(*jména_sloupců) # upravíme hodnoty for řádek in tabulka: upravený_řádek = [] for i, položka in enumerate(řádek): if not položka: položka = None else: funkce = funkce_hodnot[i] if funkce: položka = funkce(položka) upravený_řádek.append(položka) upravený_řádek.append(ČÍSLO_ÚČTU) insert.hodnoty(*upravený_řádek)
def načtu_tabulku(sql_skript, cílová_tabulka): ''' provede import dle skriptu do určité tabulky ''' db_flexibee = davaj_připojení(JMÉNO_DATABÁZE_FLEXIBEE) dotaz = sql_ze_souboru(sql_skript) print("spouštím SQL příkaz:\n\t{}".format(dotaz)) pitanje = db_flexibee.prepare(dotaz) db = davaj_připojení(JMÉNO_DATABÁZE) insert = INSERT(db = db, tabulka = cílová_tabulka) insert.sloupce(*pitanje.column_names) for hodnoty in pitanje: # print(hodnoty) insert.hodnoty(*hodnoty) insert.vykonej(enom_vypiš = True) db_flexibee.close() db.close()
def zaúčtuji_položky_bankovního_výpisu(): global TABULKA_BANKOVNÍ_VÝPISY global ČÍSLO_ÚČTU db = davaj_připojení(JMÉNO_DATABÁZE) dotaz = 'SELECT "id", "id_bankovního_účtu", "datum", "částka", "variabilní_symbol", "specifický_symbol", "poznámka", "druh_platby", "protiúčet_číslo_účtu", "protiúčet_kód_banky" FROM "{}" WHERE "zaúčtováno" is null'.format( TABULKA_BANKOVNÍ_VÝPISY) pitanje = db.prepare(dotaz) sloupce = ["datum", "částka", "popis", "má_dáti", "dal", "druh_dokladu"] insert = INSERT(db=db, tabulka=TABULKA_ÚČETNÍ_DENÍK) insert.sloupce(*sloupce) šablona_sql_update = 'UPDATE "{}" SET "zaúčtováno" = (SELECT currval(pg_get_serial_sequence(\'účetní_deník\', \'id\'))) WHERE "id" = {{}}'.format( TABULKA_BANKOVNÍ_VÝPISY) for řádek in pitanje(): popis = řádek["poznámka"] or "výpis z účtu" druh_platby = řádek["druh_platby"] účet_md, účet_dal = běžné_účetní_postupy(**řádek) if účet_md and účet_dal: print('účtuji {} {} - {}'.format(řádek["id"], popis, druh_platby)) with db.xact(): insert.vyčisti_hodnoty() insert.hodnoty(řádek["datum"], kladný(řádek["částka"]), popis, účet_md, účet_dal, druh_platby) sql_update = šablona_sql_update.format(řádek["id"]) insert.vykonej() update = db.prepare(sql_update) update() import sys sys.exit()
def zapíšu_položky_faktur_do_deníku(): ''' provede import dle skriptu do určité tabulky ''' db = davaj_připojení(JMÉNO_DATABÁZE) dotaz = 'SELECT * FROM "rozpis_přijatých_faktur" ORDER BY "datum_vystavení", "číslo_přijaté_faktury", "položky_pořadí_položky"' print("spouštím SQL příkaz:\n\t{}".format(dotaz)) pitanje = db.prepare(dotaz) insert = INSERT(db=db, tabulka="účetní_deník") insert.sloupce("datum", "krok", "částka", "popis", "má_dáti", "dal", "číslo_dokladu", "pořadí_položky", "druh_dokladu") datum = None číslo_dokladu = None krok = 1 pořadí_položky = None druh_dokladu = 'PŘIJATÁ FAKTURA' hodina = 10 suma = 0 # účet_DPH_má_dáti = ROW(343, None) účet_DPH_má_dáti_dle_sazby = { 10: ROW(343, 10), 14: ROW(343, 14), 20: ROW(343, 20) } účet_má_dáti = None účet_dal_hotově = ROW(211, 1) účet_dal_faktura = ROW(321, 1) účet_úhrada_má_dáti = ROW(321, 1) účet_úhrada_dal = ROW(221, 1) for hodnoty in pitanje: #nejprve si nachystáme datum zápisu do deníku, aby položky deníku byly chronologicky správně d = hodnoty['datum_vystavení'] # při každé změně dokladu přidáme záznam o uhrazení předchozí faktury if číslo_dokladu and číslo_dokladu != hodnoty['číslo_přijaté_faktury']: if not hotově: krok = 1 # print(datum, krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti , účet_úhrada_dal , číslo_dokladu, druh_dokladu) datum_splatnosti = datetime.datetime(d.year, d.month, d.day + 14, 8, 0, 0) insert.hodnoty(datum_splatnosti, krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti, účet_úhrada_dal, číslo_dokladu, pořadí_položky, druh_dokladu) suma = 0 # máme nový den, nastavíme hodiny zpět na výchozí hodnotu if datum and datum.day != d.day: hodina = 10 else: # den se nemění, ale máme novou fakturu, posuneme o hodinu ať to není ve stejnou dobu if číslo_dokladu and číslo_dokladu != hodnoty[ 'číslo_přijaté_faktury']: hodina = hodina + 1 minuta = 0 sekunda = 0 datum = datetime.datetime(d.year, d.month, d.day, hodina, minuta, sekunda) číslo_dokladu = hodnoty['číslo_přijaté_faktury'] pořadí_položky = hodnoty['položky_pořadí_položky'] krok = 1 if hodnoty['forma_úhrady'] == 'formaUhr.prevodem': hotově = False else: hotově = True # včíl zaučtujeme cenu cena = hodnoty['položky_cena_bez_dph'] dph = hodnoty['položky_DPH'] sazba_dph = hodnoty['položky_sazba_dph'] suma = suma + cena + dph # nejdříve nákup if hotově: účet_dal = účet_dal_hotově else: účet_dal = účet_dal_faktura # print(datum, krok, cena, 'položka přijaté faktury', účet_má_dáti, účet_dal, číslo_dokladu, druh_dokladu) insert.hodnoty(datum, krok, cena, 'položka přijaté faktury', účet_má_dáti, účet_dal, číslo_dokladu, pořadí_položky, druh_dokladu) # posuneme krok krok = krok + 1 # a včíl dph if sazba_dph: účet_DPH_má_dáti = účet_DPH_má_dáti_dle_sazby[int(sazba_dph)] # print(datum, krok, dph, 'DPH položky přijaté faktury', účet_DPH_má_dáti, účet_dal, číslo_dokladu, druh_dokladu) insert.hodnoty(datum, krok, dph, 'DPH položky přijaté faktury', účet_DPH_má_dáti, účet_dal, číslo_dokladu, pořadí_položky, druh_dokladu) # posuneme krok - včíl se ale už nevyužije # krok = krok + 1 # toto je uhrazení poslední faktury, které se nemohlo zapsat, bo cyklus už skončil if not hotově: krok = 1 # print(datum, krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti , účet_úhrada_dal , číslo_dokladu, druh_dokladu) insert.hodnoty(datum, krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti, účet_úhrada_dal, číslo_dokladu, pořadí_položky, druh_dokladu) # print(insert_pitanje) # print("spouštím SQL příkaz pro vložení dat") # print(insert) insert.vykonej() db.close()
def zapíšu_položky_faktur_do_deníku(): ''' provede import dle skriptu do určité tabulky ''' db = davaj_připojení(JMÉNO_DATABÁZE) dotaz = 'SELECT * FROM "rozpis_přijatých_faktur" ORDER BY "datum_vystavení", "číslo_přijaté_faktury", "položky_pořadí_položky"' print("spouštím SQL příkaz:\n\t{}".format(dotaz)) pitanje = db.prepare(dotaz) insert = INSERT(db = db, tabulka = "účetní_deník") insert.sloupce("datum", "krok", "částka", "popis", "má_dáti", "dal", "číslo_dokladu", "pořadí_položky", "druh_dokladu") datum = None číslo_dokladu = None krok = 1 pořadí_položky = None druh_dokladu = 'PŘIJATÁ FAKTURA' hodina = 10 suma = 0 # účet_DPH_má_dáti = ROW(343, None) účet_DPH_má_dáti_dle_sazby = {10: ROW(343, 10), 14: ROW(343, 14), 20: ROW(343, 20)} účet_má_dáti = None účet_dal_hotově = ROW(211,1) účet_dal_faktura = ROW(321,1) účet_úhrada_má_dáti = ROW(321,1) účet_úhrada_dal = ROW(221,1) for hodnoty in pitanje: #nejprve si nachystáme datum zápisu do deníku, aby položky deníku byly chronologicky správně d = hodnoty['datum_vystavení'] # při každé změně dokladu přidáme záznam o uhrazení předchozí faktury if číslo_dokladu and číslo_dokladu != hodnoty['číslo_přijaté_faktury'] : if not hotově: krok = 1 # print(datum, krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti , účet_úhrada_dal , číslo_dokladu, druh_dokladu) datum_splatnosti = datetime.datetime(d.year, d.month, d.day + 14, 8, 0, 0) insert.hodnoty(datum_splatnosti , krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti , účet_úhrada_dal , číslo_dokladu, pořadí_položky, druh_dokladu) suma = 0 # máme nový den, nastavíme hodiny zpět na výchozí hodnotu if datum and datum.day != d.day: hodina = 10 else: # den se nemění, ale máme novou fakturu, posuneme o hodinu ať to není ve stejnou dobu if číslo_dokladu and číslo_dokladu != hodnoty['číslo_přijaté_faktury'] : hodina = hodina + 1 minuta = 0 sekunda = 0 datum = datetime.datetime(d.year, d.month, d.day, hodina, minuta, sekunda) číslo_dokladu = hodnoty['číslo_přijaté_faktury'] pořadí_položky = hodnoty['položky_pořadí_položky'] krok = 1 if hodnoty['forma_úhrady'] == 'formaUhr.prevodem': hotově = False else: hotově = True # včíl zaučtujeme cenu cena = hodnoty['položky_cena_bez_dph'] dph = hodnoty['položky_DPH'] sazba_dph = hodnoty['položky_sazba_dph'] suma = suma + cena + dph # nejdříve nákup if hotově: účet_dal = účet_dal_hotově else: účet_dal = účet_dal_faktura # print(datum, krok, cena, 'položka přijaté faktury', účet_má_dáti, účet_dal, číslo_dokladu, druh_dokladu) insert.hodnoty(datum, krok, cena, 'položka přijaté faktury', účet_má_dáti, účet_dal, číslo_dokladu, pořadí_položky, druh_dokladu) # posuneme krok krok = krok + 1 # a včíl dph if sazba_dph: účet_DPH_má_dáti = účet_DPH_má_dáti_dle_sazby[int(sazba_dph)] # print(datum, krok, dph, 'DPH položky přijaté faktury', účet_DPH_má_dáti, účet_dal, číslo_dokladu, druh_dokladu) insert.hodnoty(datum, krok, dph, 'DPH položky přijaté faktury', účet_DPH_má_dáti, účet_dal, číslo_dokladu, pořadí_položky, druh_dokladu) # posuneme krok - včíl se ale už nevyužije # krok = krok + 1 # toto je uhrazení poslední faktury, které se nemohlo zapsat, bo cyklus už skončil if not hotově: krok = 1 # print(datum, krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti , účet_úhrada_dal , číslo_dokladu, druh_dokladu) insert.hodnoty(datum, krok, suma, 'uhrazení faktury', účet_úhrada_má_dáti , účet_úhrada_dal , číslo_dokladu, pořadí_položky, druh_dokladu) # print(insert_pitanje) # print("spouštím SQL příkaz pro vložení dat") # print(insert) insert.vykonej() db.close()