From 3077343c8969f097dfb2808cd96e9f8e4b851453 Mon Sep 17 00:00:00 2001 From: bel Date: Fri, 30 Jul 2021 06:28:21 -0600 Subject: [PATCH] add anti-patterns, print acc for ledger, fix chase 2021 from body.read double --- config.go | 43 +++++++++++++++++++++++-------------------- main.go | 6 ++++++ scrape.go | 4 ++-- upload.go | 2 +- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/config.go b/config.go index e1bc707..1483acc 100755 --- a/config.go +++ b/config.go @@ -24,17 +24,18 @@ var uploaders = map[string]Uploader{ } type Config struct { - EmailUser string - EmailPass string - EmailIMAP string - TodoAddr string - TodoToken string - TodoList string - TodoTag string - Uploader Uploader - Storage storage.DB - Banks map[Bank]bool - AccountsPattern string + EmailUser string + EmailPass string + EmailIMAP string + TodoAddr string + TodoToken string + TodoList string + TodoTag string + Uploader Uploader + Storage storage.DB + Banks map[Bank]bool + AccountsPattern string + AccountsAntiPattern string } var config Config @@ -55,7 +56,8 @@ func NewConfig() Config { as.Append(args.STRING, "todotag", "todo tag", "expense") as.Append(args.STRING, "banks", "uccu,citi,chase", "uccu,citi,chase") - as.Append(args.STRING, "accounts", "regex to filter accounts", ".*") + as.Append(args.STRING, "accounts", "regex to include filter accounts", ".*") + as.Append(args.STRING, "not-accounts", "regex to exclude filter accounts", "zzzzzz") as.Append(args.STRING, "authaddr", "auth addr", "https://auth.remote.blapointe.com") as.Append(args.STRING, "store", "store type", "map") @@ -79,14 +81,15 @@ func NewConfig() Config { } config = Config{ - EmailUser: as.GetString("emailuser"), - EmailPass: as.GetString("emailpass"), - EmailIMAP: as.GetString("emailimap"), - TodoAddr: as.GetString("todoaddr"), - TodoTag: as.GetString("todotag"), - AccountsPattern: as.GetString("accounts"), - Storage: storage, - Uploader: ul, + EmailUser: as.GetString("emailuser"), + EmailPass: as.GetString("emailpass"), + EmailIMAP: as.GetString("emailimap"), + TodoAddr: as.GetString("todoaddr"), + TodoTag: as.GetString("todotag"), + AccountsPattern: as.GetString("accounts"), + AccountsAntiPattern: as.GetString("not-accounts"), + Storage: storage, + Uploader: ul, Banks: map[Bank]bool{ Chase: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Chase.String())), Citi: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Citi.String())), diff --git a/main.go b/main.go index 2903312..6e7ad3d 100755 --- a/main.go +++ b/main.go @@ -18,6 +18,7 @@ func main() { panic(err) } patterns := regexp.MustCompile(config.AccountsPattern) + antipatterns := regexp.MustCompile(config.AccountsAntiPattern) for email := range emails { transactions, err := Scrape(email, config.Banks) if err != nil { @@ -26,6 +27,11 @@ func main() { for _, transaction := range transactions { if !patterns.MatchString(transaction.Account) { log.Printf("skipping unmatching account pattern %q vs %q", config.AccountsPattern, transaction.Account) + continue + } + if antipatterns.MatchString(transaction.Account) { + log.Printf("skipping match account antipattern %q vs %q", config.AccountsAntiPattern, transaction.Account) + continue } if _, err := config.Storage.Get(transaction.ID); err == nil { log.Println("skipping duplicate transaction:", transaction) diff --git a/scrape.go b/scrape.go index 7a7da4f..2beadce 100755 --- a/scrape.go +++ b/scrape.go @@ -67,11 +67,11 @@ func containsAny(a string, b ...string) bool { } func (c *chaseScraper) scrape(m *mail.Message) ([]*Transaction, error) { - transactions, err := c.scrape2020(m) + transactions, err := c.scrape2021(m) if err == nil && len(transactions) > 0 { return transactions, err } - return c.scrape2021(m) + return c.scrape2020(m) } func (c *chaseScraper) scrape2021(m *mail.Message) ([]*Transaction, error) { diff --git a/upload.go b/upload.go index dd19372..f575dce 100755 --- a/upload.go +++ b/upload.go @@ -66,7 +66,7 @@ func uploadLedger(config Config, transaction *Transaction) error { remote += substr } fmt.Fprintf(f, "%-50s%-s\n", formatGMailDate(transaction.Date), transaction.Vendor) - fmt.Fprintf(f, "%-50s%-50s$%.2f\n", "", "AssetAccount:"+transaction.Bank.String(), amount) + fmt.Fprintf(f, "%-50s%-50s$%.2f\n", "", "AssetAccount:"+transaction.Bank.String()+":"+transaction.Account, amount) fmt.Fprintf(f, "%-50s%-s\n", "", remote) return nil }