1
0
mirror of https://github.com/aclindsa/moneygo.git synced 2024-12-26 23:42:29 -05:00

Add user-editable securities, strip hard-coded ones from securities.go

This commit is contained in:
Aaron Lindsay 2016-10-16 08:19:11 -04:00
parent 7ffd12b144
commit a61e460c2f
8 changed files with 330 additions and 55716 deletions

2
.gitignore vendored
View File

@ -2,3 +2,5 @@
static/bundle.js static/bundle.js
static/react-widgets static/react-widgets
node_modules node_modules
cusip_list.csv
security_templates.go

View File

@ -143,7 +143,11 @@ func GetTradingAccount(transaction *gorp.Transaction, userid int64, securityid i
return nil, err return nil, err
} }
security := GetSecurity(securityid) security, err := GetSecurity(securityid, userid)
if err != nil {
return nil, err
}
account.UserId = userid account.UserId = userid
account.Name = security.Name account.Name = security.Name
account.ParentAccountId = ta.AccountId account.ParentAccountId = ta.AccountId
@ -176,7 +180,11 @@ func GetImbalanceAccount(transaction *gorp.Transaction, userid int64, securityid
return nil, err return nil, err
} }
security := GetSecurity(securityid) security, err := GetSecurity(securityid, userid)
if err != nil {
return nil, err
}
account.UserId = userid account.UserId = userid
account.Name = security.Name account.Name = security.Name
account.ParentAccountId = ia.AccountId account.ParentAccountId = ia.AccountId
@ -346,7 +354,13 @@ func AccountHandler(w http.ResponseWriter, r *http.Request) {
account.UserId = user.UserId account.UserId = user.UserId
account.AccountVersion = 0 account.AccountVersion = 0
if GetSecurity(account.SecurityId) == nil { security, err := GetSecurity(account.SecurityId, user.UserId)
if err != nil {
WriteError(w, 999 /*Internal Error*/)
log.Print(err)
return
}
if security == nil {
WriteError(w, 3 /*Invalid Request*/) WriteError(w, 3 /*Invalid Request*/)
return return
} }
@ -432,7 +446,13 @@ func AccountHandler(w http.ResponseWriter, r *http.Request) {
} }
account.UserId = user.UserId account.UserId = user.UserId
if GetSecurity(account.SecurityId) == nil { security, err := GetSecurity(account.SecurityId, user.UserId)
if err != nil {
WriteError(w, 999 /*Internal Error*/)
log.Print(err)
return
}
if security == nil {
WriteError(w, 3 /*Invalid Request*/) WriteError(w, 3 /*Invalid Request*/)
return return
} }
@ -451,12 +471,6 @@ func AccountHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
} else if r.Method == "DELETE" { } else if r.Method == "DELETE" {
accountid, err := GetURLID(r.URL.Path)
if err != nil {
WriteError(w, 3 /*Invalid Request*/)
return
}
account, err := GetAccount(accountid, user.UserId) account, err := GetAccount(accountid, user.UserId)
if err != nil { if err != nil {
WriteError(w, 3 /*Invalid Request*/) WriteError(w, 3 /*Invalid Request*/)

1
db.go
View File

@ -19,6 +19,7 @@ func initDB() *gorp.DbMap {
dbmap.AddTableWithName(User{}, "users").SetKeys(true, "UserId") dbmap.AddTableWithName(User{}, "users").SetKeys(true, "UserId")
dbmap.AddTableWithName(Session{}, "sessions").SetKeys(true, "SessionId") dbmap.AddTableWithName(Session{}, "sessions").SetKeys(true, "SessionId")
dbmap.AddTableWithName(Account{}, "accounts").SetKeys(true, "AccountId") dbmap.AddTableWithName(Account{}, "accounts").SetKeys(true, "AccountId")
dbmap.AddTableWithName(Security{}, "securities").SetKeys(true, "SecurityId")
dbmap.AddTableWithName(Transaction{}, "transactions").SetKeys(true, "TransactionId") dbmap.AddTableWithName(Transaction{}, "transactions").SetKeys(true, "TransactionId")
dbmap.AddTableWithName(Split{}, "splits").SetKeys(true, "SplitId") dbmap.AddTableWithName(Split{}, "splits").SetKeys(true, "SplitId")

View File

@ -121,7 +121,13 @@ func AccountImportHandler(w http.ResponseWriter, r *http.Request, user *User, ac
split := new(Split) split := new(Split)
r := new(big.Rat) r := new(big.Rat)
r.Neg(&imbalance) r.Neg(&imbalance)
security := GetSecurity(imbalanced_security) security, err := GetSecurity(imbalanced_security, user.UserId)
if err != nil {
sqltransaction.Rollback()
WriteError(w, 999 /*Internal Error*/)
log.Print(err)
return
}
split.Amount = r.FloatString(security.Precision) split.Amount = r.FloatString(security.Precision)
split.SecurityId = -1 split.SecurityId = -1
split.AccountId = imbalanced_account.AccountId split.AccountId = imbalanced_account.AccountId

View File

@ -132,7 +132,13 @@ func OFXTransactionCallback(transaction_data C.struct_OfxTransactionData, data u
split := new(Split) split := new(Split)
r := new(big.Rat) r := new(big.Rat)
r.SetFloat64(float64(transaction_data.amount)) r.SetFloat64(float64(transaction_data.amount))
security := GetSecurity(itl.Account.SecurityId) security, err := GetSecurity(itl.Account.SecurityId, itl.Account.UserId)
if err != nil {
if iobj.Error == nil {
iobj.Error = err
}
return 1
}
split.Amount = r.FloatString(security.Precision) split.Amount = r.FloatString(security.Precision)
if transaction_data.memo_valid != 0 { if transaction_data.memo_valid != 0 {
split.Memo = C.GoString(&transaction_data.memo[0]) split.Memo = C.GoString(&transaction_data.memo[0])
@ -151,6 +157,7 @@ func OFXTransactionCallback(transaction_data C.struct_OfxTransactionData, data u
} }
var security *Security var security *Security
var err error
split := new(Split) split := new(Split)
units := new(big.Rat) units := new(big.Rat)
@ -183,7 +190,13 @@ func OFXTransactionCallback(transaction_data C.struct_OfxTransactionData, data u
} }
} }
} else { } else {
security = GetSecurity(itl.Account.SecurityId) security, err = GetSecurity(itl.Account.SecurityId, itl.Account.UserId)
if err != nil {
if iobj.Error == nil {
iobj.Error = err
}
return 1
}
} }
} else { } else {
// Calculate units from other available fields if its not present // Calculate units from other available fields if its not present
@ -207,7 +220,13 @@ func OFXTransactionCallback(transaction_data C.struct_OfxTransactionData, data u
} }
// If 'units' wasn't present, assume we're using the account's security // If 'units' wasn't present, assume we're using the account's security
security = GetSecurity(itl.Account.SecurityId) security, err = GetSecurity(itl.Account.SecurityId, itl.Account.UserId)
if err != nil {
if iobj.Error == nil {
iobj.Error = err
}
return 1
}
} }
split.Amount = units.FloatString(security.Precision) split.Amount = units.FloatString(security.Precision)
@ -219,7 +238,13 @@ func OFXTransactionCallback(transaction_data C.struct_OfxTransactionData, data u
split := new(Split) split := new(Split)
r := new(big.Rat) r := new(big.Rat)
r.SetFloat64(float64(-transaction_data.fees)) r.SetFloat64(float64(-transaction_data.fees))
security := GetSecurity(itl.Account.SecurityId) security, err := GetSecurity(itl.Account.SecurityId, itl.Account.UserId)
if err != nil {
if iobj.Error == nil {
iobj.Error = err
}
return 1
}
split.Amount = r.FloatString(security.Precision) split.Amount = r.FloatString(security.Precision)
split.Memo = "fees" split.Memo = "fees"
split.SecurityId = itl.Account.SecurityId split.SecurityId = itl.Account.SecurityId
@ -231,7 +256,13 @@ func OFXTransactionCallback(transaction_data C.struct_OfxTransactionData, data u
split := new(Split) split := new(Split)
r := new(big.Rat) r := new(big.Rat)
r.SetFloat64(float64(-transaction_data.commission)) r.SetFloat64(float64(-transaction_data.commission))
security := GetSecurity(itl.Account.SecurityId) security, err := GetSecurity(itl.Account.SecurityId, itl.Account.UserId)
if err != nil {
if iobj.Error == nil {
iobj.Error = err
}
return 1
}
split.Amount = r.FloatString(security.Precision) split.Amount = r.FloatString(security.Precision)
split.Memo = "commission" split.Memo = "commission"
split.SecurityId = itl.Account.SecurityId split.SecurityId = itl.Account.SecurityId

View File

@ -70,6 +70,7 @@ func main() {
servemux.HandleFunc("/session/", SessionHandler) servemux.HandleFunc("/session/", SessionHandler)
servemux.HandleFunc("/user/", UserHandler) servemux.HandleFunc("/user/", UserHandler)
servemux.HandleFunc("/security/", SecurityHandler) servemux.HandleFunc("/security/", SecurityHandler)
servemux.HandleFunc("/securitytemplate/", SecurityTemplateHandler)
servemux.HandleFunc("/account/", AccountHandler) servemux.HandleFunc("/account/", AccountHandler)
servemux.HandleFunc("/transaction/", TransactionHandler) servemux.HandleFunc("/transaction/", TransactionHandler)
servemux.HandleFunc("/import/gnucash", GnucashImportHandler) servemux.HandleFunc("/import/gnucash", GnucashImportHandler)

File diff suppressed because it is too large Load Diff

View File

@ -294,6 +294,7 @@ func InsertTransactionTx(transaction *gorp.Transaction, t *Transaction, user *Us
return nil return nil
} }
func InsertTransaction(t *Transaction, user *User) error { func InsertTransaction(t *Transaction, user *User) error {
transaction, err := DB.Begin() transaction, err := DB.Begin()
if err != nil { if err != nil {
@ -692,7 +693,10 @@ func GetAccountTransactions(user *User, accountid int64, sort string, page uint6
} }
atl.TotalTransactions = count atl.TotalTransactions = count
security := GetSecurity(atl.Account.SecurityId) security, err := GetSecurity(atl.Account.SecurityId, user.UserId)
if err != nil {
return nil, err
}
if security == nil { if security == nil {
return nil, errors.New("Security not found") return nil, errors.New("Security not found")
} }