2021-11-21 14:37:13 +00:00
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
import (
|
2021-11-22 10:05:12 +00:00
|
|
|
"encoding/json"
|
2021-11-22 14:50:10 +00:00
|
|
|
"github.com/beancount-gs/script"
|
2021-11-21 14:37:13 +00:00
|
|
|
"github.com/gin-gonic/gin"
|
2021-11-22 08:47:49 +00:00
|
|
|
"strings"
|
2021-11-21 14:37:13 +00:00
|
|
|
)
|
|
|
|
|
|
2021-11-24 09:32:24 +00:00
|
|
|
type Transaction struct {
|
|
|
|
|
Id string `bql:"id" json:"id"`
|
|
|
|
|
Account string `bql:"account" json:"account"`
|
|
|
|
|
Date string `bql:"date" json:"date"`
|
|
|
|
|
Payee string `bql:"payee" json:"payee"`
|
|
|
|
|
Narration string `bql:"narration" json:"desc"`
|
|
|
|
|
Number string `bql:"number" json:"number"`
|
|
|
|
|
Currency string `bql:"currency" json:"currency"`
|
|
|
|
|
CostDate string `bql:"cost_date" json:"costDate"`
|
|
|
|
|
CostPrice string `bql:"cost_number" json:"costPrice"` // 交易净值
|
|
|
|
|
CostCurrency string `bql:"cost_currency" json:"costCurrency"`
|
|
|
|
|
Price string `bql:"price" json:"price"`
|
|
|
|
|
Tags []string `bql:"tags" json:"tags"`
|
|
|
|
|
CurrencySymbol string `json:"currencySymbol,omitempty"`
|
|
|
|
|
CostCurrencySymbol string `json:"costCurrencySymbol,omitempty"`
|
2021-11-22 10:05:12 +00:00
|
|
|
}
|
|
|
|
|
|
2021-11-21 14:37:13 +00:00
|
|
|
func QueryTransactions(c *gin.Context) {
|
|
|
|
|
ledgerConfig := script.GetLedgerConfigFromContext(c)
|
2021-11-22 14:50:10 +00:00
|
|
|
queryParams := script.GetQueryParams(c)
|
2021-11-22 10:05:12 +00:00
|
|
|
// 倒序查询
|
|
|
|
|
queryParams.OrderBy = "date desc"
|
2021-11-24 09:32:24 +00:00
|
|
|
transactions := make([]Transaction, 0)
|
2021-11-22 08:47:49 +00:00
|
|
|
err := script.BQLQueryList(ledgerConfig, &queryParams, &transactions)
|
2021-11-21 14:37:13 +00:00
|
|
|
if err != nil {
|
|
|
|
|
InternalError(c, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
2021-11-22 08:47:49 +00:00
|
|
|
// 格式化金额
|
|
|
|
|
for i := 0; i < len(transactions); i++ {
|
2021-11-24 09:32:24 +00:00
|
|
|
symbol := script.GetCommoditySymbol(transactions[i].Currency)
|
|
|
|
|
transactions[i].CurrencySymbol = symbol
|
|
|
|
|
transactions[i].CostCurrencySymbol = symbol
|
|
|
|
|
if transactions[i].Price != "" {
|
|
|
|
|
transactions[i].Price = strings.Fields(transactions[i].Price)[0]
|
2021-11-22 08:47:49 +00:00
|
|
|
}
|
|
|
|
|
}
|
2021-11-21 14:37:13 +00:00
|
|
|
OK(c, transactions)
|
|
|
|
|
}
|
2021-11-22 10:05:12 +00:00
|
|
|
|
2021-11-24 09:32:24 +00:00
|
|
|
type transactionPayee struct {
|
2021-11-22 10:05:12 +00:00
|
|
|
Value string `bql:"distinct payee" json:"value"`
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-24 09:32:24 +00:00
|
|
|
func QueryTransactionPayees(c *gin.Context) {
|
2021-11-22 10:05:12 +00:00
|
|
|
ledgerConfig := script.GetLedgerConfigFromContext(c)
|
2021-11-24 09:32:24 +00:00
|
|
|
payeeList := make([]transactionPayee, 0)
|
2021-11-22 10:05:12 +00:00
|
|
|
queryParams := script.QueryParams{Where: false, OrderBy: "date desc", Limit: 100}
|
|
|
|
|
err := script.BQLQueryList(ledgerConfig, &queryParams, &payeeList)
|
|
|
|
|
if err != nil {
|
|
|
|
|
InternalError(c, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
result := make([]string, 0)
|
|
|
|
|
for _, payee := range payeeList {
|
|
|
|
|
if payee.Value != "" {
|
|
|
|
|
result = append(result, payee.Value)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
OK(c, result)
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-24 09:32:24 +00:00
|
|
|
type transactionTemplate struct {
|
2021-11-22 10:05:12 +00:00
|
|
|
Id string `json:"id"`
|
|
|
|
|
Date string `json:"date"`
|
|
|
|
|
TemplateName string `json:"templateName"`
|
|
|
|
|
Payee string `json:"payee"`
|
|
|
|
|
Desc string `json:"desc"`
|
2021-11-24 09:32:24 +00:00
|
|
|
Entries []transactionTemplateEntity `json:"entries"`
|
2021-11-22 10:05:12 +00:00
|
|
|
}
|
|
|
|
|
|
2021-11-24 09:32:24 +00:00
|
|
|
type transactionTemplateEntity struct {
|
2021-11-22 10:05:12 +00:00
|
|
|
Account string `json:"account"`
|
|
|
|
|
Commodity string `json:"commodity"`
|
|
|
|
|
Amount string `json:"amount"`
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-24 09:32:24 +00:00
|
|
|
func QueryTransactionTemplates(c *gin.Context) {
|
2021-11-22 10:05:12 +00:00
|
|
|
ledgerConfig := script.GetLedgerConfigFromContext(c)
|
|
|
|
|
filePath := script.GetLedgerTransactionsTemplateFilePath(ledgerConfig.DataPath)
|
|
|
|
|
if script.FileIfExist(filePath) {
|
|
|
|
|
bytes, err := script.ReadFile(filePath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
InternalError(c, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
2021-11-24 09:32:24 +00:00
|
|
|
result := make([]transactionTemplate, 0)
|
2021-11-22 10:05:12 +00:00
|
|
|
err = json.Unmarshal(bytes, &result)
|
|
|
|
|
if err != nil {
|
|
|
|
|
InternalError(c, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
OK(c, result)
|
|
|
|
|
} else {
|
|
|
|
|
OK(c, new([]string))
|
|
|
|
|
}
|
|
|
|
|
}
|