Skip to main content

Time Booking Script

import csv
import datetime
import re


def createCleanTimes(inputFile, outputFile):
    rows = importTimes(inputFile)
    rows.pop(0)
    newRows = [['Date', 'Time', 'Notes']]
    for row in rows:
        newRows.append(buildBetterRow(row))
    writeOutput(outputFile, newRows)
    return

def checkOutput(filePath):
    #rows = [
    #    ["2022-12-01", "2022-12-01 08:00:00", "2022-12-01 10:00:00", "Ticket", "177"],
    #    ["2022-12-01", "2022-12-01 10:00:00", "2022-12-01 13:00:00", "Scrum", "Review+Planning"],
    #    ["2022-12-01", "2022-12-01 14:00:00", "2022-12-01 16:00:00", "Meeting", "Zeit buchen"]
    #]
    rows = importTimes(filePath)
    rows.pop(0)
    
    # don't output until all rows are done, to avoid missing an error
    toDisplay = []
    for row in rows:
        toDisplay.append(buildBetterRow(row))
        
    for display in toDisplay:
        print(display)

def importTimes(filePath):
    with open(filePath) as file:
        csvReader = csv.reader(file, delimiter=";", quotechar='"')
        timeData = [row for row in csvReader]
    return timeData

def buildBetterRow(row):
    date = betterDate(row[0])
    time = verifiedTime(row[1])
    task = row[2]
    notes = row[3]
    
    return [date, time, calculateTicketIfPossible(task, notes)]

def betterDate(dotSeparated):
    return "-".join(reversed(dotSeparated.split(".")))

def verifiedTime(time):
    if time == "00:00":
        raise ValueError("Invalid time " + time)
    return time

def calculateTicketIfPossible(task, notes):
    if isRelTicket(notes):
        return "REL-{}".format(notes)
    if isGeneralTicket(notes):
        return notes
    if task == "Scrum":
        return "REL-148"
    if task == "Meeting":
        return "REL-145"
    if task == "SpecOps":
        return "REL-376"
    if task == "Test Session":
        return "REL-374"
    if task == "Onboarding":
        return "REL-155"
    if task == "MTOP Lead":
        return "REL-156"
    if task == "Ticket":
        return notes
    return "{} - {}".format(task, notes)

def isRelTicket(possiblyTicket):
    pattern = re.compile("[0-9]{1,6}")
    return not pattern.fullmatch(possiblyTicket) == None

def isGeneralTicket(possiblyTicket):
    pattern = re.compile("[A-Z]{1,3}-[0-9]{1,6}")
    return not pattern.fullmatch(possiblyTicket) == None

def writeOutput(filePath, csvArray):
    with open(filePath, "w") as file:
        csvFile = csv.writer(file)
        for row in csvArray:
            csvFile.writerow(row)
fileDirectory = "/Users/jeffrey.maier/dev/resources/timebooking/2024_10_21-2024_11_18/"
inputFile = fileDirectory + "20241021_20241118.csv"
outputFile = fileDirectory + "updated_time_rec.csv"
checkOutput(inputFile)
createCleanTimes(inputFile, outputFile)