From fceb92eb6f937e7b13a099de970ea0fd5b006517 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 18 Sep 2024 23:04:00 +0800 Subject: [PATCH] change the type of balance modification transaction to income or expense for imported feidee mymoney transaction data --- .../data_table_transaction_data_converter.go | 13 ++++ ...oney_transaction_data_csv_file_importer.go | 1 + ...transaction_data_csv_file_importer_test.go | 49 +++++++------ ..._mymoney_transaction_data_file_importer.go | 37 ++++++++++ ...oney_transaction_data_xls_file_importer.go | 19 +---- ...transaction_data_xls_file_importer_test.go | 65 ++++++++++-------- testdata/feidee_mymoney_test_file.xls | Bin 33280 -> 33792 bytes 7 files changed, 117 insertions(+), 67 deletions(-) create mode 100644 pkg/converters/feidee_mymoney_transaction_data_file_importer.go diff --git a/pkg/converters/data_table_transaction_data_converter.go b/pkg/converters/data_table_transaction_data_converter.go index 7ec64ff8..de3c22e6 100644 --- a/pkg/converters/data_table_transaction_data_converter.go +++ b/pkg/converters/data_table_transaction_data_converter.go @@ -49,8 +49,12 @@ type DataTableTransactionDataImporter struct { transactionTypeMapping map[models.TransactionType]string geoLocationSeparator string transactionTagSeparator string + postProcessFunc DataTableTransactionDataImporterPostProcessFunc } +// DataTableTransactionDataImporterPostProcessFunc represents item post process function of DataTableTransactionDataImporter +type DataTableTransactionDataImporterPostProcessFunc func(core.Context, *models.ImportTransaction) error + func (c *DataTableTransactionDataExporter) buildExportedContent(ctx core.Context, dataTableBuilder DataTableBuilder, uid int64, transactions []*models.Transaction, accountMap map[int64]*models.Account, categoryMap map[int64]*models.TransactionCategory, tagMap map[int64]*models.TransactionTag, allTagIndexes map[int64][]int64) error { for i := 0; i < len(transactions); i++ { transaction := transactions[i] @@ -492,6 +496,15 @@ func (c *DataTableTransactionDataImporter) parseImportedData(ctx core.Context, u OriginalTagNames: tagNames, } + if c.postProcessFunc != nil { + err = c.postProcessFunc(ctx, transaction) + + if err != nil { + log.Errorf(ctx, "[data_table_transaction_data_converter.parseImportedData] cannot post process data row \"index:%d\" for user \"uid:%d\", because %s", dataRowIndex, user.Uid, err.Error()) + return nil, nil, nil, nil, err + } + } + allNewTransactions = append(allNewTransactions, transaction) } diff --git a/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer.go b/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer.go index 0ddda326..080773b8 100644 --- a/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer.go +++ b/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer.go @@ -192,6 +192,7 @@ func (c *feideeMymoneyTransactionDataCsvImporter) ParseImportedData(ctx core.Con dataTableImporter := DataTableTransactionDataImporter{ dataColumnMapping: dataTable.GetDataColumnMapping(), transactionTypeMapping: c.transactionTypeMapping, + postProcessFunc: feideeMymoneyTransactionDataImporterPostProcess, } return dataTableImporter.parseImportedData(ctx, user, dataTable, defaultTimezoneOffset, accountMap, categoryMap, tagMap) diff --git a/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer_test.go b/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer_test.go index e1edd6cc..6b46608f 100644 --- a/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer_test.go +++ b/pkg/converters/feidee_mymoney_transaction_data_csv_file_importer_test.go @@ -2,6 +2,7 @@ package converters import ( "testing" + "time" "github.com/stretchr/testify/assert" @@ -22,6 +23,7 @@ func TestFeideeMymoneyCsvFileImporterParseImportedData_MinimumValidData(t *testi allNewTransactions, allNewAccounts, allNewSubCategories, allNewTags, err := converter.ParseImportedData(context, user, []byte("随手记导出文件(headers:v5;xxxxx)\n"+ "\"交易类型\",\"日期\",\"子类别\",\"账户\",\"金额\",\"备注\",\"关联Id\"\n"+ "\"余额变更\",\"2024-09-01 00:00:00\",\"\",\"Test Account\",\"123.45\",\"\",\"\"\n"+ + "\"余额变更\",\"2024-09-01 01:00:00\",\"\",\"Test Account2\",\"-0.12\",\"\",\"\"\n"+ "\"收入\",\"2024-09-01 01:23:45\",\"Test Category\",\"Test Account\",\"0.12\",\"\",\"\"\n"+ "\"支出\",\"2024-09-01 12:34:56\",\"Test Category2\",\"Test Account\",\"1.00\",\"\",\"\"\n"+ "\"转出\",\"2024-09-01 23:59:59\",\"Test Category3\",\"Test Account\",\"0.05\",\"\",\"00000000-0000-0000-0000-000000000001\"\n"+ @@ -31,48 +33,55 @@ func TestFeideeMymoneyCsvFileImporterParseImportedData_MinimumValidData(t *testi assert.Nil(t, err) - assert.Equal(t, 5, len(allNewTransactions)) + assert.Equal(t, 6, len(allNewTransactions)) assert.Equal(t, 2, len(allNewAccounts)) assert.Equal(t, 3, len(allNewSubCategories)) assert.Equal(t, 0, len(allNewTags)) assert.Equal(t, int64(1234567890), allNewTransactions[0].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_MODIFY_BALANCE, allNewTransactions[0].Type) - assert.Equal(t, int64(1725148800), utils.GetUnixTimeFromTransactionTime(allNewTransactions[0].TransactionTime)) + assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[0].Type) + assert.Equal(t, "2024-09-01 00:00:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[0].TransactionTime), time.UTC)) assert.Equal(t, int64(12345), allNewTransactions[0].Amount) assert.Equal(t, "Test Account", allNewTransactions[0].OriginalSourceAccountName) assert.Equal(t, "", allNewTransactions[0].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[1].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[1].Type) - assert.Equal(t, int64(1725153825), utils.GetUnixTimeFromTransactionTime(allNewTransactions[1].TransactionTime)) + assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[1].Type) + assert.Equal(t, "2024-09-01 01:00:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[1].TransactionTime), time.UTC)) assert.Equal(t, int64(12), allNewTransactions[1].Amount) - assert.Equal(t, "Test Account", allNewTransactions[1].OriginalSourceAccountName) - assert.Equal(t, "Test Category", allNewTransactions[1].OriginalCategoryName) + assert.Equal(t, "Test Account2", allNewTransactions[1].OriginalSourceAccountName) + assert.Equal(t, "", allNewTransactions[1].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[2].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[2].Type) - assert.Equal(t, int64(1725194096), utils.GetUnixTimeFromTransactionTime(allNewTransactions[2].TransactionTime)) - assert.Equal(t, int64(100), allNewTransactions[2].Amount) + assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[2].Type) + assert.Equal(t, "2024-09-01 01:23:45", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[2].TransactionTime), time.UTC)) + assert.Equal(t, int64(12), allNewTransactions[2].Amount) assert.Equal(t, "Test Account", allNewTransactions[2].OriginalSourceAccountName) - assert.Equal(t, "Test Category2", allNewTransactions[2].OriginalCategoryName) + assert.Equal(t, "Test Category", allNewTransactions[2].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[3].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_TRANSFER_OUT, allNewTransactions[3].Type) - assert.Equal(t, int64(1725235199), utils.GetUnixTimeFromTransactionTime(allNewTransactions[3].TransactionTime)) - assert.Equal(t, int64(5), allNewTransactions[3].Amount) + assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[3].Type) + assert.Equal(t, "2024-09-01 12:34:56", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[3].TransactionTime), time.UTC)) + assert.Equal(t, int64(100), allNewTransactions[3].Amount) assert.Equal(t, "Test Account", allNewTransactions[3].OriginalSourceAccountName) - assert.Equal(t, "Test Account2", allNewTransactions[3].OriginalDestinationAccountName) - assert.Equal(t, "Test Category3", allNewTransactions[3].OriginalCategoryName) + assert.Equal(t, "Test Category2", allNewTransactions[3].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[4].Uid) assert.Equal(t, models.TRANSACTION_DB_TYPE_TRANSFER_OUT, allNewTransactions[4].Type) - assert.Equal(t, int64(1725321599), utils.GetUnixTimeFromTransactionTime(allNewTransactions[4].TransactionTime)) - assert.Equal(t, int64(50), allNewTransactions[4].Amount) - assert.Equal(t, "Test Account2", allNewTransactions[4].OriginalSourceAccountName) - assert.Equal(t, "Test Account", allNewTransactions[4].OriginalDestinationAccountName) + assert.Equal(t, "2024-09-01 23:59:59", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[4].TransactionTime), time.UTC)) + assert.Equal(t, int64(5), allNewTransactions[4].Amount) + assert.Equal(t, "Test Account", allNewTransactions[4].OriginalSourceAccountName) + assert.Equal(t, "Test Account2", allNewTransactions[4].OriginalDestinationAccountName) assert.Equal(t, "Test Category3", allNewTransactions[4].OriginalCategoryName) + assert.Equal(t, int64(1234567890), allNewTransactions[5].Uid) + assert.Equal(t, models.TRANSACTION_DB_TYPE_TRANSFER_OUT, allNewTransactions[5].Type) + assert.Equal(t, "2024-09-02 23:59:59", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[5].TransactionTime), time.UTC)) + assert.Equal(t, int64(50), allNewTransactions[5].Amount) + assert.Equal(t, "Test Account2", allNewTransactions[5].OriginalSourceAccountName) + assert.Equal(t, "Test Account", allNewTransactions[5].OriginalDestinationAccountName) + assert.Equal(t, "Test Category3", allNewTransactions[5].OriginalCategoryName) + assert.Equal(t, int64(1234567890), allNewAccounts[0].Uid) assert.Equal(t, "Test Account", allNewAccounts[0].Name) assert.Equal(t, "CNY", allNewAccounts[0].Currency) diff --git a/pkg/converters/feidee_mymoney_transaction_data_file_importer.go b/pkg/converters/feidee_mymoney_transaction_data_file_importer.go new file mode 100644 index 00000000..b4b003cc --- /dev/null +++ b/pkg/converters/feidee_mymoney_transaction_data_file_importer.go @@ -0,0 +1,37 @@ +package converters + +import ( + "github.com/mayswind/ezbookkeeping/pkg/core" + "github.com/mayswind/ezbookkeeping/pkg/models" +) + +var feideeMymoneyDataColumnNameMapping = map[DataTableColumn]string{ + DATA_TABLE_TRANSACTION_TIME: "日期", + DATA_TABLE_TRANSACTION_TYPE: "交易类型", + DATA_TABLE_CATEGORY: "分类", + DATA_TABLE_SUB_CATEGORY: "子分类", + DATA_TABLE_ACCOUNT_NAME: "账户1", + DATA_TABLE_AMOUNT: "金额", + DATA_TABLE_RELATED_ACCOUNT_NAME: "账户2", + DATA_TABLE_DESCRIPTION: "备注", +} + +var feideeMymoneyTransactionTypeNameMapping = map[models.TransactionType]string{ + models.TRANSACTION_TYPE_MODIFY_BALANCE: "余额变更", + models.TRANSACTION_TYPE_INCOME: "收入", + models.TRANSACTION_TYPE_EXPENSE: "支出", + models.TRANSACTION_TYPE_TRANSFER: "转账", +} + +func feideeMymoneyTransactionDataImporterPostProcess(ctx core.Context, transaction *models.ImportTransaction) error { + if transaction.Type == models.TRANSACTION_DB_TYPE_MODIFY_BALANCE { + if transaction.Amount >= 0 { + transaction.Type = models.TRANSACTION_DB_TYPE_INCOME + } else if transaction.Amount < 0 { + transaction.Amount = -transaction.Amount + transaction.Type = models.TRANSACTION_DB_TYPE_EXPENSE + } + } + + return nil +} diff --git a/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer.go b/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer.go index 3a2e6fb5..240cf044 100644 --- a/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer.go +++ b/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer.go @@ -10,30 +10,13 @@ type feideeMymoneyTransactionDataXlsImporter struct { DataTableTransactionDataImporter } -var feideeMymoneyDataColumnNameMapping = map[DataTableColumn]string{ - DATA_TABLE_TRANSACTION_TIME: "日期", - DATA_TABLE_TRANSACTION_TYPE: "交易类型", - DATA_TABLE_CATEGORY: "分类", - DATA_TABLE_SUB_CATEGORY: "子分类", - DATA_TABLE_ACCOUNT_NAME: "账户1", - DATA_TABLE_AMOUNT: "金额", - DATA_TABLE_RELATED_ACCOUNT_NAME: "账户2", - DATA_TABLE_DESCRIPTION: "备注", -} - -var feideeMymoneyTransactionTypeNameMapping = map[models.TransactionType]string{ - models.TRANSACTION_TYPE_MODIFY_BALANCE: "余额变更", - models.TRANSACTION_TYPE_INCOME: "收入", - models.TRANSACTION_TYPE_EXPENSE: "支出", - models.TRANSACTION_TYPE_TRANSFER: "转账", -} - // Initialize a feidee mymoney transaction data xls file importer singleton instance var ( FeideeMymoneyTransactionDataXlsImporter = &feideeMymoneyTransactionDataXlsImporter{ DataTableTransactionDataImporter{ dataColumnMapping: feideeMymoneyDataColumnNameMapping, transactionTypeMapping: feideeMymoneyTransactionTypeNameMapping, + postProcessFunc: feideeMymoneyTransactionDataImporterPostProcess, }, } ) diff --git a/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer_test.go b/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer_test.go index ffb1f3f8..5474294f 100644 --- a/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer_test.go +++ b/pkg/converters/feidee_mymoney_transaction_data_xls_file_importer_test.go @@ -27,55 +27,62 @@ func TestFeideeMymoneyTransactionDataXlsImporterParseImportedData_MinimumValidDa allNewTransactions, allNewAccounts, allNewSubCategories, allNewTags, err := converter.ParseImportedData(context, user, testdata, 0, nil, nil, nil) assert.Nil(t, err) - assert.Equal(t, 6, len(allNewTransactions)) + assert.Equal(t, 7, len(allNewTransactions)) assert.Equal(t, 2, len(allNewAccounts)) assert.Equal(t, 5, len(allNewSubCategories)) assert.Equal(t, 0, len(allNewTags)) assert.Equal(t, int64(1234567890), allNewTransactions[0].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_MODIFY_BALANCE, allNewTransactions[0].Type) + assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[0].Type) assert.Equal(t, "2024-09-01 00:00:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[0].TransactionTime), time.UTC)) assert.Equal(t, int64(12345), allNewTransactions[0].Amount) assert.Equal(t, "Test Account", allNewTransactions[0].OriginalSourceAccountName) assert.Equal(t, "", allNewTransactions[0].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[1].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[1].Type) - assert.Equal(t, "2024-09-01 01:23:45", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[1].TransactionTime), time.UTC)) + assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[1].Type) + assert.Equal(t, "2024-09-01 01:00:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[1].TransactionTime), time.UTC)) assert.Equal(t, int64(12), allNewTransactions[1].Amount) - assert.Equal(t, "Test Account", allNewTransactions[1].OriginalSourceAccountName) - assert.Equal(t, "Test Category", allNewTransactions[1].OriginalCategoryName) + assert.Equal(t, "Test Account2", allNewTransactions[1].OriginalSourceAccountName) + assert.Equal(t, "", allNewTransactions[1].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[2].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[2].Type) - assert.Equal(t, "2024-09-01 12:34:56", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[2].TransactionTime), time.UTC)) - assert.Equal(t, int64(100), allNewTransactions[2].Amount) - assert.Equal(t, "Test Account2", allNewTransactions[2].OriginalSourceAccountName) - assert.Equal(t, "Test Category2", allNewTransactions[2].OriginalCategoryName) + assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[2].Type) + assert.Equal(t, "2024-09-01 01:23:45", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[2].TransactionTime), time.UTC)) + assert.Equal(t, int64(12), allNewTransactions[2].Amount) + assert.Equal(t, "Test Account", allNewTransactions[2].OriginalSourceAccountName) + assert.Equal(t, "Test Category", allNewTransactions[2].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[3].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_TRANSFER_OUT, allNewTransactions[3].Type) - assert.Equal(t, "2024-09-01 23:59:59", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[3].TransactionTime), time.UTC)) - assert.Equal(t, int64(5), allNewTransactions[3].Amount) - assert.Equal(t, "Test Comment5", allNewTransactions[3].Comment) - assert.Equal(t, "Test Account", allNewTransactions[3].OriginalSourceAccountName) - assert.Equal(t, "Test Account2", allNewTransactions[3].OriginalDestinationAccountName) - assert.Equal(t, "Test Category3", allNewTransactions[3].OriginalCategoryName) + assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[3].Type) + assert.Equal(t, "2024-09-01 12:34:56", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[3].TransactionTime), time.UTC)) + assert.Equal(t, int64(100), allNewTransactions[3].Amount) + assert.Equal(t, "Test Account2", allNewTransactions[3].OriginalSourceAccountName) + assert.Equal(t, "Test Category2", allNewTransactions[3].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[4].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[4].Type) - assert.Equal(t, "2024-09-10 00:00:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[4].TransactionTime), time.UTC)) - assert.Equal(t, int64(-54300), allNewTransactions[4].Amount) - assert.Equal(t, "Test Account2", allNewTransactions[4].OriginalSourceAccountName) - assert.Equal(t, "Test Category5", allNewTransactions[4].OriginalCategoryName) + assert.Equal(t, models.TRANSACTION_DB_TYPE_TRANSFER_OUT, allNewTransactions[4].Type) + assert.Equal(t, "2024-09-01 23:59:59", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[4].TransactionTime), time.UTC)) + assert.Equal(t, int64(5), allNewTransactions[4].Amount) + assert.Equal(t, "Test Comment5", allNewTransactions[4].Comment) + assert.Equal(t, "Test Account", allNewTransactions[4].OriginalSourceAccountName) + assert.Equal(t, "Test Account2", allNewTransactions[4].OriginalDestinationAccountName) + assert.Equal(t, "Test Category3", allNewTransactions[4].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewTransactions[5].Uid) - assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[5].Type) - assert.Equal(t, "2024-09-11 05:06:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[5].TransactionTime), time.UTC)) - assert.Equal(t, int64(-12340), allNewTransactions[5].Amount) - assert.Equal(t, "Line1\nLine2", allNewTransactions[5].Comment) - assert.Equal(t, "Test Account", allNewTransactions[5].OriginalSourceAccountName) - assert.Equal(t, "Test Category4", allNewTransactions[5].OriginalCategoryName) + assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[5].Type) + assert.Equal(t, "2024-09-10 00:00:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[5].TransactionTime), time.UTC)) + assert.Equal(t, int64(-54300), allNewTransactions[5].Amount) + assert.Equal(t, "Test Account2", allNewTransactions[5].OriginalSourceAccountName) + assert.Equal(t, "Test Category5", allNewTransactions[5].OriginalCategoryName) + + assert.Equal(t, int64(1234567890), allNewTransactions[6].Uid) + assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[6].Type) + assert.Equal(t, "2024-09-11 05:06:00", utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(allNewTransactions[6].TransactionTime), time.UTC)) + assert.Equal(t, int64(-12340), allNewTransactions[6].Amount) + assert.Equal(t, "Line1\nLine2", allNewTransactions[6].Comment) + assert.Equal(t, "Test Account", allNewTransactions[6].OriginalSourceAccountName) + assert.Equal(t, "Test Category4", allNewTransactions[6].OriginalCategoryName) assert.Equal(t, int64(1234567890), allNewAccounts[0].Uid) assert.Equal(t, "Test Account", allNewAccounts[0].Name) diff --git a/testdata/feidee_mymoney_test_file.xls b/testdata/feidee_mymoney_test_file.xls index b9b847564b4b5a94edaf6847d3c7c24c9e48403c..67c3ce275c05162f2acd22269e8e497ec3f8c32b 100644 GIT binary patch delta 1486 zcmZ{jT}V_x6vxlpd)W_nbzQaERnv`(L}>S}3kp%XiMZB+AFKtI2th7H(nC}a5$uPjMrATncbb4^E)%=f9A|=a!5*E zk#49YJQ^%h8UbLkbAnKve3q9J%i32dN*-inYa$;#OS%tW3MWQWuKK<~3FPt#0Us7{ zQJi(_6IsF{ffoXSlz^`j$clgKKkHE+6wwBrPysGkUm>1QF6Rm5avndIV?yOv>RiXF z0Hw}A!ez=Y;)Jysc8)@vv$W=*1E*yGoVx|Q=pXlGuV3RE;urJvHCY9G%7jbIKx;3C zpKlXAksmp_+4SCYyT={l4)Z;2S>y3|x-wk}%1ai_WAY91UI8zq#RZWBo_52XJZ90# zO^)hZg}=hBS)6CZ@3sQ@qHc8fV~rP4cqO<7i+(t(DA$;9?uJ(aJ}%&soYRmi9de)y z0UyA5mJ@b7EvJB2LXa-Gwp&^ubA9BLR#6zLsPi`%dlk~%p1S=$wiv$zPH2l5Od@rC zeVvBwj&eKDmtl6ii(dA3Sf}L}@*Ub2|AP&v3t$`E9FyJ6f!Qk_F@Dp*4^F8_c8{?!a04 zHZp2C)(S9qfX+7F)mB=!$(E5$fcco2*B;Fs`$-BUyaeMSB>WIU(>=|!<6xELT{pn+ z5!`!E^BnqNrE1f{Snor7ae0E_y$#JU=;AXv1Q_imvN)dcb3=GmTFJ n9@3!w8gP)YWIs)XZS-_g3O!6EF&@&ejPF7~)UykiB^NmN0 delta 1300 zcmZqZU}|V#nqa_aKhaQ{#g2i2VPoKW#>xK~?=t_d|G)V@lQ-k$D3%Ls_1r+Ium2So z7`6ZzAi&b8@PI*t0aJWE4)Gow;<(H~QD2W_F)jCo%g2#Z@-j>Gv{g{AbW&;9z*D!vIcq%DM~;en81xK>8_= zKCZ{W@QIOu;gSAkSz|+9E+(Luf(tNhxlW!CHgEGyUm>>1CNbA0e{#>^z790U0;pDm zVblSWM(S|rptptP<_@MlaI#+O->6_VLK4Pz)%*oc|uql z$E1WMoD9La-6<@$8JRb4Oz`KQT+qa}nW