94 lines
4.3 KiB
Python
94 lines
4.3 KiB
Python
from dataclasses import dataclass
|
|
import gspread
|
|
import csv
|
|
import locale
|
|
import datetime
|
|
import yaml
|
|
import os
|
|
from pathlib import Path
|
|
|
|
#TODO: Upload automatically!
|
|
|
|
@dataclass
|
|
class Export: # all necessary fields for ELSAP-importfiles
|
|
sum_col: str
|
|
desc_col: str
|
|
week: str
|
|
bestellnummer: str
|
|
bestellposition: str
|
|
leistungszeilennummer: str
|
|
kurztext: str
|
|
leistungszeilentext: str
|
|
username: str
|
|
name: str
|
|
kontierung: str
|
|
ansprechpartner_username: str
|
|
ansprechpartner_name: str
|
|
|
|
def export_timesheet(csvexport_filename, ex: Export):
|
|
with open(f"{csvexport_filename}.csv", 'w') as file:
|
|
writer = csv.writer(file, delimiter=';', lineterminator="\n")
|
|
|
|
writer.writerow(["Bestellnummer","Bestellpositionsnr","Leistungszeilennummer","Kurztext","Leistungszeilentext","Username","Name","Arbeitstag","Stunden","Beschreibung","Kontierung","Ansprechpartner Username","Ansprechpartner","Status"])
|
|
# iterate
|
|
for time_entry in list_of_dicts:
|
|
if time_entry.get(ex.sum_col) and time_entry.get(ex.desc_col) and time_entry.get("week"):
|
|
if (int(time_entry.get("week")) in week) or week is None:
|
|
#if week == int(time_entry.get("week")) or week is None:
|
|
date_str_de_de = time_entry.get("date")
|
|
datetime_object = datetime.datetime.strptime(date_str_de_de, '%a., %d. %B %Y')
|
|
if ex.kontierung == '':
|
|
sub_kontierung = time_entry.get("pos_service").split("-")[1]
|
|
writer.writerow([ex.bestellnummer,ex.bestellposition,ex.leistungszeilennummer,ex.kurztext,ex.leistungszeilentext,ex.username,ex.name,datetime_object.strftime('%d.%m.%Y'),time_entry.get(ex.sum_col),time_entry.get(ex.desc_col),sub_kontierung,ex.ansprechpartner_username,ex.ansprechpartner_name,"OFFEN"])
|
|
else:
|
|
writer.writerow([ex.bestellnummer,ex.bestellposition,ex.leistungszeilennummer,ex.kurztext,ex.leistungszeilentext,ex.username,ex.name,datetime_object.strftime('%d.%m.%Y'),time_entry.get(ex.sum_col),time_entry.get(ex.desc_col),ex.kontierung,ex.ansprechpartner_username,ex.ansprechpartner_name,"OFFEN"])
|
|
|
|
# Check if the file size is small (indicating only the header)
|
|
file_path = f"{csvexport_filename}.csv"
|
|
|
|
# Use os.path.getsize to get the file size
|
|
if os.path.getsize(file_path) <= 190: # Adjust this size threshold based on your expected header size
|
|
os.remove(file_path)
|
|
print(f"File {file_path} was deleted because it only contained the header.")
|
|
else:
|
|
print(f"File {file_path} contains data and was not deleted.")
|
|
|
|
locale.setlocale(locale.LC_ALL, 'de_AT.UTF-8')
|
|
|
|
with open("./app/config.yaml", encoding='utf8') as f:
|
|
cfg = yaml.load(f, Loader=yaml.FullLoader)
|
|
|
|
home = Path.home()
|
|
gc = gspread.service_account(home / "service_account.json")
|
|
sh = gc.open(cfg['spreadsheet_name'])
|
|
worksheet = sh.worksheet(cfg['worksheet_name'])
|
|
week = cfg['week'] # 10, 11, 12 or None
|
|
|
|
username = cfg['username']
|
|
name = cfg['name']
|
|
ansprechpartner_username = cfg['ansprechpartner_username']
|
|
ansprechpartner_name = cfg['ansprechpartner_name']
|
|
|
|
# read the whole sheet
|
|
list_of_dicts = worksheet.get_all_records(numericise_ignore=['all'])
|
|
|
|
for key in ["wgwr3", "wgwr_service", "dkarb", "bauwb", "service", "bbfar"]:
|
|
elsap_id = list_of_dicts[2].get(f"sum_{key}")
|
|
if elsap_id != "":
|
|
csvexport_filename = f"{datetime.date.today().strftime('%Y_%m')}_01_{elsap_id}_{username}"
|
|
|
|
ex1 = Export(sum_col=f"sum_{key}",
|
|
desc_col=f"desc_{key}",
|
|
week=week,
|
|
bestellnummer=elsap_id.split('_')[0],
|
|
bestellposition=elsap_id.split('_')[1],
|
|
leistungszeilennummer=elsap_id.split('_')[2],
|
|
kurztext=list_of_dicts[1].get(f"sum_{key}"),
|
|
leistungszeilentext=list_of_dicts[3].get(f"sum_{key}"),
|
|
username=username,
|
|
name=name,
|
|
kontierung=list_of_dicts[4].get(f"sum_{key}"),
|
|
ansprechpartner_username=ansprechpartner_username,
|
|
ansprechpartner_name=ansprechpartner_name)
|
|
|
|
export_timesheet(csvexport_filename=csvexport_filename, ex=ex1) |