211 lines
8.1 KiB
Go
211 lines
8.1 KiB
Go
package excelread
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// mapRowToStruct konvertiert eine einzelne CSV-Zeile (als []string)
|
|
// in die EmployeeDataRow-Struct.
|
|
func mapRowToStruct(row []string) EmployeeDataRow {
|
|
data := EmployeeDataRow{}
|
|
|
|
data.Personalnummer = parseInt(row[0])
|
|
data.Nachname = strings.TrimSpace(row[1])
|
|
data.Vorname = strings.TrimSpace(row[2])
|
|
data.Vertragsart = strings.TrimSpace(row[3])
|
|
data.HatPersonenbefoerderungsschein = strings.TrimSpace(row[4])
|
|
data.HatRechtAufZuschlaege = strings.TrimSpace(row[5])
|
|
data.Vertragsstart = strings.TrimSpace(row[6])
|
|
data.VertragstageProWoche = parseFloat(row[7])
|
|
data.VertragsstundenProWoche = parseFloat(row[8])
|
|
data.VertragsstundenMax = strings.TrimSpace(row[9])
|
|
data.UrlaubstageProJahr = parseFloat(row[10])
|
|
data.GearbeiteteTage = parseFloat(row[11])
|
|
data.GearbeiteteStunden = parseFloat(row[12])
|
|
data.GenommeneUrlaubstage = parseFloat(row[13])
|
|
data.GenommeneUrlaubsstunden = parseFloat(row[14])
|
|
data.Krankheitstage = parseFloat(row[15])
|
|
data.Krankheitsstunden = parseFloat(row[16])
|
|
|
|
// data.KrankengeldTage = parseFloat(row[17])
|
|
// data.KrankengeldStunden = parseFloat(row[18])
|
|
// data.UnbezahlterUrlaubTage = parseFloat(row[19])
|
|
// data.UnbezahlterUrlaubStunden = parseFloat(row[20])
|
|
|
|
data.IstSollGesamtTage = parseFloat(row[17])
|
|
data.IstSollGesamtStunden = parseFloat(row[18])
|
|
data.IstSollVertragsTage = parseFloat(row[19])
|
|
data.IstSollVertragsStunden = parseFloat(row[20])
|
|
data.IstSollPlusMinusStunden = parseFloat(row[21])
|
|
data.BerechnungMehrstunden = parseFloat(row[22])
|
|
data.BerechnungUeberstunden = parseFloat(row[23])
|
|
data.BerechnungAnzahlPSchein = parseFloat(row[24])
|
|
data.BerechnungKrankOhneAUTage = parseFloat(row[25])
|
|
data.BerechnungKrankOhneAUStunden = parseFloat(row[26])
|
|
data.BerechnungNachtzuschlag25Tage = parseFloat(row[27])
|
|
data.BerechnungNachtzuschlag25Stunden = parseFloat(row[28])
|
|
data.BerechnungNachtzuschlag40Tage = parseFloat(row[29])
|
|
data.BerechnungNachtzuschlag40Stunden = parseFloat(row[30])
|
|
data.BerechnungSonntagszuschlag50Tage = parseFloat(row[31])
|
|
data.BerechnungSonntagszuschlag50Stunden = parseFloat(row[32])
|
|
data.BerechnungVerpflegungspauschale14Tage = parseFloat(row[33])
|
|
data.BerechnungSamstagszuschlag15Tage = parseFloat(row[34])
|
|
data.BerechnungSamstagszuschlag15Stunden = parseFloat(row[35])
|
|
data.BerechnungZeitausgleichStart = parseFloat(row[36])
|
|
data.BerechnungZeitausgleichPlusMinus = parseFloat(row[37])
|
|
data.BerechnungZeitausgleichAenderungen = parseFloat(row[38])
|
|
data.BerechnungZeitausgleichAuszahlen = parseFloat(row[39])
|
|
data.BerechnungZeitausgleichJetzt = parseFloat(row[40])
|
|
data.SaldenUrlaubStart = parseFloat(row[41])
|
|
data.SaldenUrlaubAbbau = parseFloat(row[42])
|
|
|
|
data.SaldenUrlaubKorrektur = parseFloat(row[43])
|
|
|
|
data.SaldenUrlaubJetzt = parseFloat(row[44])
|
|
data.SaldenMehrstunden = parseFloat(row[45])
|
|
data.SaldenUeberstunden = parseFloat(row[46])
|
|
data.AuszahlenFahrtkostenKm = parseFloat(row[47])
|
|
data.AuszahlenVerpflegungspauschaleTage = parseFloat(row[48])
|
|
data.AuszahlenAnzahlPSchein = parseFloat(row[49])
|
|
data.AuszahlenZuschlag25Stunden = parseFloat(row[50])
|
|
data.AuszahlenZuschlag40Stunden = parseFloat(row[51])
|
|
data.AuszahlenZuschlag50Stunden = parseFloat(row[52])
|
|
data.AuszahlenZuschlag14Stunden = parseFloat(row[53])
|
|
data.AuszahlenZuschlag15Stunden = parseFloat(row[54])
|
|
return data
|
|
}
|
|
|
|
// map from: July 2025
|
|
// func mapRowToStruct(row []string) EmployeeDataRow {
|
|
// data := EmployeeDataRow{}
|
|
|
|
// data.Personalnummer = parseInt(row[0])
|
|
// data.Nachname = strings.TrimSpace(row[1])
|
|
// data.Vorname = strings.TrimSpace(row[2])
|
|
// data.Vertragsart = strings.TrimSpace(row[3])
|
|
// data.HatPersonenbefoerderungsschein = strings.TrimSpace(row[4])
|
|
// data.HatRechtAufZuschlaege = strings.TrimSpace(row[5])
|
|
// data.Vertragsstart = strings.TrimSpace(row[6])
|
|
// data.VertragstageProWoche = parseFloat(row[7])
|
|
// data.VertragsstundenProWoche = parseFloat(row[8])
|
|
// data.VertragsstundenMax = strings.TrimSpace(row[9])
|
|
// data.UrlaubstageProJahr = parseFloat(row[10])
|
|
// data.GearbeiteteTage = parseFloat(row[11])
|
|
// data.GearbeiteteStunden = parseFloat(row[12])
|
|
// data.GenommeneUrlaubstage = parseFloat(row[13])
|
|
// data.GenommeneUrlaubsstunden = parseFloat(row[14])
|
|
// data.Krankheitstage = parseFloat(row[15])
|
|
// data.Krankheitsstunden = parseFloat(row[16])
|
|
// data.KrankengeldTage = parseFloat(row[17])
|
|
// data.KrankengeldStunden = parseFloat(row[18])
|
|
// data.UnbezahlterUrlaubTage = parseFloat(row[19])
|
|
// data.UnbezahlterUrlaubStunden = parseFloat(row[20])
|
|
// data.IstSollGesamtTage = parseFloat(row[21])
|
|
// data.IstSollGesamtStunden = parseFloat(row[22])
|
|
// data.IstSollVertragsTage = parseFloat(row[23])
|
|
// data.IstSollVertragsStunden = parseFloat(row[24])
|
|
// data.IstSollPlusMinusStunden = parseFloat(row[25])
|
|
// data.BerechnungMehrstunden = parseFloat(row[26])
|
|
// data.BerechnungUeberstunden = parseFloat(row[27])
|
|
// data.BerechnungAnzahlPSchein = parseFloat(row[28])
|
|
// data.BerechnungKrankOhneAUTage = parseFloat(row[29])
|
|
// data.BerechnungKrankOhneAUStunden = parseFloat(row[30])
|
|
// data.BerechnungNachtzuschlag25Tage = parseFloat(row[31])
|
|
// data.BerechnungNachtzuschlag25Stunden = parseFloat(row[32])
|
|
// data.BerechnungNachtzuschlag40Tage = parseFloat(row[33])
|
|
// data.BerechnungNachtzuschlag40Stunden = parseFloat(row[34])
|
|
// data.BerechnungSonntagszuschlag50Tage = parseFloat(row[35])
|
|
// data.BerechnungSonntagszuschlag50Stunden = parseFloat(row[36])
|
|
// data.BerechnungVerpflegungspauschale14Tage = parseFloat(row[37])
|
|
// data.BerechnungSamstagszuschlag15Tage = parseFloat(row[38])
|
|
// data.BerechnungSamstagszuschlag15Stunden = parseFloat(row[39])
|
|
// data.BerechnungZeitausgleichStart = parseFloat(row[40])
|
|
// data.BerechnungZeitausgleichPlusMinus = parseFloat(row[41])
|
|
// data.BerechnungZeitausgleichAenderungen = parseFloat(row[42])
|
|
// data.BerechnungZeitausgleichAuszahlen = parseFloat(row[43])
|
|
// data.BerechnungZeitausgleichJetzt = parseFloat(row[44])
|
|
// data.SaldenUrlaubStart = parseFloat(row[45])
|
|
// data.SaldenUrlaubAbbau = parseFloat(row[46])
|
|
// data.SaldenUrlaubJetzt = parseFloat(row[47])
|
|
// data.SaldenMehrstunden = parseFloat(row[48])
|
|
// data.SaldenUeberstunden = parseFloat(row[49])
|
|
// data.AuszahlenFahrtkostenKm = parseFloat(row[50])
|
|
// data.AuszahlenVerpflegungspauschaleTage = parseFloat(row[51])
|
|
// data.AuszahlenAnzahlPSchein = parseFloat(row[52])
|
|
// data.AuszahlenZuschlag25Stunden = parseFloat(row[53])
|
|
// data.AuszahlenZuschlag40Stunden = parseFloat(row[54])
|
|
// data.AuszahlenZuschlag50Stunden = parseFloat(row[55])
|
|
// data.AuszahlenZuschlag14Stunden = parseFloat(row[56])
|
|
// data.AuszahlenZuschlag15Stunden = parseFloat(row[57])
|
|
// return data
|
|
// }
|
|
|
|
func ReadEmployeeData() []EmployeeDataRow {
|
|
content, err := os.ReadFile("daten.csv")
|
|
if err != nil {
|
|
log.Fatalf("Fehler beim Lesen der Datei: %v", err)
|
|
}
|
|
|
|
reader := csv.NewReader(strings.NewReader(string(content)))
|
|
reader.Comma = ';'
|
|
reader.FieldsPerRecord = -1
|
|
|
|
records, err := reader.ReadAll()
|
|
if err != nil {
|
|
log.Fatalf("Fehler beim Parsen der CSV: %v", err)
|
|
}
|
|
|
|
if len(records) < 5 {
|
|
log.Fatal("Die CSV-Datei hat nicht genügend Zeilen.")
|
|
}
|
|
dataRows := records[3 : len(records)-1]
|
|
|
|
var employees []EmployeeDataRow
|
|
|
|
for i, row := range dataRows {
|
|
fmt.Printf("%v", len(row))
|
|
if row[1] != "Shahrasebi" {
|
|
employee := mapRowToStruct(row)
|
|
employees = append(employees, employee)
|
|
fmt.Printf("Zeile %d geladen: %s, %s\n", i+4, employee.Nachname, employee.Vorname)
|
|
}
|
|
}
|
|
|
|
fmt.Printf("\n--- Insgesamt %d Mitarbeiterdatensätze erfolgreich geladen. ---\n", len(employees))
|
|
|
|
return employees
|
|
}
|
|
|
|
// Helfer-Funktion, um Strings mit Komma als Dezimaltrennzeichen in float64 umzuwandeln.
|
|
func parseFloat(s string) float64 {
|
|
s = strings.TrimSpace(s)
|
|
if s == "" {
|
|
return 0.0
|
|
}
|
|
// Ersetze das Komma durch einen Punkt für die Standard-Konvertierung
|
|
s = strings.Replace(s, ",", ".", 1)
|
|
val, err := strconv.ParseFloat(s, 64)
|
|
if err != nil {
|
|
return 0.0 // Bei Fehler einfach 0 zurückgeben
|
|
}
|
|
return val
|
|
}
|
|
|
|
// Helfer-Funktion, um einen String in einen Integer umzuwandeln.
|
|
func parseInt(s string) int {
|
|
s = strings.TrimSpace(s)
|
|
if s == "" {
|
|
return 0
|
|
}
|
|
val, err := strconv.Atoi(s)
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return val
|
|
}
|