diff --git a/engine/model_helpers.go b/engine/model_helpers.go index c7b4d1d3f..8b7726d24 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1194,46 +1194,33 @@ func MapTPDerivedChargers(s []*utils.TPDerivedChargers) (map[string]*utils.TPDer } func APItoModelDerivedCharger(dcs *utils.TPDerivedChargers) (result TpDerivedChargers) { - if dcs != nil { - for _, dc := range dcs.DerivedChargers { - result = append(result, TpDerivedCharger{ - Tpid: dcs.TPid, - Loadid: dcs.LoadId, - Direction: dcs.Direction, - Tenant: dcs.Tenant, - Category: dcs.Category, - Account: dcs.Account, - Subject: dcs.Subject, - Runid: dc.RunId, - RunFilters: dc.RunFilters, - ReqTypeField: dc.ReqTypeField, - DirectionField: dc.DirectionField, - TenantField: dc.TenantField, - CategoryField: dc.CategoryField, - AccountField: dc.AccountField, - SubjectField: dc.SubjectField, - PddField: dc.PddField, - DestinationField: dc.DestinationField, - SetupTimeField: dc.SetupTimeField, - AnswerTimeField: dc.AnswerTimeField, - UsageField: dc.UsageField, - SupplierField: dc.SupplierField, - DisconnectCauseField: dc.DisconnectCauseField, - CostField: dc.CostField, - RatedField: dc.RatedField, - }) - } - if len(dcs.DerivedChargers) == 0 { - result = append(result, TpDerivedCharger{ - Tpid: dcs.TPid, - Loadid: dcs.LoadId, - Direction: dcs.Direction, - Tenant: dcs.Tenant, - Category: dcs.Category, - Account: dcs.Account, - Subject: dcs.Subject, - }) - } + for _, dc := range dcs.DerivedChargers { + result = append(result, TpDerivedCharger{ + Tpid: dcs.TPid, + Loadid: dcs.LoadId, + Direction: dcs.Direction, + Tenant: dcs.Tenant, + Category: dcs.Category, + Account: dcs.Account, + Subject: dcs.Subject, + Runid: dc.RunId, + RunFilters: dc.RunFilters, + ReqTypeField: dc.ReqTypeField, + DirectionField: dc.DirectionField, + TenantField: dc.TenantField, + CategoryField: dc.CategoryField, + AccountField: dc.AccountField, + SubjectField: dc.SubjectField, + PddField: dc.PddField, + DestinationField: dc.DestinationField, + SetupTimeField: dc.SetupTimeField, + AnswerTimeField: dc.AnswerTimeField, + UsageField: dc.UsageField, + SupplierField: dc.SupplierField, + DisconnectCauseField: dc.DisconnectCauseField, + CostField: dc.CostField, + RatedField: dc.RatedField, + }) } return } diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 496a8759e..f2928c54d 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -406,8 +406,9 @@ func (self *SQLStorage) SetTPDerivedChargers(sgs []*utils.TPDerivedChargers) err m := make(map[string]bool) tx := self.db.Begin() for _, dCharger := range sgs { - if found, _ := m[dCharger.Direction]; !found { - m[dCharger.Direction] = true + dcKey := dCharger.GetDerivedChargersKey() + if found, _ := m[dcKey]; !found { + m[dcKey] = true if err := tx.Delete(TpDerivedCharger{ Tpid: dCharger.TPid, Direction: dCharger.Direction, diff --git a/engine/storage_utils.go b/engine/storage_utils.go index 1579e9a38..5839d2179 100644 --- a/engine/storage_utils.go +++ b/engine/storage_utils.go @@ -140,3 +140,18 @@ type AttrCDRSStoreSMCost struct { Cost *SMCost CheckDuplicate bool } + +type ArgsCDRSStoreSMCost struct { + Cost *V2SMCost + CheckDuplicate bool +} + +type V2SMCost struct { + CGRID string + RunID string + OriginHost string + OriginID string + CostSource string + Usage float64 + CostDetails *EventCost +}