From d915de8ff9d04f72822773aedc5677485da93e58 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 11 Sep 2024 01:27:27 +0800 Subject: [PATCH] allow import file does not include transfer in amounts --- .../data_table_transaction_data_converter.go | 15 ++++++---- ...nsaction_data_plain_text_converter_test.go | 28 ++++++++++++++++--- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/pkg/converters/data_table_transaction_data_converter.go b/pkg/converters/data_table_transaction_data_converter.go index 3e3769c2..04e552e8 100644 --- a/pkg/converters/data_table_transaction_data_converter.go +++ b/pkg/converters/data_table_transaction_data_converter.go @@ -210,7 +210,7 @@ func (c *DataTableTransactionDataImporter) parseImportedData(ctx core.Context, u descriptionColumnIdx, descriptionColumnExists := headerItemMap[c.dataColumnMapping[DATA_TABLE_DESCRIPTION]] if !timeColumnExists || !typeColumnExists || !subCategoryColumnExists || - !accountColumnExists || !amountColumnExists || !account2ColumnExists || !amount2ColumnExists { + !accountColumnExists || !amountColumnExists || !account2ColumnExists { log.Errorf(ctx, "[data_table_transaction_data_converter.parseImportedData] cannot parse import data for user \"uid:%d\", because missing essential columns in header row", user.Uid) return nil, nil, nil, nil, errs.ErrMissingRequiredFieldInHeaderRow } @@ -389,11 +389,16 @@ func (c *DataTableTransactionDataImporter) parseImportedData(ctx core.Context, u } relatedAccountId = account2.AccountId - relatedAccountAmount, err = utils.ParseAmount(dataRow.GetData(amount2ColumnIdx)) - if err != nil { - log.Errorf(ctx, "[data_table_transaction_data_converter.parseImportedData] cannot parse acmount2 \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(amount2ColumnIdx), dataRowIndex, user.Uid, err.Error()) - return nil, nil, nil, nil, errs.ErrAmountInvalid + if amount2ColumnExists { + relatedAccountAmount, err = utils.ParseAmount(dataRow.GetData(amount2ColumnIdx)) + + if err != nil { + log.Errorf(ctx, "[data_table_transaction_data_converter.parseImportedData] cannot parse acmount2 \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(amount2ColumnIdx), dataRowIndex, user.Uid, err.Error()) + return nil, nil, nil, nil, errs.ErrAmountInvalid + } + } else if transactionDbType == models.TRANSACTION_DB_TYPE_TRANSFER_OUT { + relatedAccountAmount = amount } } diff --git a/pkg/converters/ezbookkeeping_transaction_data_plain_text_converter_test.go b/pkg/converters/ezbookkeeping_transaction_data_plain_text_converter_test.go index f33d33e9..5617ffe6 100644 --- a/pkg/converters/ezbookkeeping_transaction_data_plain_text_converter_test.go +++ b/pkg/converters/ezbookkeeping_transaction_data_plain_text_converter_test.go @@ -361,6 +361,30 @@ func TestEzBookKeepingPlainFileConverterParseImportedData_ParseInvalidAmount(t * assert.NotNil(t, err) } +func TestEzBookKeepingPlainFileConverterParseImportedData_ParseNoAmount2(t *testing.T) { + converter := EzBookKeepingTransactionDataCSVFileConverter + context := core.NewNullContext() + + user := &models.User{ + Uid: 1234567890, + DefaultCurrency: "CNY", + } + + allNewTransactions, _, _, _, err := converter.ParseImportedData(context, user, []byte("Time,Type,Sub Category,Account,Amount,Account2\n"+ + "2024-09-01 12:34:56,Expense,Test Category,Test Account,123.45,"), 0, nil, nil, nil) + + assert.Nil(t, err) + assert.Equal(t, int64(12345), allNewTransactions[0].Amount) + assert.Equal(t, int64(0), allNewTransactions[0].RelatedAccountAmount) + + allNewTransactions, _, _, _, err = converter.ParseImportedData(context, user, []byte("Time,Type,Sub Category,Account,Amount,Account2\n"+ + "2024-09-01 12:34:56,Transfer,Test Category,Test Account,123.45,Test Account2"), 0, nil, nil, nil) + + assert.Nil(t, err) + assert.Equal(t, int64(12345), allNewTransactions[0].Amount) + assert.Equal(t, int64(12345), allNewTransactions[0].RelatedAccountAmount) +} + func TestEzBookKeepingPlainFileConverterParseImportedData_ParseValidGeographicLocation(t *testing.T) { converter := EzBookKeepingTransactionDataCSVFileConverter context := core.NewNullContext() @@ -486,10 +510,6 @@ func TestEzBookKeepingPlainFileConverterParseImportedData_MissingRequiredColumn( "2024-09-01 00:00:00,+08:00,Balance Modification,Test Category,Test Sub Category,Test Account,CNY,123.45,,,,,"), 0, nil, nil, nil) assert.NotNil(t, err) - _, _, _, _, err = converter.ParseImportedData(context, user, []byte("Time,Timezone,Type,Category,Sub Category,Account,Account Currency,Amount,Account2,Account2 Currency,Geographic Location,Tags,Description\n"+ - "2024-09-01 00:00:00,+08:00,Balance Modification,Test Category,Test Sub Category,Test Account,CNY,123.45,,,,,"), 0, nil, nil, nil) - assert.NotNil(t, err) - _, _, _, _, err = converter.ParseImportedData(context, user, []byte("Time,Timezone,Type,Category,Sub Category,Account,Account Currency,Amount,Account2,Account2 Currency,Account2 Amount,Geographic Location,Tags,Description\n"+ "2024-09-01 00:00:00,+08:00,Balance Modification,Test Category,Test Sub Category,Test Account,CNY,123.45,,,,,"), 0, nil, nil, nil) assert.NotNil(t, err)