goPaxan/fileActions.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
}