
| Current Path : /home/cgabriel/20_dev/12_procpy/park/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : //home/cgabriel/20_dev/12_procpy/park/abrechnung1.py |
import os,sys,re,glob,time,datetime
from konto.base.konto import Konto
class Abrechnung (object):
#*****************************************************************************************
def __init__ (self):
self.mname = {}
self.mname["01"] = "Januar"
self.mname["02"] = "Februar"
self.mname["03"] = "März"
self.mname["04"] = "April"
self.mname["05"] = "Mai"
self.mname["06"] = "Juni"
self.mname["07"] = "Juli"
self.mname["08"] = "August"
self.mname["09"] = "September"
self.mname["10"] = "Oktober"
self.mname["11"] = "November"
self.mname["12"] = "Dezember"
#***************************************************************************************
def abrechnung (self,*pars):
umsst = 19
Konto().kto()
ktotext = open(glob.glob("*.kto.html")[0]).read()
m = re.search(r"^(\<PRE\>|)(.*?)\-([^\-]+?)[\.\: ]",ktotext)
print("11111",m)
if m:
ukto = m.group(2) + "-" + m.group(3)
mandant = m.group(3)
Konto().kto()
existing_ticketreports = []
for zeile in ktotext.split("\n"):
if "ticketreport" in zeile:
m = re.search("ticketreport.*?\_(\d\d\d\d\d\d\d\d)\_(\d\d\d\d\d\d)\_(\d+)(\_[abcdef0123456789]+|).txt",zeile)
if m:
existing_ticketreports.append(int(m.group(1)+m.group(3)))
zeilen = []
for zeile in os.popen("grep TOTAL ticketreport*.txt"):
zeilen.append(zeile)
for zeile in os.popen("grep TOTAL */ticketreport*.txt"):
zeilen.append(zeile)
for zeile in zeilen:
print(zeile)
m = re.search("(ticketreport.*)\_(\d\d\d\d\d\d\d\d)\_(\d\d\d\d\d\d)\_(\d+)(\_[abcdef0123456789]+|).txt",zeile)
nr = m.group(2)+m.group(4)
if int(nr) in existing_ticketreports:
continue
else:
existing_ticketreports.append(int(nr))
datum = m.group(2)
filename = m.group(1) + "_" + m.group(2) + "_" + m.group(3) + "_" + m.group(4) + m.group(5) + ".txt"
m = re.search("TOTAL.*?(\d+),(\d+)",zeile)
if m:
ktotext = ktotext + datum + " -" + m.group(1) + "." + m.group(2) + " " +ukto + "-TIC-BRT 10-B12-1340-xxx-ZAHL 0.00 Ticketreport " + filename + "\n"
open(glob.glob("*.kto.html")[0],"w").write(ktotext)
Konto().kto()
# return()
#----------------------------------------------
ktotext = os.popen("grep -v Contract *.kto.html").read()
interval_short = pars[0] # <-- hier geht der Abrechnungsmonat ein
Konto().kto("^"+ukto + "." + pars[0])
ktotext = os.popen("grep -v Contract *.kto.html").read()
print(ktotext)
ktotext0 = os.popen("grep -v Cxxxxontract *.kto.html").read()
ktotext0 = re.sub(r"\<\/?PRE\>","",ktotext0,99)
maxlen = 80
ktotext9 = re.sub(" " + ukto + "-"," ",ktotext0) # fuer Report-Eintrag
ktotext9 = re.sub(r" (\-|)(\d+)\.(\d\d)( |\n)"," -\\1\\2.\\3\\4",ktotext9,99999999)
ktotext9 = re.sub(r" --(\d+)\.(\d\d)( |\n)"," \\1.\\2\\3",ktotext9,99999999)
for zeile in ktotext9.split("\n"):
if "STR-BRT" in zeile or "TIC-BRT" in zeile:
maxlen = max(maxlen,len(zeile))
ktotext1 = ""
for zeile in ktotext9.split("\n"):
while len(zeile) > maxlen:
ktotext1 = ktotext1 + zeile[0:maxlen-2] + "\n"
zeile = " " + zeile[maxlen-2:]
ktotext1 = ktotext1 + zeile + "\n"
m = re.search(r"\n(\d\d\d\d\d\d)(\d\d) +",ktotext)
if m:
monat = m.group(1)
else:
monat = "20" + interval_short[0:2] + "0" + interval_short[2]
monat = re.sub(r"0A","10",monat)
monat = re.sub(r"0B","11",monat)
monat = re.sub(r"0C","12",monat)
jahr = monat[0:4]
if monat[4:] in ("01","03","05","07","08","10","12"):
monat = monat + "31"
elif monat[4:] in ("04","06","09","11"):
monat = monat + "30"
elif int(monat[4:]) % 4 == 0 and not int(monat[4:]) % 100 == 0:
monat = monat + "29"
else:
monat = monat + "28"
yy = monat[0:4]
mm = monat[4:6]
# print("------",yy,mm,monat)
# if len(glob.glob("*" + yy + "_" + mm + ".md")) > 0: # wenn die Abrechnung schon existiert
# return(0)
abrechnungen = glob.glob("*_????_??.md")
abrechnungen.sort()
abrechnung_neu = open(abrechnungen[-1]).read() # Neue Abrechnung aus der letzten Abrechnung generieren
vorjahr = "%02u" % ( int(interval_short[0:2]) - 1)
m = re.search(r"^(.*?)(\<PRE.*?\> *\n)(.*?)(\<\/PRE\>)(.*)$",abrechnung_neu,flags=re.DOTALL)
abrechnung_neu_1 = m.group(1) + m.group(2)
abrechnung_neu_2 = m.group(4) + m.group(5)
abrechnung_neu_m = m.group(3)
abrechnung_neu_m = re.sub(r"[ 0-9\-]{9}\d\.\d\d","---BETRAG---",abrechnung_neu_m,99)
abrechnung_neu_m = re.sub(r"[ 0-9\-]{9}\d\.\d\d","---BETRAG---",abrechnung_neu_m,99)
m = re.search(" (\d?\d\.?\d?)\%",abrechnung_neu_m)
if m:
umsst = float(m.group(1))
# print("------------------------------------------ hier")
m = re.search(" (\d?\d\.\d\d)\%",abrechnung_neu_m)
if m:
anteil = 0.01 * float(m.group(1))
anteilp = m.group(1) + "%"
for m in ( re.search(r"\n(TIC)-BRT +(\-?\d+\.\d\d)",ktotext),
re.search(r"\n(STR)-BRT +(\-?\d+\.\d\d)",ktotext) ):
if m:
art = {"STR":"Penalties","TIC":"Parking tickets"}[m.group(1)]
ust = {"STR":"","TIC":"++"}[m.group(1)]
ktob = {"STR":"12-D3a-4600","TIC":"12-D1a-4610"}[m.group(1)]
ktotext = ktotext + ( monat + " " + ("%3.2f" % ( abs(float(m.group(2))) * anteil ) ) + " " +
ukto + "-" + m.group(1) + "-FEE " + ktob + "-" + mandant + " 0.00 " +
ust + "Contract Fee " + art + " " + ("%3.2f" % (100*anteil) ) + " %" + "\n" )
open(glob.glob("*.kto.html")[0],"w").write(ktotext)
Konto().kto()
# print(abrechnung_neu_m)
# exit()
# if (abs(float(Konto().read_saldo(ukto+"-TIC2:" + interval_short))) + abs(float(Konto().read_saldo(ukto+"-STR2:" + interval_short))) ) > 0.0001:
# nr = "2"
# anteil = 0.5
# anteilp = "50%"
#
# if (abs(float(Konto().read_saldo(ukto+"-TIC3:" + interval_short))) + abs(float(Konto().read_saldo(ukto+"-STR3:" + interval_short))) ) > 0.0001:
# nr = "3"
# anteil = 0.333
# anteilp = "66l.67%"
nr = ""
text = " Aktuell Jahressummen " + "\n\n"
print(interval_short,vorjahr)
betragm = - (Konto().read_saldo(ukto+"-TIC"+nr+"-BRT."+interval_short))
betragy = - (Konto().read_saldo(ukto+"-TIC"+nr+"-BRT:"+interval_short) - Konto().read_saldo(ukto+"-TIC"+nr+"-BRT:"+vorjahr))
text = text + "Einnahmen Parktickets: " + ("%13.2f" % betragm) + " " + ("%13.2f" % betragy) + "\n"
betragn = - (Konto().read_saldo(ukto+"-TIC"+nr+"-FEE."+interval_short))
betragz = - (Konto().read_saldo(ukto+"-TIC"+nr+"-FEE:"+interval_short) - Konto().read_saldo(ukto+"-TIC"+nr+"-FEE:"+vorjahr))
text = text + "minus Betriebsgebuehr " + anteilp + " " + ("%13.2f" % betragn) + " " + ("%13.2f" % betragz) + "\n"
text = text + " -------- -------\n"
betragu = betragm + betragn
betragv = betragy + betragz
text = text + "Parktickets netto " + ("%13.2f" % betragu) + " " + ("%13.2f" % betragv) + "\n"
text = text + " -------- -------\n"
betragi = - betragu * float(umsst) / (100 + float(umsst))
betragj = - betragv * float(umsst) / (100 + float(umsst))
umsst1 = re.sub(r"\.0$","",("%4.1f" % float(umsst)))
text = text + "abzufuehrende Umsatzsteuer " + umsst1 + "%:" + " "*(4-len(umsst1)) + ("%13.2f" % betragi) + " " + ("%13.2f" % betragj) + "\n"
text = text + "\n\n"
betragm = - (Konto().read_saldo(ukto+"-STR"+nr+"-BRT."+interval_short))
betragy = - (Konto().read_saldo(ukto+"-STR"+nr+"-BRT:"+interval_short) - Konto().read_saldo(ukto+"-STR"+nr+"-BRT:"+vorjahr))
text = text + "Einnahmen Vertragsstrafen: " + ("%13.2f" % betragm) + " " + ("%13.2f" % betragy) + "\n"
betragn = - (Konto().read_saldo(ukto+"-STR"+nr+"-FEE."+interval_short))
betragz = - (Konto().read_saldo(ukto+"-STR"+nr+"-FEE:"+interval_short) - Konto().read_saldo(ukto+"-STR"+nr+"-FEE:"+vorjahr))
text = text + "minus Betriebsgebuehr " + anteilp + " " + ("%13.2f" % betragn) + " " + ("%13.2f" % betragz) + "\n"
text = text + " -------- -------\n"
betragx = betragm + betragn
betragy = betragy + betragz
text = text + "Vertragsstrafen netto " + ("%13.2f" % betragx) + " " + ("%13.2f" % betragy) + "\n"
text = text + "(umsatzsteuerbefreit)\n"
text = text + "\n"
betragx = betragu + betragx
betragy = betragv + betragy
text = text + " -------- -------\n"
text = text + "GESAMTBETRAG " + ("%13.2f" % betragx) + " " + ("%13.2f" % betragy) + "\n\n"
text = text + "\n"
betragx = - (Konto().read_saldo(ukto+"-ZAHL."+interval_short))
betragy = - (Konto().read_saldo(ukto+"-ZAHL:"+interval_short) - Konto().read_saldo(ukto+"-ZAHL:"+vorjahr))
text = text + "ausgezahlt: " + ("%13.2f" % betragx) + " " + ("%13.2f" % betragy) + "\n"
text = text + " -------- -------\n"
betragx = - (Konto().read_saldo(ukto+"."+interval_short))
betragy = - (Konto().read_saldo(ukto+":"+interval_short) - Konto().read_saldo(ukto+":"+vorjahr))
text = text + "Unterzahlung: " + ("%13.2f" % betragx) + " " + ("%13.2f" % betragy) + "\n\n\n"
text = text + "Die abzufuehrende Umsatzsteuer " + umsst1 + "% betraegt bei Umsatzsteuerpflicht im laufenden Monat:" + ("%13.2f" % abs(betragi)) + "\n"
# Versuch, in die Originalvorlage zu uebertragen:
text1 = text
while (0 == 0):
m = re.search(r"^(.*?)([ 0-9\-]{9}\d\.\d\d)(.*)$",text1,re.DOTALL)
if not m:
if "---BETRAG---" in abrechnung_neu_m: # nicht alle Felder konnten gefuellt werden, das passt so nicht
print(abrechnung_neu_m)
break
else:
text = abrechnung_neu_m
break
else:
text1 = m.group(3)
if not "---BETRAG---" in abrechnung_neu_m: # nicht genuegend zu fuellende Felder, passt also auch nicht
break
else:
abrechnung_neu_m = re.sub(r"\-\-\-BETRAG\-\-\-",m.group(2),abrechnung_neu_m,1)
# print(abrechnung_neu_m)
# print(text)
abrechnung_neu = re.sub(r"^(.*?)(\<PR)(E.*?\> *\n)(.*?)(\<\/PRE\>)(.*)$","\\1\\2xxxx\\3---ABR---\\5\\6",abrechnung_neu,flags=re.DOTALL)
abrechnung_neu = re.sub(r"^(.*?)(\<PR)(E.*?\> *\n)(.*)(\<\/PRE\>)(.*)$","\\1\\2xxxx\\3---KTO---\\5\\6",abrechnung_neu,flags=re.DOTALL)
abrechnung_neu = re.sub(r"PRxxxxE","PRE",abrechnung_neu,9999)
# abrechnung_neu = re.sub(r"^(.*?)(\<PRE.*?\>)(.*?)(\<\/PRE\>)(.*)$","\\1\\2\\3---KTO---\\4\\5",abrechnung_neu,flags=re.DOTALL)
abrechnung_neu = re.sub(r"(Januar|Jänner|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember) (\d\d\d\d)","---MNAME--- ---JAHR---",abrechnung_neu,99)
abrechnung_neu = re.sub(r"(31.01|28.02|29.02.|31.03|30.04|31.05|30.06|31.07|31.08|30.09|31.10|30.11|31.12)\.(\d\d\d\d)","---ENDTAG---.---JAHR---",abrechnung_neu,99)
abrechnung_neu = re.sub(r"(0\d|10|11|12)\.(\d\d\d\d)","---MONAT---.---JAHR---",abrechnung_neu,99)
abrechnung_neu = re.sub(r"(\d\d\d\d)\/(0\d|10|11|12)","---JAHR---/---MONAT---",abrechnung_neu,99)
abrechnung_neu = re.sub(r"---MONAT---", mm, abrechnung_neu,99)
abrechnung_neu = re.sub(r"---JAHR---", yy, abrechnung_neu,99)
abrechnung_neu = re.sub(r"---MNAME---", self.mname[mm],abrechnung_neu,99)
abrechnung_neu = re.sub(r"---ENDTAG---",monat[6:8]+"."+monat[4:6],abrechnung_neu,99)
abrechnung_neu = re.sub("---ABR---",text,abrechnung_neu)
# print(abrechnung_neu)
ticketreports = glob.glob("ticketreport_*_" + yy + mm + "*_*.txt") + glob.glob("*/ticketreport_*_" + yy + mm + "*_*.txt") # Ticketreports anhaegen an den Kontoausdruck
ticketreports.sort()
ticketreports.append("")
ticketreports_double_sided = [] # Zwei Ticketreports auf einer Seite
text3 = ""
text33 = []
text34 = []
zaehler = 0
while (0 == 0):
if zaehler == len(ticketreports):
break
ticketreport = ticketreports[zaehler]
automaten_nr = ""
report_text = "\n"
m = re.search(r"\S+?\_(\d+)_",ticketreport)
if m:
automaten_nr = m.group(1)
if not ticketreport == "":
report_text = open(ticketreport).read()
report_text = re.sub(r"(\n {0,10}\S[^\n]+\n)(www.12park.de)","\\1\n\\2",report_text,flags=re.DOTALL).split("\n")
if len(text33) == 0:
text33 = report_text[:]
anr = automaten_nr
zaehler = zaehler + 1
else:
text34 = report_text[:]
if automaten_nr == anr:
zaehler = zaehler + 1
else:
text34 = []
zaehler1 = 0
while (0 == 0):
if zaehler1 >= len(text33):
zeile = " " * 45
if zaehler1 >= len(text34):
break
else:
zeile = zeile + ": " + text34[zaehler1] + "\n"
else:
zeile = (text33[zaehler1] + " " * 45)[0:45]
if zaehler1 >= len(text34):
zeile = zeile + ":\n"
else:
zeile = zeile + ": " + text34[zaehler1] + "\n"
text3 = text3 + " " + zeile
zaehler1 = zaehler1 + 1
text3 = re.sub(r"\n +\: +\n *$","\n\n",text3,99)
ticketreports_double_sided.append(text3)
text33 = []
text34 = []
text3 = ""
for ticketreport_text in ticketreports_double_sided:
ktotext1 = ktotext1 + "</PRE>\n\n<p class=\"break\"/>\n\n<PRE class=\"abr\">\n\n" + ticketreport_text
abrechnung_neu = re.sub("---KTO---",ktotext1,abrechnung_neu)
# print(abrechnung_neu)
filename = abrechnungen[-1]
filename = re.sub(r"\d\d\d\d_","---JAHR---_",filename,99)
filename = re.sub(r"_\d\d\.","_---MONAT---.",filename,99)
filename = re.sub(r"^(\d\d)(\d\d)(\d\d\.)","---JJ------MONAT---\\3",filename,99)
filename = re.sub(r"---JJ---",yy[2:4],filename,99)
filename = re.sub(r"---JAHR---",yy,filename,99)
filename = re.sub(r"---MONAT---",mm,filename,99)
print(filename)
open(filename,"w").write(abrechnung_neu)
Konto().kto("^"+ukto)
# m = re.search(r"^(.*?)\<PRE>.*?
#*****************************************************************************************
if __name__ == "__main__":
Abrechnung.__dict__[sys.argv[1]](Abrechnung(),*sys.argv[2:])
# 7769