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)
예제 #3
0
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()
예제 #4
0
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()