mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-21 10:14:26 +08:00
set geo location data order when import transaction
This commit is contained in:
@@ -1219,6 +1219,13 @@ func (a *TransactionsApi) TransactionParseImportFileHandler(c *core.WebContext)
|
|||||||
geoLocationSeparator = geoLocationSeparators[0]
|
geoLocationSeparator = geoLocationSeparators[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
geoLocationOrders := form.Value["geoOrder"]
|
||||||
|
geoLocationOrder := ""
|
||||||
|
|
||||||
|
if len(geoLocationOrders) > 0 {
|
||||||
|
geoLocationOrder = geoLocationOrders[0]
|
||||||
|
}
|
||||||
|
|
||||||
transactionTagSeparators := form.Value["tagSeparator"]
|
transactionTagSeparators := form.Value["tagSeparator"]
|
||||||
transactionTagSeparator := ""
|
transactionTagSeparator := ""
|
||||||
|
|
||||||
@@ -1226,7 +1233,7 @@ func (a *TransactionsApi) TransactionParseImportFileHandler(c *core.WebContext)
|
|||||||
transactionTagSeparator = transactionTagSeparators[0]
|
transactionTagSeparator = transactionTagSeparators[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
dataImporter, err = converters.CreateNewDelimiterSeparatedValuesDataImporter(fileType, fileEncoding, columnIndexMapping, transactionTypeNameMapping, hasHeaderLine, timeFormats[0], timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoLocationSeparator, transactionTagSeparator)
|
dataImporter, err = converters.CreateNewDelimiterSeparatedValuesDataImporter(fileType, fileEncoding, columnIndexMapping, transactionTypeNameMapping, hasHeaderLine, timeFormats[0], timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoLocationSeparator, geoLocationOrder, transactionTagSeparator)
|
||||||
} else {
|
} else {
|
||||||
dataImporter, err = converters.GetTransactionDataImporter(fileType)
|
dataImporter, err = converters.GetTransactionDataImporter(fileType)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ func (c *beancountTransactionDataImporter) ParseImportedData(ctx core.Context, u
|
|||||||
return nil, nil, nil, nil, nil, nil, err
|
return nil, nil, nil, nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(beancountTransactionTypeNameMapping, "", BEANCOUNT_TRANSACTION_TAG_SEPARATOR)
|
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(beancountTransactionTypeNameMapping, "", "", BEANCOUNT_TRANSACTION_TAG_SEPARATOR)
|
||||||
|
|
||||||
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezoneOffset, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezoneOffset, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,10 +13,18 @@ import (
|
|||||||
"github.com/mayswind/ezbookkeeping/pkg/validators"
|
"github.com/mayswind/ezbookkeeping/pkg/validators"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type TransactionGeoLocationOrder string
|
||||||
|
|
||||||
|
const (
|
||||||
|
TRANSACTION_GEO_LOCATION_ORDER_LONGITUDE_LATITUDE TransactionGeoLocationOrder = "lonlat" // longitude first, then latitude
|
||||||
|
TRANSACTION_GEO_LOCATION_ORDER_LATITUDE_LONGITUDE TransactionGeoLocationOrder = "latlon" // latitude first, then longitude
|
||||||
|
)
|
||||||
|
|
||||||
// DataTableTransactionDataImporter defines the structure of plain text data table importer for transaction data
|
// DataTableTransactionDataImporter defines the structure of plain text data table importer for transaction data
|
||||||
type DataTableTransactionDataImporter struct {
|
type DataTableTransactionDataImporter struct {
|
||||||
transactionTypeMapping map[string]models.TransactionType
|
transactionTypeMapping map[string]models.TransactionType
|
||||||
geoLocationSeparator string
|
geoLocationSeparator string
|
||||||
|
geoLocationOrder TransactionGeoLocationOrder
|
||||||
transactionTagSeparator string
|
transactionTagSeparator string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,19 +276,27 @@ func (c *DataTableTransactionDataImporter) ParseImportedData(ctx core.Context, u
|
|||||||
geoLocationItems := strings.Split(dataRow.GetData(datatable.TRANSACTION_DATA_TABLE_GEOGRAPHIC_LOCATION), c.geoLocationSeparator)
|
geoLocationItems := strings.Split(dataRow.GetData(datatable.TRANSACTION_DATA_TABLE_GEOGRAPHIC_LOCATION), c.geoLocationSeparator)
|
||||||
|
|
||||||
if len(geoLocationItems) == 2 {
|
if len(geoLocationItems) == 2 {
|
||||||
geoLongitude, err = utils.StringToFloat64(geoLocationItems[0])
|
geoLocationFirstItem, err := utils.StringToFloat64(geoLocationItems[0])
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(ctx, "[data_table_transaction_data_exporter.ParseImportedData] cannot parse geographic location \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(datatable.TRANSACTION_DATA_TABLE_GEOGRAPHIC_LOCATION), dataRowIndex, user.Uid, err.Error())
|
log.Errorf(ctx, "[data_table_transaction_data_exporter.ParseImportedData] cannot parse geographic location \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(datatable.TRANSACTION_DATA_TABLE_GEOGRAPHIC_LOCATION), dataRowIndex, user.Uid, err.Error())
|
||||||
return nil, nil, nil, nil, nil, nil, errs.ErrGeographicLocationInvalid
|
return nil, nil, nil, nil, nil, nil, errs.ErrGeographicLocationInvalid
|
||||||
}
|
}
|
||||||
|
|
||||||
geoLatitude, err = utils.StringToFloat64(geoLocationItems[1])
|
geoLocationSecondItem, err := utils.StringToFloat64(geoLocationItems[1])
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(ctx, "[data_table_transaction_data_exporter.ParseImportedData] cannot parse geographic location \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(datatable.TRANSACTION_DATA_TABLE_GEOGRAPHIC_LOCATION), dataRowIndex, user.Uid, err.Error())
|
log.Errorf(ctx, "[data_table_transaction_data_exporter.ParseImportedData] cannot parse geographic location \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(datatable.TRANSACTION_DATA_TABLE_GEOGRAPHIC_LOCATION), dataRowIndex, user.Uid, err.Error())
|
||||||
return nil, nil, nil, nil, nil, nil, errs.ErrGeographicLocationInvalid
|
return nil, nil, nil, nil, nil, nil, errs.ErrGeographicLocationInvalid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.geoLocationOrder == TRANSACTION_GEO_LOCATION_ORDER_LONGITUDE_LATITUDE {
|
||||||
|
geoLongitude = geoLocationFirstItem
|
||||||
|
geoLatitude = geoLocationSecondItem
|
||||||
|
} else if c.geoLocationOrder == TRANSACTION_GEO_LOCATION_ORDER_LATITUDE_LONGITUDE {
|
||||||
|
geoLatitude = geoLocationFirstItem
|
||||||
|
geoLongitude = geoLocationSecondItem
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -466,10 +482,11 @@ func (c *DataTableTransactionDataImporter) createNewTransactionTagModel(uid int6
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateNewImporterWithTypeNameMapping returns a new data table transaction data importer according to the specified arguments
|
// CreateNewImporterWithTypeNameMapping returns a new data table transaction data importer according to the specified arguments
|
||||||
func CreateNewImporterWithTypeNameMapping(transactionTypeMapping map[models.TransactionType]string, geoLocationSeparator string, transactionTagSeparator string) *DataTableTransactionDataImporter {
|
func CreateNewImporterWithTypeNameMapping(transactionTypeMapping map[models.TransactionType]string, geoLocationSeparator string, geoLocationOrder TransactionGeoLocationOrder, transactionTagSeparator string) *DataTableTransactionDataImporter {
|
||||||
return &DataTableTransactionDataImporter{
|
return &DataTableTransactionDataImporter{
|
||||||
transactionTypeMapping: buildTransactionNameTypeMap(transactionTypeMapping),
|
transactionTypeMapping: buildTransactionNameTypeMap(transactionTypeMapping),
|
||||||
geoLocationSeparator: geoLocationSeparator,
|
geoLocationSeparator: geoLocationSeparator,
|
||||||
|
geoLocationOrder: geoLocationOrder,
|
||||||
transactionTagSeparator: transactionTagSeparator,
|
transactionTagSeparator: transactionTagSeparator,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ type defaultTransactionDataPlainTextConverter struct {
|
|||||||
|
|
||||||
const ezbookkeepingLineSeparator = "\n"
|
const ezbookkeepingLineSeparator = "\n"
|
||||||
const ezbookkeepingGeoLocationSeparator = " "
|
const ezbookkeepingGeoLocationSeparator = " "
|
||||||
|
const ezbookkeepingGeoLocationOrder = converter.TRANSACTION_GEO_LOCATION_ORDER_LONGITUDE_LATITUDE
|
||||||
const ezbookkeepingTagSeparator = ";"
|
const ezbookkeepingTagSeparator = ";"
|
||||||
|
|
||||||
var ezbookkeepingDataColumnNameMapping = map[datatable.TransactionDataTableColumn]string{
|
var ezbookkeepingDataColumnNameMapping = map[datatable.TransactionDataTableColumn]string{
|
||||||
@@ -99,6 +100,7 @@ func (c *defaultTransactionDataPlainTextConverter) ParseImportedData(ctx core.Co
|
|||||||
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(
|
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(
|
||||||
ezbookkeepingTransactionTypeNameMapping,
|
ezbookkeepingTransactionTypeNameMapping,
|
||||||
ezbookkeepingGeoLocationSeparator,
|
ezbookkeepingGeoLocationSeparator,
|
||||||
|
ezbookkeepingGeoLocationOrder,
|
||||||
ezbookkeepingTagSeparator,
|
ezbookkeepingTagSeparator,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ type customTransactionDataDsvFileImporter struct {
|
|||||||
amountDecimalSeparator string
|
amountDecimalSeparator string
|
||||||
amountDigitGroupingSymbol string
|
amountDigitGroupingSymbol string
|
||||||
geoLocationSeparator string
|
geoLocationSeparator string
|
||||||
|
geoLocationOrder converter.TransactionGeoLocationOrder
|
||||||
transactionTagSeparator string
|
transactionTagSeparator string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +159,7 @@ func (c *customTransactionDataDsvFileImporter) ParseImportedData(ctx core.Contex
|
|||||||
|
|
||||||
dataTable := csvconverter.CreateNewCustomCsvImportedDataTable(allLines)
|
dataTable := csvconverter.CreateNewCustomCsvImportedDataTable(allLines)
|
||||||
transactionDataTable := CreateNewCustomPlainTextDataTable(dataTable, c.columnIndexMapping, c.transactionTypeNameMapping, c.timeFormat, c.timezoneFormat, c.amountDecimalSeparator, c.amountDigitGroupingSymbol)
|
transactionDataTable := CreateNewCustomPlainTextDataTable(dataTable, c.columnIndexMapping, c.transactionTypeNameMapping, c.timeFormat, c.timezoneFormat, c.amountDecimalSeparator, c.amountDigitGroupingSymbol)
|
||||||
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(customTransactionTypeNameMapping, c.geoLocationSeparator, c.transactionTagSeparator)
|
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(customTransactionTypeNameMapping, c.geoLocationSeparator, c.geoLocationOrder, c.transactionTagSeparator)
|
||||||
|
|
||||||
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezoneOffset, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezoneOffset, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
||||||
}
|
}
|
||||||
@@ -190,7 +191,7 @@ func CreateNewCustomTransactionDataDsvFileParser(fileType string, fileEncoding s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateNewCustomTransactionDataDsvFileImporter returns a new custom dsv importer for transaction data
|
// CreateNewCustomTransactionDataDsvFileImporter returns a new custom dsv importer for transaction data
|
||||||
func CreateNewCustomTransactionDataDsvFileImporter(fileType string, fileEncoding string, columnIndexMapping map[datatable.TransactionDataTableColumn]int, transactionTypeNameMapping map[string]models.TransactionType, hasHeaderLine bool, timeFormat string, timezoneFormat string, amountDecimalSeparator string, amountDigitGroupingSymbol string, geoLocationSeparator string, transactionTagSeparator string) (converter.TransactionDataImporter, error) {
|
func CreateNewCustomTransactionDataDsvFileImporter(fileType string, fileEncoding string, columnIndexMapping map[datatable.TransactionDataTableColumn]int, transactionTypeNameMapping map[string]models.TransactionType, hasHeaderLine bool, timeFormat string, timezoneFormat string, amountDecimalSeparator string, amountDigitGroupingSymbol string, geoLocationSeparator string, geoLocationOrder string, transactionTagSeparator string) (converter.TransactionDataImporter, error) {
|
||||||
separator, exists := supportedFileTypeSeparators[fileType]
|
separator, exists := supportedFileTypeSeparators[fileType]
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
@@ -203,6 +204,13 @@ func CreateNewCustomTransactionDataDsvFileImporter(fileType string, fileEncoding
|
|||||||
return nil, errs.ErrImportFileEncodingNotSupported
|
return nil, errs.ErrImportFileEncodingNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if geoLocationOrder == "" {
|
||||||
|
geoLocationOrder = string(converter.TRANSACTION_GEO_LOCATION_ORDER_LONGITUDE_LATITUDE)
|
||||||
|
} else if geoLocationOrder != string(converter.TRANSACTION_GEO_LOCATION_ORDER_LONGITUDE_LATITUDE) &&
|
||||||
|
geoLocationOrder != string(converter.TRANSACTION_GEO_LOCATION_ORDER_LATITUDE_LONGITUDE) {
|
||||||
|
return nil, errs.ErrImportFileTypeNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
if _, exists = columnIndexMapping[datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TIME]; !exists {
|
if _, exists = columnIndexMapping[datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TIME]; !exists {
|
||||||
return nil, errs.ErrMissingRequiredFieldInHeaderRow
|
return nil, errs.ErrMissingRequiredFieldInHeaderRow
|
||||||
}
|
}
|
||||||
@@ -226,6 +234,7 @@ func CreateNewCustomTransactionDataDsvFileImporter(fileType string, fileEncoding
|
|||||||
amountDecimalSeparator: amountDecimalSeparator,
|
amountDecimalSeparator: amountDecimalSeparator,
|
||||||
amountDigitGroupingSymbol: amountDigitGroupingSymbol,
|
amountDigitGroupingSymbol: amountDigitGroupingSymbol,
|
||||||
geoLocationSeparator: geoLocationSeparator,
|
geoLocationSeparator: geoLocationSeparator,
|
||||||
|
geoLocationOrder: converter.TransactionGeoLocationOrder(geoLocationOrder),
|
||||||
transactionTagSeparator: transactionTagSeparator,
|
transactionTagSeparator: transactionTagSeparator,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ func TestCustomTransactionDataDsvFileImporter_MinimumValidData(t *testing.T) {
|
|||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", ".", "", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", ".", "", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -168,7 +168,7 @@ func TestCustomTransactionDataDsvFileImporter_WithAllSupportedColumns(t *testing
|
|||||||
"Expense": models.TRANSACTION_TYPE_EXPENSE,
|
"Expense": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
"Transfer": models.TRANSACTION_TYPE_TRANSFER,
|
"Transfer": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, true, "YYYY-MM-DD HH:mm:ss", "", ".", "", " ", ";")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, true, "YYYY-MM-DD HH:mm:ss", "", ".", "", " ", "lonlat", ";")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -261,7 +261,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidTime(t *testing.T) {
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -292,7 +292,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseTransactionWithoutType(t *tes
|
|||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -316,7 +316,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidType(t *testing.T) {
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"B": 0,
|
"B": 0,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -340,7 +340,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseTimeWithTimezone(t *testing.T
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ssZ", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ssZ", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -378,7 +378,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseTimeWithTimezone2(t *testing.
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ssZZ", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ssZZ", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -417,7 +417,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseValidTimezone(t *testing.T) {
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -456,7 +456,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseValidTimezone2(t *testing.T)
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "ZZ", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "ZZ", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -495,7 +495,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidTimezoneFormat(t *test
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "z", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "z", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -520,7 +520,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidTimezone(t *testing.T)
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -549,7 +549,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidTimezone2(t *testing.T
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "ZZ", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "ZZ", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -577,7 +577,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseAmountWithCustomFormat(t *tes
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_tsv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ",", ".", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_tsv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ",", ".", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -603,7 +603,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidAmountWithCustomFormat
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_tsv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", ",", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_tsv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", ",", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -627,7 +627,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidAmountWithCustomFormat
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_tsv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ",", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_tsv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ",", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -655,7 +655,7 @@ func TestCustomTransactionDataDsvFileImporter_ParsePrimaryCategory(t *testing.T)
|
|||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -724,7 +724,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseValidAccountCurrency(t *testi
|
|||||||
"B": models.TRANSACTION_TYPE_MODIFY_BALANCE,
|
"B": models.TRANSACTION_TYPE_MODIFY_BALANCE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -767,7 +767,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidAccountCurrency(t *tes
|
|||||||
"B": models.TRANSACTION_TYPE_MODIFY_BALANCE,
|
"B": models.TRANSACTION_TYPE_MODIFY_BALANCE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -803,7 +803,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseNotSupportedCurrency(t *testi
|
|||||||
"B": models.TRANSACTION_TYPE_MODIFY_BALANCE,
|
"B": models.TRANSACTION_TYPE_MODIFY_BALANCE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -835,7 +835,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseValidAmount(t *testing.T) {
|
|||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -886,7 +886,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidAmount(t *testing.T) {
|
|||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -917,7 +917,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseNoAmount2(t *testing.T) {
|
|||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -952,7 +952,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseValidGeographicLocation(t *te
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", ";", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", ";", "lonlat", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -981,7 +981,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseInvalidGeographicLocation(t *
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", " ", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", " ", "lonlat", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -1013,7 +1013,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseTag(t *testing.T) {
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", ";")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", ";")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -1053,7 +1053,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseTagWithoutSeparator(t *testin
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"E": models.TRANSACTION_TYPE_EXPENSE,
|
"E": models.TRANSACTION_TYPE_EXPENSE,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -1084,7 +1084,7 @@ func TestCustomTransactionDataDsvFileImporter_ParseDescription(t *testing.T) {
|
|||||||
transactionTypeMapping := map[string]models.TransactionType{
|
transactionTypeMapping := map[string]models.TransactionType{
|
||||||
"T": models.TRANSACTION_TYPE_TRANSFER,
|
"T": models.TRANSACTION_TYPE_TRANSFER,
|
||||||
}
|
}
|
||||||
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
converter, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
context := core.NewNullContext()
|
context := core.NewNullContext()
|
||||||
@@ -1111,7 +1111,7 @@ func TestCustomTransactionDataDsvFileImporter_InvalidSeparator(t *testing.T) {
|
|||||||
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 1,
|
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 1,
|
||||||
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 2,
|
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 2,
|
||||||
}
|
}
|
||||||
_, err := CreateNewCustomTransactionDataDsvFileImporter("test", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
_, err := CreateNewCustomTransactionDataDsvFileImporter("test", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.EqualError(t, err, errs.ErrImportFileTypeNotSupported.Message)
|
assert.EqualError(t, err, errs.ErrImportFileTypeNotSupported.Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1124,7 +1124,7 @@ func TestCustomTransactionDataDsvFileImporter_InvalidFileEncoding(t *testing.T)
|
|||||||
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 1,
|
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 1,
|
||||||
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 2,
|
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 2,
|
||||||
}
|
}
|
||||||
_, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "ascii", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
_, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "ascii", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.EqualError(t, err, errs.ErrImportFileEncodingNotSupported.Message)
|
assert.EqualError(t, err, errs.ErrImportFileEncodingNotSupported.Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1138,7 +1138,7 @@ func TestCustomTransactionDataDsvFileImporter_MissingRequiredColumn(t *testing.T
|
|||||||
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 0,
|
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 0,
|
||||||
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 1,
|
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 1,
|
||||||
}
|
}
|
||||||
_, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
_, err := CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.EqualError(t, err, errs.ErrMissingRequiredFieldInHeaderRow.Message)
|
assert.EqualError(t, err, errs.ErrMissingRequiredFieldInHeaderRow.Message)
|
||||||
|
|
||||||
// Missing Type Column
|
// Missing Type Column
|
||||||
@@ -1146,7 +1146,7 @@ func TestCustomTransactionDataDsvFileImporter_MissingRequiredColumn(t *testing.T
|
|||||||
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TIME: 0,
|
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TIME: 0,
|
||||||
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 1,
|
datatable.TRANSACTION_DATA_TABLE_AMOUNT: 1,
|
||||||
}
|
}
|
||||||
_, err = CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
_, err = CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.EqualError(t, err, errs.ErrMissingRequiredFieldInHeaderRow.Message)
|
assert.EqualError(t, err, errs.ErrMissingRequiredFieldInHeaderRow.Message)
|
||||||
|
|
||||||
// Missing Amount Column
|
// Missing Amount Column
|
||||||
@@ -1154,6 +1154,6 @@ func TestCustomTransactionDataDsvFileImporter_MissingRequiredColumn(t *testing.T
|
|||||||
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TIME: 0,
|
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TIME: 0,
|
||||||
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 1,
|
datatable.TRANSACTION_DATA_TABLE_TRANSACTION_TYPE: 1,
|
||||||
}
|
}
|
||||||
_, err = CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "")
|
_, err = CreateNewCustomTransactionDataDsvFileImporter("custom_csv", "utf-8", columnIndexMapping, transactionTypeMapping, false, "YYYY-MM-DD HH:mm:ss", "", ".", "", "", "", "")
|
||||||
assert.EqualError(t, err, errs.ErrMissingRequiredFieldInHeaderRow.Message)
|
assert.EqualError(t, err, errs.ErrMissingRequiredFieldInHeaderRow.Message)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ func (c *fireflyIIITransactionDataCsvFileImporter) ParseImportedData(ctx core.Co
|
|||||||
|
|
||||||
transactionRowParser := createFireflyIIITransactionDataRowParser()
|
transactionRowParser := createFireflyIIITransactionDataRowParser()
|
||||||
transactionDataTable := datatable.CreateNewImportedTransactionDataTableWithRowParser(dataTable, fireflyIIITransactionDataColumnNameMapping, transactionRowParser)
|
transactionDataTable := datatable.CreateNewImportedTransactionDataTableWithRowParser(dataTable, fireflyIIITransactionDataColumnNameMapping, transactionRowParser)
|
||||||
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(fireflyIIITransactionTypeNameMapping, "", ",")
|
dataTableImporter := converter.CreateNewImporterWithTypeNameMapping(fireflyIIITransactionTypeNameMapping, "", "", ",")
|
||||||
|
|
||||||
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezoneOffset, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezoneOffset, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,6 +81,6 @@ func CreateNewDelimiterSeparatedValuesDataParser(fileType string, fileEncoding s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateNewDelimiterSeparatedValuesDataImporter returns a new delimiter-separated values data importer according to the file type and encoding
|
// CreateNewDelimiterSeparatedValuesDataImporter returns a new delimiter-separated values data importer according to the file type and encoding
|
||||||
func CreateNewDelimiterSeparatedValuesDataImporter(fileType string, fileEncoding string, columnIndexMapping map[datatable.TransactionDataTableColumn]int, transactionTypeNameMapping map[string]models.TransactionType, hasHeaderLine bool, timeFormat string, timezoneFormat string, amountDecimalSeparator string, amountDigitGroupingSymbol string, geoLocationSeparator string, transactionTagSeparator string) (converter.TransactionDataImporter, error) {
|
func CreateNewDelimiterSeparatedValuesDataImporter(fileType string, fileEncoding string, columnIndexMapping map[datatable.TransactionDataTableColumn]int, transactionTypeNameMapping map[string]models.TransactionType, hasHeaderLine bool, timeFormat string, timezoneFormat string, amountDecimalSeparator string, amountDigitGroupingSymbol string, geoLocationSeparator string, geoLocationOrder string, transactionTagSeparator string) (converter.TransactionDataImporter, error) {
|
||||||
return dsv.CreateNewCustomTransactionDataDsvFileImporter(fileType, fileEncoding, columnIndexMapping, transactionTypeNameMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoLocationSeparator, transactionTagSeparator)
|
return dsv.CreateNewCustomTransactionDataDsvFileImporter(fileType, fileEncoding, columnIndexMapping, transactionTypeNameMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoLocationSeparator, geoLocationOrder, transactionTagSeparator)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -447,7 +447,7 @@ export default {
|
|||||||
timeout: DEFAULT_UPLOAD_API_TIMEOUT
|
timeout: DEFAULT_UPLOAD_API_TIMEOUT
|
||||||
} as ApiRequestConfig);
|
} as ApiRequestConfig);
|
||||||
},
|
},
|
||||||
parseImportTransaction: ({ fileType, fileEncoding, importFile, columnMapping, transactionTypeMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoSeparator, tagSeparator }: { fileType: string, fileEncoding?: string, importFile: File, columnMapping?: Record<number, number>, transactionTypeMapping?: Record<string, TransactionType>, hasHeaderLine?: boolean, timeFormat?: string, timezoneFormat?: string, amountDecimalSeparator?: string, amountDigitGroupingSymbol?: string, geoSeparator?: string, tagSeparator?: string }): ApiResponsePromise<ImportTransactionResponsePageWrapper> => {
|
parseImportTransaction: ({ fileType, fileEncoding, importFile, columnMapping, transactionTypeMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoSeparator, geoOrder, tagSeparator }: { fileType: string, fileEncoding?: string, importFile: File, columnMapping?: Record<number, number>, transactionTypeMapping?: Record<string, TransactionType>, hasHeaderLine?: boolean, timeFormat?: string, timezoneFormat?: string, amountDecimalSeparator?: string, amountDigitGroupingSymbol?: string, geoSeparator?: string, geoOrder?: string, tagSeparator?: string }): ApiResponsePromise<ImportTransactionResponsePageWrapper> => {
|
||||||
let textualColumnMapping: string | undefined = undefined;
|
let textualColumnMapping: string | undefined = undefined;
|
||||||
let textualTransactionTypeMapping: string | undefined = undefined;
|
let textualTransactionTypeMapping: string | undefined = undefined;
|
||||||
let textualHasHeaderLine: string | undefined = undefined;
|
let textualHasHeaderLine: string | undefined = undefined;
|
||||||
@@ -476,6 +476,7 @@ export default {
|
|||||||
amountDecimalSeparator: amountDecimalSeparator,
|
amountDecimalSeparator: amountDecimalSeparator,
|
||||||
amountDigitGroupingSymbol: amountDigitGroupingSymbol,
|
amountDigitGroupingSymbol: amountDigitGroupingSymbol,
|
||||||
geoSeparator: geoSeparator,
|
geoSeparator: geoSeparator,
|
||||||
|
geoOrder: geoOrder,
|
||||||
tagSeparator: tagSeparator
|
tagSeparator: tagSeparator
|
||||||
}, {
|
}, {
|
||||||
timeout: DEFAULT_UPLOAD_API_TIMEOUT
|
timeout: DEFAULT_UPLOAD_API_TIMEOUT
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "Gleiche Zeit wie Standardzeitzone",
|
"Same time as default timezone": "Gleiche Zeit wie Standardzeitzone",
|
||||||
"Transaction Type": "Transaction Type",
|
"Transaction Type": "Transaction Type",
|
||||||
"Geographic Location": "Geografischer Standort",
|
"Geographic Location": "Geografischer Standort",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "Kein Standort",
|
"No Location": "Kein Standort",
|
||||||
"Getting Location...": "Standort wird ermittelt...",
|
"Getting Location...": "Standort wird ermittelt...",
|
||||||
"Show on the map": "Auf der Karte anzeigen",
|
"Show on the map": "Auf der Karte anzeigen",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "Same time as default timezone",
|
"Same time as default timezone": "Same time as default timezone",
|
||||||
"Transaction Type": "Transaction Type",
|
"Transaction Type": "Transaction Type",
|
||||||
"Geographic Location": "Geographic Location",
|
"Geographic Location": "Geographic Location",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "No Location",
|
"No Location": "No Location",
|
||||||
"Getting Location...": "Getting Location...",
|
"Getting Location...": "Getting Location...",
|
||||||
"Show on the map": "Show on the map",
|
"Show on the map": "Show on the map",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "Misma hora que la zona horaria predeterminada",
|
"Same time as default timezone": "Misma hora que la zona horaria predeterminada",
|
||||||
"Transaction Type": "Transaction Type",
|
"Transaction Type": "Transaction Type",
|
||||||
"Geographic Location": "Ubicación geográfica",
|
"Geographic Location": "Ubicación geográfica",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "Sin ubicación",
|
"No Location": "Sin ubicación",
|
||||||
"Getting Location...": "Obteniendo ubicación...",
|
"Getting Location...": "Obteniendo ubicación...",
|
||||||
"Show on the map": "Mostrar en el mapa",
|
"Show on the map": "Mostrar en el mapa",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "Stessa ora del fuso orario predefinito",
|
"Same time as default timezone": "Stessa ora del fuso orario predefinito",
|
||||||
"Transaction Type": "Tipo di transazione",
|
"Transaction Type": "Tipo di transazione",
|
||||||
"Geographic Location": "Posizione geografica",
|
"Geographic Location": "Posizione geografica",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "Nessuna posizione",
|
"No Location": "Nessuna posizione",
|
||||||
"Getting Location...": "Recupero posizione...",
|
"Getting Location...": "Recupero posizione...",
|
||||||
"Show on the map": "Mostra sulla mappa",
|
"Show on the map": "Mostra sulla mappa",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "デフォルトのタイムゾーンと同じ時間",
|
"Same time as default timezone": "デフォルトのタイムゾーンと同じ時間",
|
||||||
"Transaction Type": "取引タイプ",
|
"Transaction Type": "取引タイプ",
|
||||||
"Geographic Location": "地理座標",
|
"Geographic Location": "地理座標",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "座標はありません",
|
"No Location": "座標はありません",
|
||||||
"Getting Location...": "座標を取得中...",
|
"Getting Location...": "座標を取得中...",
|
||||||
"Show on the map": "マップに表示",
|
"Show on the map": "マップに表示",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "То же время, что и в часовом поясе по умолчанию",
|
"Same time as default timezone": "То же время, что и в часовом поясе по умолчанию",
|
||||||
"Transaction Type": "Transaction Type",
|
"Transaction Type": "Transaction Type",
|
||||||
"Geographic Location": "Географическое местоположение",
|
"Geographic Location": "Географическое местоположение",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "Нет местоположения",
|
"No Location": "Нет местоположения",
|
||||||
"Getting Location...": "Получение местоположения...",
|
"Getting Location...": "Получение местоположения...",
|
||||||
"Show on the map": "Показать на карте",
|
"Show on the map": "Показать на карте",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "Той самий час, що й у часовому поясі за замовчуванням",
|
"Same time as default timezone": "Той самий час, що й у часовому поясі за замовчуванням",
|
||||||
"Transaction Type": "Тип транзакції",
|
"Transaction Type": "Тип транзакції",
|
||||||
"Geographic Location": "Географічне розташування",
|
"Geographic Location": "Географічне розташування",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "Немає розташування",
|
"No Location": "Немає розташування",
|
||||||
"Getting Location...": "Отримання розташування...",
|
"Getting Location...": "Отримання розташування...",
|
||||||
"Show on the map": "Показати на карті",
|
"Show on the map": "Показати на карті",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "Cùng thời gian với múi giờ mặc định",
|
"Same time as default timezone": "Cùng thời gian với múi giờ mặc định",
|
||||||
"Transaction Type": "Transaction Type",
|
"Transaction Type": "Transaction Type",
|
||||||
"Geographic Location": "Vị trí địa lý",
|
"Geographic Location": "Vị trí địa lý",
|
||||||
|
"Longitude": "Longitude",
|
||||||
|
"Latitude": "Latitude",
|
||||||
"No Location": "Không có vị trí",
|
"No Location": "Không có vị trí",
|
||||||
"Getting Location...": "Đang lấy vị trí...",
|
"Getting Location...": "Đang lấy vị trí...",
|
||||||
"Show on the map": "Hiển thị trên bản đồ",
|
"Show on the map": "Hiển thị trên bản đồ",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "与默认时区时间相同",
|
"Same time as default timezone": "与默认时区时间相同",
|
||||||
"Transaction Type": "交易类型",
|
"Transaction Type": "交易类型",
|
||||||
"Geographic Location": "地理位置",
|
"Geographic Location": "地理位置",
|
||||||
|
"Longitude": "经度",
|
||||||
|
"Latitude": "纬度",
|
||||||
"No Location": "没有位置",
|
"No Location": "没有位置",
|
||||||
"Getting Location...": "正在获取位置...",
|
"Getting Location...": "正在获取位置...",
|
||||||
"Show on the map": "在地图上显示",
|
"Show on the map": "在地图上显示",
|
||||||
|
|||||||
@@ -1657,6 +1657,8 @@
|
|||||||
"Same time as default timezone": "與預設時區時間相同",
|
"Same time as default timezone": "與預設時區時間相同",
|
||||||
"Transaction Type": "交易類型",
|
"Transaction Type": "交易類型",
|
||||||
"Geographic Location": "地理位置",
|
"Geographic Location": "地理位置",
|
||||||
|
"Longitude": "經度",
|
||||||
|
"Latitude": "緯度",
|
||||||
"No Location": "沒有位置",
|
"No Location": "沒有位置",
|
||||||
"Getting Location...": "正在取得位置...",
|
"Getting Location...": "正在取得位置...",
|
||||||
"Show on the map": "在地圖上顯示",
|
"Show on the map": "在地圖上顯示",
|
||||||
|
|||||||
@@ -1129,9 +1129,9 @@ export const useTransactionsStore = defineStore('transactions', () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseImportTransaction({ fileType, fileEncoding, importFile, columnMapping, transactionTypeMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoSeparator, tagSeparator }: { fileType: string, fileEncoding?: string, importFile: File, columnMapping?: Record<number, number>, transactionTypeMapping?: Record<string, TransactionType>, hasHeaderLine?: boolean, timeFormat?: string, timezoneFormat?: string, amountDecimalSeparator?: string, amountDigitGroupingSymbol?: string, geoSeparator?: string, tagSeparator?: string }): Promise<ImportTransactionResponsePageWrapper> {
|
function parseImportTransaction({ fileType, fileEncoding, importFile, columnMapping, transactionTypeMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoSeparator, geoOrder, tagSeparator }: { fileType: string, fileEncoding?: string, importFile: File, columnMapping?: Record<number, number>, transactionTypeMapping?: Record<string, TransactionType>, hasHeaderLine?: boolean, timeFormat?: string, timezoneFormat?: string, amountDecimalSeparator?: string, amountDigitGroupingSymbol?: string, geoSeparator?: string, geoOrder?: string, tagSeparator?: string }): Promise<ImportTransactionResponsePageWrapper> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
services.parseImportTransaction({ fileType, fileEncoding, importFile, columnMapping, transactionTypeMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoSeparator, tagSeparator }).then(response => {
|
services.parseImportTransaction({ fileType, fileEncoding, importFile, columnMapping, transactionTypeMapping, hasHeaderLine, timeFormat, timezoneFormat, amountDecimalSeparator, amountDigitGroupingSymbol, geoSeparator, geoOrder, tagSeparator }).then(response => {
|
||||||
const data = response.data;
|
const data = response.data;
|
||||||
|
|
||||||
if (!data || !data.success || !data.result) {
|
if (!data || !data.success || !data.result) {
|
||||||
|
|||||||
@@ -424,16 +424,33 @@
|
|||||||
<v-btn class="ml-2" color="secondary" density="compact" variant="outlined"
|
<v-btn class="ml-2" color="secondary" density="compact" variant="outlined"
|
||||||
v-if="parsedFileDataColumnMapping && isNumber(parsedFileDataColumnMapping[ImportTransactionColumnType.GeographicLocation.type])">
|
v-if="parsedFileDataColumnMapping && isNumber(parsedFileDataColumnMapping[ImportTransactionColumnType.GeographicLocation.type])">
|
||||||
<span>{{ tt('Geographic Location Separator') }}</span>
|
<span>{{ tt('Geographic Location Separator') }}</span>
|
||||||
<span class="ml-1" v-if="parsedFileGeoLocationSeparator">({{ parsedFileGeoLocationSeparator }})</span>
|
<span class="ml-1" v-if="parsedFileGeoLocationSeparator">({{ parsedFileGeoLocationOrder === 'latlon' ? `${tt('Latitude')}${parsedFileGeoLocationSeparator}${tt('Longitude')}` : `${tt('Longitude')}${parsedFileGeoLocationSeparator}${tt('Latitude')}` }})</span>
|
||||||
<v-menu eager activator="parent" location="bottom" max-height="500">
|
<v-menu eager activator="parent" location="bottom" max-height="500"
|
||||||
<v-list>
|
:close-on-content-click="false">
|
||||||
<v-list-item :key="separator.value"
|
<v-list class="pa-0">
|
||||||
:append-icon="parsedFileGeoLocationSeparator === separator.value ? mdiCheck : undefined"
|
<v-list-item class="pa-0">
|
||||||
v-for="separator in allSeparators"
|
<v-table class="transaction-types-popup-menu">
|
||||||
@click="parsedFileGeoLocationSeparator = separator.value">
|
<tbody>
|
||||||
<v-list-item-title class="cursor-pointer">
|
<tr :key="separator.value"
|
||||||
{{ separator.name }} ({{separator.value}})
|
v-for="separator in allSeparators">
|
||||||
</v-list-item-title>
|
<td>{{ separator.name }} ({{separator.value}})</td>
|
||||||
|
<td>
|
||||||
|
<v-btn-toggle class="transaction-types-toggle" density="compact" variant="outlined"
|
||||||
|
mandatory="force" divided
|
||||||
|
v-model="parsedFileGeoLocationOrder"
|
||||||
|
v-if="parsedFileGeoLocationSeparator === separator.value">
|
||||||
|
<v-btn value="latlon">{{ `${tt('Latitude')}${separator.value}${tt('Longitude')}` }}</v-btn>
|
||||||
|
<v-btn value="lonlat">{{ `${tt('Longitude')}${separator.value}${tt('Latitude')}` }}</v-btn>
|
||||||
|
</v-btn-toggle>
|
||||||
|
<v-btn-group class="transaction-types-toggle" density="compact" variant="outlined"
|
||||||
|
divided v-if="parsedFileGeoLocationSeparator !== separator.value">
|
||||||
|
<v-btn @click="parsedFileGeoLocationSeparator = separator.value; parsedFileGeoLocationOrder = 'latlon'">{{ `${tt('Latitude')}${separator.value}${tt('Longitude')}` }}</v-btn>
|
||||||
|
<v-btn @click="parsedFileGeoLocationSeparator = separator.value; parsedFileGeoLocationOrder = 'lonlat'">{{ `${tt('Longitude')}${separator.value}${tt('Latitude')}` }}</v-btn>
|
||||||
|
</v-btn-group>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</v-table>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-menu>
|
</v-menu>
|
||||||
@@ -986,6 +1003,7 @@ const parsedFileTimeFormat = ref<string>('');
|
|||||||
const parsedFileTimezoneFormat = ref<string>('');
|
const parsedFileTimezoneFormat = ref<string>('');
|
||||||
const parsedFileAmountFormat = ref<string>('');
|
const parsedFileAmountFormat = ref<string>('');
|
||||||
const parsedFileGeoLocationSeparator = ref<string>(' ');
|
const parsedFileGeoLocationSeparator = ref<string>(' ');
|
||||||
|
const parsedFileGeoLocationOrder = ref<string>('lonlat');
|
||||||
const parsedFileTagSeparator = ref<string>(';');
|
const parsedFileTagSeparator = ref<string>(';');
|
||||||
const importTransactions = ref<ImportTransaction[] | undefined>(undefined);
|
const importTransactions = ref<ImportTransaction[] | undefined>(undefined);
|
||||||
const editingTransaction = ref<ImportTransaction | null>(null);
|
const editingTransaction = ref<ImportTransaction | null>(null);
|
||||||
@@ -1943,6 +1961,7 @@ function open(): Promise<void> {
|
|||||||
parsedFileTimezoneFormat.value = '';
|
parsedFileTimezoneFormat.value = '';
|
||||||
parsedFileAmountFormat.value = '';
|
parsedFileAmountFormat.value = '';
|
||||||
parsedFileGeoLocationSeparator.value = ' ';
|
parsedFileGeoLocationSeparator.value = ' ';
|
||||||
|
parsedFileGeoLocationOrder.value = 'lonlat';
|
||||||
parsedFileTagSeparator.value = ';';
|
parsedFileTagSeparator.value = ';';
|
||||||
importTransactions.value = undefined;
|
importTransactions.value = undefined;
|
||||||
editingTransaction.value = null;
|
editingTransaction.value = null;
|
||||||
@@ -2088,6 +2107,7 @@ function parseData(): void {
|
|||||||
let amountDecimalSeparator: string | undefined = undefined;
|
let amountDecimalSeparator: string | undefined = undefined;
|
||||||
let amountDigitGroupingSymbol: string | undefined = undefined;
|
let amountDigitGroupingSymbol: string | undefined = undefined;
|
||||||
let geoLocationSeparator: string | undefined = undefined;
|
let geoLocationSeparator: string | undefined = undefined;
|
||||||
|
let geoLocationOrder: string | undefined = undefined;
|
||||||
let tagSeparator: string | undefined = undefined;
|
let tagSeparator: string | undefined = undefined;
|
||||||
|
|
||||||
if (isDsvFileType) {
|
if (isDsvFileType) {
|
||||||
@@ -2098,6 +2118,7 @@ function parseData(): void {
|
|||||||
timezoneFormat = parsedFileTimezoneFormat.value;
|
timezoneFormat = parsedFileTimezoneFormat.value;
|
||||||
amountFormat = parsedFileAmountFormat.value;
|
amountFormat = parsedFileAmountFormat.value;
|
||||||
geoLocationSeparator = parsedFileGeoLocationSeparator.value;
|
geoLocationSeparator = parsedFileGeoLocationSeparator.value;
|
||||||
|
geoLocationOrder = parsedFileGeoLocationOrder.value;
|
||||||
tagSeparator = parsedFileTagSeparator.value;
|
tagSeparator = parsedFileTagSeparator.value;
|
||||||
|
|
||||||
if (!columnMapping
|
if (!columnMapping
|
||||||
@@ -2159,6 +2180,7 @@ function parseData(): void {
|
|||||||
amountDecimalSeparator: amountDecimalSeparator,
|
amountDecimalSeparator: amountDecimalSeparator,
|
||||||
amountDigitGroupingSymbol: amountDigitGroupingSymbol,
|
amountDigitGroupingSymbol: amountDigitGroupingSymbol,
|
||||||
geoSeparator: geoLocationSeparator,
|
geoSeparator: geoLocationSeparator,
|
||||||
|
geoOrder: geoLocationOrder,
|
||||||
tagSeparator: tagSeparator
|
tagSeparator: tagSeparator
|
||||||
}).then(response => {
|
}).then(response => {
|
||||||
const parsedTransactions: ImportTransaction[] = [];
|
const parsedTransactions: ImportTransaction[] = [];
|
||||||
|
|||||||
Reference in New Issue
Block a user