You've already forked openaccounting-server
mirror of
https://github.com/openaccounting/oa-server.git
synced 2025-12-09 00:50:59 +13:00
initial commit
This commit is contained in:
117
core/model/price.go
Normal file
117
core/model/price.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/openaccounting/oa-server/core/model/types"
|
||||
"github.com/openaccounting/oa-server/core/ws"
|
||||
"time"
|
||||
)
|
||||
|
||||
type PriceInterface interface {
|
||||
CreatePrice(*types.Price, string) error
|
||||
DeletePrice(string, string) error
|
||||
GetPricesNearestInTime(string, time.Time, string) ([]*types.Price, error)
|
||||
GetPricesByCurrency(string, string, string) ([]*types.Price, error)
|
||||
}
|
||||
|
||||
func (model *Model) CreatePrice(price *types.Price, userId string) error {
|
||||
belongs, err := model.UserBelongsToOrg(userId, price.OrgId)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if belongs == false {
|
||||
return errors.New("User does not belong to org")
|
||||
}
|
||||
|
||||
if price.Id == "" {
|
||||
return errors.New("id required")
|
||||
}
|
||||
|
||||
if price.OrgId == "" {
|
||||
return errors.New("orgId required")
|
||||
}
|
||||
|
||||
if price.Currency == "" {
|
||||
return errors.New("currency required")
|
||||
}
|
||||
|
||||
err = model.db.InsertPrice(price)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Notify web socket subscribers
|
||||
userIds, err2 := model.db.GetOrgUserIds(price.OrgId)
|
||||
|
||||
if err2 == nil {
|
||||
ws.PushPrice(price, userIds, "create")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (model *Model) DeletePrice(id string, userId string) error {
|
||||
// Get original price
|
||||
price, err := model.db.GetPriceById(id)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
belongs, err := model.UserBelongsToOrg(userId, price.OrgId)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if belongs == false {
|
||||
return errors.New("User does not belong to org")
|
||||
}
|
||||
|
||||
err = model.db.DeletePrice(id)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Notify web socket subscribers
|
||||
// TODO only get user ids that have permission to access account
|
||||
userIds, err2 := model.db.GetOrgUserIds(price.OrgId)
|
||||
|
||||
if err2 == nil {
|
||||
ws.PushPrice(price, userIds, "delete")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (model *Model) GetPricesNearestInTime(orgId string, date time.Time, userId string) ([]*types.Price, error) {
|
||||
belongs, err := model.UserBelongsToOrg(userId, orgId)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if belongs == false {
|
||||
return nil, errors.New("User does not belong to org")
|
||||
}
|
||||
|
||||
return model.db.GetPricesNearestInTime(orgId, date)
|
||||
}
|
||||
|
||||
func (model *Model) GetPricesByCurrency(orgId string, currency string, userId string) ([]*types.Price, error) {
|
||||
belongs, err := model.UserBelongsToOrg(userId, orgId)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if belongs == false {
|
||||
return nil, errors.New("User does not belong to org")
|
||||
}
|
||||
|
||||
return model.db.GetPricesByCurrency(orgId, currency)
|
||||
}
|
||||
Reference in New Issue
Block a user