64 lines
3.5 KiB
Python
64 lines
3.5 KiB
Python
import gspread
|
|
import csv
|
|
import locale
|
|
import datetime
|
|
import yaml
|
|
|
|
#TODO: Upload automatically!
|
|
|
|
def export_timesheet(Csvexport_filename,Sum_col,Desc_col,Week,Bestellnummer,Bestellposition,Leistungszeilennummer,Kurztext,Leistungszeilentext,Username,Name,Kontierung,Ansprechpartner_username,Ansprechpartner_name):
|
|
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(Sum_col) and time_entry.get(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 Kontierung == '':
|
|
SubKontierung = time_entry.get("pos_service").split("-")[1]
|
|
writer.writerow([Bestellnummer,Bestellposition,Leistungszeilennummer,Kurztext,Leistungszeilentext,Username,Name,datetime_object.strftime('%d.%m.%Y'),time_entry.get(Sum_col),time_entry.get(Desc_col),SubKontierung,Ansprechpartner_username,Ansprechpartner_name,"OFFEN"])
|
|
else:
|
|
writer.writerow([Bestellnummer,Bestellposition,Leistungszeilennummer,Kurztext,Leistungszeilentext,Username,Name,datetime_object.strftime('%d.%m.%Y'),time_entry.get(Sum_col),time_entry.get(Desc_col),Kontierung,Ansprechpartner_username,Ansprechpartner_name,"OFFEN"])
|
|
|
|
locale.setlocale(locale.LC_ALL, 'de_DE')
|
|
|
|
with open("config.yaml", encoding='utf8') as f:
|
|
cfg = yaml.load(f, Loader=yaml.FullLoader)
|
|
|
|
gc = gspread.service_account()
|
|
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"]:
|
|
elsap_id = list_of_dicts[2].get(f"sum_{key}")
|
|
if elsap_id != "":
|
|
# elsap_id = worksheet.acell('H3').value #'2061818_00030_0000000020'
|
|
csvexport_filename = f"{datetime.date.today().strftime('%Y_%m')}_01_{elsap_id}_{username}"
|
|
|
|
export_timesheet(Csvexport_filename=csvexport_filename,
|
|
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) |