mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-17 14:19:54 +05:00
Merge pull request #805 from TeoV/DataUnitsChange
Update CDRsFilter , RPCCDRsFilter , AttrExpFileCdrs structure
This commit is contained in:
@@ -1354,11 +1354,11 @@ func TestApierMaxDebitInexistentAcnt(t *testing.T) {
|
||||
|
||||
func TestApierCdrServer(t *testing.T) {
|
||||
httpClient := new(http.Client)
|
||||
cdrForm1 := url.Values{utils.ACCID: []string{"dsafdsaf"}, utils.CDRHOST: []string{"192.168.1.1"}, utils.REQTYPE: []string{utils.META_RATED}, utils.DIRECTION: []string{"*out"},
|
||||
cdrForm1 := url.Values{utils.ACCID: []string{"dsafdsaf"}, utils.CDRHOST: []string{"192.168.1.1"}, utils.REQTYPE: []string{utils.META_RATED},
|
||||
utils.TENANT: []string{"cgrates.org"}, utils.CATEGORY: []string{"call"}, utils.ACCOUNT: []string{"1001"}, utils.SUBJECT: []string{"1001"}, utils.DESTINATION: []string{"1002"},
|
||||
utils.SETUP_TIME: []string{"2013-11-07T08:42:22Z"},
|
||||
utils.ANSWER_TIME: []string{"2013-11-07T08:42:26Z"}, utils.USAGE: []string{"10"}, "field_extr1": []string{"val_extr1"}, "fieldextr2": []string{"valextr2"}}
|
||||
cdrForm2 := url.Values{utils.ACCID: []string{"adsafdsaf"}, utils.CDRHOST: []string{"192.168.1.1"}, utils.REQTYPE: []string{utils.META_RATED}, utils.DIRECTION: []string{"*out"},
|
||||
cdrForm2 := url.Values{utils.ACCID: []string{"adsafdsaf"}, utils.CDRHOST: []string{"192.168.1.1"}, utils.REQTYPE: []string{utils.META_RATED},
|
||||
utils.TENANT: []string{"cgrates.org"}, utils.CATEGORY: []string{"call"}, utils.ACCOUNT: []string{"1001"}, utils.SUBJECT: []string{"1001"}, utils.DESTINATION: []string{"1002"},
|
||||
utils.SETUP_TIME: []string{"2013-11-07T08:42:23Z"},
|
||||
utils.ANSWER_TIME: []string{"2013-11-07T08:42:26Z"}, utils.USAGE: []string{"10"}, "field_extr1": []string{"val_extr1"}, "fieldextr2": []string{"valextr2"}}
|
||||
|
||||
@@ -34,7 +34,7 @@ type AttrGetDataCost struct {
|
||||
}
|
||||
|
||||
func (apier *ApierV1) GetDataCost(attrs AttrGetDataCost, reply *engine.DataCost) error {
|
||||
usageAsDuration := time.Duration(attrs.Usage) * time.Second // Convert to seconds to match the loaded rates
|
||||
usageAsDuration := time.Duration(attrs.Usage) * time.Nanosecond // Convert to seconds to match the loaded rates
|
||||
cd := &engine.CallDescriptor{
|
||||
Direction: attrs.Direction,
|
||||
Category: attrs.Category,
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
#Id,ConnectFee,Rate,RateUnit,RateIncrement,GroupIntervalStart
|
||||
RT_DATA1,0,0.0,1048576,10240,0
|
||||
|
||||
|
@@ -803,7 +803,6 @@ func NewCDRFromSQL(cdrSql *CDRsql) (cdr *CDR, err error) {
|
||||
cdr.SetupTime = cdrSql.SetupTime
|
||||
cdr.AnswerTime = cdrSql.AnswerTime
|
||||
cdr.Usage = time.Duration(cdrSql.Usage)
|
||||
|
||||
cdr.CostSource = cdrSql.CostSource
|
||||
cdr.Cost = cdrSql.Cost
|
||||
cdr.ExtraInfo = cdrSql.ExtraInfo
|
||||
@@ -813,7 +812,7 @@ func NewCDRFromSQL(cdrSql *CDRsql) (cdr *CDR, err error) {
|
||||
}
|
||||
}
|
||||
if cdrSql.CostDetails != "" {
|
||||
if err = json.Unmarshal([]byte(cdrSql.CostDetails), cdr.CostDetails); err != nil {
|
||||
if err = json.Unmarshal([]byte(cdrSql.CostDetails), &cdr.CostDetails); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -574,13 +574,6 @@ func testGetCDRs(cfg *config.CGRConfig) error {
|
||||
} else if len(CDRs) != 6 {
|
||||
return fmt.Errorf("testGetCDRs #35, unexpected number of CDRs returned: %+v", CDRs)
|
||||
}
|
||||
|
||||
// Filter on direction
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{Directions: []string{utils.OUT}}, false); err != nil {
|
||||
return fmt.Errorf("testGetCDRs #36 err: %v", err)
|
||||
} else if len(CDRs) != 10 {
|
||||
return fmt.Errorf("testGetCDRs #37, unexpected number of CDRs returned: %+v", CDRs)
|
||||
}
|
||||
// Filter on Tenant
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{Tenants: []string{"itsyscom.com"}}, false); err != nil {
|
||||
return fmt.Errorf("testGetCDRs #38 err: %v", err)
|
||||
@@ -661,7 +654,7 @@ func testGetCDRs(cfg *config.CGRConfig) error {
|
||||
return fmt.Errorf("testGetCDRs #63, unexpected number of CDRs returned: %+v", CDRs)
|
||||
}
|
||||
// Filter on MinUsage
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{MinUsage: "125"}, false); err != nil {
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{MinUsage: "125s"}, false); err != nil {
|
||||
return fmt.Errorf("testGetCDRs #64, err: %v", err)
|
||||
} else if len(CDRs) != 2 {
|
||||
return fmt.Errorf("testGetCDRs #65, unexpected number of CDRs returned: %d", len(CDRs))
|
||||
@@ -718,24 +711,6 @@ func testGetCDRs(cfg *config.CGRConfig) error {
|
||||
} else if len(CDRs) != 2 {
|
||||
return fmt.Errorf("testGetCDRs #77, unexpected number of CDRs returned: %+v", CDRs)
|
||||
}
|
||||
// Filter on MinPDD
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{MinPDD: "20ms"}, false); err != nil {
|
||||
return fmt.Errorf("testGetCDRs #78, err: %v", err)
|
||||
} else if len(CDRs) != 7 {
|
||||
return fmt.Errorf("testGetCDRs #79, unexpected number of CDRs returned: %+v", CDRs)
|
||||
}
|
||||
// Filter on maxPdd
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{MaxPDD: "1s"}, false); err != nil {
|
||||
return fmt.Errorf("testGetCDRs #80, err: %v", err)
|
||||
} else if len(CDRs) != 8 {
|
||||
return fmt.Errorf("testGetCDRs #81, unexpected number of CDRs returned: %+v", CDRs)
|
||||
}
|
||||
// Filter on minPdd, maxPdd
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{MinPDD: "10ms", MaxPDD: "1s"}, false); err != nil {
|
||||
return fmt.Errorf("testGetCDRs #82, err: %v", err)
|
||||
} else if len(CDRs) != 6 {
|
||||
return fmt.Errorf("testGetCDRs #83, unexpected number of CDRs returned: %+v", CDRs)
|
||||
}
|
||||
// Combined filter
|
||||
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{RequestTypes: []string{utils.META_RATED}, AnswerTimeStart: &timeStart, AnswerTimeEnd: &timeEnd}, false); err != nil {
|
||||
return fmt.Errorf("testGetCDRs #84, err: %v", err)
|
||||
|
||||
@@ -982,21 +982,7 @@ func (ms *MongoStorage) cleanEmptyFilters(filters bson.M) {
|
||||
|
||||
// _, err := col(utils.CDRsTBL).UpdateAll(bson.M{CGRIDLow: bson.M{"$in": cgrIds}}, bson.M{"$set": bson.M{"deleted_at": time.Now()}})
|
||||
func (ms *MongoStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR, int64, error) {
|
||||
var minPDD, maxPDD, minUsage, maxUsage *time.Duration
|
||||
if len(qryFltr.MinPDD) != 0 {
|
||||
if parsed, err := utils.ParseDurationWithNanosecs(qryFltr.MinPDD); err != nil {
|
||||
return nil, 0, err
|
||||
} else {
|
||||
minPDD = &parsed
|
||||
}
|
||||
}
|
||||
if len(qryFltr.MaxPDD) != 0 {
|
||||
if parsed, err := utils.ParseDurationWithNanosecs(qryFltr.MaxPDD); err != nil {
|
||||
return nil, 0, err
|
||||
} else {
|
||||
maxPDD = &parsed
|
||||
}
|
||||
}
|
||||
var minUsage, maxUsage *time.Duration
|
||||
if len(qryFltr.MinUsage) != 0 {
|
||||
if parsed, err := utils.ParseDurationWithNanosecs(qryFltr.MinUsage); err != nil {
|
||||
return nil, 0, err
|
||||
@@ -1012,26 +998,22 @@ func (ms *MongoStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR,
|
||||
}
|
||||
}
|
||||
filters := bson.M{
|
||||
CGRIDLow: bson.M{"$in": qryFltr.CGRIDs, "$nin": qryFltr.NotCGRIDs},
|
||||
RunIDLow: bson.M{"$in": qryFltr.RunIDs, "$nin": qryFltr.NotRunIDs},
|
||||
OrderIDLow: bson.M{"$gte": qryFltr.OrderIDStart, "$lt": qryFltr.OrderIDEnd},
|
||||
ToRLow: bson.M{"$in": qryFltr.ToRs, "$nin": qryFltr.NotToRs},
|
||||
CDRHostLow: bson.M{"$in": qryFltr.OriginHosts, "$nin": qryFltr.NotOriginHosts},
|
||||
CDRSourceLow: bson.M{"$in": qryFltr.Sources, "$nin": qryFltr.NotSources},
|
||||
RequestTypeLow: bson.M{"$in": qryFltr.RequestTypes, "$nin": qryFltr.NotRequestTypes},
|
||||
DirectionLow: bson.M{"$in": qryFltr.Directions, "$nin": qryFltr.NotDirections},
|
||||
TenantLow: bson.M{"$in": qryFltr.Tenants, "$nin": qryFltr.NotTenants},
|
||||
CategoryLow: bson.M{"$in": qryFltr.Categories, "$nin": qryFltr.NotCategories},
|
||||
AccountLow: bson.M{"$in": qryFltr.Accounts, "$nin": qryFltr.NotAccounts},
|
||||
SubjectLow: bson.M{"$in": qryFltr.Subjects, "$nin": qryFltr.NotSubjects},
|
||||
SupplierLow: bson.M{"$in": qryFltr.Suppliers, "$nin": qryFltr.NotSuppliers},
|
||||
DisconnectCauseLow: bson.M{"$in": qryFltr.DisconnectCauses, "$nin": qryFltr.NotDisconnectCauses},
|
||||
SetupTimeLow: bson.M{"$gte": qryFltr.SetupTimeStart, "$lt": qryFltr.SetupTimeEnd},
|
||||
AnswerTimeLow: bson.M{"$gte": qryFltr.AnswerTimeStart, "$lt": qryFltr.AnswerTimeEnd},
|
||||
CreatedAtLow: bson.M{"$gte": qryFltr.CreatedAtStart, "$lt": qryFltr.CreatedAtEnd},
|
||||
UpdatedAtLow: bson.M{"$gte": qryFltr.UpdatedAtStart, "$lt": qryFltr.UpdatedAtEnd},
|
||||
UsageLow: bson.M{"$gte": minUsage, "$lt": maxUsage},
|
||||
PDDLow: bson.M{"$gte": minPDD, "$lt": maxPDD},
|
||||
CGRIDLow: bson.M{"$in": qryFltr.CGRIDs, "$nin": qryFltr.NotCGRIDs},
|
||||
RunIDLow: bson.M{"$in": qryFltr.RunIDs, "$nin": qryFltr.NotRunIDs},
|
||||
OrderIDLow: bson.M{"$gte": qryFltr.OrderIDStart, "$lt": qryFltr.OrderIDEnd},
|
||||
ToRLow: bson.M{"$in": qryFltr.ToRs, "$nin": qryFltr.NotToRs},
|
||||
CDRHostLow: bson.M{"$in": qryFltr.OriginHosts, "$nin": qryFltr.NotOriginHosts},
|
||||
CDRSourceLow: bson.M{"$in": qryFltr.Sources, "$nin": qryFltr.NotSources},
|
||||
RequestTypeLow: bson.M{"$in": qryFltr.RequestTypes, "$nin": qryFltr.NotRequestTypes},
|
||||
TenantLow: bson.M{"$in": qryFltr.Tenants, "$nin": qryFltr.NotTenants},
|
||||
CategoryLow: bson.M{"$in": qryFltr.Categories, "$nin": qryFltr.NotCategories},
|
||||
AccountLow: bson.M{"$in": qryFltr.Accounts, "$nin": qryFltr.NotAccounts},
|
||||
SubjectLow: bson.M{"$in": qryFltr.Subjects, "$nin": qryFltr.NotSubjects},
|
||||
SetupTimeLow: bson.M{"$gte": qryFltr.SetupTimeStart, "$lt": qryFltr.SetupTimeEnd},
|
||||
AnswerTimeLow: bson.M{"$gte": qryFltr.AnswerTimeStart, "$lt": qryFltr.AnswerTimeEnd},
|
||||
CreatedAtLow: bson.M{"$gte": qryFltr.CreatedAtStart, "$lt": qryFltr.CreatedAtEnd},
|
||||
UpdatedAtLow: bson.M{"$gte": qryFltr.UpdatedAtStart, "$lt": qryFltr.UpdatedAtEnd},
|
||||
UsageLow: bson.M{"$gte": minUsage, "$lt": maxUsage},
|
||||
//CostDetailsLow + "." + AccountLow: bson.M{"$in": qryFltr.RatedAccounts, "$nin": qryFltr.NotRatedAccounts},
|
||||
//CostDetailsLow + "." + SubjectLow: bson.M{"$in": qryFltr.RatedSubjects, "$nin": qryFltr.NotRatedSubjects},
|
||||
}
|
||||
|
||||
@@ -817,12 +817,6 @@ func (self *SQLStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR,
|
||||
if len(qryFltr.NotRequestTypes) != 0 {
|
||||
q = q.Where("request_type not in (?)", qryFltr.NotRequestTypes)
|
||||
}
|
||||
if len(qryFltr.Directions) != 0 {
|
||||
q = q.Where("direction in (?)", qryFltr.Directions)
|
||||
}
|
||||
if len(qryFltr.NotDirections) != 0 {
|
||||
q = q.Where("direction not in (?)", qryFltr.NotDirections)
|
||||
}
|
||||
if len(qryFltr.Tenants) != 0 {
|
||||
q = q.Where("tenant in (?)", qryFltr.Tenants)
|
||||
}
|
||||
@@ -869,18 +863,6 @@ func (self *SQLStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR,
|
||||
qIds.WriteString(" )")
|
||||
q = q.Where(qIds.String())
|
||||
}
|
||||
if len(qryFltr.Suppliers) != 0 {
|
||||
q = q.Where("supplier in (?)", qryFltr.Subjects)
|
||||
}
|
||||
if len(qryFltr.NotSuppliers) != 0 {
|
||||
q = q.Where("supplier not in (?)", qryFltr.NotSubjects)
|
||||
}
|
||||
if len(qryFltr.DisconnectCauses) != 0 {
|
||||
q = q.Where("disconnect_cause in (?)", qryFltr.DisconnectCauses)
|
||||
}
|
||||
if len(qryFltr.NotDisconnectCauses) != 0 {
|
||||
q = q.Where("disconnect_cause not in (?)", qryFltr.NotDisconnectCauses)
|
||||
}
|
||||
if len(qryFltr.Costs) != 0 {
|
||||
q = q.Where(utils.CDRsTBL+".cost in (?)", qryFltr.Costs)
|
||||
}
|
||||
@@ -974,22 +956,6 @@ func (self *SQLStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR,
|
||||
}
|
||||
|
||||
}
|
||||
if len(qryFltr.MinPDD) != 0 {
|
||||
if minPDD, err := utils.ParseDurationWithNanosecs(qryFltr.MinPDD); err != nil {
|
||||
return nil, 0, err
|
||||
} else {
|
||||
q = q.Where("pdd >= ?", minPDD.Nanoseconds())
|
||||
}
|
||||
|
||||
}
|
||||
if len(qryFltr.MaxPDD) != 0 {
|
||||
if maxPDD, err := utils.ParseDurationWithNanosecs(qryFltr.MaxPDD); err != nil {
|
||||
return nil, 0, err
|
||||
} else {
|
||||
q = q.Where("pdd < ?", maxPDD.Nanoseconds())
|
||||
}
|
||||
}
|
||||
|
||||
if qryFltr.MinCost != nil {
|
||||
if qryFltr.MaxCost == nil {
|
||||
q = q.Where("cost >= ?", *qryFltr.MinCost)
|
||||
|
||||
@@ -736,7 +736,6 @@ type AttrExpFileCdrs struct {
|
||||
CdrHosts []string // If provided, it will filter cdrhost
|
||||
CdrSources []string // If provided, it will filter cdrsource
|
||||
ReqTypes []string // If provided, it will fiter reqtype
|
||||
Directions []string // If provided, it will fiter direction
|
||||
Tenants []string // If provided, it will filter tenant
|
||||
Categories []string // If provided, it will filter çategory
|
||||
Accounts []string // If provided, it will filter account
|
||||
@@ -761,7 +760,6 @@ func (self *AttrExpFileCdrs) AsCDRsFilter(timezone string) (*CDRsFilter, error)
|
||||
OriginHosts: self.CdrHosts,
|
||||
Sources: self.CdrSources,
|
||||
RequestTypes: self.ReqTypes,
|
||||
Directions: self.Directions,
|
||||
Tenants: self.Tenants,
|
||||
Categories: self.Categories,
|
||||
Accounts: self.Accounts,
|
||||
@@ -835,7 +833,6 @@ func (self *AttrGetCdrs) AsCDRsFilter(timezone string) (*CDRsFilter, error) {
|
||||
OriginHosts: self.CdrHosts,
|
||||
Sources: self.CdrSources,
|
||||
RequestTypes: self.ReqTypes,
|
||||
Directions: self.Directions,
|
||||
Tenants: self.Tenants,
|
||||
Categories: self.Categories,
|
||||
Accounts: self.Accounts,
|
||||
@@ -879,7 +876,6 @@ type AttrRateCdrs struct {
|
||||
CdrHosts []string // If provided, it will filter cdrhost
|
||||
CdrSources []string // If provided, it will filter cdrsource
|
||||
ReqTypes []string // If provided, it will fiter reqtype
|
||||
Directions []string // If provided, it will fiter direction
|
||||
Tenants []string // If provided, it will filter tenant
|
||||
Categories []string // If provided, it will filter çategory
|
||||
Accounts []string // If provided, it will filter account
|
||||
@@ -902,7 +898,6 @@ func (attrRateCDRs *AttrRateCdrs) AsCDRsFilter(timezone string) (*CDRsFilter, er
|
||||
Sources: attrRateCDRs.CdrSources,
|
||||
ToRs: attrRateCDRs.TORs,
|
||||
RequestTypes: attrRateCDRs.ReqTypes,
|
||||
Directions: attrRateCDRs.Directions,
|
||||
Tenants: attrRateCDRs.Tenants,
|
||||
Categories: attrRateCDRs.Categories,
|
||||
Accounts: attrRateCDRs.Accounts,
|
||||
@@ -1013,8 +1008,6 @@ type CDRsFilter struct {
|
||||
NotToRs []string // Filter specific TORs out
|
||||
RequestTypes []string // If provided, it will fiter reqtype
|
||||
NotRequestTypes []string // Filter out specific request types
|
||||
Directions []string // If provided, it will fiter direction
|
||||
NotDirections []string // Filter out specific directions
|
||||
Tenants []string // If provided, it will filter tenant
|
||||
NotTenants []string // If provided, it will filter tenant
|
||||
Categories []string // If provided, it will filter çategory
|
||||
@@ -1025,10 +1018,6 @@ type CDRsFilter struct {
|
||||
NotSubjects []string // Filter out specific subjects
|
||||
DestinationPrefixes []string // If provided, it will filter on destination prefix
|
||||
NotDestinationPrefixes []string // Filter out specific destination prefixes
|
||||
Suppliers []string // If provided, it will filter the supplier
|
||||
NotSuppliers []string // Filter out specific suppliers
|
||||
DisconnectCauses []string // Filter for disconnect Cause
|
||||
NotDisconnectCauses []string // Filter out specific disconnect causes
|
||||
Costs []float64 // Query based on costs specified
|
||||
NotCosts []float64 // Filter out specific costs out from result
|
||||
ExtraFields map[string]string // Query based on extra fields content
|
||||
@@ -1045,8 +1034,6 @@ type CDRsFilter struct {
|
||||
UpdatedAtEnd *time.Time // End interval, smaller than
|
||||
MinUsage string // Start of the usage interval (>=)
|
||||
MaxUsage string // End of the usage interval (<)
|
||||
MinPDD string // Start of the pdd interval (>=)
|
||||
MaxPDD string // End of the pdd interval (<)
|
||||
MinCost *float64 // Start of the cost interval (>=)
|
||||
MaxCost *float64 // End of the usage interval (<)
|
||||
Unscoped bool // Include soft-deleted records in results
|
||||
@@ -1069,8 +1056,6 @@ type RPCCDRsFilter struct {
|
||||
NotToRs []string // Filter specific TORs out
|
||||
RequestTypes []string // If provided, it will fiter reqtype
|
||||
NotRequestTypes []string // Filter out specific request types
|
||||
Directions []string // If provided, it will fiter direction
|
||||
NotDirections []string // Filter out specific directions
|
||||
Tenants []string // If provided, it will filter tenant
|
||||
NotTenants []string // If provided, it will filter tenant
|
||||
Categories []string // If provided, it will filter çategory
|
||||
@@ -1081,10 +1066,6 @@ type RPCCDRsFilter struct {
|
||||
NotSubjects []string // Filter out specific subjects
|
||||
DestinationPrefixes []string // If provided, it will filter on destination prefix
|
||||
NotDestinationPrefixes []string // Filter out specific destination prefixes
|
||||
Suppliers []string // If provided, it will filter the supplier
|
||||
NotSuppliers []string // Filter out specific suppliers
|
||||
DisconnectCauses []string // Filter for disconnect Cause
|
||||
NotDisconnectCauses []string // Filter out specific disconnect causes
|
||||
Costs []float64 // Query based on costs specified
|
||||
NotCosts []float64 // Filter out specific costs out from result
|
||||
ExtraFields map[string]string // Query based on extra fields content
|
||||
@@ -1101,8 +1082,6 @@ type RPCCDRsFilter struct {
|
||||
UpdatedAtEnd string // End interval, smaller than
|
||||
MinUsage string // Start of the usage interval (>=)
|
||||
MaxUsage string // End of the usage interval (<)
|
||||
MinPDD string // Start of the pdd interval (>=)
|
||||
MaxPDD string // End of the pdd interval (<)
|
||||
MinCost *float64 // Start of the cost interval (>=)
|
||||
MaxCost *float64 // End of the usage interval (<)
|
||||
Paginator // Add pagination
|
||||
@@ -1122,8 +1101,6 @@ func (self *RPCCDRsFilter) AsCDRsFilter(timezone string) (*CDRsFilter, error) {
|
||||
NotSources: self.NotSources,
|
||||
RequestTypes: self.RequestTypes,
|
||||
NotRequestTypes: self.NotRequestTypes,
|
||||
Directions: self.Directions,
|
||||
NotDirections: self.NotDirections,
|
||||
Tenants: self.Tenants,
|
||||
NotTenants: self.NotTenants,
|
||||
Categories: self.Categories,
|
||||
@@ -1134,23 +1111,17 @@ func (self *RPCCDRsFilter) AsCDRsFilter(timezone string) (*CDRsFilter, error) {
|
||||
NotSubjects: self.NotSubjects,
|
||||
DestinationPrefixes: self.DestinationPrefixes,
|
||||
NotDestinationPrefixes: self.NotDestinationPrefixes,
|
||||
Suppliers: self.Suppliers,
|
||||
NotSuppliers: self.NotSuppliers,
|
||||
DisconnectCauses: self.DisconnectCauses,
|
||||
NotDisconnectCauses: self.NotDisconnectCauses,
|
||||
Costs: self.Costs,
|
||||
NotCosts: self.NotCosts,
|
||||
ExtraFields: self.ExtraFields,
|
||||
NotExtraFields: self.NotExtraFields,
|
||||
OrderIDStart: self.OrderIDStart,
|
||||
OrderIDEnd: self.OrderIDEnd,
|
||||
MinUsage: self.MinUsage,
|
||||
MaxUsage: self.MaxUsage,
|
||||
MinPDD: self.MinPDD,
|
||||
MaxPDD: self.MaxPDD,
|
||||
MinCost: self.MinCost,
|
||||
MaxCost: self.MaxCost,
|
||||
Paginator: self.Paginator,
|
||||
Costs: self.Costs,
|
||||
NotCosts: self.NotCosts,
|
||||
ExtraFields: self.ExtraFields,
|
||||
NotExtraFields: self.NotExtraFields,
|
||||
OrderIDStart: self.OrderIDStart,
|
||||
OrderIDEnd: self.OrderIDEnd,
|
||||
MinUsage: self.MinUsage,
|
||||
MaxUsage: self.MaxUsage,
|
||||
MinCost: self.MinCost,
|
||||
MaxCost: self.MaxCost,
|
||||
Paginator: self.Paginator,
|
||||
}
|
||||
if len(self.SetupTimeStart) != 0 {
|
||||
if sTimeStart, err := ParseTimeDetectLayout(self.SetupTimeStart, timezone); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user