From 18999bcbbda8b694595b6af2661fc29c08aa8f02 Mon Sep 17 00:00:00 2001 From: DanB Date: Tue, 19 Nov 2019 20:15:50 +0100 Subject: [PATCH] CDRs refundCDR method implementation --- engine/cdrs.go | 15 +++++++++++++-- engine/libeventcost.go | 6 ++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/engine/cdrs.go b/engine/cdrs.go index 57b77c1a5..aa73a0b6f 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -286,9 +286,20 @@ func (cdrS *CDRServer) rateCDRWithErr(cdr *CDRWithArgDispatcher) (ratedCDRs []*C return } +// refundCDR will refund the EventCost within the CDR func (cdrS *CDRServer) refundCDR(cdr *CDR) (err error) { - - return + if !AccountableRequestTypes.HasField(cdr.RequestType) || cdr.CostDetails == nil { + return // non refundable + } + cd := cdr.CostDetails.AsRefundIncrements(cdr.ToR) + if cd == nil || len(cd.Increments) == 0 { + return + } + var acnt engine.Account + if err = cdrS.rals.Call(utils.ResponderRefundIncrements, + &engine.CallDescriptorWithArgDispatcher{CallDescriptor: cd}, &acnt); err != nil { + return + } } // chrgProcessEvent will process the CGREvent with ChargerS subsystem diff --git a/engine/libeventcost.go b/engine/libeventcost.go index 613bb0403..22bd28328 100644 --- a/engine/libeventcost.go +++ b/engine/libeventcost.go @@ -35,6 +35,12 @@ var NonMonetaryBalances = MapEvent{ utils.GENERIC: struct{}{}, } +var AccountableRequestTypes = MapEvent{ + utils.MetaPrepaid: struct{}{}, + utils.MetaPostpaid: struct{}{}, + utils.MetaPseudoprepaid: struct{}{}, +} + // ChargingInterval represents one interval out of Usage providing charging info // eg: PEAK vs OFFPEAK type ChargingInterval struct {