mirror of
https://github.com/aclindsa/ofxgo.git
synced 2024-11-22 03:30:04 -05:00
Use CurrSymbol instead of String to represent currencies
This commit is contained in:
parent
faac776ca4
commit
2046fa32e5
10
bank.go
10
bank.go
@ -95,8 +95,8 @@ type Transaction struct {
|
|||||||
CCAcctTo *CCAcct `xml:"CCACCTTO,omitempty"` // If the transfer was to a credit card account we have the account information for
|
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)
|
Memo String `xml:"MEMO,omitempty"` // Extra information (not in NAME)
|
||||||
ImageData []ImageData `xml:"IMAGEDATA,omitempty"`
|
ImageData []ImageData `xml:"IMAGEDATA,omitempty"`
|
||||||
Currency String `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
|
Currency CurrSymbol `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
|
||||||
OrigCurrency String `xml:"ORIGCURRENCY,omitempty"` // If different from CURDEF in STMTTRS
|
OrigCurrency CurrSymbol `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.)
|
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.)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,8 +123,8 @@ type PendingTransaction struct {
|
|||||||
ExtdName String `xml:"EXTDNAME,omitempty"` // Extended name of payee or transaction description
|
ExtdName String `xml:"EXTDNAME,omitempty"` // Extended name of payee or transaction description
|
||||||
Memo String `xml:"MEMO,omitempty"` // Extra information (not in NAME)
|
Memo String `xml:"MEMO,omitempty"` // Extra information (not in NAME)
|
||||||
ImageData []ImageData `xml:"IMAGEDATA,omitempty"`
|
ImageData []ImageData `xml:"IMAGEDATA,omitempty"`
|
||||||
Currency String `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
|
Currency CurrSymbol `xml:"CURRENCY,omitempty"` // If different from CURDEF in STMTTRS
|
||||||
OrigCurrency String `xml:"ORIGCURRENCY,omitempty"` // If different from CURDEF in STMTTRS
|
OrigCurrency CurrSymbol `xml:"ORIGCURRENCY,omitempty"` // If different from CURDEF in STMTTRS
|
||||||
}
|
}
|
||||||
|
|
||||||
// PendingTransactionList represents a list of pending transactions, along with
|
// PendingTransactionList represents a list of pending transactions, along with
|
||||||
@ -161,7 +161,7 @@ type StatementResponse struct {
|
|||||||
Status Status `xml:"STATUS"`
|
Status Status `xml:"STATUS"`
|
||||||
CltCookie String `xml:"CLTCOOKIE,omitempty"`
|
CltCookie String `xml:"CLTCOOKIE,omitempty"`
|
||||||
// TODO `xml:"OFXEXTENSION,omitempty"`
|
// TODO `xml:"OFXEXTENSION,omitempty"`
|
||||||
CurDef String `xml:"STMTRS>CURDEF"`
|
CurDef CurrSymbol `xml:"STMTRS>CURDEF"`
|
||||||
BankAcctFrom BankAcct `xml:"STMTRS>BANKACCTFROM"`
|
BankAcctFrom BankAcct `xml:"STMTRS>BANKACCTFROM"`
|
||||||
BankTranList *TransactionList `xml:"STMTRS>BANKTRANLIST,omitempty"`
|
BankTranList *TransactionList `xml:"STMTRS>BANKTRANLIST,omitempty"`
|
||||||
BankTranListP *PendingTransactionList `xml:"STMTRS>BANKTRANLISTP,omitempty"`
|
BankTranListP *PendingTransactionList `xml:"STMTRS>BANKTRANLISTP,omitempty"`
|
||||||
|
@ -252,13 +252,18 @@ func TestUnmarshalBankStatementResponse(t *testing.T) {
|
|||||||
balamt.SetFrac64(20029, 100)
|
balamt.SetFrac64(20029, 100)
|
||||||
availbalamt.SetFrac64(20029, 100)
|
availbalamt.SetFrac64(20029, 100)
|
||||||
|
|
||||||
|
usd, err := ofxgo.NewCurrSymbol("USD")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error creating CurrSymbol for USD\n")
|
||||||
|
}
|
||||||
|
|
||||||
statementResponse := ofxgo.StatementResponse{
|
statementResponse := ofxgo.StatementResponse{
|
||||||
TrnUID: "1001",
|
TrnUID: "1001",
|
||||||
Status: ofxgo.Status{
|
Status: ofxgo.Status{
|
||||||
Code: 0,
|
Code: 0,
|
||||||
Severity: "INFO",
|
Severity: "INFO",
|
||||||
},
|
},
|
||||||
CurDef: "USD",
|
CurDef: *usd,
|
||||||
BankAcctFrom: ofxgo.BankAcct{
|
BankAcctFrom: ofxgo.BankAcct{
|
||||||
BankID: "318398732",
|
BankID: "318398732",
|
||||||
AcctID: "78346129",
|
AcctID: "78346129",
|
||||||
|
@ -75,12 +75,12 @@ func bankTransactions() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func printTransaction(defCurrency ofxgo.String, tran *ofxgo.Transaction) {
|
func printTransaction(defCurrency ofxgo.CurrSymbol, tran *ofxgo.Transaction) {
|
||||||
currency := defCurrency
|
currency := defCurrency
|
||||||
if len(tran.Currency) > 0 {
|
if ok, _ := tran.Currency.Valid(); ok {
|
||||||
currency = tran.Currency
|
|
||||||
} else if len(tran.OrigCurrency) > 0 {
|
|
||||||
currency = tran.Currency
|
currency = tran.Currency
|
||||||
|
} else if ok, _ := tran.OrigCurrency.Valid(); ok {
|
||||||
|
currency = tran.OrigCurrency
|
||||||
}
|
}
|
||||||
|
|
||||||
var name string
|
var name string
|
||||||
@ -94,5 +94,5 @@ func printTransaction(defCurrency ofxgo.String, tran *ofxgo.Transaction) {
|
|||||||
name = name + " - " + string(tran.Memo)
|
name = name + " - " + string(tran.Memo)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("%s %-15s %-11s %s\n", tran.DtPosted, tran.TrnAmt.String()+" "+string(currency), tran.TrnType, name)
|
fmt.Printf("%s %-15s %-11s %s\n", tran.DtPosted, tran.TrnAmt.String()+" "+currency.String(), tran.TrnType, name)
|
||||||
}
|
}
|
||||||
|
@ -60,10 +60,10 @@ func ccTransactions() {
|
|||||||
fmt.Println("Transactions:")
|
fmt.Println("Transactions:")
|
||||||
for _, tran := range stmt.BankTranList.Transactions {
|
for _, tran := range stmt.BankTranList.Transactions {
|
||||||
currency := stmt.CurDef
|
currency := stmt.CurDef
|
||||||
if len(tran.Currency) > 0 {
|
if ok, _ := tran.Currency.Valid(); ok {
|
||||||
currency = tran.Currency
|
|
||||||
} else if len(tran.OrigCurrency) > 0 {
|
|
||||||
currency = tran.Currency
|
currency = tran.Currency
|
||||||
|
} else if ok, _ := tran.OrigCurrency.Valid(); ok {
|
||||||
|
currency = tran.OrigCurrency
|
||||||
}
|
}
|
||||||
|
|
||||||
var name string
|
var name string
|
||||||
@ -77,7 +77,7 @@ func ccTransactions() {
|
|||||||
name = name + " - " + string(tran.Memo)
|
name = name + " - " + string(tran.Memo)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("%s %-15s %-11s %s\n", tran.DtPosted, tran.TrnAmt.String()+" "+string(currency), tran.TrnType, name)
|
fmt.Printf("%s %-15s %-11s %s\n", tran.DtPosted, tran.TrnAmt.String()+" "+currency.String(), tran.TrnType, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,12 +178,12 @@ func printInvTran(it *ofxgo.InvTran) {
|
|||||||
fmt.Printf("%s", it.DtTrade)
|
fmt.Printf("%s", it.DtTrade)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printInvBuy(defCurrency ofxgo.String, ib *ofxgo.InvBuy) {
|
func printInvBuy(defCurrency ofxgo.CurrSymbol, ib *ofxgo.InvBuy) {
|
||||||
printInvTran(&ib.InvTran)
|
printInvTran(&ib.InvTran)
|
||||||
currency := defCurrency
|
currency := defCurrency
|
||||||
if ib.Currency != nil {
|
if ok, _ := ib.Currency.CurSym.Valid(); ok {
|
||||||
currency = ib.Currency.CurSym
|
currency = ib.Currency.CurSym
|
||||||
} else if ib.OrigCurrency != nil {
|
} else if ok, _ := ib.OrigCurrency.CurSym.Valid(); ok {
|
||||||
currency = ib.Currency.CurSym
|
currency = ib.Currency.CurSym
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,15 +191,15 @@ func printInvBuy(defCurrency ofxgo.String, ib *ofxgo.InvBuy) {
|
|||||||
// TODO print ticker instead of CUSIP
|
// TODO print ticker instead of CUSIP
|
||||||
}
|
}
|
||||||
|
|
||||||
func printInvSell(defCurrency ofxgo.String, is *ofxgo.InvSell) {
|
func printInvSell(defCurrency ofxgo.CurrSymbol, is *ofxgo.InvSell) {
|
||||||
printInvTran(&is.InvTran)
|
printInvTran(&is.InvTran)
|
||||||
currency := defCurrency
|
currency := defCurrency
|
||||||
if is.Currency != nil {
|
if ok, _ := is.Currency.CurSym.Valid(); ok {
|
||||||
currency = is.Currency.CurSym
|
currency = is.Currency.CurSym
|
||||||
} else if is.OrigCurrency != nil {
|
} else if ok, _ := is.OrigCurrency.CurSym.Valid(); ok {
|
||||||
currency = is.Currency.CurSym
|
currency = is.Currency.CurSym
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf(" %s (%s %s)@%s %s (Total: %s)\n", is.Units, is.SecID.UniqueIDType, is.SecID.UniqueID, is.UnitPrice, currency, is.Total)
|
fmt.Printf(" %s (%s %s)@%s %s (Total: %s)\n", is.Units, is.SecID.UniqueIDType, is.SecID.UniqueID, is.UnitPrice, currency.String(), is.Total)
|
||||||
// TODO print ticker instead of CUSIP
|
// TODO print ticker instead of CUSIP
|
||||||
}
|
}
|
||||||
|
@ -292,5 +292,5 @@ type InvAcct struct {
|
|||||||
type Currency struct {
|
type Currency struct {
|
||||||
XMLName xml.Name // CURRENCY or ORIGCURRENCY
|
XMLName xml.Name // CURRENCY or ORIGCURRENCY
|
||||||
CurRate Amount `xml:"CURRATE"` // Ratio of <CURDEF> currency to <CURSYM> currency
|
CurRate Amount `xml:"CURRATE"` // Ratio of <CURDEF> currency to <CURSYM> currency
|
||||||
CurSym String `xml:"CURSYM"` // ISO-4217 3-character currency identifier
|
CurSym CurrSymbol `xml:"CURSYM"` // ISO-4217 3-character currency identifier
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ type CCStatementResponse struct {
|
|||||||
Status Status `xml:"STATUS"`
|
Status Status `xml:"STATUS"`
|
||||||
CltCookie String `xml:"CLTCOOKIE,omitempty"`
|
CltCookie String `xml:"CLTCOOKIE,omitempty"`
|
||||||
// TODO `xml:"OFXEXTENSION,omitempty"`
|
// TODO `xml:"OFXEXTENSION,omitempty"`
|
||||||
CurDef String `xml:"CCSTMTRS>CURDEF"`
|
CurDef CurrSymbol `xml:"CCSTMTRS>CURDEF"`
|
||||||
CCAcctFrom CCAcct `xml:"CCSTMTRS>CCACCTFROM"`
|
CCAcctFrom CCAcct `xml:"CCSTMTRS>CCACCTFROM"`
|
||||||
BankTranList *TransactionList `xml:"CCSTMTRS>BANKTRANLIST,omitempty"`
|
BankTranList *TransactionList `xml:"CCSTMTRS>BANKTRANLIST,omitempty"`
|
||||||
//BANKTRANLISTP
|
//BANKTRANLISTP
|
||||||
|
@ -132,13 +132,18 @@ NEWFILEUID:NONE
|
|||||||
balamt.SetFrac64(-933400, 100)
|
balamt.SetFrac64(-933400, 100)
|
||||||
availbalamt.SetFrac64(763017, 100)
|
availbalamt.SetFrac64(763017, 100)
|
||||||
|
|
||||||
|
usd, err := ofxgo.NewCurrSymbol("USD")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error creating CurrSymbol for USD\n")
|
||||||
|
}
|
||||||
|
|
||||||
statementResponse := ofxgo.CCStatementResponse{
|
statementResponse := ofxgo.CCStatementResponse{
|
||||||
TrnUID: "59e850ad-7448-b4ce-4b71-29057763b306",
|
TrnUID: "59e850ad-7448-b4ce-4b71-29057763b306",
|
||||||
Status: ofxgo.Status{
|
Status: ofxgo.Status{
|
||||||
Code: 0,
|
Code: 0,
|
||||||
Severity: "INFO",
|
Severity: "INFO",
|
||||||
},
|
},
|
||||||
CurDef: "USD",
|
CurDef: *usd,
|
||||||
CCAcctFrom: ofxgo.CCAcct{
|
CCAcctFrom: ofxgo.CCAcct{
|
||||||
AcctID: "9283744488463775",
|
AcctID: "9283744488463775",
|
||||||
},
|
},
|
||||||
|
@ -1163,7 +1163,7 @@ type InvStatementResponse struct {
|
|||||||
CltCookie String `xml:"CLTCOOKIE,omitempty"`
|
CltCookie String `xml:"CLTCOOKIE,omitempty"`
|
||||||
// TODO `xml:"OFXEXTENSION,omitempty"`
|
// TODO `xml:"OFXEXTENSION,omitempty"`
|
||||||
DtAsOf Date `xml:"INVSTMTRS>DTASOF"`
|
DtAsOf Date `xml:"INVSTMTRS>DTASOF"`
|
||||||
CurDef String `xml:"INVSTMTRS>CURDEF"`
|
CurDef CurrSymbol `xml:"INVSTMTRS>CURDEF"`
|
||||||
InvAcctFrom InvAcct `xml:"INVSTMTRS>INVACCTFROM"`
|
InvAcctFrom InvAcct `xml:"INVSTMTRS>INVACCTFROM"`
|
||||||
InvTranList *InvTranList `xml:"INVSTMTRS>INVTRANLIST,omitempty"`
|
InvTranList *InvTranList `xml:"INVSTMTRS>INVTRANLIST,omitempty"`
|
||||||
InvPosList PositionList `xml:"INVSTMTRS>INVPOSLIST,omitempty"`
|
InvPosList PositionList `xml:"INVSTMTRS>INVPOSLIST,omitempty"`
|
||||||
|
@ -417,6 +417,11 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
oounits2.SetFrac64(25, 1)
|
oounits2.SetFrac64(25, 1)
|
||||||
oolimitprice2.SetFrac64(1975, 100)
|
oolimitprice2.SetFrac64(1975, 100)
|
||||||
|
|
||||||
|
usd, err := ofxgo.NewCurrSymbol("USD")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error creating CurrSymbol for USD\n")
|
||||||
|
}
|
||||||
|
|
||||||
statementResponse := ofxgo.InvStatementResponse{
|
statementResponse := ofxgo.InvStatementResponse{
|
||||||
TrnUID: "1a0117ad-692b-4c6a-a21b-020d37d34d49",
|
TrnUID: "1a0117ad-692b-4c6a-a21b-020d37d34d49",
|
||||||
Status: ofxgo.Status{
|
Status: ofxgo.Status{
|
||||||
@ -424,7 +429,7 @@ func TestUnmarshalInvStatementResponse(t *testing.T) {
|
|||||||
Severity: "INFO",
|
Severity: "INFO",
|
||||||
},
|
},
|
||||||
DtAsOf: *ofxgo.NewDateGMT(2017, 3, 31, 0, 0, 0, 0),
|
DtAsOf: *ofxgo.NewDateGMT(2017, 3, 31, 0, 0, 0, 0),
|
||||||
CurDef: "USD",
|
CurDef: *usd,
|
||||||
InvAcctFrom: ofxgo.InvAcct{
|
InvAcctFrom: ofxgo.InvAcct{
|
||||||
BrokerID: "invstrus.com",
|
BrokerID: "invstrus.com",
|
||||||
AcctID: "91827364",
|
AcctID: "91827364",
|
||||||
@ -861,6 +866,11 @@ NEWFILEUID: NONE
|
|||||||
posunitprice2.SetFrac64(2987, 100)
|
posunitprice2.SetFrac64(2987, 100)
|
||||||
posmktval2.SetFrac64(2987, 1)
|
posmktval2.SetFrac64(2987, 1)
|
||||||
|
|
||||||
|
usd, err := ofxgo.NewCurrSymbol("USD")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error creating CurrSymbol for USD\n")
|
||||||
|
}
|
||||||
|
|
||||||
statementResponse := ofxgo.InvStatementResponse{
|
statementResponse := ofxgo.InvStatementResponse{
|
||||||
TrnUID: "1283719872",
|
TrnUID: "1283719872",
|
||||||
Status: ofxgo.Status{
|
Status: ofxgo.Status{
|
||||||
@ -868,7 +878,7 @@ NEWFILEUID: NONE
|
|||||||
Severity: "INFO",
|
Severity: "INFO",
|
||||||
},
|
},
|
||||||
DtAsOf: *ofxgo.NewDateGMT(2017, 4, 3, 12, 0, 0, 0),
|
DtAsOf: *ofxgo.NewDateGMT(2017, 4, 3, 12, 0, 0, 0),
|
||||||
CurDef: "USD",
|
CurDef: *usd,
|
||||||
InvAcctFrom: ofxgo.InvAcct{
|
InvAcctFrom: ofxgo.InvAcct{
|
||||||
BrokerID: "www.exampletrader.com",
|
BrokerID: "www.exampletrader.com",
|
||||||
AcctID: "12341234",
|
AcctID: "12341234",
|
||||||
|
Loading…
Reference in New Issue
Block a user