mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 18:46:24 +05:00
Fixes #924
This commit is contained in:
committed by
Dan Christian Bogos
parent
2765a24a06
commit
249ba0e487
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user