diff --git a/pkg/converters/qif/qif_transaction_data_file_importer_test.go b/pkg/converters/qif/qif_transaction_data_file_importer_test.go index 6421cf05..2755e02c 100644 --- a/pkg/converters/qif/qif_transaction_data_file_importer_test.go +++ b/pkg/converters/qif/qif_transaction_data_file_importer_test.go @@ -38,11 +38,15 @@ func TestQIFTransactionDataFileParseImportedData_MinimumValidData(t *testing.T) "D2024-09-04\n"+ "T-0.05\n"+ "L[Test Account2]\n"+ + "^\n"+ + "D2024-09-05\n"+ + "T0.06\n"+ + "L[Test Account2]\n"+ "^\n"), 0, nil, nil, nil, nil, nil) assert.Nil(t, err) - assert.Equal(t, 4, len(allNewTransactions)) + assert.Equal(t, 5, len(allNewTransactions)) assert.Equal(t, 3, len(allNewAccounts)) assert.Equal(t, 1, len(allNewSubExpenseCategories)) assert.Equal(t, 1, len(allNewSubIncomeCategories)) @@ -78,6 +82,14 @@ func TestQIFTransactionDataFileParseImportedData_MinimumValidData(t *testing.T) assert.Equal(t, "Test Account2", allNewTransactions[3].OriginalDestinationAccountName) assert.Equal(t, "", 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(1725494400), utils.GetUnixTimeFromTransactionTime(allNewTransactions[4].TransactionTime)) + assert.Equal(t, int64(6), allNewTransactions[4].Amount) + assert.Equal(t, "Test Account2", allNewTransactions[4].OriginalSourceAccountName) + assert.Equal(t, "", allNewTransactions[4].OriginalDestinationAccountName) + assert.Equal(t, "", allNewTransactions[4].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/qif/qif_transaction_data_table.go b/pkg/converters/qif/qif_transaction_data_table.go index 6f5bbf59..d37069c8 100644 --- a/pkg/converters/qif/qif_transaction_data_table.go +++ b/pkg/converters/qif/qif_transaction_data_table.go @@ -151,10 +151,17 @@ func (t *qifTransactionDataRowIterator) parseTransaction(ctx core.Context, user data[datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE] = qifTransactionTypeNameMapping[models.TRANSACTION_TYPE_MODIFY_BALANCE] data[datatable.TRANSACTION_DATA_TABLE_AMOUNT] = utils.FormatAmount(amount) data[datatable.TRANSACTION_DATA_TABLE_ACCOUNT_NAME] = qifTransaction.category[1 : len(qifTransaction.category)-1] - } else { // transfer to [account name] + } else { // transfer data[datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE] = qifTransactionTypeNameMapping[models.TRANSACTION_TYPE_TRANSFER] - data[datatable.TRANSACTION_DATA_TABLE_AMOUNT] = utils.FormatAmount(-amount) - data[datatable.TRANSACTION_DATA_TABLE_RELATED_ACCOUNT_NAME] = qifTransaction.category[1 : len(qifTransaction.category)-1] + + if amount >= 0 { // transfer from [account name] + data[datatable.TRANSACTION_DATA_TABLE_AMOUNT] = utils.FormatAmount(amount) + data[datatable.TRANSACTION_DATA_TABLE_RELATED_ACCOUNT_NAME] = data[datatable.TRANSACTION_DATA_TABLE_ACCOUNT_NAME] + data[datatable.TRANSACTION_DATA_TABLE_ACCOUNT_NAME] = qifTransaction.category[1 : len(qifTransaction.category)-1] + } else { // transfer to [account name] + data[datatable.TRANSACTION_DATA_TABLE_AMOUNT] = utils.FormatAmount(-amount) + data[datatable.TRANSACTION_DATA_TABLE_RELATED_ACCOUNT_NAME] = qifTransaction.category[1 : len(qifTransaction.category)-1] + } } } else { // income/expense if amount >= 0 {