Bank Transactions: Use Currency structs, not CurrSymbol directly

This commit is contained in:
Aaron Lindsay 2017-04-18 20:17:44 -04:00
parent a3e42fc903
commit 8712be5a9d
4 changed files with 18 additions and 8 deletions

View File

@ -124,8 +124,8 @@ type Transaction struct {
CCAcctTo *CCAcct `xml:"CCACCTTO,omitempty"` // If the transfer was to a credit card account we have the account information for
Memo String `xml:"MEMO,omitempty"` // Extra information (not in NAME)
ImageData []ImageData `xml:"IMAGEDATA,omitempty"`
Currency CurrSymbol `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
OrigCurrency CurrSymbol `xml:"ORIGCURRENCY,omitempty"` // If different from CURDEF in STMTTRS
Currency Currency `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
OrigCurrency Currency `xml:"ORIGCURRENCY,omitempty"` // If different from CURDEF in STMTTRS
Inv401kSource inv401kSource `xml:"INV401KSOURCE,omitempty"` // One of PRETAX, AFTERTAX, MATCH, PROFITSHARING, ROLLOVER, OTHERVEST, OTHERNONVEST (Default if not present is OTHERNONVEST. The following cash source types are subject to vesting: MATCH, PROFITSHARING, and OTHERVEST.)
}
@ -212,8 +212,8 @@ type PendingTransaction struct {
ExtdName String `xml:"EXTDNAME,omitempty"` // Extended name of payee or transaction description
Memo String `xml:"MEMO,omitempty"` // Extra information (not in NAME)
ImageData []ImageData `xml:"IMAGEDATA,omitempty"`
Currency CurrSymbol `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
OrigCurrency CurrSymbol `xml:"ORIGCURRENCY,omitempty"` // If different from CURDEF in STMTTRS
Currency Currency `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
OrigCurrency Currency `xml:"ORIGCURRENCY,omitempty"` // If different from CURDEF in STMTTRS
}
// Valid returns (true, nil) if this struct is valid OFX

View File

@ -78,9 +78,9 @@ func bankTransactions() {
func printTransaction(defCurrency ofxgo.CurrSymbol, tran *ofxgo.Transaction) {
currency := defCurrency
if ok, _ := tran.Currency.Valid(); ok {
currency = tran.Currency
currency = tran.Currency.CurSym
} else if ok, _ := tran.OrigCurrency.Valid(); ok {
currency = tran.OrigCurrency
currency = tran.OrigCurrency.CurSym
}
var name string

View File

@ -61,9 +61,9 @@ func ccTransactions() {
for _, tran := range stmt.BankTranList.Transactions {
currency := stmt.CurDef
if ok, _ := tran.Currency.Valid(); ok {
currency = tran.Currency
currency = tran.Currency.CurSym
} else if ok, _ := tran.OrigCurrency.Valid(); ok {
currency = tran.OrigCurrency
currency = tran.OrigCurrency.CurSym
}
var name string

View File

@ -316,3 +316,13 @@ type Currency struct {
CurRate Amount `xml:"CURRATE"` // Ratio of <CURDEF> currency to <CURSYM> currency
CurSym CurrSymbol `xml:"CURSYM"` // ISO-4217 3-character currency identifier
}
// Valid returns whether the Currency is valid according to the OFX spec
func (c Currency) Valid() (bool, error) {
if c.CurRate.IsInt() && c.CurRate.Num().Int64() == 0 {
return false, errors.New("CurRate may not be zero")
} else if ok, err := c.CurSym.Valid(); !ok {
return false, err
}
return true, nil
}