From c045beecc8ab47c9ece17a81b0505a64e7151914 Mon Sep 17 00:00:00 2001 From: DanB Date: Tue, 17 Dec 2019 14:43:33 +0100 Subject: [PATCH] Automatic rerating in case of Usage of SessionCost not matching CDR received --- engine/cdrs.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/engine/cdrs.go b/engine/cdrs.go index 90e5f68fc..463d5be1f 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -160,6 +160,24 @@ func (cdrS *CDRServer) rateCDR(cdr *CDRWithArgDispatcher) ([]*CDR, error) { cdrClone.OriginID = smCost.OriginID if cdr.Usage == 0 { cdrClone.Usage = smCost.Usage + } else if smCost.CostDetails.GetUsage() != cdr.Usage { + if err = cdrS.refundEventCost(smCost.CostDetails, + cdrClone.RequestType, cdrClone.ToR); err != nil { + return nil, err + } + cdrClone.CostDetails = nil + if qryCC, err = cdrS.getCostFromRater(&CDRWithArgDispatcher{CDR: cdrClone}); err != nil { + return nil, err + } else { + smCost = &SMCost{ + CGRID: cdrClone.CGRID, + RunID: cdrClone.RunID, + OriginHost: cdrClone.OriginID, + CostSource: utils.CDRs, + Usage: cdrClone.Usage, + CostDetails: NewEventCostFromCallCost(qryCC, cdrClone.CGRID, cdrClone.RunID), + } + } } cdrClone.Cost = smCost.CostDetails.GetCost() cdrClone.CostDetails = smCost.CostDetails