You've already forked openaccounting-server
mirror of
https://github.com/openaccounting/oa-server.git
synced 2025-12-09 00:50:59 +13:00
118 lines
2.4 KiB
Go
118 lines
2.4 KiB
Go
|
|
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)
|
||
|
|
}
|