183 lines
4.6 KiB
Go
183 lines
4.6 KiB
Go
package paxan
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
bnn "gitea.statsd.de/dom/goBnn"
|
|
"golang.org/x/text/encoding/charmap"
|
|
)
|
|
|
|
// SpricelistEntry - One entry in the spricelist
|
|
type SpricelistEntry struct {
|
|
Sortiment string
|
|
Warengruppe string
|
|
Untergruppe string
|
|
Artnr string
|
|
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 = 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
|
|
|
|
}
|
|
|
|
// RetrieveBnnlistPL - Downloads list PL and converts bnn list into an array
|
|
func RetrieveBnnlistPL(client *http.Client) (bnn.Bnn, error) {
|
|
// Download bnn
|
|
resp, err := client.Get("https://static.paxan.de/2016/PL.BNN")
|
|
if err != nil {
|
|
return bnn.Bnn{}, err
|
|
}
|
|
|
|
b, err := bnn.ReadBnn(resp.Body)
|
|
if err != nil {
|
|
return bnn.Bnn{}, err
|
|
}
|
|
|
|
return b, nil
|
|
|
|
}
|
|
|
|
// RetrieveBnnlistPLF - Downloads list PLF and converts bnn list into an array
|
|
func RetrieveBnnlistPLF(client *http.Client) (bnn.Bnn, error) {
|
|
// Download bnn
|
|
resp, err := client.Get("https://static.paxan.de/2016/PLF.BNN")
|
|
if err != nil {
|
|
return bnn.Bnn{}, err
|
|
}
|
|
|
|
b, err := bnn.ReadBnn(resp.Body)
|
|
if err != nil {
|
|
return bnn.Bnn{}, err
|
|
}
|
|
|
|
return b, nil
|
|
|
|
}
|