Update Suretax to use RSRParsers and remove unused method from cdr

This commit is contained in:
TeoV
2019-05-31 17:20:40 +03:00
committed by Dan Christian Bogos
parent c170910a33
commit 673b10a40c
6 changed files with 90 additions and 104 deletions

View File

@@ -708,22 +708,22 @@ const CGRATES_CFG_JSON = `
"response_group": "03", // determines how taxes are grouped for the response <03|13>
"response_type": "D4", // determines the granularity of taxes and (optionally) the decimal precision for the tax calculations and amounts in the response
"regulatory_code": "03", // provider type
"client_tracking": "CGRID", // template extracting client information out of StoredCdr; <$RSRFields>
"customer_number": "Subject", // template extracting customer number out of StoredCdr; <$RSRFields>
"orig_number": "Subject", // template extracting origination number out of StoredCdr; <$RSRFields>
"term_number": "Destination", // template extracting termination number out of StoredCdr; <$RSRFields>
"bill_to_number": "", // template extracting billed to number out of StoredCdr; <$RSRFields>
"zipcode": "", // template extracting billing zip code out of StoredCdr; <$RSRFields>
"plus4": "", // template extracting billing zip code extension out of StoredCdr; <$RSRFields>
"p2pzipcode": "", // template extracting secondary zip code out of StoredCdr; <$RSRFields>
"p2pplus4": "", // template extracting secondary zip code extension out of StoredCdr; <$RSRFields>
"units": "^1", // template extracting number of “lines” or unique charges contained within the revenue out of StoredCdr; <$RSRFields>
"unit_type": "^00", // template extracting number of unique access lines out of StoredCdr; <$RSRFields>
"tax_included": "^0", // template extracting tax included in revenue out of StoredCdr; <$RSRFields>
"tax_situs_rule": "^04", // template extracting tax situs rule out of StoredCdr; <$RSRFields>
"trans_type_code": "^010101", // template extracting transaction type indicator out of StoredCdr; <$RSRFields>
"sales_type_code": "^R", // template extracting sales type code out of StoredCdr; <$RSRFields>
"tax_exemption_code_list": "", // template extracting tax exemption code list out of StoredCdr; <$RSRFields>
"client_tracking": "~CGRID", // template extracting client information out of StoredCdr; <RSRParsers>
"customer_number": "~Subject", // template extracting customer number out of StoredCdr; <RSRParsers>
"orig_number": "~Subject", // template extracting origination number out of StoredCdr; <RSRParsers>
"term_number": "~Destination", // template extracting termination number out of StoredCdr; <RSRParsers>
"bill_to_number": "", // template extracting billed to number out of StoredCdr; <RSRParsers>
"zipcode": "", // template extracting billing zip code out of StoredCdr; <RSRParsers>
"plus4": "", // template extracting billing zip code extension out of StoredCdr; <RSRParsers>
"p2pzipcode": "", // template extracting secondary zip code out of StoredCdr; <RSRParsers>
"p2pplus4": "", // template extracting secondary zip code extension out of StoredCdr; <RSRParsers>
"units": "1", // template extracting number of “lines” or unique charges contained within the revenue out of StoredCdr; <RSRParsers>
"unit_type": "00", // template extracting number of unique access lines out of StoredCdr; <RSRParsers>
"tax_included": "0", // template extracting tax included in revenue out of StoredCdr; <RSRParsers>
"tax_situs_rule": "04", // template extracting tax situs rule out of StoredCdr; <RSRParsers>
"trans_type_code": "010101", // template extracting transaction type indicator out of StoredCdr; <RSRParsers>
"sales_type_code": "R", // template extracting sales type code out of StoredCdr; <RSRParsers>
"tax_exemption_code_list": "", // template extracting tax exemption code list out of StoredCdr; <RSRParsers>
},

View File

@@ -1356,21 +1356,21 @@ func TestDfSureTaxJsonCfg(t *testing.T) {
Response_group: utils.StringPointer("03"),
Response_type: utils.StringPointer("D4"),
Regulatory_code: utils.StringPointer("03"),
Client_tracking: utils.StringPointer(utils.CGRID),
Customer_number: utils.StringPointer("Subject"),
Orig_number: utils.StringPointer("Subject"),
Term_number: utils.StringPointer("Destination"),
Client_tracking: utils.StringPointer(utils.DynamicDataPrefix + utils.CGRID),
Customer_number: utils.StringPointer("~Subject"),
Orig_number: utils.StringPointer("~Subject"),
Term_number: utils.StringPointer("~Destination"),
Bill_to_number: utils.StringPointer(""),
Zipcode: utils.StringPointer(""),
Plus4: utils.StringPointer(""),
P2PZipcode: utils.StringPointer(""),
P2PPlus4: utils.StringPointer(""),
Units: utils.StringPointer("^1"),
Unit_type: utils.StringPointer("^00"),
Tax_included: utils.StringPointer("^0"),
Tax_situs_rule: utils.StringPointer("^04"),
Trans_type_code: utils.StringPointer("^010101"),
Sales_type_code: utils.StringPointer("^R"),
Units: utils.StringPointer("1"),
Unit_type: utils.StringPointer("00"),
Tax_included: utils.StringPointer("0"),
Tax_situs_rule: utils.StringPointer("04"),
Trans_type_code: utils.StringPointer("010101"),
Sales_type_code: utils.StringPointer("R"),
Tax_exemption_code_list: utils.StringPointer(""),
}
if cfg, err := dfCgrJsonCfg.SureTaxJsonCfg(); err != nil {

View File

@@ -943,21 +943,21 @@ func TestCgrCfgJSONDefaultsSureTax(t *testing.T) {
ResponseGroup: "03",
ResponseType: "D4",
RegulatoryCode: "03",
ClientTracking: utils.ParseRSRFieldsMustCompile("CGRID", utils.INFIELD_SEP),
CustomerNumber: utils.ParseRSRFieldsMustCompile("Subject", utils.INFIELD_SEP),
OrigNumber: utils.ParseRSRFieldsMustCompile("Subject", utils.INFIELD_SEP),
TermNumber: utils.ParseRSRFieldsMustCompile("Destination", utils.INFIELD_SEP),
BillToNumber: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
Zipcode: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
P2PZipcode: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
P2PPlus4: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
Units: utils.ParseRSRFieldsMustCompile("^1", utils.INFIELD_SEP),
UnitType: utils.ParseRSRFieldsMustCompile("^00", utils.INFIELD_SEP),
TaxIncluded: utils.ParseRSRFieldsMustCompile("^0", utils.INFIELD_SEP),
TaxSitusRule: utils.ParseRSRFieldsMustCompile("^04", utils.INFIELD_SEP),
TransTypeCode: utils.ParseRSRFieldsMustCompile("^010101", utils.INFIELD_SEP),
SalesTypeCode: utils.ParseRSRFieldsMustCompile("^R", utils.INFIELD_SEP),
TaxExemptionCodeList: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
ClientTracking: NewRSRParsersMustCompile("~CGRID", true, utils.INFIELD_SEP),
CustomerNumber: NewRSRParsersMustCompile("~Subject", true, utils.INFIELD_SEP),
OrigNumber: NewRSRParsersMustCompile("~Subject", true, utils.INFIELD_SEP),
TermNumber: NewRSRParsersMustCompile("~Destination", true, utils.INFIELD_SEP),
BillToNumber: NewRSRParsersMustCompile("", true, utils.INFIELD_SEP),
Zipcode: NewRSRParsersMustCompile("", true, utils.INFIELD_SEP),
P2PZipcode: NewRSRParsersMustCompile("", true, utils.INFIELD_SEP),
P2PPlus4: NewRSRParsersMustCompile("", true, utils.INFIELD_SEP),
Units: NewRSRParsersMustCompile("1", true, utils.INFIELD_SEP),
UnitType: NewRSRParsersMustCompile("00", true, utils.INFIELD_SEP),
TaxIncluded: NewRSRParsersMustCompile("0", true, utils.INFIELD_SEP),
TaxSitusRule: NewRSRParsersMustCompile("04", true, utils.INFIELD_SEP),
TransTypeCode: NewRSRParsersMustCompile("010101", true, utils.INFIELD_SEP),
SalesTypeCode: NewRSRParsersMustCompile("R", true, utils.INFIELD_SEP),
TaxExemptionCodeList: NewRSRParsersMustCompile("", true, utils.INFIELD_SEP),
}
if !reflect.DeepEqual(cgrCfg.sureTaxCfg, eSureTaxCfg) {

View File

@@ -36,22 +36,22 @@ type SureTaxCfg struct {
ResponseGroup string
ResponseType string
RegulatoryCode string
ClientTracking utils.RSRFields // Concatenate all of them to get value
CustomerNumber utils.RSRFields
OrigNumber utils.RSRFields
TermNumber utils.RSRFields
BillToNumber utils.RSRFields
Zipcode utils.RSRFields
Plus4 utils.RSRFields
P2PZipcode utils.RSRFields
P2PPlus4 utils.RSRFields
Units utils.RSRFields
UnitType utils.RSRFields
TaxIncluded utils.RSRFields
TaxSitusRule utils.RSRFields
TransTypeCode utils.RSRFields
SalesTypeCode utils.RSRFields
TaxExemptionCodeList utils.RSRFields
ClientTracking RSRParsers // Concatenate all of them to get value
CustomerNumber RSRParsers
OrigNumber RSRParsers
TermNumber RSRParsers
BillToNumber RSRParsers
Zipcode RSRParsers
Plus4 RSRParsers
P2PZipcode RSRParsers
P2PPlus4 RSRParsers
Units RSRParsers
UnitType RSRParsers
TaxIncluded RSRParsers
TaxSitusRule RSRParsers
TransTypeCode RSRParsers
SalesTypeCode RSRParsers
TaxExemptionCodeList RSRParsers
}
// Loads/re-loads data from json config object
@@ -92,82 +92,82 @@ func (self *SureTaxCfg) loadFromJsonCfg(jsnCfg *SureTaxJsonCfg) (err error) {
self.RegulatoryCode = *jsnCfg.Regulatory_code
}
if jsnCfg.Client_tracking != nil {
if self.ClientTracking, err = utils.ParseRSRFields(*jsnCfg.Client_tracking, utils.INFIELD_SEP); err != nil {
if self.ClientTracking, err = NewRSRParsers(*jsnCfg.Client_tracking, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Customer_number != nil {
if self.CustomerNumber, err = utils.ParseRSRFields(*jsnCfg.Customer_number, utils.INFIELD_SEP); err != nil {
if self.CustomerNumber, err = NewRSRParsers(*jsnCfg.Customer_number, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Orig_number != nil {
if self.OrigNumber, err = utils.ParseRSRFields(*jsnCfg.Orig_number, utils.INFIELD_SEP); err != nil {
if self.OrigNumber, err = NewRSRParsers(*jsnCfg.Orig_number, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Term_number != nil {
if self.TermNumber, err = utils.ParseRSRFields(*jsnCfg.Term_number, utils.INFIELD_SEP); err != nil {
if self.TermNumber, err = NewRSRParsers(*jsnCfg.Term_number, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Bill_to_number != nil {
if self.BillToNumber, err = utils.ParseRSRFields(*jsnCfg.Bill_to_number, utils.INFIELD_SEP); err != nil {
if self.BillToNumber, err = NewRSRParsers(*jsnCfg.Bill_to_number, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Zipcode != nil {
if self.Zipcode, err = utils.ParseRSRFields(*jsnCfg.Zipcode, utils.INFIELD_SEP); err != nil {
if self.Zipcode, err = NewRSRParsers(*jsnCfg.Zipcode, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Plus4 != nil {
if self.Plus4, err = utils.ParseRSRFields(*jsnCfg.Plus4, utils.INFIELD_SEP); err != nil {
if self.Plus4, err = NewRSRParsers(*jsnCfg.Plus4, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.P2PZipcode != nil {
if self.P2PZipcode, err = utils.ParseRSRFields(*jsnCfg.P2PZipcode, utils.INFIELD_SEP); err != nil {
if self.P2PZipcode, err = NewRSRParsers(*jsnCfg.P2PZipcode, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.P2PPlus4 != nil {
if self.P2PPlus4, err = utils.ParseRSRFields(*jsnCfg.P2PPlus4, utils.INFIELD_SEP); err != nil {
if self.P2PPlus4, err = NewRSRParsers(*jsnCfg.P2PPlus4, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Units != nil {
if self.Units, err = utils.ParseRSRFields(*jsnCfg.Units, utils.INFIELD_SEP); err != nil {
if self.Units, err = NewRSRParsers(*jsnCfg.Units, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Unit_type != nil {
if self.UnitType, err = utils.ParseRSRFields(*jsnCfg.Unit_type, utils.INFIELD_SEP); err != nil {
if self.UnitType, err = NewRSRParsers(*jsnCfg.Unit_type, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Tax_included != nil {
if self.TaxIncluded, err = utils.ParseRSRFields(*jsnCfg.Tax_included, utils.INFIELD_SEP); err != nil {
if self.TaxIncluded, err = NewRSRParsers(*jsnCfg.Tax_included, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Tax_situs_rule != nil {
if self.TaxSitusRule, err = utils.ParseRSRFields(*jsnCfg.Tax_situs_rule, utils.INFIELD_SEP); err != nil {
if self.TaxSitusRule, err = NewRSRParsers(*jsnCfg.Tax_situs_rule, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Trans_type_code != nil {
if self.TransTypeCode, err = utils.ParseRSRFields(*jsnCfg.Trans_type_code, utils.INFIELD_SEP); err != nil {
if self.TransTypeCode, err = NewRSRParsers(*jsnCfg.Trans_type_code, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Sales_type_code != nil {
if self.SalesTypeCode, err = utils.ParseRSRFields(*jsnCfg.Sales_type_code, utils.INFIELD_SEP); err != nil {
if self.SalesTypeCode, err = NewRSRParsers(*jsnCfg.Sales_type_code, true, utils.INFIELD_SEP); err != nil {
return err
}
}
if jsnCfg.Tax_exemption_code_list != nil {
if self.TaxExemptionCodeList, err = utils.ParseRSRFields(*jsnCfg.Tax_exemption_code_list, utils.INFIELD_SEP); err != nil {
if self.TaxExemptionCodeList, err = NewRSRParsers(*jsnCfg.Tax_exemption_code_list, true, utils.INFIELD_SEP); err != nil {
return err
}
}

View File

@@ -180,20 +180,6 @@ func (cdr *CDR) FieldAsStringWithRSRField(rsrFld *utils.RSRField) (parsed string
return rsrFld.Parse(fldIface)
}
// concatenates values of multiple fields defined in template, used eg in CDR templates
func (cdr *CDR) FieldsAsStringWithRSRFields(rsrFlds utils.RSRFields) (fldVal string) {
for _, rsrFld := range rsrFlds {
if fldStr, err := cdr.FieldAsStringWithRSRField(rsrFld); err != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s> error: %s processing field with template: %+v",
utils.CDR, err.Error(), rsrFld))
} else {
fldVal += fldStr
}
}
return
}
// Populates the field with id from value; strings are appended to original one
func (cdr *CDR) ParseFieldValue(fieldId, fieldVal, timezone string) error {
var err error

View File

@@ -42,14 +42,14 @@ func NewSureTaxRequest(cdr *CDR, stCfg *config.SureTaxCfg) (*SureTaxRequest, err
}
aTimeLoc := cdr.AnswerTime.In(stCfg.Timezone)
revenue := utils.Round(cdr.Cost, 4, utils.ROUNDING_MIDDLE)
unts, err := strconv.ParseInt(cdr.FieldsAsStringWithRSRFields(stCfg.Units), 10, 64)
unts, err := strconv.ParseInt(cdr.FieldsAsString(stCfg.Units), 10, 64)
if err != nil {
return nil, err
}
taxExempt := []string{}
definedTaxExtempt := cdr.FieldsAsStringWithRSRFields(stCfg.TaxExemptionCodeList)
definedTaxExtempt := cdr.FieldsAsString(stCfg.TaxExemptionCodeList)
if len(definedTaxExtempt) != 0 {
taxExempt = strings.Split(cdr.FieldsAsStringWithRSRFields(stCfg.TaxExemptionCodeList), ",")
taxExempt = strings.Split(cdr.FieldsAsString(stCfg.TaxExemptionCodeList), ",")
}
stReq := new(STRequest)
stReq.ClientNumber = stCfg.ClientNumber
@@ -59,28 +59,28 @@ func NewSureTaxRequest(cdr *CDR, stCfg *config.SureTaxCfg) (*SureTaxRequest, err
stReq.DataMonth = strconv.Itoa(int(aTimeLoc.Month()))
stReq.TotalRevenue = revenue
stReq.ReturnFileCode = stCfg.ReturnFileCode
stReq.ClientTracking = cdr.FieldsAsStringWithRSRFields(stCfg.ClientTracking)
stReq.ClientTracking = cdr.FieldsAsString(stCfg.ClientTracking)
stReq.ResponseGroup = stCfg.ResponseGroup
stReq.ResponseType = stCfg.ResponseType
stReq.ItemList = []*STRequestItem{
{
CustomerNumber: cdr.FieldsAsStringWithRSRFields(stCfg.CustomerNumber),
OrigNumber: cdr.FieldsAsStringWithRSRFields(stCfg.OrigNumber),
TermNumber: cdr.FieldsAsStringWithRSRFields(stCfg.TermNumber),
BillToNumber: cdr.FieldsAsStringWithRSRFields(stCfg.BillToNumber),
Zipcode: cdr.FieldsAsStringWithRSRFields(stCfg.Zipcode),
Plus4: cdr.FieldsAsStringWithRSRFields(stCfg.Plus4),
P2PZipcode: cdr.FieldsAsStringWithRSRFields(stCfg.P2PZipcode),
P2PPlus4: cdr.FieldsAsStringWithRSRFields(stCfg.P2PPlus4),
CustomerNumber: cdr.FieldsAsString(stCfg.CustomerNumber),
OrigNumber: cdr.FieldsAsString(stCfg.OrigNumber),
TermNumber: cdr.FieldsAsString(stCfg.TermNumber),
BillToNumber: cdr.FieldsAsString(stCfg.BillToNumber),
Zipcode: cdr.FieldsAsString(stCfg.Zipcode),
Plus4: cdr.FieldsAsString(stCfg.Plus4),
P2PZipcode: cdr.FieldsAsString(stCfg.P2PZipcode),
P2PPlus4: cdr.FieldsAsString(stCfg.P2PPlus4),
TransDate: aTimeLoc.Format("2006-01-02T15:04:05"),
Revenue: revenue,
Units: unts,
UnitType: cdr.FieldsAsStringWithRSRFields(stCfg.UnitType),
UnitType: cdr.FieldsAsString(stCfg.UnitType),
Seconds: int64(cdr.Usage.Seconds()),
TaxIncludedCode: cdr.FieldsAsStringWithRSRFields(stCfg.TaxIncluded),
TaxSitusRule: cdr.FieldsAsStringWithRSRFields(stCfg.TaxSitusRule),
TransTypeCode: cdr.FieldsAsStringWithRSRFields(stCfg.TransTypeCode),
SalesTypeCode: cdr.FieldsAsStringWithRSRFields(stCfg.SalesTypeCode),
TaxIncludedCode: cdr.FieldsAsString(stCfg.TaxIncluded),
TaxSitusRule: cdr.FieldsAsString(stCfg.TaxSitusRule),
TransTypeCode: cdr.FieldsAsString(stCfg.TransTypeCode),
SalesTypeCode: cdr.FieldsAsString(stCfg.SalesTypeCode),
RegulatoryCode: stCfg.RegulatoryCode,
TaxExemptionCodeList: taxExempt,
},