diff --git a/webActions.go b/webActions.go index 2071b94..9d16754 100644 --- a/webActions.go +++ b/webActions.go @@ -1,6 +1,7 @@ package paxan import ( + "encoding/csv" "io" "log" "net/http" @@ -12,6 +13,7 @@ import ( "time" "github.com/PuerkitoBio/goquery" + "golang.org/x/text/encoding/charmap" ) type paxanWebOrder struct { @@ -33,6 +35,71 @@ type paxanWebOrderEntry struct { Total2 string } +// SpricelistEntry - One entry in the spricelist +type SpricelistEntry struct { + Sortiment string + Warengruppe string + Untergruppe string + Artnr int + Itemname1 string + Itemname2 string + Hersteller string + Qualitaet string + Herkunft string + Einheit string + Aktion bool + Menge1 float64 + Einzelpreis1 float64 + Vpepreis1 float64 + Menge2 string + Einzelpreis2 string + Vpepreis2 string + Menge3 string + Einzelpreis3 string + Vpepreis3 string + Menge4 string + Einzelpreis4 string + Vpepreis4 string + Empfvk float64 + Mwst float64 + Ean string + Glutenfrei bool + Laktosefrei bool + Vegan bool + Regional bool + Fairtrade bool +} + +func convertStringToBool(value string) bool { + if value == "X" { + return true + } + if value == "A" { + return true + } + return false +} + +func convertStringToFloat(value string) float64 { + value = strings.Replace(value, " €", "", -1) + value = strings.Replace(value, ",", ".", -1) + valueFloat, _ := strconv.ParseFloat(value, 46) + return valueFloat +} + +func convertStringToInt(value string) int { + valueInt, _ := strconv.Atoi(value) + return valueInt +} + +func convertStringToTime(value string) time.Time { + time, err := time.Parse("02.01.06", value) + if err != nil { + log.Fatalln(err) + } + return time +} + func downloadFile(filepath string, resp *http.Response) error { // Create the file file, err := os.Create(filepath) @@ -101,6 +168,70 @@ func DownloadPricelists(client *http.Client) error { return nil } +// RetrievePricelist - Downloads and converts pricelist into an array +func RetrievePricelist(client *http.Client) ([]SpricelistEntry, error) { + // Download spreisliste + resp, err := client.Get("https://www.hakopaxan-shop.de/csv/spreisliste.csv") + if err != nil { + return nil, err + } + + dr := charmap.ISO8859_1.NewDecoder().Reader(resp.Body) + + r := csv.NewReader(dr) + r.Comma = ';' + records, err := r.ReadAll() + if err != nil { + log.Fatal(err) + } + + var priceList []SpricelistEntry + + for i, line := range records { + if i == 0 { + continue + } + var priceListEntry SpricelistEntry + + priceListEntry.Sortiment = line[0] + priceListEntry.Warengruppe = line[1] + priceListEntry.Untergruppe = line[2] + priceListEntry.Artnr = convertStringToInt(line[3]) + priceListEntry.Itemname1 = line[4] + priceListEntry.Itemname2 = line[5] + priceListEntry.Hersteller = line[6] + priceListEntry.Qualitaet = line[7] + priceListEntry.Herkunft = line[8] + priceListEntry.Einheit = line[9] + priceListEntry.Aktion = convertStringToBool(line[10]) + priceListEntry.Menge1 = convertStringToFloat(line[11]) + priceListEntry.Einzelpreis1 = convertStringToFloat(line[12]) + priceListEntry.Vpepreis1 = convertStringToFloat(line[13]) + priceListEntry.Menge2 = line[14] + priceListEntry.Einzelpreis2 = line[15] + priceListEntry.Vpepreis2 = line[16] + priceListEntry.Menge3 = line[17] + priceListEntry.Einzelpreis3 = line[18] + priceListEntry.Vpepreis3 = line[19] + priceListEntry.Menge4 = line[20] + priceListEntry.Einzelpreis4 = line[21] + priceListEntry.Vpepreis4 = line[22] + priceListEntry.Empfvk = convertStringToFloat(line[23]) + priceListEntry.Mwst = convertStringToFloat(line[24]) + priceListEntry.Ean = line[25] + priceListEntry.Glutenfrei = convertStringToBool(line[26]) + priceListEntry.Laktosefrei = convertStringToBool(line[27]) + priceListEntry.Vegan = convertStringToBool(line[28]) + priceListEntry.Regional = convertStringToBool(line[29]) + priceListEntry.Fairtrade = convertStringToBool(line[30]) + + priceList = append(priceList, priceListEntry) + } + + return priceList, nil + +} + func paxanGetOrders(client *http.Client) ([]paxanWebOrder, error) { var list []paxanWebOrder kvs := make(map[string]string)