2017-12-04 05:55:25 -05:00
|
|
|
package models
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"net/http"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
type AccountType int64
|
|
|
|
|
|
|
|
const (
|
|
|
|
Bank AccountType = 1 // start at 1 so that the default (0) is invalid
|
|
|
|
Cash = 2
|
|
|
|
Asset = 3
|
|
|
|
Liability = 4
|
|
|
|
Investment = 5
|
|
|
|
Income = 6
|
|
|
|
Expense = 7
|
|
|
|
Trading = 8
|
|
|
|
Equity = 9
|
|
|
|
Receivable = 10
|
|
|
|
Payable = 11
|
|
|
|
)
|
|
|
|
|
|
|
|
var AccountTypes = []AccountType{
|
|
|
|
Bank,
|
|
|
|
Cash,
|
|
|
|
Asset,
|
|
|
|
Liability,
|
|
|
|
Investment,
|
|
|
|
Income,
|
|
|
|
Expense,
|
|
|
|
Trading,
|
|
|
|
Equity,
|
|
|
|
Receivable,
|
|
|
|
Payable,
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t AccountType) String() string {
|
|
|
|
switch t {
|
|
|
|
case Bank:
|
|
|
|
return "Bank"
|
|
|
|
case Cash:
|
|
|
|
return "Cash"
|
|
|
|
case Asset:
|
|
|
|
return "Asset"
|
|
|
|
case Liability:
|
|
|
|
return "Liability"
|
|
|
|
case Investment:
|
|
|
|
return "Investment"
|
|
|
|
case Income:
|
|
|
|
return "Income"
|
|
|
|
case Expense:
|
|
|
|
return "Expense"
|
|
|
|
case Trading:
|
|
|
|
return "Trading"
|
|
|
|
case Equity:
|
|
|
|
return "Equity"
|
|
|
|
case Receivable:
|
|
|
|
return "Receivable"
|
|
|
|
case Payable:
|
|
|
|
return "Payable"
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
type Account struct {
|
|
|
|
AccountId int64
|
|
|
|
ExternalAccountId string
|
|
|
|
UserId int64
|
|
|
|
SecurityId int64
|
|
|
|
ParentAccountId int64 // -1 if this account is at the root
|
|
|
|
Type AccountType
|
|
|
|
Name string
|
|
|
|
|
|
|
|
// monotonically-increasing account transaction version number. Used for
|
|
|
|
// allowing a client to ensure they have a consistent version when paging
|
|
|
|
// through transactions.
|
|
|
|
AccountVersion int64 `json:"Version"`
|
|
|
|
|
|
|
|
// Optional fields specifying how to fetch transactions from a bank via OFX
|
|
|
|
OFXURL string
|
|
|
|
OFXORG string
|
|
|
|
OFXFID string
|
|
|
|
OFXUser string
|
|
|
|
OFXBankID string // OFX BankID (BrokerID if AcctType == Investment)
|
|
|
|
OFXAcctID string
|
|
|
|
OFXAcctType string // ofxgo.acctType
|
|
|
|
OFXClientUID string
|
|
|
|
OFXAppID string
|
|
|
|
OFXAppVer string
|
|
|
|
OFXVersion string
|
|
|
|
OFXNoIndent bool
|
|
|
|
}
|
|
|
|
|
|
|
|
type AccountList struct {
|
2017-12-07 20:47:55 -05:00
|
|
|
Accounts *[]*Account `json:"accounts"`
|
2017-12-04 05:55:25 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
func (a *Account) Write(w http.ResponseWriter) error {
|
|
|
|
enc := json.NewEncoder(w)
|
|
|
|
return enc.Encode(a)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (a *Account) Read(json_str string) error {
|
|
|
|
dec := json.NewDecoder(strings.NewReader(json_str))
|
|
|
|
return dec.Decode(a)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (al *AccountList) Write(w http.ResponseWriter) error {
|
|
|
|
enc := json.NewEncoder(w)
|
|
|
|
return enc.Encode(al)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (al *AccountList) Read(json_str string) error {
|
|
|
|
dec := json.NewDecoder(strings.NewReader(json_str))
|
|
|
|
return dec.Decode(al)
|
|
|
|
}
|