DX STF Client API

<back to all web services

GetCustomerMasterByIdentification

Customer Master Requests

Customer Master

Requires Authentication
The following routes are available for this service:
GET/api/customerMaster/{OwnerGln}/{CustomerMasterIdentification}Get specific customer by customerMasterIdentification Id
import Foundation
import ServiceStack

/**
* Customer Master
*/
// @Api(Description="Customer Master")
// @ApiResponse(Description="Customer Master data", IsDefaultResponse=true, StatusCode=200)
// @ApiResponse(Description="No Content", ResponseType=typeof(IReturnVoid), StatusCode=204)
// @ApiResponse(Description="Specified argument was out of the range of valid values.", ResponseType=typeof(ArgumentOutOfRangeException), StatusCode=400)
public class GetCustomerMasterByIdentification : Codable
{
    /**
    * Owner GLN
    */
    // @ApiMember(Description="Owner GLN", ExcludeInSchema=true, ParameterType="path")
    public var ownerGln:String

    /**
    * Customer Master Identification
    */
    // @ApiMember(Description="Customer Master Identification", ExcludeInSchema=true, ParameterType="path")
    public var customerMasterIdentification:String

    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(){}
}


Swift GetCustomerMasterByIdentification DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv

HTTP + CSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /api/customerMaster/{OwnerGln}/{CustomerMasterIdentification} HTTP/1.1 
Host: stf-api-uat.data-xchange.co.za 
Accept: text/csv
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"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"}