Implement assignment import and clear of budget
This commit is contained in:
@ -56,7 +56,61 @@ func NewYNABImport(q *postgres.Queries, budgetID uuid.UUID) (*YNABImport, error)
|
||||
|
||||
}
|
||||
|
||||
func (ynab *YNABImport) Import(r io.Reader) error {
|
||||
func (ynab *YNABImport) ImportAssignments(r io.Reader) error {
|
||||
csv := csv.NewReader(r)
|
||||
csv.Comma = '\t'
|
||||
csv.LazyQuotes = true
|
||||
|
||||
csvData, err := csv.ReadAll()
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not read from tsv: %w", err)
|
||||
}
|
||||
|
||||
count := 0
|
||||
for _, record := range csvData[1:] {
|
||||
//"Month" "Category Group/Category" "Category Group" "Category" "Budgeted" "Activity" "Available"
|
||||
//"Apr 2019" "Income: Next Month" "Income" "Next Month" 0,00€ 0,00€ 0,00€
|
||||
dateString := record[0]
|
||||
date, err := time.Parse("Jan 2006", dateString)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not parse date %s: %w", dateString, err)
|
||||
}
|
||||
|
||||
categoryGroup, categoryName := record[2], record[3] //also in 1 joined by :
|
||||
category, err := ynab.GetCategory(categoryGroup, categoryName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not get category %s/%s: %w", categoryGroup, categoryName, err)
|
||||
}
|
||||
|
||||
amountString := record[4]
|
||||
amount, err := GetAmount(amountString, "0,00€")
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not parse amount %s: %w", amountString, err)
|
||||
}
|
||||
|
||||
if amount.Int.Int64() == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
assignment := postgres.CreateAssignmentParams{
|
||||
Date: date,
|
||||
CategoryID: category.UUID,
|
||||
Amount: amount,
|
||||
}
|
||||
_, err = ynab.queries.CreateAssignment(ynab.Context, assignment)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not save assignment %v: %w", assignment, err)
|
||||
}
|
||||
|
||||
count++
|
||||
}
|
||||
|
||||
fmt.Printf("Imported %d assignments\n", count)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ynab *YNABImport) ImportTransactions(r io.Reader) error {
|
||||
csv := csv.NewReader(r)
|
||||
csv.Comma = '\t'
|
||||
csv.LazyQuotes = true
|
||||
@ -88,10 +142,10 @@ func (ynab *YNABImport) Import(r io.Reader) error {
|
||||
return fmt.Errorf("could not get payee %s: %w", payeeName, err)
|
||||
}
|
||||
|
||||
categoryGroup, categoryName := record[5], record[6] //also in 5 + 6 split by group/category
|
||||
categoryGroup, categoryName := record[5], record[6] //also in 4 joined by :
|
||||
category, err := ynab.GetCategory(categoryGroup, categoryName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not get category %s: %w", payeeName, err)
|
||||
return fmt.Errorf("could not get category %s/%s: %w", categoryGroup, categoryName, err)
|
||||
}
|
||||
|
||||
memo := record[7]
|
||||
|
Reference in New Issue
Block a user