mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Update Suretax to use RSRParsers and remove unused method from cdr
This commit is contained in:
committed by
Dan Christian Bogos
parent
c170910a33
commit
673b10a40c
@@ -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>
|
||||
},
|
||||
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user