123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- import pandas as pd
- from pathlib import Path
- from flask import Flask
- currentDirectory = Path('P:\\SKR51_Dennis_Sebastian')
- # filter = {
- # 'Marke': "00-09",
- # 'Standort': "00-09",
- # 'Kostenstelle': "00-05;10-20;50-99",
- # 'Absatzkanal': "00;10-16;20-26;30-36;40-46;50-56;60-66;90-96;99",
- # 'Kostentraeger': "00-56;60-68;70-76;80-85"
- # }
- # matrix = [
- # {
- # 'Kontonummer' : '0200',
- # 'Kontobezeichnung' : 'Technische Anlagen und Maschinen',
- # 'Kostenstelle' : '40-49;50-70;74;75-89',
- # 'Absatzkanal' : '',
- # 'Kostentraeger' : '70-79;80-99'
- # }
- # ]
- # buchungssalden = [
- # {
- # 'Kontonummer': "0200",
- # 'Marke': '01',
- # 'Standort': '01',
- # 'Kostenstelle' : '50',
- # 'Absatzkanal' : '00',
- # 'Kostentraeger' : '70',
- # 'saldo': 1005.68
- # },
- # {
- # 'Kontonummer': "0200",
- # 'Marke': '01',
- # 'Standort': '01',
- # 'Kostenstelle' : '20',
- # 'Absatzkanal' : '00',
- # 'Kostentraeger' : '70',
- # 'saldo': 1005.68
- # },
- # {
- # 'Kontonummer': "0201",
- # 'Marke': '01',
- # 'Standort': '01',
- # 'Kostenstelle' : '20',
- # 'Absatzkanal' : '00',
- # 'Kostentraeger' : '70',
- # 'saldo': 1005.68
- # }
- # ]
- # kst_liste = ["00", "10", "11", "12"... ]
- app = Flask(__name__)
- @app.route('/cast-translation', methods=['POST', 'GET'])
- def cast_translation():
- df = pd.read_csv(str(currentDirectory) + '/' + "Uebersetzung.csv", sep='\t', dtype={0: str, 1: str, 2: str, 3: str, 4: str, 5: str}, decimal=',')
- return df.to_json(indent=2, orient='records')
- @app.route('/cast-matrix', methods=['POST', 'GET'])
- def cast_matrix():
- df = pd.read_csv(str(currentDirectory) + '/' + "Plausibilitaetsmatrix.csv", sep='\t', dtype={0: str})
- return df.to_json(indent=2, orient='records')
- @app.route('/cast-filter', methods=['POST', 'GET'])
- def cast_filter():
- df = pd.read_csv(str(currentDirectory) + '/' + "SKR51_Kostenrechnungsmerkmale.csv", sep='\t', quotechar='"')
- return df.to_json(indent=2, orient='records')
- def crea_list(liste):
- if liste == "":
- return [str(i).zfill(2) for i in range(0, 100)]
- result_list = []
- for x in liste.split(';'):
- if "-" in x:
- result_list += [str(i).zfill(2) for i in range(int(x.split("-")[0]), int(x.split("-")[1]) + 1)]
- else:
- result_list.append(x)
- return result_list
- def check_konto(konto):
- for f in filter_csv.values:
- if konto[f[0]] not in f[2]:
- return False
- try:
- matrix_konto = matrix_csv[matrix_csv['Kontonummer'] == konto['Kontonummer']].to_dict('records')[0]
- for (k, current) in matrix_konto.items():
- if k != "Bezeichnung" and not pd.isna(current) and konto[k] not in crea_list(current):
- return False
- except IndexError:
- pass
- return True
- def format_konto(konto):
- return f"{konto['Kontonummer']}-{konto['Marke']}-{konto['Standort']}-{konto['Kostenstelle']}-{konto['Absatzkanal']}-{konto['Kostentraeger']}"
- def check_buchungssalden(salden):
- return [format_konto(x) + ": " + str(check_konto(x)) for x in salden]
- def format_konto_neu(konto):
- return f"{konto['Kontonummer_neu']}-{konto['Marke_neu']}-{konto['Standort_neu']}-{konto['Kostenstelle_neu']}-{konto['Absatzkanal_neu']}-{konto['Kostentraeger_neu']}"
- def check_Kontonummer(konto):
- try:
- matrix_konto = matrix_csv[matrix_csv['Kontonummer'] == konto['Kontonummer']].to_dict('records')[0]
- if not pd.isna(matrix_konto['Kontonummer']) and konto['Kontonummer'] not in crea_list(matrix_konto['Kontonummer']):
- return False
- except IndexError:
- pass
- return True
- def check_marke(konto):
- if konto[filter_csv.values[0][0]] not in filter_csv.values[0][2]:
- return False
- return True
- def check_Standort(konto):
- if konto[filter_csv.values[1][0]] not in filter_csv.values[1][2]:
- return False
- return True
- def check_Kostenstelle(konto):
- if konto[filter_csv.values[2][0]] not in filter_csv.values[2][2]:
- return False
- try:
- matrix_konto = matrix_csv[matrix_csv['Kontonummer'] == konto['Kontonummer']].to_dict('records')[0]
- if not pd.isna(matrix_konto['Kostenstelle']) and konto['Kostenstelle'] not in crea_list(matrix_konto['Kostenstelle']):
- return False
- except IndexError:
- pass
- return True
- def check_Absatzkanal(konto):
- if konto[filter_csv.values[3][0]] not in filter_csv.values[3][2]:
- return False
- try:
- matrix_konto = matrix_csv[matrix_csv['Kontonummer'] == konto['Kontonummer']].to_dict('records')[0]
- if not pd.isna(matrix_konto['Absatzkanal']) and konto['Absatzkanal'] not in crea_list(matrix_konto['Absatzkanal']):
- return False
- except IndexError:
- pass
- return True
- def check_Kostentraeger(konto):
- if konto[filter_csv.values[4][0]] not in filter_csv.values[4][2]:
- return False
- try:
- matrix_konto = matrix_csv[matrix_csv['Kontonummer'] == konto['Kontonummer']].to_dict('records')[0]
- if not pd.isna(matrix_konto['Kostentraeger']) and konto['Kostentraeger'] not in crea_list(matrix_konto['Kostentraeger']):
- return False
- except IndexError:
- pass
- return True
- def add_validation(salden):
- kontonummer_valid = []
- marke_valid = []
- standort_valid = []
- kostenstelle_valid = []
- absatzkanal_valid = []
- kostentraeger_valid = []
- konto_name = []
- konto_valid = []
- for x in salden:
- kontonummer_valid.append(check_Kontonummer(x))
- marke_valid.append(check_marke(x))
- standort_valid.append(check_Standort(x))
- kostenstelle_valid.append(check_Kostenstelle(x))
- absatzkanal_valid.append(check_Absatzkanal(x))
- kostentraeger_valid.append(check_Kostentraeger(x))
- konto_name.append(format_konto(x))
- konto_valid.append(str(check_konto(x)))
- df = pd.DataFrame(salden)
- df.insert(1, 'Kontonummer_valid', kontonummer_valid, True)
- df.insert(3, 'Marke_valid', marke_valid, True)
- df.insert(5, 'Standort_valid', standort_valid, True)
- df.insert(7, 'Kostenstelle_valid', kostenstelle_valid, True)
- df.insert(9, 'Absatzkanal_valid', absatzkanal_valid, True)
- df.insert(11, 'Kostentraeger_valid', kostentraeger_valid, True)
- df.insert(12, 'Konto', konto_name, True)
- df.insert(13, 'Konto_valid', konto_valid, True)
- return df
- def uebersetzung(salden):
- Kontonummer_neu = []
- Marke_neu = []
- Standort_neu = []
- Kostenstelle_neu = []
- Absatzkanal_neu = []
- Kostentraeger_neu = []
- Konto_neu = []
- valid_salden = add_validation(salden)
- for index, row in valid_salden.iterrows():
- if not row['Marke_valid']:
- for i, r in uebersetzung_csv.iterrows():
- if r['Kontonummer'] == row['Kontonummer'] and row['Marke'] in crea_list(r['Marke']):
- Marke_neu.append(r['Marke_neu'])
- if len(Marke_neu) == index:
- Marke_neu.append('')
- if not row['Standort_valid']:
- for i, r in uebersetzung_csv.iterrows():
- if r['Kontonummer'] == row['Kontonummer'] and row['Standort'] in crea_list(r['Standort']):
- Standort_neu.append(r['Standort_neu'])
- if len(Standort_neu) == index:
- Standort_neu.append('')
- if not row['Kostenstelle_valid']:
- for i, r in uebersetzung_csv.iterrows():
- if r['Kontonummer'] == row['Kontonummer'] and row['Kostenstelle'] in crea_list(r['Kostenstelle']):
- Kostenstelle_neu.append(r['Kostenstelle_neu'])
- if len(Kostenstelle_neu) == index:
- Kostenstelle_neu.append('')
- if not row['Absatzkanal_valid']:
- for i, r in uebersetzung_csv.iterrows():
- if r['Kontonummer'] == row['Kontonummer'] and row['Absatzkanal'] in crea_list(r['Absatzkanal']):
- Absatzkanal_neu.append(r['Absatzkanal_neu'])
- if len(Absatzkanal_neu) == index:
- Absatzkanal_neu.append('')
- if not row['Kostentraeger_valid']:
- for i, r in uebersetzung_csv.iterrows():
- if r['Kontonummer'] == row['Kontonummer'] and row['Kostentraeger'] in crea_list(r['Kostentraeger']):
- Kostentraeger_neu.append(r['Kostentraeger_neu'])
- if len(Kostentraeger_neu) == index:
- Kostentraeger_neu.append('')
- Kontonummer_neu.append(row['Kontonummer'])
- if not row['Konto_valid']:
- new = f"{Kontonummer_neu[index]}"
- if not row['Marke_valid']:
- new += f"-{Marke_neu[index]}"
- else:
- new += f"-{row['Marke']}"
- if not row['Standort_valid']:
- new += f"-{Standort_neu[index]}"
- else:
- new += f"-{row['Standort']}"
- if not row['Kostenstelle_valid']:
- new += f"-{Kostenstelle_neu[index]}"
- else:
- new += f"-{row['Kostenstelle']}"
- if not row['Absatzkanal_valid']:
- new += f"-{Absatzkanal_neu[index]}"
- else:
- new += f"-{row['Absatzkanal']}"
- if not row['Kostentraeger_valid']:
- new += f"-{Kostentraeger_neu[index]}"
- else:
- new += f"-{row['Kostentraeger']}"
- Konto_neu.append(new)
- # Konto_neu.append(f"{Kontonummer_neu[index]}-{Marke_neu[index]}-{Standort_neu[index]}-{Kostenstelle_neu[index]}-{Absatzkanal_neu[index]}-{Kostentraeger_neu[index]}")
- else:
- Konto_neu.append(row['Konto'])
- # if row['Kontonummer_valid'] == 'true' and row['Marke_valid'] == 'true' and row['Standort_valid'] == 'true' and row['Kostenstelle_valid'] == 'true' and row['Absatzkanal_valid'] == 'true' and row['Kostentraeger_valid'] == 'true' and row['Kostentraeger_valid'] == 'true':
- # row['Konto_valid'] = 'true'
- valid_salden.insert(2, 'Kontonummer_neu', Kontonummer_neu, True)
- valid_salden.insert(5, 'Marke_neu', Marke_neu, True)
- valid_salden.insert(8, 'Standort_neu', Standort_neu, True)
- valid_salden.insert(11, 'Kostenstelle_neu', Kostenstelle_neu, True)
- valid_salden.insert(14, 'Absatzkanal_neu', Absatzkanal_neu, True)
- valid_salden.insert(17, 'Kostentraeger_neu', Kostentraeger_neu, True)
- valid_salden.insert(20, 'Konto_neu', Konto_neu, True)
- return valid_salden
- def konto_alt_neu(salden):
- dat = uebersetzung(salden)
- konto_alt = dat['Konto']
- konto_neu = dat['Konto_neu']
- d = {'Konto': konto_alt, 'Konto_neu': konto_neu}
- df = pd.DataFrame(data=d)
- return df
- # filter_liste = [(k, crea_list(v)) for (k, v) in filter.items()]
- # print(filter_liste)
- filter_csv = pd.read_csv(str(currentDirectory) + '/' + "SKR51_Kostenrechnungsmerkmale.csv", sep='\t', quotechar='"')
- filter_csv['Filter_Liste'] = filter_csv['Filter'].apply(crea_list)
- print(filter_csv)
- # print(filter_csv.values[0][0])
- matrix_csv = pd.read_csv(str(currentDirectory) + '/' + "Plausibilitaetsmatrix.csv", sep='\t', dtype={0: str})
- # print(matrix_csv.head())
- export_csv = pd.read_csv(str(currentDirectory) + '/' + "SKR51_Export.csv", sep=';', dtype={0: str, 1: str, 2: str, 3: str, 4: str, 5: str}, decimal=',')
- print(export_csv.head())
- uebersetzung_csv = pd.read_csv(str(currentDirectory) + '/' + "Uebersetzung.csv", sep='\t', dtype={0: str, 1: str, 2: str, 3: str, 4: str, 5: str}, decimal=',')
- print(uebersetzung_csv.head())
- print(uebersetzung(export_csv.to_dict('records')[:5]))
- print(konto_alt_neu(export_csv.to_dict('records')[:5]))
- @app.route('/skr51_export', methods=['POST', 'GET'])
- def skr51_export():
- df = uebersetzung(export_csv.to_dict('records')[:5])
- return df.to_json(indent=2, orient='records')
- @app.route('/konto_update', methods=['POST', 'GET'])
- def Konto_Update():
- df = konto_alt_neu(export_csv.to_dict('records')[:5])
- return df.to_json(indent=2, orient='records')
- # print(dict_list)
- # print(check_konto(buchungssalden[0]))
- # print(check_buchungssalden(export_csv.to_dict('records')[:5]))
- # print(add_validation(export_csv.to_dict('records')[:5]))
|