From 4707e02091b295457e19d567de249c9d72bb410a Mon Sep 17 00:00:00 2001 From: TeoV Date: Mon, 26 Oct 2020 17:57:13 +0200 Subject: [PATCH] Add IntialValue in Balances from AccountSummary --- engine/balances.go | 11 ++++++----- engine/calldesc.go | 21 ++++++++++++++++----- engine/eventcost_test.go | 2 +- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/engine/balances.go b/engine/balances.go index 7ac13387a..c147bdcd5 100644 --- a/engine/balances.go +++ b/engine/balances.go @@ -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 diff --git a/engine/calldesc.go b/engine/calldesc.go index f9411b772..202b884fd 100644 --- a/engine/calldesc.go +++ b/engine/calldesc.go @@ -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 diff --git a/engine/eventcost_test.go b/engine/eventcost_test.go index e59fa465d..83cb185db 100644 --- a/engine/eventcost_test.go +++ b/engine/eventcost_test.go @@ -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) }