forked from mirrors/homebox
initialize CSV Importer
This commit is contained in:
parent
1ab7435bf1
commit
a903880f82
12 changed files with 600 additions and 5 deletions
97
backend/internal/services/service_items_csv.go
Normal file
97
backend/internal/services/service_items_csv.go
Normal file
|
@ -0,0 +1,97 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var ErrInvalidCsv = errors.New("invalid csv")
|
||||
|
||||
func parseFloat(s string) float64 {
|
||||
if s == "" {
|
||||
return 0
|
||||
}
|
||||
f, _ := strconv.ParseFloat(s, 64)
|
||||
return f
|
||||
}
|
||||
|
||||
func parseDate(s string) time.Time {
|
||||
if s == "" {
|
||||
return time.Time{}
|
||||
}
|
||||
|
||||
p, _ := time.Parse("01/02/2006", s)
|
||||
return p
|
||||
}
|
||||
|
||||
type csvRow struct {
|
||||
Location string
|
||||
Labels string
|
||||
Name string
|
||||
Description string
|
||||
SerialNumber string
|
||||
ModelNumber string
|
||||
Manufacturer string
|
||||
Notes string
|
||||
PurchaseFrom string
|
||||
PurchasedPrice string
|
||||
PurchasedAt string
|
||||
SoldTo string
|
||||
SoldPrice string
|
||||
SoldAt string
|
||||
}
|
||||
|
||||
func newCsvRow(row []string) csvRow {
|
||||
return csvRow{
|
||||
Location: row[0],
|
||||
Labels: row[1],
|
||||
Name: row[2],
|
||||
Description: row[3],
|
||||
SerialNumber: row[4],
|
||||
ModelNumber: row[5],
|
||||
Manufacturer: row[6],
|
||||
Notes: row[7],
|
||||
PurchaseFrom: row[8],
|
||||
PurchasedPrice: row[9],
|
||||
PurchasedAt: row[10],
|
||||
SoldTo: row[11],
|
||||
SoldPrice: row[12],
|
||||
SoldAt: row[13],
|
||||
}
|
||||
}
|
||||
|
||||
func (c csvRow) parsedSoldPrice() float64 {
|
||||
return parseFloat(c.SoldPrice)
|
||||
}
|
||||
|
||||
func (c csvRow) parsedPurchasedPrice() float64 {
|
||||
return parseFloat(c.PurchasedPrice)
|
||||
}
|
||||
|
||||
func (c csvRow) parsedPurchasedAt() time.Time {
|
||||
return parseDate(c.PurchasedAt)
|
||||
}
|
||||
|
||||
func (c csvRow) parsedSoldAt() time.Time {
|
||||
return parseDate(c.SoldAt)
|
||||
}
|
||||
|
||||
func (c csvRow) getLabels() []string {
|
||||
split := strings.Split(c.Labels, ";")
|
||||
|
||||
// Trim each
|
||||
for i, s := range split {
|
||||
split[i] = strings.TrimSpace(s)
|
||||
}
|
||||
|
||||
// Remove empty
|
||||
for i, s := range split {
|
||||
if s == "" {
|
||||
split = append(split[:i], split[i+1:]...)
|
||||
}
|
||||
}
|
||||
|
||||
return split
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue