diff --git a/engine/action_timing.go b/engine/action_timing.go index 89868ce86..27d956c51 100644 --- a/engine/action_timing.go +++ b/engine/action_timing.go @@ -208,6 +208,9 @@ func (at *ActionTiming) Execute() (err error) { } for _, a := range aac { a.ExpirationDate, _ = utils.ParseDate(a.ExpirationString) + if a.MinuteBucket != nil { + a.MinuteBucket.ExpirationDate = a.ExpirationDate + } actionFunction, exists := getActionFunc(a.ActionType) if !exists { Logger.Crit(fmt.Sprintf("Function type %v not available, aborting execution!", a.ActionType)) diff --git a/engine/action_trigger.go b/engine/action_trigger.go index 82bba4849..2add33bc1 100644 --- a/engine/action_trigger.go +++ b/engine/action_trigger.go @@ -47,6 +47,9 @@ func (at *ActionTrigger) Execute(ub *UserBalance) (err error) { } for _, a := range aac { a.ExpirationDate, _ = utils.ParseDate(a.ExpirationString) + if a.MinuteBucket != nil { + a.MinuteBucket.ExpirationDate = a.ExpirationDate + } actionFunction, exists := getActionFunc(a.ActionType) if !exists { Logger.Warning(fmt.Sprintf("Function type %v not available, aborting execution!", a.ActionType)) diff --git a/engine/loader_csv.go b/engine/loader_csv.go index c6c79e039..b0ae606df 100644 --- a/engine/loader_csv.go +++ b/engine/loader_csv.go @@ -381,12 +381,11 @@ func (csvr *CSVReader) LoadActions() (err error) { Weight: weight, ExpirationString: record[5], MinuteBucket: &MinuteBucket{ - Seconds: units, - Weight: minutesWeight, - Price: value, - PriceType: record[7], - DestinationId: record[6], - ExpirationString: record[5], + Seconds: units, + Weight: minutesWeight, + Price: value, + PriceType: record[7], + DestinationId: record[6], }, } if _, err := utils.ParseDate(a.ExpirationString); err != nil { diff --git a/engine/minute_buckets.go b/engine/minute_buckets.go index 50bdd0070..ae34d0fa7 100644 --- a/engine/minute_buckets.go +++ b/engine/minute_buckets.go @@ -25,14 +25,13 @@ import ( ) type MinuteBucket struct { - Seconds float64 - Weight float64 - Price float64 // percentage from standard price or absolute value depending on Type - PriceType string - DestinationId string - ExpirationString string - ExpirationDate time.Time - precision int + Seconds float64 + Weight float64 + Price float64 // percentage from standard price or absolute value depending on Type + PriceType string + DestinationId string + ExpirationDate time.Time + precision int } const ( diff --git a/engine/simple_serializer.go b/engine/simple_serializer.go index 0288d1c63..9188ecb91 100644 --- a/engine/simple_serializer.go +++ b/engine/simple_serializer.go @@ -112,6 +112,7 @@ func (a *Action) Store() (result string, err error) { result += a.ActionType + "|" result += a.BalanceId + "|" result += a.Direction + "|" + result += a.ExpirationString + "|" result += a.ExpirationDate.Format(time.RFC3339) + "|" result += strconv.FormatFloat(a.Units, 'f', -1, 64) + "|" result += strconv.FormatFloat(a.Weight, 'f', -1, 64) @@ -128,22 +129,23 @@ func (a *Action) Store() (result string, err error) { func (a *Action) Restore(input string) (err error) { elements := strings.Split(input, "|") - if len(elements) < 7 { + if len(elements) < 8 { return notEnoughElements } a.Id = elements[0] a.ActionType = elements[1] a.BalanceId = elements[2] a.Direction = elements[3] - a.ExpirationDate, err = time.Parse(time.RFC3339, elements[4]) + a.ExpirationString = elements[4] + a.ExpirationDate, err = time.Parse(time.RFC3339, elements[5]) if err != nil { return err } - a.Units, _ = strconv.ParseFloat(elements[5], 64) - a.Weight, _ = strconv.ParseFloat(elements[6], 64) - if len(elements) == 8 { + a.Units, _ = strconv.ParseFloat(elements[6], 64) + a.Weight, _ = strconv.ParseFloat(elements[7], 64) + if len(elements) == 9 { a.MinuteBucket = &MinuteBucket{} - if err := a.MinuteBucket.Restore(elements[7]); err != nil { + if err := a.MinuteBucket.Restore(elements[8]); err != nil { return err } } diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 633bb9752..99caf6da3 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -1130,12 +1130,11 @@ func (self *SQLStorage) GetTpActions(tpid, tag string) (map[string][]*Action, er Weight: weight, ExpirationString: expirationDate, MinuteBucket: &MinuteBucket{ - Seconds: units, - Weight: minutes_weight, - Price: price, - PriceType: rate_type, - DestinationId: destinations_tag, - ExpirationString: expirationDate, + Seconds: units, + Weight: minutes_weight, + Price: price, + PriceType: rate_type, + DestinationId: destinations_tag, }, } }