This commit is contained in:
TeoV
2018-09-03 03:37:12 -04:00
committed by Dan Christian Bogos
parent 2765a24a06
commit 249ba0e487
3 changed files with 96 additions and 14 deletions

View File

@@ -753,13 +753,57 @@ func testGetCDRs(cfg *config.CGRConfig) error {
} else if len(CDRs) != 7 {
return fmt.Errorf("testGetCDRs #94, unexpected number of CDRs returned: %+v", len(CDRs))
}
// Filter OrderBy
// if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{MinUsage: "12s", OrderBy: "orderid"}, false); err != nil {
// return fmt.Errorf("testGetCDRs #95, err: %v", err)
// } else {
// for _, cdr := range CDRs {
// }
// }
//Filter by OrderID descendent
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{OrderBy: "OrderID;desc"}, false); err != nil {
return fmt.Errorf("testGetCDRs #95, err: %v", err)
} else {
for i, _ := range CDRs {
if i+1 > len(CDRs)-1 {
break
}
if CDRs[i].OrderID < CDRs[i+1].OrderID {
return fmt.Errorf("%+v should be greater than %+v \n", CDRs[i].OrderID, CDRs[i+1].OrderID)
}
}
}
//Filter by OrderID ascendent
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{OrderBy: "OrderID"}, false); err != nil {
return fmt.Errorf("testGetCDRs #95, err: %v", err)
} else {
for i, _ := range CDRs {
if i+1 > len(CDRs)-1 {
break
}
if CDRs[i].OrderID > CDRs[i+1].OrderID {
return fmt.Errorf("%+v sould be smaller than %+v \n", CDRs[i].OrderID, CDRs[i+1].OrderID)
}
}
}
//Filter by Cost descendent
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{OrderBy: "Cost;desc"}, false); err != nil {
return fmt.Errorf("testGetCDRs #95, err: %v", err)
} else {
for i, _ := range CDRs {
if i+1 > len(CDRs)-1 {
break
}
if CDRs[i].Cost < CDRs[i+1].Cost {
return fmt.Errorf("%+v should be greater than %+v \n", CDRs[i].Cost, CDRs[i+1].Cost)
}
}
}
//Filter by Cost ascendent
if CDRs, _, err := cdrStorage.GetCDRs(&utils.CDRsFilter{OrderBy: "Cost"}, false); err != nil {
return fmt.Errorf("testGetCDRs #95, err: %v", err)
} else {
for i, _ := range CDRs {
if i+1 > len(CDRs)-1 {
break
}
if CDRs[i].Cost > CDRs[i+1].Cost {
return fmt.Errorf("%+v sould be smaller than %+v \n", CDRs[i].Cost, CDRs[i+1].Cost)
}
}
}
return nil
}

View File

@@ -1119,10 +1119,27 @@ func (ms *MongoStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR,
if qryFltr.Paginator.Offset != nil {
q = q.Skip(*qryFltr.Paginator.Offset)
}
// need to check if it's descencent
// after that make a switch to make the parameter compatible
if qryFltr.OrderBy != "" {
q = q.Sort(qryFltr.OrderBy)
var orderVal string
separateVals := strings.Split(qryFltr.OrderBy, utils.INFIELD_SEP)
if len(separateVals) == 2 && separateVals[1] == "desc" {
orderVal += "-"
}
switch separateVals[0] {
case utils.OrderID:
orderVal += "orderid"
case utils.AnswerTime:
orderVal += "answertime"
case utils.SetupTime:
orderVal += "setuptime"
case utils.Usage:
orderVal += "usage"
case utils.Cost:
orderVal += "cost"
default:
return nil, 0, fmt.Errorf("Invalid value : %s", separateVals[0])
}
q = q.Sort(orderVal)
}
if qryFltr.Count {
cnt, err := q.Count()

View File

@@ -1042,10 +1042,31 @@ func (self *SQLStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR,
if qryFltr.UpdatedAtEnd != nil && !qryFltr.UpdatedAtEnd.IsZero() {
q = q.Where("updated_at < ?", qryFltr.UpdatedAtEnd)
}
// need to check if it's descencent
// after that make a switch to make the parameter compatible
if qryFltr.OrderBy != "" {
q = q.Order(qryFltr.OrderBy)
var orderVal string
separateVals := strings.Split(qryFltr.OrderBy, utils.INFIELD_SEP)
switch separateVals[0] {
case utils.OrderID:
orderVal = "id"
case utils.AnswerTime:
orderVal = "answer_time"
case utils.SetupTime:
orderVal = "setup_time"
case utils.Usage:
if self.db.Dialect().GetName() == utils.MYSQL {
orderVal = "`usage`"
} else {
orderVal = "usage"
}
case utils.Cost:
orderVal = "cost"
default:
return nil, 0, fmt.Errorf("Invalid value : %s", separateVals[0])
}
if len(separateVals) == 2 && separateVals[1] == "desc" {
orderVal += " DESC"
}
q = q.Order(orderVal)
}
if len(qryFltr.MinUsage) != 0 {
minUsage, err := utils.ParseDurationWithNanosecs(qryFltr.MinUsage)