Add IntialValue in Balances from AccountSummary

This commit is contained in:
TeoV
2020-10-26 17:57:13 +02:00
committed by Dan Christian Bogos
parent b5dd885786
commit 4707e02091
3 changed files with 23 additions and 11 deletions

View File

@@ -818,11 +818,12 @@ func (f ValueFactor) GetValue(tor string) float64 {
// BalanceSummary represents compressed information about a balance
type BalanceSummary struct {
UUID string // Balance UUID
ID string // Balance ID if not defined
Type string // *voice, *data, etc
Value float64
Disabled bool
UUID string // Balance UUID
ID string // Balance ID if not defined
Type string // *voice, *data, etc
InitialValue float64
Value float64
Disabled bool
}
// BalanceSummaries is a list of BalanceSummaries

View File

@@ -760,6 +760,7 @@ func (cd *CallDescriptor) Debit() (cc *CallCost, err error) {
if err != nil {
return nil, err
}
initialAcnt := account.AsAccountSummary()
acntIDs, sgerr := account.GetUniqueSharedGroupMembers(cd)
if sgerr != nil {
return nil, sgerr
@@ -773,7 +774,7 @@ func (cd *CallDescriptor) Debit() (cc *CallCost, err error) {
_, err = guardian.Guardian.Guard(func() (iface interface{}, err error) {
cc, err = cd.debit(account, cd.DryRun, !cd.DenyNegativeAccount)
if err == nil {
cc.AccountSummary = cd.AccountSummary()
cc.AccountSummary = cd.AccountSummary(initialAcnt)
}
return
}, config.CgrConfig().GeneralCfg().LockingTimeout, lkIDs...)
@@ -793,6 +794,7 @@ func (cd *CallDescriptor) MaxDebit() (cc *CallCost, err error) {
if err != nil {
return nil, err
}
initialAcnt := account.AsAccountSummary()
acntIDs, err := account.GetUniqueSharedGroupMembers(cd)
if err != nil {
return nil, err
@@ -814,7 +816,7 @@ func (cd *CallDescriptor) MaxDebit() (cc *CallCost, err error) {
}
if err != nil || remainingDuration == 0 {
cc = cd.CreateCallCost()
cc.AccountSummary = cd.AccountSummary()
cc.AccountSummary = cd.AccountSummary(initialAcnt)
if cd.GetDuration() == 0 {
// add RatingInfo
err = cd.LoadRatingPlans()
@@ -837,7 +839,7 @@ func (cd *CallDescriptor) MaxDebit() (cc *CallCost, err error) {
}
cc, err = cd.debit(account, cd.DryRun, !cd.DenyNegativeAccount)
if err == nil {
cc.AccountSummary = cd.AccountSummary()
cc.AccountSummary = cd.AccountSummary(initialAcnt)
}
return
}, config.CgrConfig().GeneralCfg().LockingTimeout, lkIDs...)
@@ -998,11 +1000,20 @@ func (cd *CallDescriptor) Clone() *CallDescriptor {
}
// AccountSummary returns the AccountSummary for cached account
func (cd *CallDescriptor) AccountSummary() *AccountSummary {
func (cd *CallDescriptor) AccountSummary(initialAcnt *AccountSummary) *AccountSummary {
if cd.account == nil {
return nil
}
return cd.account.AsAccountSummary()
acntSummary := cd.account.AsAccountSummary()
for _, initialBal := range initialAcnt.BalanceSummaries {
for _, currentBal := range acntSummary.BalanceSummaries {
if currentBal.UUID == initialBal.UUID {
currentBal.InitialValue = initialBal.Value
break
}
}
}
return acntSummary
}
// FieldAsInterface is part of utils.DataProvider

View File

@@ -3295,7 +3295,7 @@ func TestEventCostString(t *testing.T) {
},
},
}
eOut = `{"CGRID":"","RunID":"","StartTime":"0001-01-01T00:00:00Z","Usage":null,"Cost":null,"Charges":null,"AccountSummary":{"Tenant":"","ID":"","BalanceSummaries":[{"UUID":"","ID":"ID","Type":"","Value":0,"Disabled":false}],"AllowNegative":false,"Disabled":false},"Rating":null,"Accounting":null,"RatingFilters":null,"Rates":null,"Timings":null}`
eOut = `{"CGRID":"","RunID":"","StartTime":"0001-01-01T00:00:00Z","Usage":null,"Cost":null,"Charges":null,"AccountSummary":{"Tenant":"","ID":"","BalanceSummaries":[{"UUID":"","ID":"ID","Type":"","InitialValue":0,"Value":0,"Disabled":false}],"AllowNegative":false,"Disabled":false},"Rating":null,"Accounting":null,"RatingFilters":null,"Rates":null,"Timings":null}`
if rcv := eventCost.String(); !reflect.DeepEqual(eOut, rcv) {
t.Errorf("Expecting: %+v, received: %+v", eOut, rcv)
}