| POST | /api/customerMaster | Add new customer master |
|---|
import Foundation
import ServiceStack
/**
* Customer Master
*/
// @Api(Description="Customer Master")
// @ApiResponse(Description="Add customer master request received", IsDefaultResponse=true, StatusCode=200)
// @ApiResponse(Description="Customer master request not accepted, Confirm Sender GLN", ResponseType=typeof(UnauthorizedAccessException), StatusCode=403)
public class AddCustomerMaster : Codable
{
/**
* Customer Master model containing all of the Customer Master data
*/
// @ApiMember(Description="Customer Master model containing all of the Customer Master data", ParameterType="model")
public var customerMaster:CustomerMasterMessage
required public init(){}
}
public class CustomerMasterMessage : Codable
{
public var dataSource:TransactionalParty
public var dataRecipient:TransactionalParty
public var customerMasterIdentification:String
public var customer:[CustomerMasterType] = []
public var documentStatusCode:String
public var documentActionCode:String
public var creationDateTime:Date
public var lastUpdateDateTime:Date
required public init(){}
}
public class TransactionalParty : Ecom_PartyIdentificationType
{
public var contact:[Contact] = []
public var address:Address
public var communicationChannel:[AvpList] = []
public var financialInstitutionInformation:FinancialInstitutionInformation
public var dutyFeeTaxRegistration:String
public var entityIdentification:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case contact
case address
case communicationChannel
case financialInstitutionInformation
case dutyFeeTaxRegistration
case entityIdentification
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
contact = try container.decodeIfPresent([Contact].self, forKey: .contact) ?? []
address = try container.decodeIfPresent(Address.self, forKey: .address)
communicationChannel = try container.decodeIfPresent([AvpList].self, forKey: .communicationChannel) ?? []
financialInstitutionInformation = try container.decodeIfPresent(FinancialInstitutionInformation.self, forKey: .financialInstitutionInformation)
dutyFeeTaxRegistration = try container.decodeIfPresent(String.self, forKey: .dutyFeeTaxRegistration)
entityIdentification = try container.decodeIfPresent(String.self, forKey: .entityIdentification)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if contact.count > 0 { try container.encode(contact, forKey: .contact) }
if address != nil { try container.encode(address, forKey: .address) }
if communicationChannel.count > 0 { try container.encode(communicationChannel, forKey: .communicationChannel) }
if financialInstitutionInformation != nil { try container.encode(financialInstitutionInformation, forKey: .financialInstitutionInformation) }
if dutyFeeTaxRegistration != nil { try container.encode(dutyFeeTaxRegistration, forKey: .dutyFeeTaxRegistration) }
if entityIdentification != nil { try container.encode(entityIdentification, forKey: .entityIdentification) }
}
}
public class Ecom_PartyIdentificationType : Codable
{
public var gln:String
public var name:String
public var additionalPartyIdentification:[AvpList] = []
required public init(){}
}
public class AvpList : Codable
{
public var code:String
public var value:String
required public init(){}
}
public class Contact : Codable
{
public var contactTypeCode:String
public var personName:String
public var departmentName:String
public var jobTitle:String
public var responsibility:String
public var communicationChannel:[CommunicationChannel] = []
required public init(){}
}
public class CommunicationChannel : Codable
{
public var communicationChannelCode:String
public var communicationChannelName:String
public var communicationValue:String
required public init(){}
}
public class Address : Codable
{
public var streetAddressOne:String
public var streetAddressTwo:String
public var streetAddressThree:String
public var city:String
public var postalCode:String
public var provinceCode:String
public var countryCode:String
required public init(){}
}
public class FinancialInstitutionInformation : Codable
{
public var financialInstitutionBranchName:String
public var financialInstitutionName:String
public var financialRoutingNumber:FinancialRoutingNumber
public var financialAccount:FinancialAccount
public var swiftCode:String
public var exportersCode:String
required public init(){}
}
public class FinancialRoutingNumber : Codable
{
public var number:String
public var numberTypeCode:String
required public init(){}
}
public class FinancialAccount : Codable
{
public var number:String
public var numberTypeCode:String
public var name:String
required public init(){}
}
public class CustomerMasterType : CustomerRecord
{
public var payByCustomer:CustomerRecord
public var billToCustomer:CustomerRecord
public var routingCode:String
public var storeType:String
public var currencyCode:String
public var type:String
public var group:String
public var region:String
public var zoneRate:String
public var taxRule:String
public var paymentTerm:String
public var shipmentSite:String
public var shipmentSiteName:String
public var shipmentSiteGln:String
public var accountingCode:String
public var commercialRepresentative:String
public var commercialTerritory:String
public var credit:CreditLimit
public var nod:[String] = []
public var ndd:[String] = []
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case payByCustomer
case billToCustomer
case routingCode
case storeType
case currencyCode
case type
case group
case region
case zoneRate
case taxRule
case paymentTerm
case shipmentSite
case shipmentSiteName
case shipmentSiteGln
case accountingCode
case commercialRepresentative
case commercialTerritory
case credit
case nod
case ndd
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
payByCustomer = try container.decodeIfPresent(CustomerRecord.self, forKey: .payByCustomer)
billToCustomer = try container.decodeIfPresent(CustomerRecord.self, forKey: .billToCustomer)
routingCode = try container.decodeIfPresent(String.self, forKey: .routingCode)
storeType = try container.decodeIfPresent(String.self, forKey: .storeType)
currencyCode = try container.decodeIfPresent(String.self, forKey: .currencyCode)
type = try container.decodeIfPresent(String.self, forKey: .type)
group = try container.decodeIfPresent(String.self, forKey: .group)
region = try container.decodeIfPresent(String.self, forKey: .region)
zoneRate = try container.decodeIfPresent(String.self, forKey: .zoneRate)
taxRule = try container.decodeIfPresent(String.self, forKey: .taxRule)
paymentTerm = try container.decodeIfPresent(String.self, forKey: .paymentTerm)
shipmentSite = try container.decodeIfPresent(String.self, forKey: .shipmentSite)
shipmentSiteName = try container.decodeIfPresent(String.self, forKey: .shipmentSiteName)
shipmentSiteGln = try container.decodeIfPresent(String.self, forKey: .shipmentSiteGln)
accountingCode = try container.decodeIfPresent(String.self, forKey: .accountingCode)
commercialRepresentative = try container.decodeIfPresent(String.self, forKey: .commercialRepresentative)
commercialTerritory = try container.decodeIfPresent(String.self, forKey: .commercialTerritory)
credit = try container.decodeIfPresent(CreditLimit.self, forKey: .credit)
nod = try container.decodeIfPresent([String].self, forKey: .nod) ?? []
ndd = try container.decodeIfPresent([String].self, forKey: .ndd) ?? []
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if payByCustomer != nil { try container.encode(payByCustomer, forKey: .payByCustomer) }
if billToCustomer != nil { try container.encode(billToCustomer, forKey: .billToCustomer) }
if routingCode != nil { try container.encode(routingCode, forKey: .routingCode) }
if storeType != nil { try container.encode(storeType, forKey: .storeType) }
if currencyCode != nil { try container.encode(currencyCode, forKey: .currencyCode) }
if type != nil { try container.encode(type, forKey: .type) }
if group != nil { try container.encode(group, forKey: .group) }
if region != nil { try container.encode(region, forKey: .region) }
if zoneRate != nil { try container.encode(zoneRate, forKey: .zoneRate) }
if taxRule != nil { try container.encode(taxRule, forKey: .taxRule) }
if paymentTerm != nil { try container.encode(paymentTerm, forKey: .paymentTerm) }
if shipmentSite != nil { try container.encode(shipmentSite, forKey: .shipmentSite) }
if shipmentSiteName != nil { try container.encode(shipmentSiteName, forKey: .shipmentSiteName) }
if shipmentSiteGln != nil { try container.encode(shipmentSiteGln, forKey: .shipmentSiteGln) }
if accountingCode != nil { try container.encode(accountingCode, forKey: .accountingCode) }
if commercialRepresentative != nil { try container.encode(commercialRepresentative, forKey: .commercialRepresentative) }
if commercialTerritory != nil { try container.encode(commercialTerritory, forKey: .commercialTerritory) }
if credit != nil { try container.encode(credit, forKey: .credit) }
if nod.count > 0 { try container.encode(nod, forKey: .nod) }
if ndd.count > 0 { try container.encode(ndd, forKey: .ndd) }
}
}
public class CustomerRecord : Codable
{
public var gln:String
public var code:String
public var name:String
public var buyerAssignedVendorNo:String
public var supplierAssignedVendorNo:String
public var dutyFeeTaxRegistration:String
public var entityIdentification:String
public var contact:[Contact] = []
public var address:CustomerMasterAddress
public var avpList:[AvpList] = []
required public init(){}
}
public class CustomerMasterAddress : Address
{
public var addressType:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case addressType
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
addressType = try container.decodeIfPresent(String.self, forKey: .addressType)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if addressType != nil { try container.encode(addressType, forKey: .addressType) }
}
}
public class CreditLimit : Codable
{
public var limit:Double
public var balance:Double
public var available:Double
public var effectiveDateTime:Date?
required public init(){}
}
public class TokenDto : ICommandResponse, Codable
{
public var token:String
required public init(){}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /api/customerMaster HTTP/1.1
Host: stf-api-uat.data-xchange.co.za
Accept: text/csv
Content-Type: text/csv
Content-Length: length
{"customerMaster":{"dataSource":{"contact":[{"contactTypeCode":"String","personName":"String","departmentName":"String","jobTitle":"String","responsibility":"String","communicationChannel":[{"communicationChannelCode":"String","communicationChannelName":"String","communicationValue":"String"}]}],"address":{"streetAddressOne":"String","streetAddressTwo":"String","streetAddressThree":"String","city":"String","postalCode":"String","provinceCode":"String","countryCode":"String"},"communicationChannel":[{"code":"String","value":"String"}],"financialInstitutionInformation":{"financialInstitutionBranchName":"String","financialInstitutionName":"String","financialRoutingNumber":{"number":"String","numberTypeCode":"String"},"financialAccount":{"number":"String","numberTypeCode":"String","name":"String"},"swiftCode":"String","exportersCode":"String"},"dutyFeeTaxRegistration":"String","entityIdentification":"String","gln":"String","name":"String","additionalPartyIdentification":[{"code":"String","value":"String"}]},"dataRecipient":{"contact":[{"contactTypeCode":"String","personName":"String","departmentName":"String","jobTitle":"String","responsibility":"String","communicationChannel":[{"communicationChannelCode":"String","communicationChannelName":"String","communicationValue":"String"}]}],"address":{"streetAddressOne":"String","streetAddressTwo":"String","streetAddressThree":"String","city":"String","postalCode":"String","provinceCode":"String","countryCode":"String"},"communicationChannel":[{"code":"String","value":"String"}],"financialInstitutionInformation":{"financialInstitutionBranchName":"String","financialInstitutionName":"String","financialRoutingNumber":{"number":"String","numberTypeCode":"String"},"financialAccount":{"number":"String","numberTypeCode":"String","name":"String"},"swiftCode":"String","exportersCode":"String"},"dutyFeeTaxRegistration":"String","entityIdentification":"String","gln":"String","name":"String","additionalPartyIdentification":[{"code":"String","value":"String"}]},"customerMasterIdentification":"String","customer":[{"payByCustomer":{"gln":"String","code":"String","name":"String","buyerAssignedVendorNo":"String","supplierAssignedVendorNo":"String","dutyFeeTaxRegistration":"String","entityIdentification":"String","contact":[{"contactTypeCode":"String","personName":"String","departmentName":"String","jobTitle":"String","responsibility":"String","communicationChannel":[{"communicationChannelCode":"String","communicationChannelName":"String","communicationValue":"String"}]}],"address":{"addressType":"String","streetAddressOne":"String","streetAddressTwo":"String","streetAddressThree":"String","city":"String","postalCode":"String","provinceCode":"String","countryCode":"String"},"avpList":[{"code":"String","value":"String"}]},"billToCustomer":{"gln":"String","code":"String","name":"String","buyerAssignedVendorNo":"String","supplierAssignedVendorNo":"String","dutyFeeTaxRegistration":"String","entityIdentification":"String","contact":[{"contactTypeCode":"String","personName":"String","departmentName":"String","jobTitle":"String","responsibility":"String","communicationChannel":[{"communicationChannelCode":"String","communicationChannelName":"String","communicationValue":"String"}]}],"address":{"addressType":"String","streetAddressOne":"String","streetAddressTwo":"String","streetAddressThree":"String","city":"String","postalCode":"String","provinceCode":"String","countryCode":"String"},"avpList":[{"code":"String","value":"String"}]},"routingCode":"String","storeType":"String","currencyCode":"String","type":"String","group":"String","region":"String","zoneRate":"String","taxRule":"String","paymentTerm":"String","shipmentSite":"String","shipmentSiteName":"String","shipmentSiteGln":"String","accountingCode":"String","commercialRepresentative":"String","commercialTerritory":"String","credit":{"limit":0,"balance":0,"available":0,"effectiveDateTime":"0001-01-01"},"nod":["String"],"ndd":["String"],"gln":"String","code":"String","name":"String","buyerAssignedVendorNo":"String","supplierAssignedVendorNo":"String","dutyFeeTaxRegistration":"String","entityIdentification":"String","contact":[{"contactTypeCode":"String","personName":"String","departmentName":"String","jobTitle":"String","responsibility":"String","communicationChannel":[{"communicationChannelCode":"String","communicationChannelName":"String","communicationValue":"String"}]}],"address":{"addressType":"String","streetAddressOne":"String","streetAddressTwo":"String","streetAddressThree":"String","city":"String","postalCode":"String","provinceCode":"String","countryCode":"String"},"avpList":[{"code":"String","value":"String"}]}],"documentStatusCode":"String","documentActionCode":"String"}}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length
{}