add feature RetrievePricelist

This commit is contained in:
Dom 2019-06-13 21:05:07 +02:00
parent ac5b104eab
commit f4bae2a9b8
1 changed files with 131 additions and 0 deletions

View File

@ -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)