diff --git a/engine/account.go b/engine/account.go index 4888b536d..f8dfc1f3a 100644 --- a/engine/account.go +++ b/engine/account.go @@ -700,6 +700,7 @@ func (acc *Account) InitCounters() { uc.Counters = make(CounterFilters, 0) acc.UnitCounters[at.Balance.GetType()] = append(acc.UnitCounters[at.Balance.GetType()], uc) } + c := &CounterFilter{Filter: at.Balance} if (c.Filter.ID == nil || *c.Filter.ID == "") && at.UniqueID != "" { c.Filter.ID = utils.StringPointer(at.UniqueID) diff --git a/engine/balance_filter.go b/engine/balance_filter.go index e9f95e68c..28d9c912f 100644 --- a/engine/balance_filter.go +++ b/engine/balance_filter.go @@ -47,6 +47,67 @@ func (bp *BalanceFilter) CreateBalance() *Balance { return b.Clone() } +func (bf *BalanceFilter) Clone() *BalanceFilter { + result := &BalanceFilter{} + if bf.Uuid != nil { + result.Uuid = new(string) + *result.Uuid = *bf.Uuid + } + if bf.ID != nil { + result.ID = new(string) + *result.ID = *bf.ID + } + if bf.Value != nil { + result.Value = new(float64) + *result.Value = *bf.Value + } + if bf.RatingSubject != nil { + result.RatingSubject = new(string) + *result.RatingSubject = *bf.RatingSubject + } + if bf.Type != nil { + result.Type = new(string) + *result.Type = *bf.Type + } + if bf.ExpirationDate != nil { + result.ExpirationDate = new(time.Time) + *result.ExpirationDate = *bf.ExpirationDate + } + if bf.Weight != nil { + result.Weight = new(float64) + *result.Weight = *bf.Weight + } + if bf.Disabled != nil { + result.Disabled = new(bool) + *result.Disabled = *bf.Disabled + } + if bf.Blocker != nil { + result.Blocker = new(bool) + *result.Blocker = *bf.Blocker + } + if bf.Factor != nil { + result.Factor = new(ValueFactor) + *result.Factor = *bf.Factor + } + if bf.Directions != nil { + result.Directions = utils.StringMapPointer(bf.Directions.Clone()) + } + if bf.DestinationIDs != nil { + result.DestinationIDs = utils.StringMapPointer(bf.DestinationIDs.Clone()) + } + if bf.Categories != nil { + result.Categories = utils.StringMapPointer(bf.Categories.Clone()) + } + if bf.SharedGroups != nil { + result.SharedGroups = utils.StringMapPointer(bf.SharedGroups.Clone()) + } + if bf.TimingIDs != nil { + result.TimingIDs = utils.StringMapPointer(bf.TimingIDs.Clone()) + } + + return result +} + func (bp *BalanceFilter) LoadFromBalance(b *Balance) *BalanceFilter { if b.Uuid != "" { bp.Uuid = &b.Uuid diff --git a/engine/loader_csv_test.go b/engine/loader_csv_test.go index 69f090c8d..9f9a62abd 100644 --- a/engine/loader_csv_test.go +++ b/engine/loader_csv_test.go @@ -1055,7 +1055,7 @@ func TestLoadActionTriggers(t *testing.T) { ThresholdType: utils.TRIGGER_MIN_EVENT_COUNTER, ThresholdValue: 10, Balance: &BalanceFilter{ - ID: utils.StringPointer("st0"), + ID: nil, Type: utils.StringPointer(utils.VOICE), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), DestinationIDs: utils.StringMapPointer(utils.NewStringMap("GERMANY_O2")), diff --git a/utils/map.go b/utils/map.go index e45488935..07f2d280b 100644 --- a/utils/map.go +++ b/utils/map.go @@ -107,14 +107,6 @@ func (sm StringMap) Includes(om StringMap) bool { return true } -func (sm StringMap) Clone() StringMap { - result := make(StringMap, len(sm)) - for k := range sm { - result[k] = true - } - return result -} - func (sm StringMap) Slice() []string { result := make([]string, len(sm)) i := 0 @@ -142,6 +134,12 @@ func (sm StringMap) Copy(o StringMap) { } } +func (sm StringMap) Clone() StringMap { + result := make(StringMap, len(sm)) + result.Copy(sm) + return result +} + func (sm StringMap) String() string { return strings.Join(sm.Slice(), INFIELD_SEP) }