mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 16:54:25 +08:00
code refactor
This commit is contained in:
@@ -13,20 +13,20 @@ type iifAccountData struct {
|
||||
|
||||
// iifTransactionDataset defines the structure of intuit interchange format (iif) transaction dataset
|
||||
type iifTransactionDataset struct {
|
||||
transactionDataColumnIndexes map[string]int
|
||||
splitDataColumnIndexes map[string]int
|
||||
transactions []*iifTransactionData
|
||||
TransactionDataColumnIndexes map[string]int
|
||||
SplitDataColumnIndexes map[string]int
|
||||
Transactions []*iifTransactionData
|
||||
}
|
||||
|
||||
// iifTransactionData defines the structure of intuit interchange format (iif) transaction data
|
||||
type iifTransactionData struct {
|
||||
dataItems []string
|
||||
splitData []*iifTransactionSplitData
|
||||
DataItems []string
|
||||
SplitData []*iifTransactionSplitData
|
||||
}
|
||||
|
||||
// iifTransactionSplitData defines the structure of intuit interchange format (iif) transaction split data
|
||||
type iifTransactionSplitData struct {
|
||||
dataItems []string
|
||||
DataItems []string
|
||||
}
|
||||
|
||||
func (s *iifTransactionDataset) getTransactionDataItemValue(transactionData *iifTransactionData, columnName string) (string, bool) {
|
||||
@@ -34,13 +34,13 @@ func (s *iifTransactionDataset) getTransactionDataItemValue(transactionData *iif
|
||||
return "", false
|
||||
}
|
||||
|
||||
index, exists := s.transactionDataColumnIndexes[columnName]
|
||||
index, exists := s.TransactionDataColumnIndexes[columnName]
|
||||
|
||||
if !exists || index < 0 || index >= len(transactionData.dataItems) {
|
||||
if !exists || index < 0 || index >= len(transactionData.DataItems) {
|
||||
return "", false
|
||||
}
|
||||
|
||||
return transactionData.dataItems[index], true
|
||||
return transactionData.DataItems[index], true
|
||||
}
|
||||
|
||||
func (s *iifTransactionDataset) getSplitDataItemValue(splitData *iifTransactionSplitData, columnName string) (string, bool) {
|
||||
@@ -48,11 +48,11 @@ func (s *iifTransactionDataset) getSplitDataItemValue(splitData *iifTransactionS
|
||||
return "", false
|
||||
}
|
||||
|
||||
index, exists := s.splitDataColumnIndexes[columnName]
|
||||
index, exists := s.SplitDataColumnIndexes[columnName]
|
||||
|
||||
if !exists || index < 0 || index >= len(splitData.dataItems) {
|
||||
if !exists || index < 0 || index >= len(splitData.DataItems) {
|
||||
return "", false
|
||||
}
|
||||
|
||||
return splitData.dataItems[index], true
|
||||
return splitData.DataItems[index], true
|
||||
}
|
||||
|
||||
@@ -119,8 +119,8 @@ func (r *iifDataReader) read(ctx core.Context) ([]*iifAccountDataset, []*iifTran
|
||||
if lastLineSign == "" {
|
||||
if items[0] == iifTransactionLineSignColumnName {
|
||||
currentTransactionData = &iifTransactionData{
|
||||
dataItems: items,
|
||||
splitData: make([]*iifTransactionSplitData, 0),
|
||||
DataItems: items,
|
||||
SplitData: make([]*iifTransactionSplitData, 0),
|
||||
}
|
||||
lastLineSign = items[0]
|
||||
} else {
|
||||
@@ -134,8 +134,8 @@ func (r *iifDataReader) read(ctx core.Context) ([]*iifAccountDataset, []*iifTran
|
||||
return nil, nil, errs.ErrInvalidIIFFile
|
||||
}
|
||||
|
||||
currentTransactionData.splitData = append(currentTransactionData.splitData, &iifTransactionSplitData{
|
||||
dataItems: items,
|
||||
currentTransactionData.SplitData = append(currentTransactionData.SplitData, &iifTransactionSplitData{
|
||||
DataItems: items,
|
||||
})
|
||||
lastLineSign = items[0]
|
||||
} else if items[0] == iifTransactionEndLineSignColumnName {
|
||||
@@ -144,12 +144,12 @@ func (r *iifDataReader) read(ctx core.Context) ([]*iifAccountDataset, []*iifTran
|
||||
return nil, nil, errs.ErrInvalidIIFFile
|
||||
}
|
||||
|
||||
if len(currentTransactionData.splitData) < 1 {
|
||||
if len(currentTransactionData.SplitData) < 1 {
|
||||
log.Errorf(ctx, "[iif_data_reader.read] expected reading transaction split line, but read \"%s\"", items[0])
|
||||
return nil, nil, errs.ErrInvalidIIFFile
|
||||
}
|
||||
|
||||
currentTransactionDataset.transactions = append(currentTransactionDataset.transactions, currentTransactionData)
|
||||
currentTransactionDataset.Transactions = append(currentTransactionDataset.Transactions, currentTransactionData)
|
||||
lastLineSign = ""
|
||||
} else {
|
||||
log.Errorf(ctx, "[iif_data_reader.read] iif line expected reading split sign or transaction end sign, but actual is \"%s\"", items[0])
|
||||
@@ -234,9 +234,9 @@ func (r *iifDataReader) readTransactionSampleLines(ctx core.Context, items []str
|
||||
}
|
||||
|
||||
return &iifTransactionDataset{
|
||||
transactionDataColumnIndexes: transactionDataColumnIndexes,
|
||||
splitDataColumnIndexes: splitDataColumnIndexes,
|
||||
transactions: make([]*iifTransactionData, 0),
|
||||
TransactionDataColumnIndexes: transactionDataColumnIndexes,
|
||||
SplitDataColumnIndexes: splitDataColumnIndexes,
|
||||
Transactions: make([]*iifTransactionData, 0),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -74,11 +74,11 @@ func (t *iifTransactionDataTable) TransactionRowCount() int {
|
||||
for i := 0; i < len(t.transactionDatasets); i++ {
|
||||
datasets := t.transactionDatasets[i]
|
||||
|
||||
for j := 0; j < len(datasets.transactions); j++ {
|
||||
transaction := datasets.transactions[j]
|
||||
for j := 0; j < len(datasets.Transactions); j++ {
|
||||
transaction := datasets.Transactions[j]
|
||||
|
||||
if transaction.splitData != nil {
|
||||
totalDataRowCount += len(transaction.splitData)
|
||||
if transaction.SplitData != nil {
|
||||
totalDataRowCount += len(transaction.SplitData)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,17 +122,17 @@ func (t *iifTransactionDataRowIterator) HasNext() bool {
|
||||
|
||||
currentDataset := allDatasets[t.currentDatasetIndex]
|
||||
|
||||
if t.currentIndexInDataset+1 < len(currentDataset.transactions) {
|
||||
if t.currentIndexInDataset+1 < len(currentDataset.Transactions) {
|
||||
return true
|
||||
} else if t.currentIndexInDataset < len(currentDataset.transactions) &&
|
||||
t.currentSplitDataIndex+1 < len(currentDataset.transactions[t.currentIndexInDataset].splitData) {
|
||||
} else if t.currentIndexInDataset < len(currentDataset.Transactions) &&
|
||||
t.currentSplitDataIndex+1 < len(currentDataset.Transactions[t.currentIndexInDataset].SplitData) {
|
||||
return true
|
||||
}
|
||||
|
||||
for i := t.currentDatasetIndex + 1; i < len(allDatasets); i++ {
|
||||
dataset := allDatasets[i]
|
||||
|
||||
if len(dataset.transactions) < 1 {
|
||||
if len(dataset.Transactions) < 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -150,8 +150,8 @@ func (t *iifTransactionDataRowIterator) Next(ctx core.Context, user *models.User
|
||||
foundNextRow := false
|
||||
dataset := allDatasets[i]
|
||||
|
||||
for j := t.currentIndexInDataset; j < len(dataset.transactions); j++ {
|
||||
if t.currentSplitDataIndex+1 < len(dataset.transactions[j].splitData) {
|
||||
for j := t.currentIndexInDataset; j < len(dataset.Transactions); j++ {
|
||||
if t.currentSplitDataIndex+1 < len(dataset.Transactions[j].SplitData) {
|
||||
t.currentSplitDataIndex++
|
||||
foundNextRow = true
|
||||
break
|
||||
@@ -176,22 +176,22 @@ func (t *iifTransactionDataRowIterator) Next(ctx core.Context, user *models.User
|
||||
|
||||
currentDataset := allDatasets[t.currentDatasetIndex]
|
||||
|
||||
if t.currentIndexInDataset >= len(currentDataset.transactions) {
|
||||
if t.currentIndexInDataset >= len(currentDataset.Transactions) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
data := currentDataset.transactions[t.currentIndexInDataset]
|
||||
data := currentDataset.Transactions[t.currentIndexInDataset]
|
||||
|
||||
if len(data.splitData) < 1 {
|
||||
if len(data.SplitData) < 1 {
|
||||
log.Errorf(ctx, "[iif_transaction_data_table.Next] cannot parsing transaction in row#%d (dataset#%d), because split data is empty", t.currentIndexInDataset, t.currentDatasetIndex)
|
||||
return nil, errs.ErrInvalidIIFFile
|
||||
}
|
||||
|
||||
if t.currentSplitDataIndex >= len(data.splitData) {
|
||||
if t.currentSplitDataIndex >= len(data.SplitData) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
if len(data.splitData) > 1 {
|
||||
if len(data.SplitData) > 1 {
|
||||
_, err := t.isSplitTransactionSupported(ctx, currentDataset, data)
|
||||
|
||||
if err != nil {
|
||||
@@ -222,11 +222,11 @@ func (t *iifTransactionDataRowIterator) parseTransaction(ctx core.Context, user
|
||||
return nil, err
|
||||
}
|
||||
|
||||
transactionType, _ := dataset.getSplitDataItemValue(transactionData.splitData[splitDataIndex], iifTransactionTypeColumnName)
|
||||
transactionType, _ := dataset.getSplitDataItemValue(transactionData.SplitData[splitDataIndex], iifTransactionTypeColumnName)
|
||||
mainAccountName, _ := dataset.getTransactionDataItemValue(transactionData, iifTransactionAccountNameColumnName)
|
||||
splitAccountName, _ := dataset.getSplitDataItemValue(transactionData.splitData[splitDataIndex], iifTransactionAccountNameColumnName)
|
||||
splitAccountName, _ := dataset.getSplitDataItemValue(transactionData.SplitData[splitDataIndex], iifTransactionAccountNameColumnName)
|
||||
mainAmount, _ := dataset.getTransactionDataItemValue(transactionData, iifTransactionAmountColumnName)
|
||||
splitAmount, _ := dataset.getSplitDataItemValue(transactionData.splitData[splitDataIndex], iifTransactionAmountColumnName)
|
||||
splitAmount, _ := dataset.getSplitDataItemValue(transactionData.SplitData[splitDataIndex], iifTransactionAmountColumnName)
|
||||
mainAmountNum, err := parseAmount(mainAmount)
|
||||
|
||||
if err != nil {
|
||||
@@ -254,7 +254,7 @@ func (t *iifTransactionDataRowIterator) parseTransaction(ctx core.Context, user
|
||||
categoryName = mainAccountName
|
||||
accountName = splitAccountName
|
||||
|
||||
if len(transactionData.splitData) > 1 {
|
||||
if len(transactionData.SplitData) > 1 {
|
||||
amountNum = splitAmountNum
|
||||
} else {
|
||||
amountNum = -mainAmountNum
|
||||
@@ -263,7 +263,7 @@ func (t *iifTransactionDataRowIterator) parseTransaction(ctx core.Context, user
|
||||
categoryName = splitAccountName
|
||||
accountName = mainAccountName
|
||||
|
||||
if len(transactionData.splitData) > 1 {
|
||||
if len(transactionData.SplitData) > 1 {
|
||||
amountNum = -splitAmountNum
|
||||
} else {
|
||||
amountNum = mainAmountNum
|
||||
@@ -295,7 +295,7 @@ func (t *iifTransactionDataRowIterator) parseTransaction(ctx core.Context, user
|
||||
categoryName = mainAccountName
|
||||
accountName = splitAccountName
|
||||
|
||||
if len(transactionData.splitData) > 1 {
|
||||
if len(transactionData.SplitData) > 1 {
|
||||
amountNum = -splitAmountNum
|
||||
} else {
|
||||
amountNum = mainAmountNum
|
||||
@@ -304,7 +304,7 @@ func (t *iifTransactionDataRowIterator) parseTransaction(ctx core.Context, user
|
||||
categoryName = splitAccountName
|
||||
accountName = mainAccountName
|
||||
|
||||
if len(transactionData.splitData) > 1 {
|
||||
if len(transactionData.SplitData) > 1 {
|
||||
amountNum = splitAmountNum
|
||||
} else {
|
||||
amountNum = -mainAmountNum
|
||||
@@ -332,7 +332,7 @@ func (t *iifTransactionDataRowIterator) parseTransaction(ctx core.Context, user
|
||||
relatedAmountNum := int64(0)
|
||||
mainAccountTransferToSplitAccount := false
|
||||
|
||||
if len(transactionData.splitData) > 1 {
|
||||
if len(transactionData.SplitData) > 1 {
|
||||
amountNum = splitAmountNum
|
||||
relatedAmountNum = splitAmountNum
|
||||
mainAccountTransferToSplitAccount = amountNum >= 0
|
||||
@@ -369,11 +369,11 @@ func (t *iifTransactionDataRowIterator) parseTransaction(ctx core.Context, user
|
||||
}
|
||||
}
|
||||
|
||||
if splitMemo, _ := dataset.getSplitDataItemValue(transactionData.splitData[splitDataIndex], iifTransactionMemoColumnName); splitMemo != "" {
|
||||
if splitMemo, _ := dataset.getSplitDataItemValue(transactionData.SplitData[splitDataIndex], iifTransactionMemoColumnName); splitMemo != "" {
|
||||
data[datatable.TRANSACTION_DATA_TABLE_DESCRIPTION] = splitMemo
|
||||
} else if memo, _ := dataset.getTransactionDataItemValue(transactionData, iifTransactionMemoColumnName); memo != "" {
|
||||
data[datatable.TRANSACTION_DATA_TABLE_DESCRIPTION] = memo
|
||||
} else if splitName, _ := dataset.getSplitDataItemValue(transactionData.splitData[splitDataIndex], iifTransactionNameColumnName); splitName != "" {
|
||||
} else if splitName, _ := dataset.getSplitDataItemValue(transactionData.SplitData[splitDataIndex], iifTransactionNameColumnName); splitName != "" {
|
||||
data[datatable.TRANSACTION_DATA_TABLE_DESCRIPTION] = splitName
|
||||
} else if name, _ := dataset.getTransactionDataItemValue(transactionData, iifTransactionNameColumnName); name != "" {
|
||||
data[datatable.TRANSACTION_DATA_TABLE_DESCRIPTION] = name
|
||||
@@ -402,8 +402,8 @@ func (t *iifTransactionDataRowIterator) isSplitTransactionSupported(ctx core.Con
|
||||
|
||||
splitTotalAmount := int64(0)
|
||||
|
||||
for i := 0; i < len(transactionData.splitData); i++ {
|
||||
splitAmountStr, _ := dataset.getSplitDataItemValue(transactionData.splitData[i], iifTransactionAmountColumnName)
|
||||
for i := 0; i < len(transactionData.SplitData); i++ {
|
||||
splitAmountStr, _ := dataset.getSplitDataItemValue(transactionData.SplitData[i], iifTransactionAmountColumnName)
|
||||
splitAmount, err := parseAmount(splitAmountStr)
|
||||
|
||||
if err != nil {
|
||||
@@ -420,7 +420,7 @@ func (t *iifTransactionDataRowIterator) isSplitTransactionSupported(ctx core.Con
|
||||
}
|
||||
}
|
||||
|
||||
if len(transactionData.splitData) > 1 && !supportSplitTransactions {
|
||||
if len(transactionData.SplitData) > 1 && !supportSplitTransactions {
|
||||
return false, errs.ErrNotSupportedSplitTransactions
|
||||
}
|
||||
|
||||
@@ -463,7 +463,7 @@ func createNewIIfTransactionDataTable(ctx core.Context, accountDatasets []*iifAc
|
||||
iifTransactionAccountNameColumnName,
|
||||
iifTransactionAmountColumnName,
|
||||
} {
|
||||
if _, exists := transactionDataset.transactionDataColumnIndexes[requiredColumnName]; !exists {
|
||||
if _, exists := transactionDataset.TransactionDataColumnIndexes[requiredColumnName]; !exists {
|
||||
return nil, errs.ErrMissingRequiredFieldInHeaderRow
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user