add initial version
This commit is contained in:
commit
a6f46be402
|
@ -0,0 +1,235 @@
|
|||
package bnn
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Info Structure of headline
|
||||
type Info struct {
|
||||
Kennung string //BNN als Kennung des Dateityps
|
||||
Version int //3 als Versionsnummer der Schnittstelle
|
||||
Zeichensatz int //0=AscII 1=Ansi
|
||||
Versenderadresse string //Name, Ort ... des Händlers
|
||||
Umfang string //V=vollständige Preisliste, T=Teilliste, S=Sonderliste
|
||||
Inhalt string //Text, der die Preisliste näher beschreibt
|
||||
Preiswaehrung string //Währung banküblich (DEM=DM, ATS=österr.Schilling, EUR=Euro)
|
||||
DatumAb string //Preise gültig ab JJJJMMTT
|
||||
DatumBis string //gültig bis, 0=unbestimmt
|
||||
Abgabedatum string //Datum der Datei-Erstellung JJJJMMTT
|
||||
Abgabezeit string //Uhrzeit der Datei-Erstellung SSMM
|
||||
Dateizaehler int //Angabe der Dateinummer, Datei/Diskette1
|
||||
}
|
||||
|
||||
// Item Structure of each Item
|
||||
type Item struct {
|
||||
ArtikelNr string //hausinterne Artikelnummer, mit der bestellt werden soll
|
||||
Aenderungskennung string //N=neu, A=Änderung, X=ausgelistet, R=Restbestand, V=vorübergehend ausgelistet, W=wiedergelistet
|
||||
AenderungsDatum int //letztes Artikel-Änderungsdatum JJJJMMTT
|
||||
AenderungsZeit int //Uhrzeit letzte Artikel-Änderung SSMM
|
||||
EANladen int //EAN-Nummer Ladeneinheit (1)
|
||||
EANbestell int //EAN-Nummer Bestelleinheit (1)
|
||||
Bezeichnung string //Artikelbezeichnung
|
||||
Bezeichnung2 string //Zusatz-Artikelbezeichnung
|
||||
Bezeichnung3 string //Bezeichnung für Etiketten- bzw. Kassentext
|
||||
Handelsklasse string //Handelsklasse (in römischen Zahlen: I, II, III, IV ...)
|
||||
HerstellerInverkehrbringer string //Herstellerkürzel (nach BNN-Liste) des Herstellers lt. Deklaration auf der Verpackung
|
||||
Hersteller string //Herstellerkürzel (nach BNN-Liste) falls abweichend von der Verpackung
|
||||
Herkunft string //Qualitätsland (Auto-Länderkennzeichen)
|
||||
Qualitaet string //Qualitätskennung (nach BNN-IK-Liste)
|
||||
Kontrollstelle string //EG-Kontrollstellen-Kennung
|
||||
MHDRestlaufzeit int //übliche Restlaufzeit in Tagen
|
||||
WGBNN int //Warengruppe BNNEH (nach BNN-Liste)
|
||||
WGIfH int //Warengruppe Institut für Handelsforschung (Liste beim BNN erhältlich)
|
||||
WGGH int //Warengruppe des jeweiligen Großhändlers
|
||||
ErsatzArtikelNr string //Ersatz-Artikelnummer Ersatzartikel wird geliefert, falls sonst nicht lieferbar
|
||||
MinBestellMenge int //Mindestbestellmenge in Bestelleinheit (1)
|
||||
Bestelleinheit string //Bestelleinheit (1) = Verkaufseinheit des Lieferanten
|
||||
BestelleinheitsMenge int //Anzahl Ladeneinheiten je Bestelleinheit (1)
|
||||
Ladeneinheit string //Ladeneinheit (1) = Verkaufseinheit im Laden
|
||||
Mengenfaktor int //Faktor zur Menge-Preis-Relation Ladeneinheit (2)
|
||||
Gewichtsartikel bool //J=Ja, N=Nein Ja, wenn der Artikel nur abgewogen verkauft wird
|
||||
PfandNrLadeneinheit string //hausinterne PfandNr für Ladeneinheit (1)
|
||||
PfandNrBestelleinheit string //hausinterne PfandNr für Bestelleinheit (1)
|
||||
GewichtLadeneinheit int //Bruttogewicht einer Ladeneinheit (1) in kg
|
||||
GewichtBestelleinheit int //Bruttogewicht einer Bestelleinheit (1) in kg
|
||||
Breite int //Packungsbreite der Ladeneinheit in cm
|
||||
Hoehe int //Packungshöhe der Ladeneinheit in cm
|
||||
Tiefe int //Packungstiefe der Ladeneinheit in cm
|
||||
MwstKennung int //Mehrwertsteuer 1=reduziert 2=voll 3=LandwirtsSatz
|
||||
VkFestpreis int //Festpreis Endkunde incl. MWSt. lt. Hersteller (Bücher)
|
||||
EmpfVk int //empf.VK des Herstellers incl. MWSt. je Ladeneinheit
|
||||
EmpfVkGH int //VK-Vorschlag des Lieferanten incl. MWSt. je Ladeneinheit
|
||||
Preis int //Einzelpreis o. MWSt je Ladeneinheit Mengenfaktor beachten!
|
||||
rabattfaehig bool //J=Ja, N=Nein
|
||||
skontierfaehig bool //J=Ja, N=Nein
|
||||
StaffelMenge1 int //Staffelmenge in Ladeneinheit (1)
|
||||
StaffelPreis1 int //Staffelpreis je Ladeneinheit (1) o. MWSt.
|
||||
rabattfaehig1 bool //J=Ja, N=Nein
|
||||
skontierfaehig1 bool //J=Ja, N=Nein
|
||||
StaffelMenge2 int //Staffelmenge in Ladeneinheit (1)
|
||||
StaffelPreis2 int //Staffelpreis je Ladeneinheit (1) o. MWSt.
|
||||
rabattfaehig2 bool //J=Ja, N=Nein
|
||||
skontierfaehig2 bool //J=Ja, N=Nein
|
||||
StaffelMenge3 int //Staffelmenge in Ladeneinheit (1)
|
||||
StaffelPreis3 int //Staffelpreis je Ladeneinheit (1) o. MWSt.
|
||||
rabattfaehig3 bool //J=Ja, N=Nein
|
||||
skontierfaehig3 bool //J=Ja, N=Nein
|
||||
StaffelMenge4 int //Staffelmenge in Ladeneinheit (1)
|
||||
StaffelPreis4 int //Staffelpreis je Ladeneinheit (1) o. MWSt.
|
||||
rabattfaehig4 bool //J=Ja, N=Nein
|
||||
skontierfaehig4 bool //J=Ja, N=Nein
|
||||
StaffelMenge5 int //Staffelmenge in Ladeneinheit (1)
|
||||
StaffelPreis5 int //Staffelpreis je Ladeneinheit (1) o. MWSt.
|
||||
rabattfaehig5 bool //J=Ja, N=Nein
|
||||
skontierfaehig5 bool //J=Ja, N=Nein
|
||||
Artikelart string //F=Frische (mit Tagespreisen), T=Trocken, W=NaturWaren, P=Pfand (dieser Artikel ist das Pfand selbst!), A=Artikel aus FrischePreisliste (aktuelles Angebot)
|
||||
Aktionspreis string //A=Aktionspreis
|
||||
AktionspreisGueltigAb string //Datum JJJJMMTT, 0 bzw. leer = ab sofort
|
||||
AktionspreisGueltigBis string //Datum JJJJMMTT, 0 bzw. leer = unbestimmt
|
||||
empfVkAktion int //Aktions-VK-Vorschlag incl. MWSt.
|
||||
GrundpreisEinheit string //Einheit der Grundpreisauszeichnung (kg, l)
|
||||
GrundpreisFaktor int //Mengen-Faktor der Grundpreiseinheit zur Ladeneinheit
|
||||
LieferbarAb string //Datum JJJJMMTT
|
||||
LieferbarBis string //Datum JJJJMMTT
|
||||
}
|
||||
|
||||
// Bnn Information of file
|
||||
type Bnn struct {
|
||||
Info Info
|
||||
Items []Item
|
||||
}
|
||||
|
||||
func convertBnnBool(s string) bool {
|
||||
if s == "J" {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func convertStringToInt(s string) int {
|
||||
ret, _ := strconv.Atoi(s)
|
||||
return ret
|
||||
}
|
||||
|
||||
// ReadBnnFile Reads file and returns object with all containing information
|
||||
func ReadBnnFile(path string) (Bnn, error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return Bnn{}, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
var lines []string
|
||||
|
||||
for scanner.Scan() {
|
||||
lines = append(lines, scanner.Text())
|
||||
}
|
||||
|
||||
var content Bnn
|
||||
|
||||
for i, line := range lines {
|
||||
var item Item
|
||||
|
||||
col := strings.Split(line, ";")
|
||||
|
||||
// Headline contains infos
|
||||
if i == 0 {
|
||||
content.Info.Kennung = col[0]
|
||||
content.Info.Version = convertStringToInt(col[1])
|
||||
content.Info.Zeichensatz = convertStringToInt(col[2])
|
||||
content.Info.Versenderadresse = col[3]
|
||||
content.Info.Umfang = col[4]
|
||||
content.Info.Inhalt = col[5]
|
||||
content.Info.Preiswaehrung = col[6]
|
||||
content.Info.DatumAb = col[7]
|
||||
content.Info.DatumBis = col[8]
|
||||
content.Info.Abgabedatum = col[9]
|
||||
content.Info.Abgabezeit = col[10]
|
||||
content.Info.Dateizaehler = convertStringToInt(col[11])
|
||||
continue
|
||||
}
|
||||
|
||||
// Jump over last line and exit
|
||||
if len(col) == 3 {
|
||||
break
|
||||
}
|
||||
|
||||
item.ArtikelNr = col[0]
|
||||
item.Aenderungskennung = col[1]
|
||||
item.AenderungsDatum = convertStringToInt(col[2])
|
||||
item.AenderungsZeit = convertStringToInt(col[3])
|
||||
item.EANladen = convertStringToInt(col[4])
|
||||
item.EANbestell = convertStringToInt(col[5])
|
||||
item.Bezeichnung = col[6]
|
||||
item.Bezeichnung2 = col[7]
|
||||
item.Bezeichnung3 = col[8]
|
||||
item.Handelsklasse = col[9]
|
||||
item.HerstellerInverkehrbringer = col[10]
|
||||
item.Hersteller = col[11]
|
||||
item.Herkunft = col[12]
|
||||
item.Qualitaet = col[13]
|
||||
item.Kontrollstelle = col[14]
|
||||
item.MHDRestlaufzeit = convertStringToInt(col[15])
|
||||
item.WGBNN = convertStringToInt(col[16])
|
||||
item.WGIfH = convertStringToInt(col[17])
|
||||
item.WGGH = convertStringToInt(col[18])
|
||||
item.ErsatzArtikelNr = col[19]
|
||||
item.MinBestellMenge = convertStringToInt(col[20])
|
||||
item.Bestelleinheit = col[21]
|
||||
item.BestelleinheitsMenge = convertStringToInt(col[22])
|
||||
item.Ladeneinheit = col[23]
|
||||
item.Mengenfaktor = convertStringToInt(col[24])
|
||||
item.Gewichtsartikel = convertBnnBool(col[25])
|
||||
item.PfandNrLadeneinheit = col[26]
|
||||
item.PfandNrBestelleinheit = col[27]
|
||||
item.GewichtLadeneinheit = convertStringToInt(col[28])
|
||||
item.GewichtBestelleinheit = convertStringToInt(col[29])
|
||||
item.Breite = convertStringToInt(col[30])
|
||||
item.Hoehe = convertStringToInt(col[31])
|
||||
item.Tiefe = convertStringToInt(col[32])
|
||||
item.MwstKennung = convertStringToInt(col[33])
|
||||
item.VkFestpreis = convertStringToInt(col[34])
|
||||
item.EmpfVk = convertStringToInt(col[35])
|
||||
item.EmpfVkGH = convertStringToInt(col[36])
|
||||
item.Preis = convertStringToInt(col[37])
|
||||
item.rabattfaehig = convertBnnBool(col[38])
|
||||
item.skontierfaehig = convertBnnBool(col[39])
|
||||
item.StaffelMenge1 = convertStringToInt(col[40])
|
||||
item.StaffelPreis1 = convertStringToInt(col[41])
|
||||
item.rabattfaehig1 = convertBnnBool(col[42])
|
||||
item.skontierfaehig1 = convertBnnBool(col[43])
|
||||
item.StaffelMenge2 = convertStringToInt(col[44])
|
||||
item.StaffelPreis2 = convertStringToInt(col[45])
|
||||
item.rabattfaehig2 = convertBnnBool(col[46])
|
||||
item.skontierfaehig2 = convertBnnBool(col[47])
|
||||
item.StaffelMenge3 = convertStringToInt(col[48])
|
||||
item.StaffelPreis3 = convertStringToInt(col[49])
|
||||
item.rabattfaehig3 = convertBnnBool(col[50])
|
||||
item.skontierfaehig3 = convertBnnBool(col[51])
|
||||
item.StaffelMenge4 = convertStringToInt(col[52])
|
||||
item.StaffelPreis4 = convertStringToInt(col[53])
|
||||
item.rabattfaehig4 = convertBnnBool(col[54])
|
||||
item.skontierfaehig4 = convertBnnBool(col[55])
|
||||
item.StaffelMenge5 = convertStringToInt(col[56])
|
||||
item.StaffelPreis5 = convertStringToInt(col[57])
|
||||
item.rabattfaehig5 = convertBnnBool(col[58])
|
||||
item.skontierfaehig5 = convertBnnBool(col[59])
|
||||
item.Artikelart = col[60]
|
||||
item.Aktionspreis = col[61]
|
||||
item.AktionspreisGueltigAb = col[62]
|
||||
item.AktionspreisGueltigBis = col[63]
|
||||
item.empfVkAktion = convertStringToInt(col[64])
|
||||
item.GrundpreisEinheit = col[65]
|
||||
item.GrundpreisFaktor = convertStringToInt(col[66])
|
||||
item.LieferbarAb = col[67]
|
||||
item.LieferbarBis = col[68]
|
||||
|
||||
content.Items = append(content.Items, item)
|
||||
}
|
||||
|
||||
return content, nil
|
||||
}
|
Loading…
Reference in New Issue