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