Skip to content

Commit

Permalink
import transaction from wechat pay billing file
Browse files Browse the repository at this point in the history
  • Loading branch information
mayswind committed Oct 13, 2024
1 parent 44fe777 commit ae65c56
Show file tree
Hide file tree
Showing 11 changed files with 481 additions and 3 deletions.
3 changes: 3 additions & 0 deletions pkg/converters/transaction_data_converters.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/mayswind/ezbookkeeping/pkg/converters/default"
"github.com/mayswind/ezbookkeeping/pkg/converters/feidee"
"github.com/mayswind/ezbookkeeping/pkg/converters/fireflyIII"
"github.com/mayswind/ezbookkeeping/pkg/converters/wechat"
"github.com/mayswind/ezbookkeeping/pkg/errs"
)

Expand Down Expand Up @@ -36,6 +37,8 @@ func GetTransactionDataImporter(fileType string) (base.TransactionDataImporter,
return alipay.AlipayAppTransactionDataCsvImporter, nil
} else if fileType == "alipay_web_csv" {
return alipay.AlipayWebTransactionDataCsvImporter, nil
} else if fileType == "wechat_pay_app_csv" {
return wechat.WeChatPayTransactionDataCsvImporter, nil
} else {
return nil, errs.ErrImportFileTypeNotSupported
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package wechat

import (
"bytes"

"github.com/mayswind/ezbookkeeping/pkg/converters/datatable"
"github.com/mayswind/ezbookkeeping/pkg/core"
"github.com/mayswind/ezbookkeeping/pkg/models"
)

var wechatPayTransactionTypeNameMapping = map[models.TransactionType]string{
models.TRANSACTION_TYPE_INCOME: "收入",
models.TRANSACTION_TYPE_EXPENSE: "支出",
models.TRANSACTION_TYPE_TRANSFER: "/",
}

// wechatPayTransactionDataCsvImporter defines the structure of wechatPay csv importer for transaction data
type wechatPayTransactionDataCsvImporter struct {
fileHeaderLineBeginning string
dataHeaderStartContentBeginning string
}

// Initialize a webchat pay transaction data csv file importer singleton instance
var (
WeChatPayTransactionDataCsvImporter = &wechatPayTransactionDataCsvImporter{}
)

// ParseImportedData returns the imported data by parsing the wechat pay transaction csv data
func (c *wechatPayTransactionDataCsvImporter) ParseImportedData(ctx core.Context, user *models.User, data []byte, defaultTimezoneOffset int16, accountMap map[string]*models.Account, expenseCategoryMap map[string]*models.TransactionCategory, incomeCategoryMap map[string]*models.TransactionCategory, transferCategoryMap map[string]*models.TransactionCategory, tagMap map[string]*models.TransactionTag) (models.ImportedTransactionSlice, []*models.Account, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionTag, error) {
reader := bytes.NewReader(data)
transactionDataTable, err := createNewWeChatPayTransactionDataTable(ctx, reader)

if err != nil {
return nil, nil, nil, nil, nil, nil, err
}

dataTableImporter := datatable.CreateNewSimpleImporter(wechatPayTransactionTypeNameMapping)

return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezoneOffset, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
}
Loading

0 comments on commit ae65c56

Please sign in to comment.