test / sabiduria_tool_api /services /service_sabiduria_tool.py
Serdar's picture
wip
1fa0332
from shutil import copyfileobj
from pandas import read_excel, DataFrame
from os import listdir, remove, mkdir, system
from os.path import isdir
from loguru import logger
class FileProcess:
def __init__(self, files, root_dir) -> None:
self.files = files
self.data_store_path = f"{root_dir}/sabiduria_tool_api/data/"
self.root_dir = root_dir
self.final_data = {
"Ad": [],
"Soyad": [],
"TC": [],
"ToplamMatrah": [],
"Brut": [],
"EnAzMatrah": [],
"OdenecekTutar": [],
"DamgaVergisiKesintiToplami": [],
"GelirVergisiKesintiToplami": [],
"IstisnaEdilenGelirVergisiToplami": [],
"GorevSayisi": [],
"EnAzMatrahDosyasi": [],
"GorevYerleri": []
}
async def save_files(self) -> None:
if isdir(self.data_store_path):
old_files = self.get_files()
for o_file in old_files:
remove(f"{self.data_store_path}{o_file}")
else:
mkdir(self.data_store_path)
for file in self.files:
with open(f"{self.data_store_path}{file.filename}", "wb") as destination:
copyfileobj(file.file, destination)
def get_files(self) -> list:
all_files = listdir(f"{self.data_store_path}")
return all_files
def preprocess_files(self):
all_files = self.get_files()
for file in all_files:
values = []
selected_data = read_excel(f"{self.data_store_path}{file}", skiprows=9)
del selected_data[selected_data.columns[0]]
selected_data.rename(columns={'Unnamed: 17':'Kesintiler Toplamı'}, inplace=True)
selected_data.rename(columns={'Unnamed: 18':'Ödenecek Tutar'}, inplace=True)
for i, sira_no in enumerate(selected_data["Sıra No"]):
if type(sira_no) != int:
break
values.append(selected_data.iloc[[i]].values[0])
temp_df = DataFrame(values, columns=selected_data.columns.values)
logger.info(f"FILE SAVED TO: {self.data_store_path}{file}")
temp_df.to_excel(f"{self.data_store_path}{file}", sheet_name="page1")
def init_data(self):
all_file = self.get_files()
for file in all_file:
file_data = read_excel(f"{self.data_store_path}{file}")
file_name = file.split(".")[0]
for i, tc in enumerate(file_data['Tc. No']):
# init data
if tc not in self.final_data["TC"]:
self.final_data["TC"].append(tc)
self.final_data["Ad"].append(file_data["Adı"][i])
self.final_data["Soyad"].append(file_data["Soyadı"][i])
self.final_data["EnAzMatrah"].append(file_data["Aylık Vergi Matrahı (Kümülatif)**"][i])
self.final_data["Brut"].append(file_data["Brüt Ücret ****"][i])
self.final_data["ToplamMatrah"].append(file_data["Aylık Vergi Matrahı (Kümülatif)**"][i] + file_data["Brüt Ücret ****"][i])
self.final_data["OdenecekTutar"].append(file_data["Ödenecek Tutar"][i])
self.final_data["DamgaVergisiKesintiToplami"].append(file_data["Damga Vergisi Kesintisi"][i])
self.final_data["GelirVergisiKesintiToplami"].append(file_data["Gelir Vergisi Kesintisi"][i])
self.final_data["IstisnaEdilenGelirVergisiToplami"].append(file_data["İstisna Edilen Gelir Vergisi"][i])
self.final_data["GorevSayisi"].append(1)
self.final_data["GorevYerleri"].append(file_name + ", ")
self.final_data["EnAzMatrahDosyasi"].append(file_name)
# find lower basis
else:
id = self.final_data["TC"].index(tc)
if self.final_data["EnAzMatrah"][id] > file_data["Aylık Vergi Matrahı (Kümülatif)**"][i]:
self.final_data["EnAzMatrah"][id] = file_data["Aylık Vergi Matrahı (Kümülatif)**"][i]
self.final_data["EnAzMatrahDosyasi"][id] = file_name
self.final_data["Brut"][id] = file_data["Brüt Ücret ****"][i]
self.final_data["ToplamMatrah"][id] = file_data["Aylık Vergi Matrahı (Kümülatif)**"][i] + file_data["Brüt Ücret ****"][i]
self.final_data["OdenecekTutar"][id] = file_data["Ödenecek Tutar"][i]
self.final_data["DamgaVergisiKesintiToplami"][id] = file_data["Damga Vergisi Kesintisi"][i]
self.final_data["GelirVergisiKesintiToplami"][id] = file_data["Gelir Vergisi Kesintisi"][i]
self.final_data["IstisnaEdilenGelirVergisiToplami"][id] = file_data["İstisna Edilen Gelir Vergisi"][i]
self.final_data["GorevYerleri"][id] = file_name + ", "
async def calculate(self):
await self.save_files()
self.preprocess_files()
self.init_data()
all_files = self.get_files()
for file in all_files:
file_data = read_excel(f"{self.data_store_path}{file}")
file_name = file.split(".")[0]
for i, tc in enumerate(file_data['Tc. No']):
id = self.final_data["TC"].index(tc)
if file_name != self.final_data["EnAzMatrahDosyasi"][id]:
self.final_data["Brut"][id] += file_data["Brüt Ücret ****"][i]
self.final_data["ToplamMatrah"][id] += file_data["Brüt Ücret ****"][i]
self.final_data["OdenecekTutar"][id] += file_data["Ödenecek Tutar"][i]
self.final_data["DamgaVergisiKesintiToplami"][id] += file_data["Damga Vergisi Kesintisi"][i]
self.final_data["GelirVergisiKesintiToplami"][id] += file_data["Gelir Vergisi Kesintisi"][i]
self.final_data["IstisnaEdilenGelirVergisiToplami"][id] += file_data["İstisna Edilen Gelir Vergisi"][i]
self.final_data["GorevSayisi"][id] += 1
self.final_data["GorevYerleri"][id] += file_name + ", "
del all_files
clean_data = DataFrame(self.final_data)
del self.final_data
clean_data.to_excel(f"{self.root_dir}/output.xlsx", sheet_name="page1")