From 2a776d5c5f2b354cc144812da206eb3418de602e Mon Sep 17 00:00:00 2001 From: Dom Date: Sun, 11 Aug 2019 22:24:14 +0200 Subject: [PATCH] moved file based functions into new file fileActions.go --- fileActions.go | 147 +++++++++++++++++++++++++++++++++++++++++++++++++ webActions.go | 139 ---------------------------------------------- 2 files changed, 147 insertions(+), 139 deletions(-) create mode 100644 fileActions.go diff --git a/fileActions.go b/fileActions.go new file mode 100644 index 0000000..b18e555 --- /dev/null +++ b/fileActions.go @@ -0,0 +1,147 @@ +package paxan + +import ( + "encoding/csv" + "log" + "net/http" + "time" + + "golang.org/x/text/encoding/charmap" +) + +// 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 +} + +// DownloadPricelists - Download both price lists +func DownloadPricelists(client *http.Client) error { + // Download preisliste + r, err := client.Get("https://www.hakopaxan-shop.de/csv/preisliste.csv") + if err != nil { + return err + } + downloadFile(("preisliste-" + time.Now().Format("20060102150405") + ".csv"), r) + + // Download spreisliste + r, err = client.Get("https://www.hakopaxan-shop.de/csv/spreisliste.csv") + if err != nil { + return err + } + downloadFile(("spreisliste-" + time.Now().Format("20060102150405") + ".csv"), r) + + return nil +} + +// DownloadBnnlists - Download both price lists. The lists are public so we do not necessarily login before downloading. +func DownloadBnnlists(client *http.Client) error { + // Download PL.BNN + r, err := client.Get("https://static.paxan.de/2016/PL.BNN") + if err != nil { + return err + } + downloadFile(("PL-" + time.Now().Format("20060102150405") + ".BNN"), r) + + // Download PLF.BNN + r, err = client.Get("https://static.paxan.de/2016/PLF.BNN") + if err != nil { + return err + } + downloadFile(("PLF-" + time.Now().Format("20060102150405") + ".BNN"), r) + + 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 + +} diff --git a/webActions.go b/webActions.go index 162c213..af104cf 100644 --- a/webActions.go +++ b/webActions.go @@ -1,7 +1,6 @@ package paxan import ( - "encoding/csv" "io" "log" "net/http" @@ -13,7 +12,6 @@ import ( "time" "github.com/PuerkitoBio/goquery" - "golang.org/x/text/encoding/charmap" ) type paxanWebOrder struct { @@ -35,41 +33,6 @@ 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 @@ -149,108 +112,6 @@ func CloseClient(client *http.Client) error { return nil } -// DownloadPricelists - Download both price lists -func DownloadPricelists(client *http.Client) error { - // Download preisliste - r, err := client.Get("https://www.hakopaxan-shop.de/csv/preisliste.csv") - if err != nil { - return err - } - downloadFile(("preisliste-" + time.Now().Format("20060102150405") + ".csv"), r) - - // Download spreisliste - r, err = client.Get("https://www.hakopaxan-shop.de/csv/spreisliste.csv") - if err != nil { - return err - } - downloadFile(("spreisliste-" + time.Now().Format("20060102150405") + ".csv"), r) - - return nil -} - -// DownloadBnnlists - Download both price lists. The lists are public so we do not necessarily login before downloading. -func DownloadBnnlists(client *http.Client) error { - // Download PL.BNN - r, err := client.Get("https://static.paxan.de/2016/PL.BNN") - if err != nil { - return err - } - downloadFile(("PL-" + time.Now().Format("20060102150405") + ".BNN"), r) - - // Download PLF.BNN - r, err = client.Get("https://static.paxan.de/2016/PLF.BNN") - if err != nil { - return err - } - downloadFile(("PLF-" + time.Now().Format("20060102150405") + ".BNN"), r) - - 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)