diff --git a/engine/cdr.go b/engine/cdr.go index b8447c31a..6edd1ea22 100644 --- a/engine/cdr.go +++ b/engine/cdr.go @@ -331,9 +331,17 @@ func (cdr *CDR) exportFieldValue(cfgCdrFld *config.FCTemplate, filterS *FilterS) cdrVal = cdr.FormatCost(cfgCdrFld.CostShiftDigits, cfgCdrFld.RoundingDecimals) case utils.SetupTime: - cdrVal = cdr.SetupTime.Format(cfgCdrFld.Layout) + if cfgCdrFld.Layout == "" { + cdrVal = cdr.SetupTime.Format(time.RFC3339) + } else { + cdrVal = cdr.SetupTime.Format(cfgCdrFld.Layout) + } case utils.AnswerTime: // Format time based on layout - cdrVal = cdr.AnswerTime.Format(cfgCdrFld.Layout) + if cfgCdrFld.Layout == "" { + cdrVal = cdr.AnswerTime.Format(time.RFC3339) + } else { + cdrVal = cdr.AnswerTime.Format(cfgCdrFld.Layout) + } case utils.Destination: cdrVal, err = cdr.FieldAsString(rsrFld) if err != nil { @@ -356,10 +364,6 @@ func (cdr *CDR) exportFieldValue(cfgCdrFld *config.FCTemplate, filterS *FilterS) func (cdr *CDR) formatField(cfgFld *config.FCTemplate, httpSkipTlsCheck bool, groupedCDRs []*CDR, filterS *FilterS) (outVal string, err error) { - layout := cfgFld.Layout - if layout == "" { - layout = time.RFC3339 - } switch cfgFld.Type { case utils.META_FILLER: outVal, err = cfgFld.Value.ParseValue(utils.EmptyString) @@ -374,7 +378,11 @@ func (cdr *CDR) formatField(cfgFld *config.FCTemplate, httpSkipTlsCheck bool, if dtFld, err := utils.ParseTimeDetectLayout(rawVal, cfgFld.Timezone); err != nil { // Only one rule makes sense here return "", err } else { - outVal = dtFld.Format(layout) + if cfgFld.Layout == "" { + outVal = dtFld.Format(time.RFC3339) + } else { + outVal = dtFld.Format(cfgFld.Layout) + } } case utils.META_HTTP_POST: var outValByte []byte diff --git a/engine/cdr_test.go b/engine/cdr_test.go index d98d44ff9..21e91b84e 100644 --- a/engine/cdr_test.go +++ b/engine/cdr_test.go @@ -1032,3 +1032,37 @@ func TestCDRAddDefaults(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", eCDR, cdr) } } + +func TestCDRexportFieldValue(t *testing.T) { + cdr := &CDR{ + CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), + OrderID: 123, + ToR: utils.VOICE, + OriginID: "dsafdsaf", + OriginHost: "192.168.1.1", + Source: utils.UNIT_TEST, + RequestType: utils.META_RATED, + Tenant: "cgrates.org", + Category: "call", + Account: "1001", + Subject: "1001", + Destination: "+4986517174963", + SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), + AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), + RunID: utils.DEFAULT_RUNID, + Usage: time.Duration(10) * time.Second, + Cost: 1.01, + ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, + } + + cfgCdrFld := &config.FCTemplate{Tag: "SetupTime", Type: utils.META_COMPOSED, + Value: config.NewRSRParsersMustCompile("~SetupTime", true, utils.INFIELD_SEP)} + + eVal := "2013-11-07T08:42:20Z" + if val, err := cdr.exportFieldValue(cfgCdrFld, nil); err != nil { + t.Error(err) + } else if val != eVal { + t.Errorf("Expecting: %+v, received: %+v", eVal, val) + } + +}